diff --git a/scripts/hands_balance.py b/scripts/hands_balance.py index fbf71e74..cd367915 100644 --- a/scripts/hands_balance.py +++ b/scripts/hands_balance.py @@ -36,7 +36,7 @@ from intelstream.hands.cpu import CpuBrain, CpuLevel, cpu_style from intelstream.hands.engine import AttackState, BoxingEngine, EngineConfig, FighterState -from intelstream.hands.rules import TICKS_PER_SECOND +from intelstream.hands.rules import GUARD_REARM, TICKS_PER_SECOND from intelstream.hands.types import ( ActionKind, DefensivePose, @@ -214,7 +214,8 @@ def decide(self, engine: BoxingEngine) -> InputCommand | None: self._next_jab = tick + 24 + (tick * 7919 + self._start) % 18 jab = PunchAction(Hand.LEFT, PunchClass.JAB, Target.HEAD) return InputCommand(self._sequence, tick, move[0], move[1], actions=(jab,)) - rest_arms = distance > 175 + # Out of range, or with a guard worn too thin to hold up, the arms rest so it comes back. + rest_arms = distance > 175 or me.guard_broken or me.guard < GUARD_REARM defense = DefensivePose.NONE if rest_arms else DefensivePose.GUARD_HIGH return InputCommand(self._sequence, tick, move[0], move[1], defense) @@ -285,7 +286,9 @@ def decide(self, engine: BoxingEngine) -> InputCommand | None: wanted = self.WANTED_DISTANCE[self.kind] toward = (round(dx / distance * 1000), round(dy / distance * 1000)) move = toward if distance > wanted else (0, 0) - guarded = self.kind in ("turtle", "brawler", "counter") + # The turtle holds his guard whatever it costs; the others let a worn one come back. + tiring = self.kind != "turtle" and (me.guard_broken or me.guard < GUARD_REARM) + guarded = self.kind in ("turtle", "brawler", "counter") and not tiring defense = DefensivePose.GUARD_HIGH if guarded else DefensivePose.NONE roll = (tick * 2654435761 + self._sequence + self._start) % 1000 free = me.attack is None and not me.pending_actions diff --git a/scripts/hands_parity_fixtures.py b/scripts/hands_parity_fixtures.py index 756785c7..00292d3e 100644 --- a/scripts/hands_parity_fixtures.py +++ b/scripts/hands_parity_fixtures.py @@ -10,7 +10,8 @@ conditioning and body trauma near the fatigue steps; - style-timing-table.json: the same, with the stamina price, for every other style; - movement-traces.json: what the engine sent, tick by tick, while a fighter holding a direction - was parried, flinched mid-punch or finished a punch. + was parried, flinched mid-punch, finished a punch, pressed a punch during another's recovery or late in + a flinch, slipped, or slipped out of a punch's recovery. uv run python scripts/hands_parity_fixtures.py # rewrite the files uv run python scripts/hands_parity_fixtures.py --check # fail if they are out of date @@ -27,10 +28,12 @@ from intelstream.hands.protocol import encode_snapshot from intelstream.hands.rules import PUNCH_RULES, STYLE_RULES, style_punch_rule from intelstream.hands.types import ( + ActionKind, DefensivePose, FighterStyle, Hand, InputCommand, + MovementAction, Power, PunchAction, PunchClass, @@ -50,7 +53,7 @@ BODY_TRAUMA = (0, 900) -def _engine(styles: tuple[FighterStyle, FighterStyle], gap: int) -> BoxingEngine: +def _engine(styles: tuple[FighterStyle, FighterStyle], gap: int, centre: int = 0) -> BoxingEngine: engine = BoxingEngine( match_id="parity", activity_instance_id="parity", @@ -61,8 +64,8 @@ def _engine(styles: tuple[FighterStyle, FighterStyle], gap: int) -> BoxingEngine config=EngineConfig(countdown_ticks=0, flash_ko_enabled=False), styles=styles, ) - engine.fighter("one").x = -(gap // 2) - engine.fighter("two").x = gap - gap // 2 + engine.fighter("one").x = centre - gap // 2 + engine.fighter("two").x = centre + gap - gap // 2 return engine @@ -135,8 +138,10 @@ def _trace( def movement_traces() -> dict[str, list[dict[str, Any]]]: back = InputCommand(0, 0, -1000, 0) + # Off to the side he backs away from, so 45 ticks of footwork never reach the ropes. + centre = 200 straight = PunchAction(Hand.RIGHT, PunchClass.STRAIGHT, Target.HEAD, Power.POWER) - parried = _engine((FighterStyle.BALANCED, FighterStyle.BALANCED), 130) + parried = _engine((FighterStyle.BALANCED, FighterStyle.BALANCED), 130, centre) contact = 1 + PUNCH_RULES[(PunchClass.STRAIGHT, Target.HEAD, Power.POWER)].startup def parry(tick: int) -> dict[str, InputCommand]: @@ -149,7 +154,7 @@ def parry(tick: int) -> dict[str, InputCommand]: hook = PunchAction(Hand.LEFT, PunchClass.HOOK, Target.HEAD, Power.NORMAL) jab = PunchAction(Hand.LEFT, PunchClass.JAB, Target.HEAD, Power.NORMAL) - flinched = _engine((FighterStyle.BALANCED, FighterStyle.BALANCED), 100) + flinched = _engine((FighterStyle.BALANCED, FighterStyle.BALANCED), 100, centre) def counter(tick: int) -> dict[str, InputCommand]: # His hook is still winding up when the other man's quicker jab lands on it. @@ -160,17 +165,75 @@ def counter(tick: int) -> dict[str, InputCommand]: "two": InputCommand(tick, tick, actions=(jab,)), } - finished = _engine((FighterStyle.BALANCED, FighterStyle.BALANCED), 300) + flinched_pressing = _engine((FighterStyle.BALANCED, FighterStyle.BALANCED), 100, centre) + + def press_late_in_flinch(tick: int) -> dict[str, InputCommand]: + # The jab he presses near the end of the flinch waits for it to wear off. + if tick == 5: + return {"one": InputCommand(tick, tick, back.move_x, back.move_y, actions=(jab,))} + return counter(tick) + + finished = _engine((FighterStyle.BALANCED, FighterStyle.BALANCED), 300, centre) def alone(tick: int) -> dict[str, InputCommand]: if tick != 1: return {} return {"one": InputCommand(tick, tick, back.move_x, back.move_y, actions=(jab,))} + slip = MovementAction(ActionKind.SLIP_LEFT) + slipped = _engine((FighterStyle.BALANCED, FighterStyle.BALANCED), 300, centre) + + def slip_away(tick: int) -> dict[str, InputCommand]: + if tick != 1: + return {} + return {"one": InputCommand(tick, tick, back.move_x, back.move_y, actions=(slip,))} + + cut = _engine((FighterStyle.BALANCED, FighterStyle.BALANCED), 300, centre) + missed = PunchAction(Hand.RIGHT, PunchClass.STRAIGHT, Target.HEAD, Power.NORMAL) + + def slip_out(tick: int) -> dict[str, InputCommand]: + # The straight misses, he walks out of its recovery, and the slip cuts the rest of it short. + action = {1: missed, 9: slip}.get(tick) + if action is None: + return {} + return {"one": InputCommand(tick, tick, back.move_x, back.move_y, actions=(action,))} + + waited = _engine((FighterStyle.BALANCED, FighterStyle.BALANCED), 300, centre) + + def press_during_recovery(tick: int) -> dict[str, InputCommand]: + # A hook and a jab are no combination: the jab waits in the buffer for the hook to end while + # he walks out of its recovery. + action = {1: hook, 8: jab}.get(tick) + if action is None: + return {} + return {"one": InputCommand(tick, tick, back.move_x, back.move_y, actions=(action,))} + + long_cut = _engine((FighterStyle.BALANCED, FighterStyle.BALANCED), 300, centre) + uppercut = PunchAction(Hand.RIGHT, PunchClass.UPPERCUT, Target.HEAD, Power.POWER) + + def slip_out_early(tick: int) -> dict[str, InputCommand]: + # The slip cuts a long recovery short as soon as the uppercut has missed; the snapshots go on + # presenting the uppercut past the end of the slip. + action = {1: uppercut, 12: slip}.get(tick) + if action is None: + return {} + return {"one": InputCommand(tick, tick, back.move_x, back.move_y, actions=(action,))} + return { "parried while holding back": _trace(parried, back, parry), "flinched mid-hook while holding back": _trace(flinched, back, counter), + "a jab pressed late in a flinch while holding back": _trace( + flinched_pressing, back, press_late_in_flinch + ), "a jab thrown holding back": _trace(finished, back, alone), + "a jab pressed during a hook's recovery while holding back": _trace( + waited, back, press_during_recovery + ), + "a slip thrown holding back": _trace(slipped, back, slip_away), + "slipped out of a straight's recovery while holding back": _trace(cut, back, slip_out), + "slipped out of a power uppercut's recovery while holding back": _trace( + long_cut, back, slip_out_early + ), } diff --git a/scripts/hands_replay.py b/scripts/hands_replay.py index 2f39a671..de0289d3 100644 --- a/scripts/hands_replay.py +++ b/scripts/hands_replay.py @@ -107,8 +107,6 @@ def lab_engine(seed: int) -> BoxingEngine: rest_ticks=REST_TICKS, countdown_ticks=0, flash_ko_enabled=False, - doctor_cut_threshold=700, - doctor_swelling_threshold=820, ), styles=STYLES, ) diff --git a/src/intelstream/hands/combat-manifest.json b/src/intelstream/hands/combat-manifest.json index e44c0f0d..334ed008 100644 --- a/src/intelstream/hands/combat-manifest.json +++ b/src/intelstream/hands/combat-manifest.json @@ -12,10 +12,19 @@ "max_guard": 700, "max_poise": 600 }, - "action_buffer_ticks": 6, + "action_buffer_ticks": 8, "facing": { "scale": 1000, - "turn_degrees_per_second": 75 + "turn_degrees_per_second": 110 + }, + "movement": { + "max_speed": 10, + "blend_percent": 75, + "recovery_speed_percent": 60 + }, + "evasion": { + "ticks": 7, + "stamina": 15 }, "combos": { "recovery_cancel_percent": 50, @@ -43,96 +52,98 @@ ] }, "knockdown": { - "referee_walk_speed": 5, - "mandatory_count": 8, - "box_pause_ticks": 60, - "get_up_stun_ticks": 20, - "get_up_stamina": 500, - "get_up_base": 34, - "get_up_per_knockdown": 20, - "get_up_trauma_divisor": 18 + "referee_walk_speed": 9, + "count_ticks": 20, + "mandatory_count": 5, + "box_pause_ticks": 20, + "get_up_stun_ticks": 12, + "get_up_stamina": 600, + "get_up_base": 30, + "get_up_per_knockdown": 16, + "get_up_trauma_divisor": 28 }, "countdown": { - "opening_ticks": 240 + "opening_ticks": 90 }, "tired": { - "startup_ticks": 3, - "recovery_ticks": 5, - "impact_percent": 40 + "startup_ticks": 1, + "recovery_ticks": 2, + "impact_percent": 70 }, "foul": { "separation": 45 }, "hitstop_ms": { "hit": 78, - "block": 45 + "block": 45, + "power": 140 }, "fatigue_scaling": { "startup_formula": "max(2, startup * 100 // fatigue - lead_jab_bonus)", - "recovery_formula": "max(4, recovery * 100 // fatigue)", + "recovery_formula": "max(3, recovery * 100 // fatigue)", "lead_jab_bonus": 1, "rear_straight_impact_bonus": 8 }, "punches": { "jab": { - "startup": 4, + "startup": 3, "active": 2, - "recovery": 7, + "recovery": 4, "reach": 150, "lateral_arc": 42, "impact": 34, - "stamina_cost": 42, - "whiff_cost": 18, + "stamina_cost": 25, + "whiff_cost": 9, "guard_damage": 44, "poise_damage": 35, "combo_window": 7, - "startup_vulnerability": 2, - "recovery_vulnerability": 3 + "startup_vulnerability": 1, + "recovery_vulnerability": 2 }, "straight": { - "startup": 6, + "startup": 4, "active": 2, - "recovery": 10, + "recovery": 6, "reach": 168, "lateral_arc": 38, "impact": 52, - "stamina_cost": 65, - "whiff_cost": 28, + "stamina_cost": 39, + "whiff_cost": 14, "guard_damage": 66, "poise_damage": 58, "combo_window": 8, - "startup_vulnerability": 4, - "recovery_vulnerability": 5 + "startup_vulnerability": 2, + "recovery_vulnerability": 3 }, "hook": { - "startup": 7, - "active": 3, - "recovery": 12, + "startup": 5, + "active": 2, + "recovery": 7, "reach": 126, "lateral_arc": 92, "impact": 64, - "stamina_cost": 78, - "whiff_cost": 36, + "stamina_cost": 47, + "whiff_cost": 18, "guard_damage": 82, "poise_damage": 72, "combo_window": 9, - "startup_vulnerability": 5, - "recovery_vulnerability": 7 + "startup_vulnerability": 3, + "recovery_vulnerability": 4 }, "uppercut": { - "startup": 8, + "startup": 5, "active": 2, - "recovery": 13, + "recovery": 8, "reach": 108, "lateral_arc": 54, "impact": 72, - "stamina_cost": 88, - "whiff_cost": 44, + "stamina_cost": 53, + "whiff_cost": 22, "guard_damage": 88, "poise_damage": 84, "combo_window": 10, - "startup_vulnerability": 6, - "recovery_vulnerability": 8 + "startup_vulnerability": 3, + "recovery_vulnerability": 5 } }, "variants": { @@ -143,28 +154,28 @@ "lateral_arc_add": 8, "impact_mul_num": 92, "impact_mul_den": 100, - "stamina_cost_add": 4, - "whiff_cost_add": 3, + "stamina_cost_add": 2, + "whiff_cost_add": 2, "poise_damage_mul_num": 72, "poise_damage_mul_den": 100 }, "power": { - "startup_add": 2, + "startup_add": 3, "active_add": 1, "recovery_add": 3, "reach_add": 5, - "impact_mul_num": 152, + "impact_mul_num": 185, "impact_mul_den": 100, - "stamina_cost_mul_num": 155, + "stamina_cost_mul_num": 140, "stamina_cost_mul_den": 100, - "whiff_cost_mul_num": 175, + "whiff_cost_mul_num": 150, "whiff_cost_mul_den": 100, - "guard_damage_mul_num": 145, + "guard_damage_mul_num": 220, "guard_damage_mul_den": 100, - "poise_damage_mul_num": 145, + "poise_damage_mul_num": 175, "poise_damage_mul_den": 100, - "startup_vulnerability_add": 2, - "recovery_vulnerability_add": 2 + "startup_vulnerability_add": 1, + "recovery_vulnerability_add": 1 } }, "hurtboxes": { @@ -186,12 +197,24 @@ }, "rest": { "corner_offset": 365, - "walk_speed": 5 + "walk_speed": 10 }, "clinch": { "hold_distance": 60, "draw_speed": 6 }, + "referee": { + "radius": 34, + "health": 450, + "walk_speed": 6, + "standoff": 62, + "count_standoff": 90, + "stagger_base_ticks": 6, + "stagger_damage_divisor": 8, + "stagger_max_ticks": 30, + "down_ticks": 150, + "bleed_health_divisor": 60 + }, "corner": { "cut": { "worse_cut": 250, @@ -217,12 +240,8 @@ "eye_threshold": 700, "impact_percent": 120 }, - "doctor": { - "cut": 800, - "swelling": 900 - }, "parry": { - "stagger_ticks": 20 + "stagger_ticks": 16 }, "body": { "wind_percent": 90, @@ -276,42 +295,46 @@ }, "stun": { "flinch_minimum_damage": 36, - "flinch_base_ticks": 5, + "flinch_base_ticks": 4, "flinch_damage_divisor": 16, "rocked_counter_damage": 50, "rocked_power_damage": 70, "rocked_hurt_poise": 180, - "rocked_base_ticks": 16, + "rocked_base_ticks": 12, "rocked_damage_divisor": 6, - "rocked_max_ticks": 36, - "chain_max_ticks": 45, - "immunity_ticks": 24, + "rocked_max_ticks": 28, + "chain_max_ticks": 36, + "immunity_ticks": 18, "rocked_immunity_ticks": 8, "moving_speed_percent": 75 }, "guard": { - "block_poise_percent": 25, + "block_poise_percent": 35, "perfect_block_poise_percent": 0, - "leak_base_percent": 70, - "leak_minimum_percent": 10, + "leak_base_percent": 80, + "leak_minimum_percent": 25, "block_minimum": 60, "perfect_rearm_ticks": 6, - "held_regen_every_ticks": 4, - "damage_percent": 60, - "stamina_regen_percent": 50 + "damage_percent": 100, + "stamina_regen_percent": 50, + "held_drain": 3, + "break_stun_ticks": 24, + "rearm": 250 }, "trauma": { - "head_per_damage_percent": 100, + "head_per_damage_percent": 60, "eye_per_damage_percent": 70, - "cut_per_damage_percent": 50, - "jab_cut_percent": 25, + "cut_per_damage_percent": 80, + "jab_cut_percent": 40, "jab_swelling_percent": 50, "swelling_per_damage_percent": 33, "poise_ceiling_per_head_percent": 30, "poise_ceiling_floor": 220, "body_per_damage_percent": 100, "poise_regen_every_ticks": 2, - "poise_damage_percent": 100 + "poise_damage_percent": 85, + "cut_opens_eye": 120, + "bleeding_cut_divisor": 30 }, "hitbox": { "glove_radius": 0.11 diff --git a/src/intelstream/hands/cpu.py b/src/intelstream/hands/cpu.py index 28b68ff4..27f57126 100644 --- a/src/intelstream/hands/cpu.py +++ b/src/intelstream/hands/cpu.py @@ -17,7 +17,6 @@ from math import atan2, cos, hypot, radians, sin from intelstream.hands.engine import ( - EVASION_TICKS, PERFECT_BLOCK_TICKS, BoxingEngine, FighterState, @@ -27,10 +26,14 @@ BODY_COLLAPSE_STAMINA, BODY_COLLAPSE_TRAUMA, COMPATIBLE_COMBO_CHAINS, + EVASION_STAMINA, + EVASION_TICKS, FACING_SCALE, FACING_TURN_DEGREES_PER_SECOND, FIGHTER_RADIUS, GUARD_BLOCK_MINIMUM, + GUARD_REARM, + MAX_GUARD, PERFECT_BLOCK_REARM_TICKS, PUNCH_RULES, RING_CORNER_REACH, @@ -60,7 +63,6 @@ CPU_ID_PREFIX = "cpu:" MOVE_SCALE = 1000 -EVASION_STAMINA = 25 CLINCH_RANGE = 115 CLINCH_STAMINA = 45 THREAT_RANGE = 190 @@ -70,6 +72,8 @@ # A battered head lowers the poise a fighter can get back, so "nearly out of it" is a share of that. HURT_CEILING_PERCENT = 70 OPPONENT_HURT_POISE = 200 +# A guard rested after wearing thin is held up again once it is back this far. +GUARD_RESTED = MAX_GUARD * 3 // 4 CORNER_CUT_AT = 400 CORNER_BLEEDING_AT = 200 CORNER_EYE_AT = 500 @@ -152,18 +156,18 @@ class CpuProfile: read_percent=15, perfect_percent=0, guard_percent=15, - aggression_percent=14, - attack_interval=34, + aggression_percent=24, + attack_interval=20, combo_length=2, combo_percent=0, reach_margin=-8, leads_target=False, - stamina_reserve=60, + stamina_reserve=40, footwork_percent=25, outside_distance=130, jab_bias=60, counter_percent=0, - power_percent=0, + power_percent=12, body_percent=25, finish_percent=0, admire_ticks=60, @@ -190,7 +194,7 @@ class CpuProfile: combo_percent=70, reach_margin=4, leads_target=True, - stamina_reserve=180, + stamina_reserve=110, footwork_percent=70, outside_distance=160, jab_bias=10, @@ -215,19 +219,19 @@ class CpuProfile: reaction_spread=3, read_percent=80, perfect_percent=80, - guard_percent=80, + guard_percent=90, aggression_percent=60, - attack_interval=7, + attack_interval=12, combo_length=4, combo_percent=80, reach_margin=10, leads_target=True, - stamina_reserve=260, + stamina_reserve=110, footwork_percent=85, outside_distance=156, jab_bias=0, counter_percent=80, - power_percent=35, + power_percent=55, body_percent=43, finish_percent=30, admire_ticks=0, @@ -396,6 +400,7 @@ def __init__( self._guard_from = 0 self._guard_until = -1 self._hold_guard = False + self._resting_guard = False self._guard_window_until = 0 self._next_attack_tick = 0 self._combo_left = 0 @@ -685,9 +690,20 @@ def _head_movement(self, tick: int, me: FighterState, distance: float) -> Action ] def _defense(self, tick: int, me: FighterState, distance: float, hurt: bool) -> DefensivePose: + # A guard worn thin rests until most of it is back, rather than going up again as soon + # as it can stop a punch and wearing straight back down. + if me.guard_broken or me.guard < GUARD_REARM: + self._resting_guard = True + elif me.guard >= GUARD_RESTED: + self._resting_guard = False + if me.guard_broken: + # It stops nothing until it has come back, and it only comes back lowered. + self._hold_guard = False + return DefensivePose.NONE if self._guard_from <= tick < self._guard_until: return self._guard_pose - if tick < self._guard_until: + if tick < self._guard_until or self._resting_guard: + # Resting it: it is only raised for a punch it has seen coming. return DefensivePose.NONE if distance > THREAT_RANGE: self._hold_guard = False diff --git a/src/intelstream/hands/engine.py b/src/intelstream/hands/engine.py index 71f805f0..238ad65f 100644 --- a/src/intelstream/hands/engine.py +++ b/src/intelstream/hands/engine.py @@ -9,6 +9,8 @@ from typing import Final from intelstream.hands.rules import ( + ACTION_BUFFER_TICKS, + BLEEDING_CUT_DIVISOR, BLIND_SIDE_EYE_THRESHOLD, BLIND_SIDE_IMPACT_PERCENT, BLOCK_POISE_PERCENT, @@ -24,11 +26,13 @@ CLINCH_HOLD_DISTANCE, COMPATIBLE_COMBO_CHAINS, CORNER_TREATMENTS, + COUNT_TICK_INTERVAL, COUNTDOWN_TICKS, + CUT_OPENS_EYE, CUT_PER_DAMAGE_PERCENT, DEFAULT_ROUNDS, - DOCTOR_CUT_THRESHOLD, - DOCTOR_SWELLING_THRESHOLD, + EVASION_STAMINA, + EVASION_TICKS, EYE_TRAUMA_PER_DAMAGE_PERCENT, FACING_SCALE, FACING_TURN_COS, @@ -44,10 +48,12 @@ GET_UP_STUN_TICKS, GET_UP_TRAUMA_DIVISOR, GUARD_BLOCK_MINIMUM, + GUARD_BREAK_STUN_TICKS, GUARD_DAMAGE_PERCENT, - GUARD_HELD_REGEN_EVERY_TICKS, + GUARD_HELD_DRAIN, GUARD_LEAK_BASE_PERCENT, GUARD_LEAK_MINIMUM_PERCENT, + GUARD_REARM, GUARD_STAMINA_REGEN_PERCENT, HEAD_TRAUMA_PER_DAMAGE_PERCENT, JAB_CUT_PERCENT, @@ -57,8 +63,10 @@ MAX_CONDITIONING, MAX_GUARD, MAX_POISE, + MAX_SPEED, MAX_STAMINA, MINIMUM_SEPARATION, + MOVE_BLEND_PERCENT, PARRY_STAGGER_TICKS, PERFECT_BLOCK_POISE_PERCENT, PERFECT_BLOCK_REARM_TICKS, @@ -66,6 +74,17 @@ POISE_REGEN_EVERY_TICKS, PUNCH_RULES, RECOVERY_CANCEL_PERCENT, + RECOVERY_SPEED_PERCENT, + REFEREE_BLEED_HEALTH_DIVISOR, + REFEREE_COUNT_STANDOFF, + REFEREE_DOWN_TICKS, + REFEREE_HEALTH, + REFEREE_RADIUS, + REFEREE_SPEED, + REFEREE_STAGGER_BASE_TICKS, + REFEREE_STAGGER_DAMAGE_DIVISOR, + REFEREE_STAGGER_MAX_TICKS, + REFEREE_STANDOFF, REFEREE_WALK_SPEED, REST_CORNER_OFFSET, REST_TICKS, @@ -117,6 +136,7 @@ Power, PunchAction, PunchClass, + RefereeSnapshot, SemanticAction, Stance, Target, @@ -124,25 +144,30 @@ ) PERFECT_BLOCK_TICKS: Final = 4 -EVASION_TICKS: Final = 10 -COUNTER_WINDOW_TICKS: Final = 18 +# Who the referee is in an event: a punch that finds him, his bleeding, his going down. +REFEREE_ID: Final = "referee" +# How far past his body a punch can be off its line and still catch him: about a glove's width. +REFEREE_GLOVE_REACH: Final = 18 +COUNTER_WINDOW_TICKS: Final = 15 ROPE_OVERLAP_PASSES: Final = 8 ROPE_OVERLAP_STEP: Final = 8 -CLINCH_STARTUP_TICKS: Final = 8 -CLINCH_TICKS: Final = 45 -FOUL_RECOVERY_TICKS: Final = 60 -COUNT_TICK_INTERVAL: Final = TICKS_PER_SECOND +CLINCH_STARTUP_TICKS: Final = 6 +CLINCH_TICKS: Final = 24 +FOUL_RECOVERY_TICKS: Final = 30 MAX_PENDING_ACTIONS: Final = 1 -ACTION_BUFFER_TICKS: Final = 6 GET_UP_WINDOW_START_OFFSET: Final = 3 GET_UP_WINDOW_END_OFFSET: Final = 13 -TAUNT_TICKS: Final = 60 +TAUNT_TICKS: Final = 40 MOVEMENT_FIXED_SCALE: Final = 1000 # Conditioning a punch costs is worked out in thousandths of a point, so a style's saving survives # the rounding of per-punch losses of only a few points. CONDITIONING_FIXED_SCALE: Final = 1000 -# A fresh fighter's walking speed in units a tick, and the fastest velocity a snapshot reports. -MAX_SPEED: Final = 7 +EVASION_POSES: Final = { + ActionKind.SLIP_LEFT: DefensivePose.SLIP_LEFT, + ActionKind.SLIP_RIGHT: DefensivePose.SLIP_RIGHT, + ActionKind.WEAVE: DefensivePose.WEAVE, + ActionKind.PULL: DefensivePose.PULL, +} CORNER_INSTRUCTIONS: Final = { ActionKind.CORNER_CUT: CornerChoice.CUT, ActionKind.CORNER_SWELLING: CornerChoice.SWELLING, @@ -156,8 +181,6 @@ class EngineConfig: round_ticks: int = ROUND_TICKS rest_ticks: int = REST_TICKS countdown_ticks: int = COUNTDOWN_TICKS - doctor_cut_threshold: int = DOCTOR_CUT_THRESHOLD - doctor_swelling_threshold: int = DOCTOR_SWELLING_THRESHOLD flash_ko_enabled: bool = True def __post_init__(self) -> None: @@ -165,8 +188,6 @@ def __post_init__(self) -> None: raise ValueError("rounds must be between 1 and 15") if self.round_ticks < 1 or self.rest_ticks < 0 or self.countdown_ticks < 0: raise ValueError("phase durations must be non-negative and rounds must have time") - if self.doctor_cut_threshold < 1 or self.doctor_swelling_threshold < 1: - raise ValueError("doctor stoppage thresholds must be positive") @dataclass(slots=True) @@ -181,6 +202,21 @@ class Trauma: bleeding: int = 0 +@dataclass(slots=True) +class RefereeState: + x: int = 0 + y: int = REFEREE_STANDOFF + facing_x: int = 0 + facing_y: int = -FACING_SCALE + velocity_x: int = 0 + velocity_y: int = 0 + health: int = REFEREE_HEALTH + trauma: Trauma = field(default_factory=Trauma) + stunned_ticks: int = 0 + alive: bool = True + last_hit_by: str | None = None + + @dataclass(slots=True) class AttackState: action: PunchAction @@ -191,6 +227,8 @@ class AttackState: combo_bonus: int = 0 start_tick: int = 0 contact_tick: int = 0 + tired: bool = False + """Thrown on what breath was left: a slow arm punch that can never knock a man out cold.""" @property def total_ticks(self) -> int: @@ -260,6 +298,8 @@ class FighterState: conditioning_remainder: int = 0 """Thousandths of a point of conditioning spent on punches and not yet taken off.""" guard: int = MAX_GUARD + guard_broken: bool = False + """Broken by a block or by holding it up too long: it stops nothing until it has come back.""" poise: int = MAX_POISE trauma: Trauma = field(default_factory=Trauma) defense: DefensivePose = DefensivePose.NONE @@ -276,6 +316,8 @@ class FighterState: stun_immune_until_tick: int = -1 rocked_immune_until_tick: int = -1 counter_ticks: int = 0 + # The counter window a parry opened, through which the guard it wore thin is not broken by holding it. + parried_until_tick: int = -1 clinch_startup_ticks: int = 0 clinch_ticks: int = 0 taunt_ticks: int = 0 @@ -427,7 +469,9 @@ def scaled(value: int) -> int: def _blend_velocity(current: int, desired: int) -> int: - return _symmetric_divide(current + desired, 2) + return _symmetric_divide( + current * (100 - MOVE_BLEND_PERCENT) + desired * MOVE_BLEND_PERCENT, 100 + ) def _rounded_fixed_velocity(velocity: int) -> int: @@ -575,6 +619,7 @@ def __init__( player_one_id: FighterState(player_one_id, -180, 0, 1, Stance.ORTHODOX, styles[0]), player_two_id: FighterState(player_two_id, 180, 0, -1, Stance.ORTHODOX, styles[1]), } + self._referee = RefereeState() self._events: list[CombatEvent] = [] self._tick_events: list[CombatEvent] = [] self._event_id = 0 @@ -643,8 +688,22 @@ def submit_input(self, player_id: str, command: InputCommand) -> bool: fighter.pending_actions[:] = recent_actions[-MAX_PENDING_ACTIONS:] fighter.pending_action_expires_tick = self.tick + ACTION_BUFFER_TICKS elif guard_started: - fighter.pending_actions.clear() - fighter.pending_action_expires_tick = 0 + # Raising a guard cancels a press still waiting behind a punch, a stun, a taunt or a hold, or one + # left from an earlier tick. One made since the last tick by a fighter free to throw it has not + # had a tick to start, and is thrown: a punch and then cover. + pressed_this_tick = ( + fighter.pending_action_expires_tick == self.tick + ACTION_BUFFER_TICKS + ) + free = ( + fighter.attack is None + and fighter.stunned_ticks == 0 + and fighter.taunt_ticks == 0 + and fighter.clinch_startup_ticks == 0 + and fighter.clinch_ticks == 0 + ) + if not (pressed_this_tick and free): + fighter.pending_actions.clear() + fighter.pending_action_expires_tick = 0 return True def step(self, inputs: dict[str, InputCommand] | None = None) -> EngineSnapshot: @@ -666,8 +725,12 @@ def step(self, inputs: dict[str, InputCommand] | None = None) -> EngineSnapshot: self._advance_knockdown() elif self.phase is MatchPhase.FOUL_RECOVERY: self._advance_foul_recovery() + elif self.phase is MatchPhase.REFEREE_DOWN: + self._advance_referee_down() elif self.phase is MatchPhase.REST: self._advance_rest() + if self.phase is not MatchPhase.COMPLETE: + self._advance_referee() return self.snapshot() def _advance_countdown(self) -> None: @@ -715,12 +778,14 @@ def _advance_fight(self) -> None: self._move_fighter(two, one) self._separate_fighters(one, two) + # A stoppage ends the bout on this tick: nothing after it, not the bell, the rest or anyone's upkeep. + if self.result is not None: + return for fighter, opponent in ((one, two), (two, one)): self._recover_resources(fighter) fighter.performance.control += self._ring_control(fighter, opponent) self._advance_bleeding(fighter) - if self.result is not None: - return + self._advance_referee_bleeding() if self.phase_ticks_remaining <= 0: self._finish_round() @@ -757,7 +822,10 @@ def _process_fighter(self, fighter: FighterState, opponent: FighterState) -> Non # frozen through the evasion's leftover ticks. fighter.evasion_ticks = 0 fighter.clinch_startup_ticks = 0 - fighter.pending_actions.clear() + if self.tick > fighter.pending_action_expires_tick: + # A press in the last moments of a stun waits for it to wear off, as any press + # buffered behind a punch does; an older one is gone. + fighter.pending_actions.clear() if not imminent_trade: self._retain_action(fighter) return @@ -793,11 +861,15 @@ def _process_fighter(self, fighter: FighterState, opponent: FighterState) -> Non attack.resolved = True attack.contact_tick = self.tick self._resolve_punch(fighter, opponent, attack) - if fighter.stunned_ticks > 0 or attack.age >= attack.total_ticks: + if fighter.stunned_ticks > 0: self._retain_action(fighter) return - if not self._can_cancel_recovery(fighter, opponent, attack): + if attack.age < attack.total_ticks and not self._can_cancel_recovery( + fighter, opponent, attack + ): return + # The punch is over, or what he pressed next cuts its recovery short: the next action + # starts on this tick. self._retain_action(fighter) if fighter.taunt_ticks > 0: @@ -830,13 +902,24 @@ def _attack_lands_next_tick(attack: AttackState) -> bool: def _can_cancel_recovery( fighter: FighterState, opponent: FighterState, attack: AttackState ) -> bool: - if not attack.landed or attack.age < attack.cancel_age or not fighter.pending_actions: + if not fighter.pending_actions: + return False + follow_up = fighter.pending_actions[0] + if ( + isinstance(follow_up, MovementAction) + and follow_up.kind in EVASION_POSES + and attack.age >= attack.rule.startup + attack.rule.active + and fighter.stamina >= EVASION_STAMINA + ): + # A slip, weave or pull gets him out of the way behind any punch once it has landed + # or missed. + return True + if not attack.landed or attack.age < attack.cancel_age: return False if opponent.stunned_ticks > 0: # A stunned man is already open. Cutting the recovery short would only chain stun # into stun before he has a tick to answer. return False - follow_up = fighter.pending_actions[0] return ( isinstance(follow_up, PunchAction) and (attack.action.punch_class, follow_up.punch_class) in COMPATIBLE_COMBO_CHAINS @@ -875,7 +958,7 @@ def _start_punch(self, fighter: FighterState, action: PunchAction) -> None: combo_bonus = 10 cost = max(1, cost * 90 // 100) fighter.stamina -= cost - self._spend_conditioning(fighter, max(1, cost // 12)) + self._spend_conditioning(fighter, max(1, cost // 20)) speed = fighter.fatigue startup = max( 2, @@ -884,7 +967,7 @@ def _start_punch(self, fighter: FighterState, action: PunchAction) -> None: + style.startup_ticks.get(action.punch_class, 0), ) recovery = max( - 4, + 3, base_rule.recovery * 100 // speed + style.recovery_ticks.get(action.punch_class, 0), ) strength = TIRED_IMPACT_PERCENT if tired else 100 @@ -908,7 +991,9 @@ def _start_punch(self, fighter: FighterState, action: PunchAction) -> None: startup_vulnerability=base_rule.startup_vulnerability, recovery_vulnerability=base_rule.recovery_vulnerability, ) - fighter.attack = AttackState(action, rule, combo_bonus=combo_bonus, start_tick=self.tick) + fighter.attack = AttackState( + action, rule, combo_bonus=combo_bonus, start_tick=self.tick, tired=tired + ) fighter.last_punch = action fighter.combo_ticks = rule.startup + rule.active + rule.recovery + rule.combo_window self._emit( @@ -975,12 +1060,17 @@ def _resolve_punch( effective_arc = rule.lateral_arc * (100 - vision_penalty) // 100 forward_distance, lateral_distance = self._facing_components(attacker, dx, dy) in_front = forward_distance > FIGHTER_RADIUS // 3 - if ( - not in_front - or forward_distance > effective_reach - or distance_squared > effective_reach**2 - or lateral_distance > effective_arc - ): + reaches = ( + in_front + and forward_distance <= effective_reach + and distance_squared <= effective_reach**2 + and lateral_distance <= effective_arc + ) + in_the_way = self._referee_in_the_way(attacker, effective_reach, effective_arc) + if in_the_way is not None and (not reaches or in_the_way < forward_distance): + self._punch_referee(attacker, attack) + return + if not reaches: attacker.stamina = max(0, attacker.stamina - rule.whiff_cost) self._spend_conditioning(attacker, max(2, rule.whiff_cost // 10)) self._emit( @@ -1010,7 +1100,7 @@ def _resolve_punch( action.target is Target.HEAD and defender.defense is DefensivePose.GUARD_HIGH ) or (action.target is Target.BODY and defender.defense is DefensivePose.GUARD_LOW) # Arms too tired to hold a real guard stop nothing, and cannot be broken again. - blocked = guarding and defender.guard >= GUARD_BLOCK_MINIMUM + blocked = guarding and not defender.guard_broken and defender.guard >= GUARD_BLOCK_MINIMUM perfect = ( blocked and not blind @@ -1039,6 +1129,7 @@ def _resolve_punch( defender.counter_ticks = ( COUNTER_WINDOW_TICKS + defender.style_rule.counter_window_ticks ) + defender.parried_until_tick = self.tick + defender.counter_ticks self._emit( "perfect_block", defender.player_id, @@ -1072,17 +1163,9 @@ def _resolve_punch( ) defender.guard = max(0, defender.guard - guard_damage) defender.performance.blocked_hits += 1 - if defender.guard < GUARD_BLOCK_MINIMUM: - # Worn too thin to stop the next one: the guard is broken, and he is told so. - defender.stunned_ticks = max(defender.stunned_ticks, 8) - defender.stunned_at_tick = self.tick - defender.taunt_ticks = 0 - self._emit( - "guard_break", - attacker.player_id, - defender.player_id, - action_id=self._action_id(attacker, attack), - ) + # A parry wins the exchange: it wears the guard down but never breaks it. + if defender.guard < GUARD_BLOCK_MINIMUM and not perfect: + self._break_guard(defender, attacker, self._action_id(attacker, attack)) else: attacker.performance.clean_hits += 1 attacker.punches.add(action.punch_class, landed=True) @@ -1098,7 +1181,7 @@ def _resolve_punch( poise_damage = poise_damage * defender.style_rule.poise_taken_percent // 100 shut_eye: str | None = None if action.target is Target.HEAD: - shut_eye = self._apply_head_damage(defender, action, damage, clean=not blocked) + shut_eye = self._apply_head_damage(defender.trauma, action, damage, clean=not blocked) else: defender.trauma.body = min( 1200, defender.trauma.body + damage * BODY_TRAUMA_PER_DAMAGE_PERCENT // 100 @@ -1113,7 +1196,7 @@ def _resolve_punch( if defender.clinch_startup_ticks > 0: defender.clinch_startup_ticks = 0 self._emit("clinch_interrupted", attacker.player_id, defender.player_id) - blood = min(100, defender.trauma.bleeding // 8 + damage // 4) + blood = min(100, defender.trauma.bleeding // 5 + damage // 3) self._emit( "counter_hit" if counter else "hit", attacker.player_id, @@ -1135,7 +1218,7 @@ def _resolve_punch( if shut_eye is not None: self._emit("eye_shut", attacker.player_id, defender.player_id, detail=shut_eye) - if self._qualifies_for_flash(attacker, defender, action, rule, counter, blocked): + if self._qualifies_for_flash(attacker, defender, attack, counter, blocked): chance = self._flash_chance(attacker, defender, damage) roll = self._rng.randrange(10_000) self._emit( @@ -1149,9 +1232,6 @@ def _resolve_punch( self._complete(attacker.player_id, FinishMethod.FLASH_KO) return - if self._needs_doctor_stoppage(defender): - self._complete(attacker.player_id, FinishMethod.DOCTOR_STOPPAGE) - return clean_head = action.target is Target.HEAD and not blocked if defender.poise <= 0: if action.target is Target.BODY: @@ -1232,17 +1312,16 @@ def _clear_head(self, fighter: FighterState) -> None: fighter.stun_immune_until_tick = self.tick + STUN_IMMUNITY_TICKS fighter.rocked_immune_until_tick = self.tick + ROCKED_IMMUNITY_TICKS + @staticmethod def _apply_head_damage( - self, defender: FighterState, action: PunchAction, damage: int, *, clean: bool + trauma: Trauma, action: PunchAction, damage: int, *, clean: bool ) -> str | None: """Applies a head shot and returns the side of an eye it has just swollen shut, if any. Whatever gets through a guard still shakes the head, but only a clean punch marks the face. """ - eyes_before = (defender.trauma.left_eye, defender.trauma.right_eye) - defender.trauma.head = min( - 1400, defender.trauma.head + damage * HEAD_TRAUMA_PER_DAMAGE_PERCENT // 100 - ) + eyes_before = (trauma.left_eye, trauma.right_eye) + trauma.head = min(1400, trauma.head + damage * HEAD_TRAUMA_PER_DAMAGE_PERCENT // 100) if not clean: return None eye_damage = ( @@ -1255,23 +1334,24 @@ def _apply_head_damage( if action.punch_class is PunchClass.JAB: cut = cut * JAB_CUT_PERCENT // 100 if action.hand.value == "left": - defender.trauma.right_eye = min(1000, defender.trauma.right_eye + eye_damage) - if defender.trauma.right_eye > 260: - defender.trauma.right_cut = min(1000, defender.trauma.right_cut + cut) + trauma.right_eye = min(1000, trauma.right_eye + eye_damage) + if trauma.right_eye > CUT_OPENS_EYE: + trauma.right_cut = min(1000, trauma.right_cut + cut) else: - defender.trauma.left_eye = min(1000, defender.trauma.left_eye + eye_damage) - if defender.trauma.left_eye > 260: - defender.trauma.left_cut = min(1000, defender.trauma.left_cut + cut) + trauma.left_eye = min(1000, trauma.left_eye + eye_damage) + if trauma.left_eye > CUT_OPENS_EYE: + trauma.left_cut = min(1000, trauma.left_cut + cut) swelling = damage * SWELLING_PER_DAMAGE_PERCENT // 100 if action.punch_class is PunchClass.JAB: swelling = swelling * JAB_SWELLING_PERCENT // 100 - defender.trauma.swelling = min(1000, defender.trauma.swelling + swelling) - defender.trauma.bleeding = min( + trauma.swelling = min(1000, trauma.swelling + swelling) + trauma.bleeding = min( 1000, - defender.trauma.bleeding - + (defender.trauma.left_cut + defender.trauma.right_cut + 49) // 50, + trauma.bleeding + + (trauma.left_cut + trauma.right_cut + BLEEDING_CUT_DIVISOR - 1) + // BLEEDING_CUT_DIVISOR, ) - eyes_after = (defender.trauma.left_eye, defender.trauma.right_eye) + eyes_after = (trauma.left_eye, trauma.right_eye) for side, before, after in zip(("left", "right"), eyes_before, eyes_after, strict=True): if before < BLIND_SIDE_EYE_THRESHOLD <= after: return side @@ -1331,18 +1411,12 @@ def _evades( def _resolve_movement_action( self, fighter: FighterState, opponent: FighterState, action: MovementAction ) -> bool: - pose_by_action = { - ActionKind.SLIP_LEFT: DefensivePose.SLIP_LEFT, - ActionKind.SLIP_RIGHT: DefensivePose.SLIP_RIGHT, - ActionKind.WEAVE: DefensivePose.WEAVE, - ActionKind.PULL: DefensivePose.PULL, - } - if action.kind in pose_by_action: - if fighter.stamina < 25: + if action.kind in EVASION_POSES: + if fighter.stamina < EVASION_STAMINA: return False - fighter.stamina -= 25 + fighter.stamina -= EVASION_STAMINA fighter.conditioning = max(0, fighter.conditioning - 1) - fighter.defense = pose_by_action[action.kind] + fighter.defense = EVASION_POSES[action.kind] fighter.defense_started_tick = self.tick fighter.evasion_ticks = EVASION_TICKS + fighter.style_rule.evasion_ticks self._emit("defense", fighter.player_id, detail=fighter.defense.value) @@ -1454,6 +1528,193 @@ def _advance_foul_recovery(self) -> None: self._foul_recovery_target = None self._emit("resume", detail="foul_recovery_complete") + def _referee_in_the_way(self, attacker: FighterState, reach: int, arc: int) -> int | None: + """How far along the punch the referee stands, if it would find him. A punch is aimed at + the other man, so it finds the referee only thrown through his body, however wide it + swings at a man.""" + referee = self._referee + if not referee.alive: + return None + dx, dy = referee.x - attacker.x, referee.y - attacker.y + forward, lateral = self._facing_components(attacker, dx, dy) + if ( + forward <= FIGHTER_RADIUS // 3 + or forward > reach + or dx * dx + dy * dy > reach**2 + or lateral > min(arc, REFEREE_RADIUS + REFEREE_GLOVE_REACH) + ): + return None + return forward + + def _punch_referee(self, attacker: FighterState, attack: AttackState) -> None: + """The punch finds the referee first. He never guards, and nothing scores for it.""" + action = attack.action + referee = self._referee + attack.landed = True + damage = max(1, attack.rule.impact * attacker.fatigue // 100) + if action.target is Target.HEAD: + self._apply_head_damage(referee.trauma, action, damage, clean=True) + else: + referee.trauma.body = min(1200, referee.trauma.body + damage) + referee.health -= damage + referee.last_hit_by = attacker.player_id + referee.stunned_ticks = min( + REFEREE_STAGGER_MAX_TICKS, + max( + referee.stunned_ticks, + REFEREE_STAGGER_BASE_TICKS + damage // REFEREE_STAGGER_DAMAGE_DIVISOR, + ), + ) + referee.velocity_x = referee.velocity_y = 0 + action_id = self._action_id(attacker, attack) + self._emit( + "referee_hit", + attacker.player_id, + REFEREE_ID, + amount=damage, + detail=f"{action.punch_class.value}:{action.target.value}", + blood=min(100, referee.trauma.bleeding // 5 + damage // 3), + direction=attacker.facing, + action_id=action_id, + ) + if referee.health <= 0: + self._referee_goes_down(attacker.player_id, action_id) + + def _referee_goes_down(self, by: str, action_id: str | None) -> None: + """Out cold for good. The bout stops while everyone watches it again, then goes on without + him: the count, the breaks and the bell all still happen.""" + referee = self._referee + referee.alive = False + referee.health = 0 + referee.stunned_ticks = 0 + referee.velocity_x = referee.velocity_y = 0 + self._emit("referee_down", by, REFEREE_ID, action_id=action_id) + if self.phase is not MatchPhase.FIGHT: + return + for fighter in self._fighters.values(): + self._retain_action(fighter) + fighter.pending_actions.clear() + fighter.clinch_startup_ticks = 0 + fighter.taunt_ticks = 0 + fighter.velocity_x = fighter.velocity_y = 0 + fighter.velocity_fixed_x = fighter.velocity_fixed_y = 0 + self._paused_fight_ticks = self.phase_ticks_remaining + self.phase = MatchPhase.REFEREE_DOWN + self.phase_ticks_remaining = REFEREE_DOWN_TICKS + + def _advance_referee_down(self) -> None: + # Nobody boxes while it plays again: a press made meanwhile is dropped, not kept for the resume. + for fighter in self._fighters.values(): + fighter.pending_actions.clear() + self.phase_ticks_remaining -= 1 + if self.phase_ticks_remaining <= 0: + self.phase = MatchPhase.FIGHT + self.phase_ticks_remaining = max(1, self._paused_fight_ticks) + self._emit("resume", detail="referee_down_complete") + + def _advance_referee_bleeding(self) -> None: + referee = self._referee + if not referee.alive or referee.trauma.bleeding <= 0 or self.tick % TICKS_PER_SECOND: + return + referee.health -= max(1, referee.trauma.bleeding // REFEREE_BLEED_HEALTH_DIVISOR) + self._emit("bleed", REFEREE_ID, amount=referee.trauma.bleeding // 10, blood=25) + if referee.health <= 0 and referee.last_hit_by is not None: + self._referee_goes_down(referee.last_hit_by, None) + + def _advance_referee(self) -> None: + """He follows the action close up on his own side of it, stands over a man on the canvas + and keeps to the middle between rounds. Hurt, he reels where he stands; down, he stays + where he fell. He gives way to a fighter who walks into him.""" + referee = self._referee + if not referee.alive: + return + one = self._fighters[self._player_ids[0]] + two = self._fighters[self._player_ids[1]] + if referee.stunned_ticks > 0: + referee.stunned_ticks -= 1 + referee.velocity_x = referee.velocity_y = 0 + else: + target_x, target_y = self._referee_target(one, two) + dx, dy = target_x - referee.x, target_y - referee.y + distance = isqrt(dx * dx + dy * dy) + if distance > REFEREE_SPEED: + dx = _symmetric_divide(dx * REFEREE_SPEED, distance) + dy = _symmetric_divide(dy * REFEREE_SPEED, distance) + referee.x += dx + referee.y += dy + referee.velocity_x, referee.velocity_y = dx, dy + stopped = False + for fighter in (one, two): + stopped = self._keep_referee_clear(fighter) or stopped + # Stopped short by a referee who cannot give way, a fighter is not left inside the other man. + if stopped and not (one.clinch_ticks or two.clinch_ticks): + self._separate_fighters(one, two) + referee.x, referee.y = _ring_point(referee.x, referee.y)[:2] + focus_x, focus_y = self._referee_focus(one, two) + look_x, look_y = focus_x - referee.x, focus_y - referee.y + look = isqrt(look_x * look_x + look_y * look_y) + if look > 0: + referee.facing_x = _symmetric_divide(look_x * FACING_SCALE, look) + referee.facing_y = _symmetric_divide(look_y * FACING_SCALE, look) + + def _referee_focus(self, one: FighterState, two: FighterState) -> tuple[int, int]: + if self.phase is MatchPhase.KNOCKDOWN and self._downed_id is not None: + downed = self._fighters[self._downed_id] + return downed.x, downed.y + return _symmetric_divide(one.x + two.x, 2), _symmetric_divide(one.y + two.y, 2) + + def _referee_target(self, one: FighterState, two: FighterState) -> tuple[int, int]: + referee = self._referee + if self.phase is MatchPhase.REST: + return 0, 0 + if self.phase is MatchPhase.KNOCKDOWN and self._downed_id is not None: + downed = self._fighters[self._downed_id] + away_x, away_y = referee.x - downed.x, referee.y - downed.y + away = isqrt(away_x * away_x + away_y * away_y) + if away == 0: + away_x, away_y, away = 0, 1, 1 + return ( + downed.x + _symmetric_divide(away_x * REFEREE_COUNT_STANDOFF, away), + downed.y + _symmetric_divide(away_y * REFEREE_COUNT_STANDOFF, away), + ) + mid_x, mid_y = self._referee_focus(one, two) + across_x, across_y = one.y - two.y, two.x - one.x + across = isqrt(across_x * across_x + across_y * across_y) + if across == 0: + across_x, across_y, across = 0, 1, 1 + side = 1 if (referee.x - mid_x) * across_x + (referee.y - mid_y) * across_y >= 0 else -1 + standoff = side * REFEREE_STANDOFF + return ( + mid_x + _symmetric_divide(across_x * standoff, across), + mid_y + _symmetric_divide(across_y * standoff, across), + ) + + def _keep_referee_clear(self, fighter: FighterState) -> bool: + """A fighter walking into the referee shoves him aside; pinned on the ropes, he stops the + fighter instead, and says so.""" + referee = self._referee + minimum = FIGHTER_RADIUS + REFEREE_RADIUS + dx, dy = referee.x - fighter.x, referee.y - fighter.y + if dx * dx + dy * dy >= minimum * minimum: + return False + distance = isqrt(dx * dx + dy * dy) + if distance == 0: + dx, dy, distance = 0, 1, 1 + push = minimum - distance + referee.x, referee.y = _ring_point( + referee.x + _away_divide(dx * push, distance), + referee.y + _away_divide(dy * push, distance), + )[:2] + dx, dy = referee.x - fighter.x, referee.y - fighter.y + if dx * dx + dy * dy >= minimum * minimum: + return False + distance = max(1, isqrt(dx * dx + dy * dy)) + push = minimum - distance + fighter.x -= _away_divide(dx * push, distance) + fighter.y -= _away_divide(dy * push, distance) + self._clamp_to_ring(fighter) + return True + def _advance_clinch(self, one: FighterState, two: FighterState) -> None: one.attack = None two.attack = None @@ -1478,7 +1739,12 @@ def _break_clinch(self, one: FighterState, two: FighterState) -> None: self._clamp_to_ring(one) self._clamp_to_ring(two) self._separate_fighters(one, two) - self._emit("referee_break", one.player_id, two.player_id) + # With nobody left to part them, the hold simply comes apart. + self._emit( + "referee_break" if self._referee.alive else "clinch_break", + one.player_id, + two.player_id, + ) def _draw_clinch_together(self, one: FighterState, two: FighterState) -> None: dx = two.x - one.x @@ -1509,8 +1775,12 @@ def _move_fighter(self, fighter: FighterState, opponent: FighterState) -> None: speed = max(2, speed * STUNNED_SPEED_PERCENT // 100) # In thousandths of a unit, so a style's few percent of footspeed survive the rounding. fixed_speed = speed * MOVEMENT_FIXED_SCALE * fighter.style_rule.move_speed_percent // 100 + attack = fighter.attack + recovering = attack is not None and attack.age >= attack.rule.startup + attack.rule.active + if recovering: + fixed_speed = fixed_speed * RECOVERY_SPEED_PERCENT // 100 if ( - fighter.attack is not None + (attack is not None and not recovering) or fighter.evasion_ticks > 0 or fighter.clinch_startup_ticks > 0 or fighter.taunt_ticks > 0 @@ -1729,20 +1999,48 @@ def _recover_resources(self, fighter: FighterState) -> None: or fighter.stunned_ticks > 0 or fighter.taunt_ticks > 0 ) - base = 1 if active else max(1, fighter.fatigue // 25) + base = 2 if active else max(1, fighter.fatigue // 20) regen = max(1, base * 3 // 4) if fighter.movement_load else base - if fighter.defense in (DefensivePose.GUARD_HIGH, DefensivePose.GUARD_LOW): + guarding = fighter.defense in (DefensivePose.GUARD_HIGH, DefensivePose.GUARD_LOW) + if guarding: regen = regen * GUARD_STAMINA_REGEN_PERCENT // 100 fighter.stamina = min(fighter.maximum_stamina, fighter.stamina + regen) - guard_regen = max(1, fighter.fatigue // 30) - if not active and fighter.defense is DefensivePose.NONE and self.tick % 2 == 0: - fighter.guard = min(MAX_GUARD, fighter.guard + guard_regen) - elif not active and self.tick % GUARD_HELD_REGEN_EVERY_TICKS == 0: - # A held guard still comes back, slowly, between the punches it takes. - fighter.guard = min(MAX_GUARD, fighter.guard + guard_regen) + if fighter.clinch_ticks > 0 and guarding: + # Tied up in a hold, where his pose is not his to change, a guard he had up neither wears down + # nor breaks; one he had lowered still comes back. + pass + elif guarding: + fighter.guard = max(0, fighter.guard - GUARD_HELD_DRAIN) + # A parry earns its counter window: the guard it wore thin is not broken before that runs out. + if ( + fighter.guard < GUARD_BLOCK_MINIMUM + and not fighter.guard_broken + and self.tick >= fighter.parried_until_tick + ): + self._break_guard(fighter, self._other(fighter.player_id), None) + else: + fighter.guard = min(MAX_GUARD, fighter.guard + max(1, fighter.fatigue // 25)) + if fighter.guard_broken and fighter.guard >= GUARD_REARM: + fighter.guard_broken = False recovering = not active and self.tick % POISE_REGEN_EVERY_TICKS == 0 fighter.poise = min(poise_ceiling(fighter.trauma.head), fighter.poise + int(recovering)) + def _break_guard( + self, fighter: FighterState, opponent: FighterState, action_id: str | None + ) -> None: + """Worn too thin to stop the next one: the guard is broken, and he is told so.""" + fighter.guard_broken = True + fighter.stunned_ticks = max(fighter.stunned_ticks, GUARD_BREAK_STUN_TICKS) + fighter.stunned_at_tick = self.tick + fighter.taunt_ticks = 0 + self._emit( + "guard_break", + opponent.player_id, + fighter.player_id, + detail="" if action_id is not None else "held", + action_id=action_id, + ) + @staticmethod def _ring_control(fighter: FighterState, opponent: FighterState) -> int: fighter_center = abs(fighter.x) + abs(fighter.y) @@ -1762,32 +2060,23 @@ def _advance_bleeding(self, fighter: FighterState) -> None: fighter.conditioning = max(0, fighter.conditioning - fighter.trauma.bleeding // 250) fighter.stamina = min(fighter.stamina, fighter.maximum_stamina) self._emit("bleed", fighter.player_id, amount=fighter.trauma.bleeding // 10, blood=25) - opponent = self._other(fighter.player_id) - if self._needs_doctor_stoppage(fighter): - self._complete(opponent.player_id, FinishMethod.DOCTOR_STOPPAGE) - - def _needs_doctor_stoppage(self, fighter: FighterState) -> bool: - return ( - max(fighter.trauma.left_cut, fighter.trauma.right_cut) - >= self.config.doctor_cut_threshold - or fighter.trauma.swelling >= self.config.doctor_swelling_threshold - ) def _qualifies_for_flash( self, attacker: FighterState, defender: FighterState, - action: PunchAction, - rule: PunchRule, + attack: AttackState, counter: bool, blocked: bool, ) -> bool: + action = attack.action return ( self.config.flash_ko_enabled + and not attack.tired and action.target is Target.HEAD and action.power is Power.POWER and action.punch_class is not PunchClass.JAB - and rule.impact >= 50 + and attack.rule.impact >= 50 and counter and not blocked and attacker.stamina >= 100 @@ -2168,6 +2457,7 @@ def _start_next_round(self) -> None: fighter.taunt_ticks = 0 fighter.evasion_ticks = 0 fighter.counter_ticks = 0 + fighter.parried_until_tick = -1 fighter.combo_ticks = 0 fighter.last_action_until_tick = -1 self.phase = MatchPhase.FIGHT @@ -2288,11 +2578,36 @@ def snapshot(self) -> EngineSnapshot: round_number=self.round_number, phase_ticks_remaining=self.phase_ticks_remaining, fighters=typed_fighters, + referee=self._referee_snapshot(), events=tuple(self._tick_events), result=self.result, checksum=checksum, ) + def _referee_snapshot(self) -> RefereeSnapshot: + referee = self._referee + trauma = referee.trauma + return RefereeSnapshot( + x=referee.x, + y=referee.y, + facing_x=referee.facing_x, + facing_y=referee.facing_y, + velocity_x=referee.velocity_x, + velocity_y=referee.velocity_y, + stunned_ticks=referee.stunned_ticks, + alive=referee.alive, + trauma=TraumaSnapshot( + head=trauma.head, + body=trauma.body, + left_eye=trauma.left_eye, + right_eye=trauma.right_eye, + left_cut=trauma.left_cut, + right_cut=trauma.right_cut, + swelling=trauma.swelling, + bleeding=trauma.bleeding, + ), + ) + def _fighter_snapshot(self, fighter: FighterState) -> FighterSnapshot: trauma = fighter.trauma attack = fighter.attack @@ -2350,6 +2665,7 @@ def _fighter_snapshot(self, fighter: FighterState) -> FighterSnapshot: maximum_stamina=fighter.maximum_stamina, conditioning=fighter.conditioning, guard=fighter.guard, + guard_broken=fighter.guard_broken, poise=fighter.poise, trauma=TraumaSnapshot( head=trauma.head, @@ -2415,6 +2731,7 @@ def _checksum(self, _fighters: tuple[FighterSnapshot, FighterSnapshot]) -> str: fighter.conditioning, fighter.conditioning_remainder, fighter.guard, + fighter.guard_broken, fighter.poise, ], "trauma": fighter.trauma, @@ -2435,6 +2752,7 @@ def _checksum(self, _fighters: tuple[FighterSnapshot, FighterSnapshot]) -> str: fighter.stun_chain_ticks, fighter.stun_immune_until_tick, fighter.rocked_immune_until_tick, + fighter.parried_until_tick, ], "attack": fighter.attack, "last_punch": fighter.last_punch, @@ -2488,6 +2806,7 @@ def _checksum(self, _fighters: tuple[FighterSnapshot, FighterSnapshot]) -> str: "round": self.round_number, "remaining": self.phase_ticks_remaining, "fighters": fighter_states, + "referee": self._referee, "round_cards": self._round_cards, "downed_id": self._downed_id, "knockdown_count_ticks": self._knockdown_count_ticks, diff --git a/src/intelstream/hands/protocol.py b/src/intelstream/hands/protocol.py index 605fd4c5..daf94164 100644 --- a/src/intelstream/hands/protocol.py +++ b/src/intelstream/hands/protocol.py @@ -23,7 +23,7 @@ Target, ) -PROTOCOL_VERSION = 4 +PROTOCOL_VERSION = 5 MAX_FRAME_BYTES = 4096 MAX_ACTIONS_PER_INPUT = 4 MAX_SERVER_FRAME_BYTES = 65_536 diff --git a/src/intelstream/hands/rules.py b/src/intelstream/hands/rules.py index 5cdefb97..7c01fe5e 100644 --- a/src/intelstream/hands/rules.py +++ b/src/intelstream/hands/rules.py @@ -20,8 +20,8 @@ def _load_manifest() -> dict[str, Any]: RING_HALF_HEIGHT = 500 FIGHTER_RADIUS = 38 MINIMUM_SEPARATION = FIGHTER_RADIUS * 2 -ROUND_TICKS = 120 * TICKS_PER_SECOND -REST_TICKS = 15 * TICKS_PER_SECOND +ROUND_TICKS = 60 * TICKS_PER_SECOND +REST_TICKS = 6 * TICKS_PER_SECOND COUNTDOWN_TICKS: int = _MANIFEST["countdown"]["opening_ticks"] DEFAULT_ROUNDS = 3 MAX_STAMINA = 1000 @@ -37,9 +37,20 @@ def _load_manifest() -> dict[str, Any]: # The most a fighter turns in a tick, as the cosine and sine of the angle in millionths. FACING_TURN_COS: int = round(math.cos(_FACING_TURN_RADIANS) * 1_000_000) FACING_TURN_SIN: int = round(math.sin(_FACING_TURN_RADIANS) * 1_000_000) +ACTION_BUFFER_TICKS: int = _MANIFEST["action_buffer_ticks"] +# A fresh fighter's walking speed in units a tick, and the fastest velocity a snapshot reports. +MAX_SPEED: int = _MANIFEST["movement"]["max_speed"] +# The share of the way from his velocity to the one his input asks for that a fighter covers in a tick. +MOVE_BLEND_PERCENT: int = _MANIFEST["movement"]["blend_percent"] +# His footspeed while a punch recovers: he steps out behind it instead of standing rooted. +RECOVERY_SPEED_PERCENT: int = _MANIFEST["movement"]["recovery_speed_percent"] +EVASION_TICKS: int = _MANIFEST["evasion"]["ticks"] +EVASION_STAMINA: int = _MANIFEST["evasion"]["stamina"] RECOVERY_CANCEL_PERCENT: int = _MANIFEST["combos"]["recovery_cancel_percent"] REFEREE_WALK_SPEED: int = _MANIFEST["knockdown"]["referee_walk_speed"] MANDATORY_COUNT: int = _MANIFEST["knockdown"]["mandatory_count"] +# The referee counts quicker than the clock: two thirds of a second a number. +COUNT_TICK_INTERVAL: int = _MANIFEST["knockdown"]["count_ticks"] BOX_PAUSE_TICKS: int = _MANIFEST["knockdown"]["box_pause_ticks"] TIRED_STARTUP_TICKS: int = _MANIFEST["tired"]["startup_ticks"] TIRED_RECOVERY_TICKS: int = _MANIFEST["tired"]["recovery_ticks"] @@ -49,13 +60,25 @@ def _load_manifest() -> dict[str, Any]: REST_CORNER_OFFSET: int = _MANIFEST["rest"]["corner_offset"] CLINCH_HOLD_DISTANCE: int = _MANIFEST["clinch"]["hold_distance"] CLINCH_DRAW_SPEED: int = _MANIFEST["clinch"]["draw_speed"] +_REFEREE = _MANIFEST["referee"] +REFEREE_RADIUS: int = _REFEREE["radius"] +# How much beating the referee takes before he goes down for good. Nobody is shown it. +REFEREE_HEALTH: int = _REFEREE["health"] +REFEREE_SPEED: int = _REFEREE["walk_speed"] +# How far to the side of the fighters he keeps, close enough that a wild punch can find him, and how +# far from a man on the canvas he counts. +REFEREE_STANDOFF: int = _REFEREE["standoff"] +REFEREE_COUNT_STANDOFF: int = _REFEREE["count_standoff"] +REFEREE_STAGGER_BASE_TICKS: int = _REFEREE["stagger_base_ticks"] +REFEREE_STAGGER_DAMAGE_DIVISOR: int = _REFEREE["stagger_damage_divisor"] +REFEREE_STAGGER_MAX_TICKS: int = _REFEREE["stagger_max_ticks"] +# The bout stops this long when he goes down, for the replay. +REFEREE_DOWN_TICKS: int = _REFEREE["down_ticks"] +# A bleeding referee loses his bleeding over this in health every second. +REFEREE_BLEED_HEALTH_DIVISOR: int = _REFEREE["bleed_health_divisor"] REST_WALK_SPEED: int = _MANIFEST["rest"]["walk_speed"] BLIND_SIDE_EYE_THRESHOLD: int = _MANIFEST["blind_side"]["eye_threshold"] BLIND_SIDE_IMPACT_PERCENT: int = _MANIFEST["blind_side"]["impact_percent"] -# The ringside doctor stops a bout on a cut or a swelling this bad, unless a bout's config says -# otherwise. The client reads the same values to call a cut by how near it is to his limit. -DOCTOR_CUT_THRESHOLD: int = _MANIFEST["doctor"]["cut"] -DOCTOR_SWELLING_THRESHOLD: int = _MANIFEST["doctor"]["swelling"] PARRY_STAGGER_TICKS: int = _MANIFEST["parry"]["stagger_ticks"] BODY_WIND_PERCENT: int = _MANIFEST["body"]["wind_percent"] BODY_COLLAPSE_TRAUMA: int = _MANIFEST["body"]["collapse_body_trauma"] @@ -87,7 +110,11 @@ def _load_manifest() -> dict[str, Any]: # A raised guard only perfect-blocks once the guard has been let down for this many ticks: a guard # flicked down and straight back up blocks, but keeps no parry window open. PERFECT_BLOCK_REARM_TICKS: int = _MANIFEST["guard"]["perfect_rearm_ticks"] -GUARD_HELD_REGEN_EVERY_TICKS: int = _MANIFEST["guard"]["held_regen_every_ticks"] +# A held guard tires the arms: it wears down every tick it is up and only comes back once lowered. +GUARD_HELD_DRAIN: int = _MANIFEST["guard"]["held_drain"] +GUARD_BREAK_STUN_TICKS: int = _MANIFEST["guard"]["break_stun_ticks"] +# A broken guard stops nothing until it has come back this far. +GUARD_REARM: int = _MANIFEST["guard"]["rearm"] GUARD_DAMAGE_PERCENT: int = _MANIFEST["guard"]["damage_percent"] GUARD_STAMINA_REGEN_PERCENT: int = _MANIFEST["guard"]["stamina_regen_percent"] BODY_COLLAPSE_COOLDOWN_TICKS: int = _MANIFEST["body"]["collapse_cooldown_ticks"] @@ -99,6 +126,10 @@ def _load_manifest() -> dict[str, Any]: BODY_TRAUMA_PER_DAMAGE_PERCENT: int = _MANIFEST["trauma"]["body_per_damage_percent"] EYE_TRAUMA_PER_DAMAGE_PERCENT: int = _MANIFEST["trauma"]["eye_per_damage_percent"] CUT_PER_DAMAGE_PERCENT: int = _MANIFEST["trauma"]["cut_per_damage_percent"] +# The skin over an eye splits once the eye has swollen this far. +CUT_OPENS_EYE: int = _MANIFEST["trauma"]["cut_opens_eye"] +# Every clean head shot opens the bleeding by the fighter's cuts over this. +BLEEDING_CUT_DIVISOR: int = _MANIFEST["trauma"]["bleeding_cut_divisor"] # A jab is a light punch: it seldom splits the skin and swells the face less than a hook. JAB_CUT_PERCENT: int = _MANIFEST["trauma"]["jab_cut_percent"] JAB_SWELLING_PERCENT: int = _MANIFEST["trauma"]["jab_swelling_percent"] @@ -132,6 +163,8 @@ def _manifest_check() -> None: raise RuntimeError("combat-manifest.json facing.turn_degrees_per_second is out of range") if REST_CORNER_OFFSET * 2 > RING_CORNER_REACH: raise RuntimeError("combat-manifest.json rest.corner_offset is past the corner pads") + if not 0 < MOVE_BLEND_PERCENT <= 100 or not 0 <= RECOVERY_SPEED_PERCENT <= 100: + raise RuntimeError("combat-manifest.json movement percentages are out of range") _manifest_check() @@ -306,9 +339,9 @@ class JudgeProfile: def fatigue_max_stamina(conditioning: int, body_trauma: int) -> int: - conditioning_penalty = (MAX_CONDITIONING - conditioning) * 45 // 100 - body_penalty = min(280, body_trauma // 3) - return max(330, MAX_STAMINA - conditioning_penalty - body_penalty) + conditioning_penalty = (MAX_CONDITIONING - conditioning) * 30 // 100 + body_penalty = min(200, body_trauma // 4) + return max(450, MAX_STAMINA - conditioning_penalty - body_penalty) def poise_ceiling(head_trauma: int) -> int: @@ -317,4 +350,4 @@ def poise_ceiling(head_trauma: int) -> int: def fatigue_factor(conditioning: int, body_trauma: int) -> int: - return max(48, 100 - (MAX_CONDITIONING - conditioning) // 18 - body_trauma // 35) + return max(65, 100 - (MAX_CONDITIONING - conditioning) // 30 - body_trauma // 50) diff --git a/src/intelstream/hands/static/assets/hands.js b/src/intelstream/hands/static/assets/hands.js index 7ba1971e..10b29afb 100644 --- a/src/intelstream/hands/static/assets/hands.js +++ b/src/intelstream/hands/static/assets/hands.js @@ -1,18 +1,18 @@ -var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r};(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var n={format:2,tick_rate:30,ring:{half_width:500,half_height:500,fighter_radius:38},limits:{max_stamina:1e3,max_conditioning:1e3,max_guard:700,max_poise:600},action_buffer_ticks:6,facing:{scale:1e3,turn_degrees_per_second:75},combos:{recovery_cancel_percent:50,chains:[[`jab`,`straight`],[`jab`,`hook`],[`straight`,`hook`],[`hook`,`uppercut`],[`uppercut`,`hook`]]},knockdown:{referee_walk_speed:5,mandatory_count:8,box_pause_ticks:60,get_up_stun_ticks:20,get_up_stamina:500,get_up_base:34,get_up_per_knockdown:20,get_up_trauma_divisor:18},countdown:{opening_ticks:240},tired:{startup_ticks:3,recovery_ticks:5,impact_percent:40},foul:{separation:45},hitstop_ms:{hit:78,block:45},fatigue_scaling:{startup_formula:`max(2, startup * 100 // fatigue - lead_jab_bonus)`,recovery_formula:`max(4, recovery * 100 // fatigue)`,lead_jab_bonus:1,rear_straight_impact_bonus:8},punches:{jab:{startup:4,active:2,recovery:7,reach:150,lateral_arc:42,impact:34,stamina_cost:42,whiff_cost:18,guard_damage:44,poise_damage:35,combo_window:7,startup_vulnerability:2,recovery_vulnerability:3},straight:{startup:6,active:2,recovery:10,reach:168,lateral_arc:38,impact:52,stamina_cost:65,whiff_cost:28,guard_damage:66,poise_damage:58,combo_window:8,startup_vulnerability:4,recovery_vulnerability:5},hook:{startup:7,active:3,recovery:12,reach:126,lateral_arc:92,impact:64,stamina_cost:78,whiff_cost:36,guard_damage:82,poise_damage:72,combo_window:9,startup_vulnerability:5,recovery_vulnerability:7},uppercut:{startup:8,active:2,recovery:13,reach:108,lateral_arc:54,impact:72,stamina_cost:88,whiff_cost:44,guard_damage:88,poise_damage:84,combo_window:10,startup_vulnerability:6,recovery_vulnerability:8}},variants:{body:{startup_add:1,reach_min:80,reach_sub:14,lateral_arc_add:8,impact_mul_num:92,impact_mul_den:100,stamina_cost_add:4,whiff_cost_add:3,poise_damage_mul_num:72,poise_damage_mul_den:100},power:{startup_add:2,active_add:1,recovery_add:3,reach_add:5,impact_mul_num:152,impact_mul_den:100,stamina_cost_mul_num:155,stamina_cost_mul_den:100,whiff_cost_mul_num:175,whiff_cost_mul_den:100,guard_damage_mul_num:145,guard_damage_mul_den:100,poise_damage_mul_num:145,poise_damage_mul_den:100,startup_vulnerability_add:2,recovery_vulnerability_add:2}},hurtboxes:{head:{radius:.13,length:.16,joint:`head`,offset_y:.12},torso:{radius:.21,length:.34,joint:`chest`,offset_y:.16}},corners:{reach:733},rest:{corner_offset:365,walk_speed:5},clinch:{hold_distance:60,draw_speed:6},corner:{cut:{worse_cut:250,other_cut:100,bleeding_kept_percent:30},swelling:{swelling:250,eyes:200},breath:{conditioning:180,body:150},balanced:{worse_cut:80,bleeding_kept_percent:75,swelling:80,eyes:60}},blind_side:{eye_threshold:700,impact_percent:120},doctor:{cut:800,swelling:900},parry:{stagger_ticks:20},body:{wind_percent:90,collapse_body_trauma:650,collapse_stamina:350,collapse_minimum_damage:40,collapse_delay_ticks:10,collapse_cooldown_ticks:300},styles:{balanced:{},boxer:{recovery_ticks:{jab:-1},reach_percent:102,impact_percent:98,poise_damage_percent:98},slugger:{impact_percent:108,poise_damage_percent:108,poise_taken_percent:95,stamina_cost_percent:115,recovery_ticks:{hook:1,uppercut:1},move_speed_percent:96},swarmer:{move_speed_percent:103,startup_ticks:{hook:-1,uppercut:-1},body_damage_percent:110,conditioning_loss_percent:85,impact_percent:96,poise_damage_percent:96,evasion_ticks:1},counter_puncher:{counter_bonus_percent:38,counter_window_ticks:3,evasion_ticks:1,perfect_block_ticks:1,impact_percent:96,poise_damage_percent:96}},stun:{flinch_minimum_damage:36,flinch_base_ticks:5,flinch_damage_divisor:16,rocked_counter_damage:50,rocked_power_damage:70,rocked_hurt_poise:180,rocked_base_ticks:16,rocked_damage_divisor:6,rocked_max_ticks:36,chain_max_ticks:45,immunity_ticks:24,rocked_immunity_ticks:8,moving_speed_percent:75},guard:{block_poise_percent:25,perfect_block_poise_percent:0,leak_base_percent:70,leak_minimum_percent:10,block_minimum:60,perfect_rearm_ticks:6,held_regen_every_ticks:4,damage_percent:60,stamina_regen_percent:50},trauma:{head_per_damage_percent:100,eye_per_damage_percent:70,cut_per_damage_percent:50,jab_cut_percent:25,jab_swelling_percent:50,swelling_per_damage_percent:33,poise_ceiling_per_head_percent:30,poise_ceiling_floor:220,body_per_damage_percent:100,poise_regen_every_ticks:2,poise_damage_percent:100},hitbox:{glove_radius:.11}},r=n.punches,i=n.variants;n.tick_rate,n.action_buffer_ticks,n.hitstop_ms;var a=n.hurtboxes,o=n.hitbox.glove_radius;n.fatigue_scaling;var s=n.rest.corner_offset,c=n.ring.half_width,l=n.ring.half_height,u=n.ring.fighter_radius,d=n.blind_side.eye_threshold,f=n.guard.block_minimum,p=n.corner,m=n.corners.reach,h=n.combos.recovery_cancel_percent,g=new Set(n.combos.chains.map(([e,t])=>`${e}:${t}`));function _(e,t){return g.has(`${e}:${t}`)}function v(e){return e.startup+e.active+Math.floor(e.recovery*h/100)}function y(e,t,n,r,i,a=`balanced`){return t&&!i&&_(e,n.class)&&r>=j(a,n.class,n.target,n.power)}function b(e){return r[e].combo_window}var x=n.stun.rocked_base_ticks,S=n.stun.rocked_max_ticks,C=n.knockdown,w=1400,T=3,E=C.get_up_base,D=C.get_up_base+T*C.get_up_per_knockdown+Math.floor(w/C.get_up_trauma_divisor),O=n.stun.moving_speed_percent,ee=n.tired.startup_ticks,te=n.tired.recovery_ticks,k=n.doctor.cut,ne=n.doctor.swelling;function A(e,t,n){let a=r[e],o=a.startup,s=a.active,c=a.recovery,l=a.reach,u=a.lateral_arc;if(t===`body`){let e=i.body;o+=e.startup_add??0,c+=e.recovery_add??0,l=Math.max(e.reach_min??0,l-(e.reach_sub??0)),u+=e.lateral_arc_add??0}if(n===`power`){let e=i.power;o+=e.startup_add??0,s+=e.active_add??0,c+=e.recovery_add??0,l+=e.reach_add??0}return{startup:o,active:s,recovery:c,reach:l,lateralArc:u}}function re(e,t,n){let a=r[e].stamina_cost;return t===`body`&&(a+=i.body.stamina_cost_add??0),n===`power`&&(a=Math.floor(a*(i.power.stamina_cost_mul_num??1)/(i.power.stamina_cost_mul_den??1))),a}var ie=n.styles,ae=new Map;function oe(e){let t=ae.get(e);if(t!==void 0)return t;let n=ie[e]??{},r={startupTicks:n.startup_ticks??{},recoveryTicks:n.recovery_ticks??{},staminaCostPercent:n.stamina_cost_percent??100,conditioningLossPercent:n.conditioning_loss_percent??100,moveSpeedPercent:n.move_speed_percent??100,evasionTicks:n.evasion_ticks??0};return ae.set(e,r),r}function j(e,t,n,r){return Math.floor(re(t,n,r)*oe(e).staminaCostPercent/100)}function se(e){return e.startup+e.active+e.recovery}function ce(e){return`${e.wins}-${e.losses}${e.draws>0?`-${e.draws}`:``}`}var le=e=>e.wins+e.losses+e.draws===0;function ue(e){return le(e)?`PRO DEBUT`:`${ce(e)} (${e.knockouts} KO)`}var M=class extends Error{name=`ProtocolError`},N=2147483647,de=new TextEncoder;function fe(e){let t=0,n=()=>{for(;/\s/u.test(e[t]??``);)t+=1},r=()=>{let n=t;if(e[t++]!==`"`)throw new M(`invalid JSON`);for(;t{n();let a=e[t];if(a===`{`){t+=1,n();let a=new Set;if(e[t]===`}`){t+=1;return}for(;;){n();let o=r();if(a.has(o))throw new M(`duplicate field ${o}`);if(a.add(o),n(),e[t++]!==`:`)throw new M(`invalid JSON`);i(),n();let s=e[t++];if(s===`}`)return;if(s!==`,`)throw new M(`invalid JSON`)}}if(a===`[`){if(t+=1,n(),e[t]===`]`){t+=1;return}for(;;){i(),n();let r=e[t++];if(r===`]`)return;if(r!==`,`)throw new M(`invalid JSON`)}}if(a===`"`){r();return}let o=e.slice(t),s=/^(?:-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?|true|false|null)/u.exec(o);if(!s)throw new M(`invalid JSON`);t+=s[0].length};if(i(),n(),t!==e.length)throw new M(`invalid JSON`)}function pe(e){let t,n;if(typeof e==`string`?(t=de.encode(e),n=e):(t=e instanceof Uint8Array?e:new Uint8Array(e),n=new TextDecoder(`utf-8`,{fatal:!0}).decode(t)),t.byteLength>65536)throw new M(`server frame too large`);try{return fe(n),JSON.parse(n)}catch(e){throw e instanceof M?e:new M(`invalid JSON`)}}function me(e,t){if(typeof e!=`object`||!e||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype)throw new M(`${t} must be an object`);return e}function P(e,t,n=[]){let r=new Set([...t,...n]),i=Object.keys(e);if(t.some(t=>!Object.hasOwn(e,t))||i.some(e=>!r.has(e)))throw new M(`schema mismatch`)}function F(e,t,n=0,r=N){if(!Number.isSafeInteger(e)||er)throw new M(`${t} must be a bounded integer`);return e}function he(e,t){if(typeof e!=`boolean`)throw new M(`${t} must be boolean`);return e}function ge(e,t,n=255,r=1){if(typeof e!=`string`||e.lengthn||/[\u0000-\u001f\u007f]/u.test(e))throw new M(`${t} must be a bounded string`);return e}function _e(e,t,n=255){return e===null?null:ge(e,t,n)}function ve(e,t,n){if(typeof e!=`string`||!t.includes(e))throw new M(`invalid ${n}`);return e}function ye(e,t,n){if(!Array.isArray(e)||e.length>n)throw new M(`${t} must be a bounded array`);return e}var be=[`left`,`right`],xe=[`jab`,`straight`,`hook`,`uppercut`],I=[`head`,`body`],Se=[`normal`,`power`],Ce=[`orthodox`,`southpaw`],we=[`balanced`,`boxer`,`slugger`,`swarmer`,`counter_puncher`],L=[`none`,`guard_high`,`guard_low`,`slip_left`,`slip_right`,`weave`,`pull`],Te=[`none`,`guard_high`,`guard_low`],Ee=[`slip_left`,`slip_right`,`weave`,`pull`,`clinch`,`switch_stance`,`get_up_left`,`get_up_right`,`taunt`,`corner_cut`,`corner_swelling`,`corner_breath`],De=[`cut`,`swelling`,`breath`,`balanced`],Oe=[`low_blow`,`headbutt`],ke=[`countdown`,`fight`,`knockdown`,`foul_recovery`,`rest`,`complete`],Ae=[`ko`,`flash_ko`,`tko`,`doctor_stoppage`,`disqualification`,`decision`,`draw`,`forfeit`];function je(e){let t=me(e,`record`);return P(t,[`wins`,`losses`,`draws`,`knockouts`]),{wins:F(t.wins,`record.wins`),losses:F(t.losses,`record.losses`),draws:F(t.draws,`record.draws`),knockouts:F(t.knockouts,`record.knockouts`)}}function Me(e){let t=me(e,`player`);P(t,[`id`,`name`,`avatar`,`rating`,`connected`],[`cpu`,`record`,`style`]);let n=t.style===void 0?{}:{style:ve(t.style,we,`player style`)},r=t.cpu===void 0?{}:{cpu:he(t.cpu,`cpu`)},i=t.record===void 0?{}:{record:je(t.record)};return{id:ge(t.id,`player.id`),name:ge(t.name,`player.name`,80),avatar:_e(t.avatar,`player.avatar`,128),rating:F(t.rating,`rating`),connected:he(t.connected,`connected`),...r,...i,...n}}function Ne(e,t,n=1){let r=ye(e,`players`,2).map(Me);if(r.lengthe.id)).size!==r.length)throw new M(`players must be present and distinct`);return r}function Pe(e){let t=me(e,`trauma`);return P(t,[`head`,`body`,`left_eye`,`right_eye`,`left_cut`,`right_cut`,`swelling`,`bleeding`]),{head:F(t.head,`head`,0,1400),body:F(t.body,`body`,0,1200),left_eye:F(t.left_eye,`left_eye`,0,1e3),right_eye:F(t.right_eye,`right_eye`,0,1e3),left_cut:F(t.left_cut,`left_cut`,0,1e3),right_cut:F(t.right_cut,`right_cut`,0,1e3),swelling:F(t.swelling,`swelling`,0,1e3),bleeding:F(t.bleeding,`bleeding`,0,1e3)}}var Fe=7;function Ie(e,t){return Math.max(-7,Math.min(Fe,F(e,t,-2147483647,N)))}function Le(e){let t=me(e,`fighter`);P(t,`player_id.x.y.facing.facing_x.facing_y.velocity_x.velocity_y.stance.style.defense.stamina.maximum_stamina.conditioning.guard.poise.trauma.knockdowns.warnings.deductions.stunned_ticks.is_downed.action.action_hand.action_target.action_power.action_id.action_key.action_start_tick.action_startup_ticks.action_active_ticks.action_recovery_ticks.action_contact_tick.queued_actions.clinch_startup_ticks.clinch_ticks.is_foul_recovery_target.taunt_ticks.corner_choice.get_up_prompt.get_up_meter.get_up_required.get_up_count.get_up_window_start_tick.get_up_window_end_tick.last_input_sequence`.split(`.`));let n=t.action===null?null:ve(t.action,xe,`action`),r=t.action_hand===null?null:ve(t.action_hand,be,`action hand`),i=t.action_target===null?null:ve(t.action_target,I,`action target`),a=t.action_power===null?null:ve(t.action_power,Se,`action power`);if([n,r,i,a].some(e=>e===null)&&[n,r,i,a].some(e=>e!==null))throw new M(`partial punch action`);let o=t.action_id===null?null:ge(t.action_id,`action_id`,32),s=t.action_key===null?null:ge(t.action_key,`action_key`,64);if([o,s].some(e=>e===null)!==[o,s].every(e=>e===null))throw new M(`partial action instance`);if(o!==null&&n===null)throw new M(`action instance without class`);let c=t.get_up_prompt===null?null:ve(t.get_up_prompt,[`get_up_left`,`get_up_right`],`get-up prompt`),l=F(t.maximum_stamina,`maximum_stamina`,330,1e3),u=F(t.stamina,`stamina`,0,l),d=F(t.get_up_required,`get_up_required`,0,D),f=F(t.facing,`facing`,-1,1);if(f===0)throw new M(`invalid facing`);let p=F(t.facing_x,`facing_x`,-1e3,1e3),m=F(t.facing_y,`facing_y`,-1e3,1e3);if(p===0&&m===0)throw new M(`invalid facing vector`);if(d!==0&&dye(e,`round scores`,15).map(e=>F(e,`score`,6,10)),r=n(t.player_one),i=n(t.player_two);if(r.length!==i.length)throw new M(`scorecard round mismatch`);return{judge:ge(t.judge,`judge`,80),player_one:r,player_two:i}}function Be(e){let t=ye(e,`scorecards`,3).map(ze);if(t.length!==3)throw new M(`exactly three scorecards required`);return t}function Ve(e,t){if(t===`draw`!=(e===null))throw new M(`incoherent finish result`)}function He(e){let t=me(e,`result`);P(t,[`match_id`,`activity_instance_id`,`guild_id`,`player_one_id`,`player_two_id`,`winner_id`,`finish_method`,`round_number`,`tick`,`scorecards`,`player_one_knockdowns`,`player_two_knockdowns`,`player_one_damage`,`player_two_damage`]);let n=ge(t.player_one_id,`player_one_id`),r=ge(t.player_two_id,`player_two_id`);if(n===r)throw new M(`result players must be distinct`);let i=_e(t.winner_id,`winner_id`);if(i!==null&&i!==n&&i!==r)throw new M(`invalid winner`);let a=ve(t.finish_method,Ae,`finish method`);return Ve(i,a),{match_id:ge(t.match_id,`match_id`),activity_instance_id:ge(t.activity_instance_id,`activity_instance_id`),guild_id:ge(t.guild_id,`guild_id`),player_one_id:n,player_two_id:r,winner_id:i,finish_method:a,round_number:F(t.round_number,`round`,1,15),tick:F(t.tick,`tick`),scorecards:Be(t.scorecards),player_one_knockdowns:F(t.player_one_knockdowns,`knockdowns`,0,3),player_two_knockdowns:F(t.player_two_knockdowns,`knockdowns`,0,3),player_one_damage:F(t.player_one_damage,`damage`),player_two_damage:F(t.player_two_damage,`damage`)}}function Ue(e){let t=me(e,`snapshot`);P(t,[`tick`,`phase`,`round_number`,`phase_ticks_remaining`,`fighters`,`events`,`result`,`checksum`]);let n=ye(t.fighters,`fighters`,2).map(Le);if(n.length!==2||n[0]?.player_id===n[1]?.player_id)throw new M(`snapshot requires two distinct fighters`);let r=ge(t.checksum,`checksum`,64);if(!/^[a-f0-9]{64}$/u.test(r))throw new M(`invalid checksum`);return{tick:F(t.tick,`tick`),phase:ve(t.phase,ke,`phase`),round_number:F(t.round_number,`round`,1,15),phase_ticks_remaining:F(t.phase_ticks_remaining,`phase ticks`),fighters:[n[0],n[1]],events:ye(t.events,`events`,256).map(Re),result:t.result===null?null:He(t.result),checksum:r}}function We(e){let t=me(pe(e),`envelope`);if(t.version!==4)throw new M(`unsupported protocol version`);let n=ge(t.type,`type`,32);if(n===`welcome`){let e=ve(t.role,[`fighter`,`spectator`],`connection role`),r=ge(t.player_id,`player_id`),i=t.reconnect_ticket===void 0?{}:{reconnect_ticket:ge(t.reconnect_ticket,`reconnect_ticket`,4096)};if(e===`fighter`){P(t,[`version`,`type`,`role`,`player_id`,`seat`,`rating`,`players`,`server_tick`,`next_sequence`],[`reconnect_ticket`]);let a=Ne(t.players);if(!a.some(e=>e.id===r))throw new M(`welcome fighter is absent`);return{version:4,type:n,role:e,player_id:r,seat:F(t.seat,`seat`,1,2),rating:F(t.rating,`rating`),players:a,server_tick:F(t.server_tick,`server_tick`),next_sequence:F(t.next_sequence,`next_sequence`),...i}}P(t,[`version`,`type`,`role`,`player_id`,`players`,`server_tick`],[`reconnect_ticket`]);let a=Ne(t.players,void 0,0);if(a.some(e=>e.id===r))throw new M(`spectator cannot be a fighter`);return{version:4,type:n,role:e,player_id:r,players:a,server_tick:F(t.server_tick,`server_tick`),...i}}if(n===`ticket`)return P(t,[`version`,`type`,`reconnect_ticket`,`refresh_id`]),{version:4,type:n,reconnect_ticket:ge(t.reconnect_ticket,`reconnect_ticket`,4096),refresh_id:ge(t.refresh_id,`refresh_id`,128,16)};if(n===`waiting`){if(P(t,[`version`,`type`,`open_seats`]),t.open_seats!==1&&t.open_seats!==2)throw new M(`invalid open seats`);return{version:4,type:n,open_seats:t.open_seats}}if(n===`select`){P(t,[`version`,`type`,`deadline_ms`,`players`,`ready`]);let e=Ne(t.players,2),r=ye(t.ready,`ready`,2).map(e=>ge(e,`ready player id`));if(new Set(r).size!==r.length||r.some(t=>!e.some(e=>e.id===t)))throw new M(`invalid ready fighters`);return{version:4,type:n,deadline_ms:F(t.deadline_ms,`deadline_ms`,0,6e4),players:[e[0],e[1]],ready:r}}if(n===`ready`){P(t,[`version`,`type`,`players`]);let e=Ne(t.players,2);return{version:4,type:n,players:[e[0],e[1]]}}if(n===`paused`)return P(t,[`version`,`type`,`player_id`,`grace_ms`]),{version:4,type:n,player_id:ge(t.player_id,`player_id`),grace_ms:F(t.grace_ms,`grace_ms`,0,6e4)};if(n===`resumed`)return P(t,[`version`,`type`,`player_id`]),{version:4,type:n,player_id:ge(t.player_id,`player_id`)};if(n===`snapshot`)return P(t,[`version`,`type`,`payload`]),{version:4,type:n,payload:Ue(t.payload)};if(n===`error`)return P(t,[`version`,`type`,`code`]),{version:4,type:n,code:ge(t.code,`error code`,80)};if(n===`final`)return Ke(t,n);throw new M(`unsupported server message type`)}function Ge(e,t){let n=Object.entries(me(e,`punches`));if(n.length!==2||n.some(([e])=>!t.includes(e)))throw new M(`punches must count both fighters`);let r=Object.create(null);for(let[e,t]of n){let n=me(t,`punch totals`);P(n,[`thrown`,`landed`,`jabs_thrown`,`jabs_landed`]);let i=F(n.thrown,`thrown`),a=F(n.landed,`landed`,0,i),o=F(n.jabs_thrown,`jabs_thrown`,0,i);r[e]={thrown:i,landed:a,jabs_thrown:o,jabs_landed:F(n.jabs_landed,`jabs_landed`,0,Math.min(a,o))}}return r}function Ke(e,t){P(e,[`version`,`type`,`match_id`,`winner_id`,`method`,`round`,`scorecards`,`ratings`],[`punches`]);let n=me(e.ratings,`ratings`),r=Object.entries(n);if(r.length!==2)throw new M(`final requires two ratings`);let i=Object.create(null);for(let[e,t]of r){ge(e,`rating player id`);let n=me(t,`rating`);P(n,[`before`,`after`]),i[e]={before:F(n.before,`before`),after:F(n.after,`after`)}}let a=_e(e.winner_id,`winner_id`);if(a!==null&&!Object.hasOwn(i,a))throw new M(`winner absent from ratings`);let o=ve(e.method,Ae,`finish method`);Ve(a,o);let s=e.punches===void 0?{}:{punches:Ge(e.punches,Object.keys(i))};return{version:4,type:t,match_id:ge(e.match_id,`match_id`),winner_id:a,method:o,round:F(e.round,`round`,1,15),scorecards:Be(e.scorecards),ratings:i,...s}}function qe(e,t,n){return JSON.stringify({version:4,type:`input`,sequence:F(e,`sequence`),client_tick:F(t,`client tick`),move:{x:Math.max(-1e3,Math.min(1e3,Math.round(Number.isFinite(n.moveX)?n.moveX:0))),y:Math.max(-1e3,Math.min(1e3,Math.round(Number.isFinite(n.moveY)?n.moveY:0)))},defense:ve(n.defense,Te,`held defense`),actions:n.actions.slice(0,4).map(e=>{let t=e.id===void 0?{}:{id:e.id.slice(0,32)};return e.kind===`punch`?{kind:`punch`,hand:ve(e.hand,be,`hand`),class:ve(e.class,xe,`class`),target:ve(e.target,I,`target`),power:ve(e.power,Se,`power`),...t}:e.kind===`foul`?{kind:`foul`,foul:ve(e.foul,Oe,`foul`),...t}:{kind:ve(e.kind,Ee,`action`),...t}})})}function Je(e,t){return JSON.stringify({version:4,type:`style`,style:ve(e,we,`fighter style`),ready:t===!0})}var Ye=[`rookie`,`contender`,`champion`];function Xe(e){return JSON.stringify({version:4,type:`cpu`,level:ve(e,Ye,`computer level`)})}function Ze(e){let t=me(e,`bootstrap`);if(P(t,[`client_id`,`state`,`protocol`,`simulation`]),t.protocol!==4)throw new M(`unsupported protocol version`);let n=me(t.simulation,`simulation`);return P(n,[`tick_rate`,`ring_half_width`,`ring_half_height`]),{client_id:ge(t.client_id,`client_id`,36),state:ge(t.state,`state`,128),protocol:4,simulation:{tick_rate:F(n.tick_rate,`tick rate`,1,120),ring_half_width:F(n.ring_half_width,`ring width`,1),ring_half_height:F(n.ring_half_height,`ring height`,1)}}}function Qe(e){let t=me(e,`token response`);P(t,[`access_token`,`ticket`,`player`]);let n=me(t.player,`player`);return P(n,[`id`,`name`,`avatar`,`rating`]),{access_token:ge(t.access_token,`access token`,4096),ticket:ge(t.ticket,`ticket`,4096),player:{id:ge(n.id,`id`),name:ge(n.name,`name`,80),avatar:_e(n.avatar,`avatar`,128),rating:F(n.rating,`rating`)}}}var $e=[`Power`,`Hand speed`,`Footwork`,`Reach`,`Stamina`,`Defence`],et=[{style:`balanced`,name:`Balanced`,tag:`BALANCED`,detail:`Even at everything, no holes to exploit.`,stats:[3,3,3,3,3,3]},{style:`boxer`,name:`Boxer`,tag:`BOXER`,detail:`Snappy jab and long reach, lighter hands.`,stats:[2,4,3,4,3,3]},{style:`slugger`,name:`Slugger`,tag:`SLUGGER`,detail:`Heavy hands, hard chin, slow feet, tires sooner.`,stats:[5,2,2,3,2,4]},{style:`swarmer`,name:`Swarmer`,tag:`SWARMER`,detail:`Quick feet and head, digs to the body, never stops.`,stats:[2,4,4,3,4,3]},{style:`counter_puncher`,name:`Counter-puncher`,tag:`COUNTER`,detail:`Slips and parries, makes every miss cost.`,stats:[2,3,3,3,3,5]}],tt=e=>et.find(t=>t.style===e)??et[0];function nt(e){return e===void 0||e===`balanced`?null:tt(e).tag}function rt(e){return e===void 0||e===`balanced`?null:`the ${tt(e).name.toLowerCase()}`}var it=`hands.style.v1`;function at(e=st()){try{let t=e?.getItem(it);return we.find(e=>e===t)??`balanced`}catch{return`balanced`}}function ot(e,t=st()){try{t?.setItem(it,e)}catch{}}function st(){try{return window.localStorage}catch{return null}}var ct=400,lt={Digit1:0,Digit2:1,Digit3:2,Digit4:3,Digit5:4,Numpad1:0,Numpad2:1,Numpad3:2,Numpad4:3,Numpad5:4},ut=.6;function dt(){try{return[...navigator.getGamepads?.()??[]].find(e=>e!==null&&e.connected&&e.mapping===`standard`)??null}catch{return null}}function ft(e){let t=new Set;if(e===null)return t;let n=t=>e.buttons[t]?.pressed===!0,r=e.axes[0]??0,i=e.axes[1]??0;return(n(12)||n(14)||r<-.6||i<-.6)&&t.add(`previous`),(n(13)||n(15)||r>ut||i>ut)&&t.add(`next`),n(0)&&t.add(`settle`),t}var pt=class{send;now;element;buttons=new Map;clock;status;visible=!1;choosing=!1;highlighted;settled=!1;deadlineAt=0;timer=null;padFrame=0;padHeld=new Set;context=null;keydown=e=>{if(!this.visible||!this.choosing||e.repeat||e.ctrlKey||e.metaKey||e.altKey)return;let t=e.target;if(t instanceof HTMLElement&&t!==document.body&&!this.element.contains(t))return;let n=lt[e.code];n===void 0?e.code===`ArrowRight`||e.code===`ArrowDown`?(e.preventDefault(),this.move(this.neighbour(1))):e.code===`ArrowLeft`||e.code===`ArrowUp`?(e.preventDefault(),this.move(this.neighbour(-1))):(e.code===`Enter`||e.code===`Space`)&&!(t instanceof HTMLButtonElement)&&(e.preventDefault(),this.pick(this.highlighted,!0)):(e.preventDefault(),this.pick(et[n].style,!0))};constructor(e,t,n=()=>performance.now(),r=at()){this.send=t,this.now=n,this.highlighted=r;let i=document.createElement(`section`);i.className=`style-picker`,i.dataset.stylePicker=``,i.hidden=!0,i.setAttribute(`aria-label`,`Pick how your fighter boxes`);let a=document.createElement(`header`),o=document.createElement(`p`);o.className=`style-title`,o.textContent=`CHOOSE YOUR STYLE`,this.clock=document.createElement(`p`),this.clock.className=`style-clock`,a.append(o,this.clock);let s=document.createElement(`div`);s.className=`style-cards`;for(let[e,t]of et.entries()){let n=document.createElement(`button`);n.type=`button`,n.dataset.style=t.style,n.setAttribute(`aria-pressed`,`false`);let r=document.createElement(`kbd`);r.textContent=String(e+1);let i=document.createElement(`strong`);i.textContent=t.name;let a=document.createElement(`span`);a.textContent=t.detail;let o=document.createElement(`ul`);o.className=`style-stats`;for(let[e,n]of t.stats.entries()){let t=document.createElement(`li`);t.setAttribute(`aria-label`,`${$e[e]} ${n} of 5`);let r=document.createElement(`small`);r.textContent=$e[e];let i=document.createElement(`i`);i.dataset.value=String(n),t.append(r,i),o.append(t)}n.append(r,i,a,o),n.addEventListener(`click`,()=>this.pick(t.style,!0)),s.append(n),this.buttons.set(t.style,n)}this.status=document.createElement(`p`),this.status.className=`style-status`,this.status.setAttribute(`role`,`status`),i.append(a,s,this.status),e.append(i),this.element=i,window.addEventListener(`keydown`,this.keydown)}update(e,t,n){if(e===null){this.setVisible(!1),this.context=null,this.settled=!1;return}let r=this.context===null||!this.choosing&&n===`fighter`;this.context?.select!==e&&(this.deadlineAt=this.now()+e.deadline_ms-ct),this.context={select:e,viewerId:t},this.choosing=n===`fighter`&&t!==null,this.settled=this.choosing&&(this.settled||e.ready.includes(t));let i=e.players.find(e=>e.id===t)?.style;this.settled&&i!==void 0&&(this.highlighted=i),r&&this.choosing&&!this.settled&&this.send(this.highlighted,!1),this.setVisible(!0),this.render()}pick(e,t){!this.choosing||this.settled||this.closed||(this.highlighted=e,this.send(e,t)&&(t&&(this.settled=!0),this.render()))}get closed(){return this.now()>=this.deadlineAt}neighbour(e){return et[(et.findIndex(e=>e.style===this.highlighted)+e+et.length)%et.length].style}move(e){this.pick(e,!1),this.settled||this.buttons.get(this.highlighted)?.focus()}render(){let e=this.context;if(e===null)return;let{select:t,viewerId:n}=e;for(let e of et){let t=this.buttons.get(e.style),n=this.choosing&&e.style===this.highlighted;t.disabled=!this.choosing||this.settled||this.closed,t.setAttribute(`aria-pressed`,String(n)),t.toggleAttribute(`data-chosen`,n),t.tabIndex=e.style===this.highlighted?0:-1}let r=`${Math.max(0,Math.ceil((this.deadlineAt-this.now())/1e3))}s`;this.clock.textContent!==r&&(this.clock.textContent=r);let i=t.players.filter(e=>e.id!==n&&(!e.connected||t.ready.includes(e.id))).map(e=>e.connected?`${e.name} is ready.`:`Waiting for ${e.name} to reconnect.`).join(` `),a=this.choosing?this.settled?i.length>0?`Ready as ${tt(this.highlighted).name}. ${i}`:`Ready as ${tt(this.highlighted).name}. Waiting for your opponent.`:i.length>0?`${i} Tap a style or press Enter to settle on yours.`:`Tap a style, or use the arrow keys and Enter.`:i.length>0?`The fighters are choosing. ${i}`:`The fighters are choosing their styles.`;this.status.textContent!==a&&(this.status.textContent=a)}setVisible(e){this.visible!==e&&(this.visible=e,this.element.hidden=!e,e?(this.timer=window.setInterval(()=>this.render(),250),this.padHeld=ft(dt()),this.padFrame=requestAnimationFrame(()=>this.pollPad())):(this.timer!==null&&window.clearInterval(this.timer),this.timer=null,cancelAnimationFrame(this.padFrame)))}pollPad(){if(!this.visible)return;let e=ft(dt());for(let t of e)this.padHeld.has(t)||(t===`settle`?this.pick(this.highlighted,!0):this.move(this.neighbour(t===`next`?1:-1)));this.padHeld=e,this.padFrame=requestAnimationFrame(()=>this.pollPad())}destroy(){this.setVisible(!1),window.removeEventListener(`keydown`,this.keydown),this.element.remove()}},mt=/^[0-9]{17,20}$/u,ht=/^[A-Za-z0-9_]{1,128}$/u,gt=`https://cdn.discordapp.com/avatars/`,_t=128,vt=8;function yt(e){return e.avatar===null||!mt.test(e.id)||!ht.test(e.avatar)?null:new URL(`${e.id}/${e.avatar}.png?size=${_t}`,gt).href}function bt(e){let t=Array.from(e).find(e=>/[\p{L}\p{N}]/u.test(e));return t===void 0?`?`:t.toUpperCase()}var xt=class{create;pictures=new Map;addresses=new Map;constructor(e=()=>new Image){this.create=e}get(e){if(e===void 0)return null;let t=this.addresses.get(e.id);(t===void 0||t.avatar!==e.avatar)&&(this.addresses.size>=vt&&this.addresses.clear(),t={avatar:e.avatar,url:yt(e)},this.addresses.set(e.id,t));let n=t.url;if(n===null)return null;let r=this.pictures.get(n);if(r!==void 0)return r.ready?r.image:null;if(this.pictures.size>=vt){let e=this.pictures.entries().next().value;e!==void 0&&this.drop(e[0],e[1])}let i={image:this.create(),ready:!1};return this.pictures.set(n,i),i.image.crossOrigin=`anonymous`,i.image.referrerPolicy=`no-referrer`,i.image.decoding=`async`,i.image.onload=()=>{i.ready=i.image.naturalWidth>0},i.image.onerror=()=>{i.ready=!1},i.image.src=n,null}dispose(){for(let[e,t]of[...this.pictures])this.drop(e,t);this.addresses.clear()}drop(e,t){t.image.onload=null,t.image.onerror=null,t.ready=!1,this.pictures.delete(e)}},St=1e3,Ct=e=>e.reduce((e,t)=>e+t,0),wt=(e,t,n)=>{if(e.measureText(t).width<=n)return t;let r=t;for(;r.length>1&&e.measureText(`${r}…`).width>n;)r=r.slice(0,-1);return`${r}…`},Tt=(e,t,n,r)=>{for(let i=n;i>r;--i)if(e(i)<=t)return i;return r},Et=`#ff7066`;function Dt(e,t,n,r,i,a){let o=i.spentBelow!==void 0&&i.value{e.beginPath(),e.arc(t,n,r,0,Math.PI*2),e.closePath()};e.save(),s(),e.fillStyle=`#0b1220`,e.fill(),i===null?(e.globalAlpha=.4,e.fillStyle=o,e.fill(),e.globalAlpha=1,e.fillStyle=`#f5f8ff`,e.textAlign=`center`,e.font=`800 ${Math.round(r*1.1)}px Inter, system-ui, sans-serif`,e.fillText(bt(a),t,n+r*.39)):(e.save(),e.clip(),e.drawImage(i,t-r,n-r,r*2,r*2),e.restore()),s(),e.lineWidth=Math.max(1.5,r/9),e.strokeStyle=o,e.stroke(),e.restore()}function kt(e){let t=e.left_eye>=d,n=e.right_eye>=d;return t&&n?`BOTH EYES SHUT`:t?`LEFT EYE SHUT`:n?`RIGHT EYE SHUT`:null}var At={cut:`closing the cut`,swelling:`icing the swelling`,breath:`catching breath`,balanced:`a little of everything`};function jt(e){let t=e.flatMap((e,t)=>e.corner_choice===null?[]:[`${t===0?`Blue`:`Red`}: ${At[e.corner_choice]}`]);return t.length===0?null:t.join(` · `)}function Mt(e,t,n,r,i){e.save(),e.font=`800 9px Inter, system-ui, sans-serif`;let a=e.measureText(r).width+12,o=i?t-a:t;e.fillStyle=`rgba(150,22,18,0.92)`,e.fillRect(o,n,a,14),e.fillStyle=`#ffe8e3`,e.textAlign=`left`,e.fillText(r,o+6,n+10),e.restore()}function Nt(e,t){return Math.max(1,Math.min(1.6,e/1280,t/720))}function Pt(e,t,n){let r=nt(t.style),i=e?.record===void 0?null:le(e.record)?`DEBUT`:ce(e.record),a=e?.cpu===!0?`CPU`:`ELO ${e?.rating??`—`}`,o=t.knockdowns>0?`${t.knockdowns} KD`:null,s=[o,t.warnings>0?`${t.warnings} WARNING${t.warnings===1?``:`S`}`:null,t.deductions>0?`−${t.deductions} PT${t.deductions===1?``:`S`}`:null],c=[o,t.warnings>0?`W${t.warnings}`:null,t.deductions>0?`−${t.deductions}`:null],l=(...e)=>e.filter(e=>e!==null).join(` · `),u=n?[l(r,...c),l(...c)]:[l(r,i,a,...s),l(r,a,...s),l(r,...s),l(r,...c),l(...c)];return u.filter((e,t)=>e!==``&&u.indexOf(e)===t)}var Ft=168;function It(e,t,n,r,i,a,o,s,c,l){e.save(),e.beginPath(),s?(e.moveTo(t+14,n),e.lineTo(t+r,n),e.lineTo(t+r-14,n+62),e.lineTo(t,n+62)):(e.moveTo(t,n),e.lineTo(t+r-14,n),e.lineTo(t+r,n+62),e.lineTo(t+14,n+62)),e.closePath(),e.fillStyle=`rgba(3,6,12,0.82)`,e.fill(),e.strokeStyle=`rgba(190,200,220,0.22)`,e.lineWidth=1,e.stroke(),e.fillStyle=c,e.fillRect(s?t+r-5:t,n+4,5,54);let u=l===void 0?20:51;l!==void 0&&Ot(e,s?t+r-11-16:t+11+16,n+4+16,16,l,i,c);let d=s?t+r-u:t+u;e.textAlign=s?`right`:`left`,e.fillStyle=`#f5f8ff`;let f=i.toUpperCase(),p=r-u-24;e.font=`800 ${Tt(t=>(e.font=`800 ${t}px Inter, system-ui, sans-serif`,e.measureText(f).width),p,16,11)}px Inter, system-ui, sans-serif`,e.fillText(wt(e,f,p),d,n+21),e.fillStyle=`#93a3bd`;let m=r-u-14,h=(t,n)=>(e.font=`600 ${n}px Inter, system-ui, sans-serif`,e.measureText(t).width),g=a.find(e=>h(e,8)<=m)??a.at(-1)??``;e.font=`600 ${Tt(e=>h(g,e),m,10,8)}px Inter, system-ui, sans-serif`,e.fillText(wt(e,g,m),d,n+35);let _=(r-52)/o.length,v=o.length*_+(o.length-1)*12,y=s?t+r-20-v:t+20;o.forEach((t,r)=>{Dt(e,y+(_+12)*r,n+48,_,t,s)}),e.restore()}function Lt(e,t,n,r,i,a){let o=Ft;e.save(),e.beginPath(),e.moveTo(t-o/2+12,n),e.lineTo(t+o/2-12,n),e.lineTo(t+o/2,n+58/2),e.lineTo(t+o/2-12,n+58),e.lineTo(t-o/2+12,n+58),e.lineTo(t-o/2,n+58/2),e.closePath(),e.fillStyle=`rgba(4,6,12,0.88)`,e.fill();let s=e.createLinearGradient(t-o/2,n,t+o/2,n+58);s.addColorStop(0,`#8a6a26`),s.addColorStop(.5,`#f6d57a`),s.addColorStop(1,`#8a6a26`),e.strokeStyle=s,e.lineWidth=2,e.stroke(),e.textAlign=`center`,e.fillStyle=`#ffffff`,e.font=`800 22px ui-monospace, monospace`,e.fillText(r,t,n+27),e.fillStyle=`#f6d57a`,e.font=`800 12px Inter, system-ui, sans-serif`,e.fillText(i,t,n+44),a!==`FIGHT`&&(e.fillStyle=`#93a3bd`,e.font=`700 9px Inter, system-ui, sans-serif`,e.fillText(a,t,n+55)),e.restore()}var Rt=78,zt=50,Bt=.22,Vt=e=>e<480?zt:Rt,Ht=(e,t)=>Math.max(e<640?112:56,t*.1)+Vt(t)/2-t/2,Ut={upright:{bottom:118,height:274,moves:0,grid:118},landscape:{bottom:118,height:196,moves:102,grid:118},short:{bottom:112,height:154,moves:86,grid:92},shortHeight:350,reach:216,movesReach:134},Wt=(e,t)=>e<=t?Ut.upright:t<=Ut.shortHeight?Ut.short:Ut.landscape;function Gt(e,t,n){let r=Wt(e,t);return n<=t-r.bottom-r.height?0:Ut.reach+(r.moves>0&&n>t-r.bottom-r.moves?Ut.movesReach:0)}var Kt=160;function qt(e,t,n=!1){let r=Vt(t),i=t/2+Ht(e,t)-r/2,a=Math.min(320,e-24),o=e/2+a/2;if(n&&e<=t)Gt(e,t,i+r+8)>0&&(r=zt);else if(n){let n=e<640?Math.min(e/2-Ft/2-8,e-Gt(e,t,56+r)):0,s=n-12>=Kt;s&&(i=56);let c=s?n:e-Gt(e,t,i+r);o>c&&(a=Math.min(a,c-12),o=c)}return{x:o-a,y:i,width:a,height:r}}var Jt={width:380,height:150},Yt=112;function Xt(e,t,n=!1){let r=Wt(e,t),i=t-r.bottom-r.grid,a=e<=t,o=n&&a?Math.min(t-Yt,i-8):t-Yt,s=Math.max(56,Math.min(Math.max(t*.24,cn(t,e<640)+34),o-Jt.height)),c=Math.min(Jt.width,e-24),l=e/2+c/2;if(n&&!a&&s+Jt.height>i){let t=e-Ut.reach;l>t&&(c=Math.min(c,t-12),l=t)}return{x:l-c,y:s,width:c,height:Jt.height}}function Zt(e,t,n,r){let i=t.height===zt,a=t.x+t.width/2;e.fillStyle=`rgba(3,6,12,0.88)`,e.fillRect(t.x,t.y,t.width,t.height),e.strokeStyle=`rgba(246,213,122,0.45)`,e.lineWidth=1.5,e.strokeRect(t.x+2,t.y+2,t.width-4,t.height-4),e.textAlign=`center`,e.fillStyle=`#ffd77a`,dn(e,n,a,t.y+(i?22:34),t.width-24,800,i?17:22,12),e.fillStyle=`#c8d3e6`,e.font=`600 ${i?11:12}px Inter, system-ui, sans-serif`,e.fillText(wt(e,r,t.width-24),a,t.y+(i?39:58))}var Qt=class{fightTicks=null;round=0;ticks(e){return e.round_number!==this.round&&(this.round=e.round_number,this.fightTicks=null),e.phase===`fight`&&(this.fightTicks=e.phase_ticks_remaining),(e.phase===`knockdown`||e.phase===`foul_recovery`||e.phase===`complete`)&&this.fightTicks!==null?this.fightTicks:e.phase_ticks_remaining}},$t=()=>({thrown:0,landed:0,jabsThrown:0,jabsLanded:0});function en(e,t){return e.action_id!==null&&t.some(t=>(t.kind===`block`||t.kind===`perfect_block`)&&t.tick===e.tick&&t.action_id===e.action_id&&t.actor_id===e.target_id)}var tn=class{stats=new Map;totals=new Map;record(e,t=[]){if(e.kind===`bell`){e.detail===`round_start`&&this.stats.clear();return}if(e.actor_id!==null){if(e.kind===`punch_start`){let t=+(e.detail.split(`:`)[1]===`jab`);for(let n of[this.entry(this.stats,e.actor_id),this.entry(this.totals,e.actor_id)])n.thrown+=1,n.jabsThrown+=t}else if((e.kind===`hit`||e.kind===`counter_hit`)&&!en(e,t)){let t=+(e.detail.split(`:`)[0]===`jab`);for(let n of[this.entry(this.stats,e.actor_id),this.entry(this.totals,e.actor_id)])n.landed+=1,n.jabsLanded+=t}}}get(e){return this.stats.get(e)??$t()}total(e){return this.totals.get(e)??$t()}entry(e,t){let n=e.get(t);return n===void 0&&(n=$t(),e.set(t,n)),n}};function nn(e){let t=e.method.replaceAll(`_`,` `).toUpperCase();if(e.method!==`decision`&&e.method!==`draw`)return t;let n=0,r=0,i=0;for(let t of e.scorecards){let e=Ct(t.player_one),a=Ct(t.player_two);e>a?n+=1:a>e?r+=1:i+=1}let a=e.scorecards.length;return a===0?t:e.method===`draw`?i===a?`UNANIMOUS DRAW`:n===r?`SPLIT DRAW`:`MAJORITY DRAW`:Math.max(n,r)===a?`UNANIMOUS DECISION`:i>0?`MAJORITY DECISION`:`SPLIT DECISION`}var rn=new Set([`ko`,`flash_ko`,`tko`]),an=3.6,on=2.4;function sn(e){return e===null?0:rn.has(e.method)?an:e.method===`disqualification`||e.method===`doctor_stoppage`?on:0}var cn=(e,t)=>Math.max(e*.16,(t?112:56)+40),ln=(e,t)=>e!==null&&e>=(t?100:120);function un(e,t,n,r,i,a,o,s,c=30,l=null,u=null,d=null,p=null,m=null,h=null,g=null,_=!1){e.save();let v=Nt(t,n);e.scale(v,v),t/=v,n/=v,e.textBaseline=`alphabetic`;let y=e=>{let t=i[e.player_id];return t===void 0||h===null?null:h(t)},b=t<640,x=b?(t-56)/2:Math.min(300,t*.38,t/2-Ft/2-8-24),S=n-84;o===null&&r.fighters.forEach((r,a)=>{let o=a===1,s=o?t-24-x:24,c=i[r.player_id],l=[{label:`${b?`STA`:`STAMINA`} ${Math.round(r.stamina)}`,value:r.stamina,maximum:r.maximum_stamina,from:`#ffe08a`,to:`#d9a53a`},{label:`${b?`HP`:`HEALTH`} ${Math.round(r.conditioning)}`,value:r.conditioning,maximum:St,from:`#ff8a7a`,to:`#b02a20`},{label:`GUARD`,value:r.guard,maximum:700,from:`#9ec7ff`,to:`#3d6fb8`,spentBelow:f},{label:`POISE ${Math.round(r.poise)}`,value:r.poise,maximum:600,from:`#e8c890`,to:`#8a6a34`}],u=a===0?`#3d6fb8`:`#b02a20`;It(e,s,S,x,c?.name??`Fighter`,Pt(c,r,b),l.slice(0,2),o,u,b?void 0:y(r)),b&&!(_&&t>n)&&Ot(e,t/2+(o?1:-1)*112,83,20,y(r),c?.name??`Fighter`,u);let d=S-12,p=Math.min(64,(x-52)/2);Dt(e,o?s+x-20-2*p:s+20,d,p,l[2],o),Dt(e,o?s+x-8-p:s+32+p,d,p,l[3],o);let m=kt(r.trauma);m!==null&&Mt(e,o?s+x-20:s+20,d-34,m,o)});let C=Math.floor((m??r.phase_ticks_remaining)/c),w=`${Math.floor(C/60)}:${String(C%60).padStart(2,`0`)}`,T=r.phase===`knockdown`&&u===null&&r.fighters.some(e=>e.player_id===a&&e.is_downed)?Xt(t,n,_):null,E=T!==null&&b&&T.y<112;o===null&&!E&&Lt(e,t/2,b?54:n-84,w,`ROUND ${r.round_number}`,r.phase===`complete`?`FINAL`:r.phase.replace(`_`,` `).toUpperCase());let D=d===null?0:Math.round(d);if(D>=100&&!b&&o===null&&!(_&&u!==null)&&r.fighters.some(e=>e.player_id===a)&&(e.save(),e.textAlign=_?`left`:`right`,e.font=`700 11px ui-monospace, monospace`,e.fillStyle=D<200?`rgba(240,200,110,0.9)`:`rgba(255,110,100,0.95)`,e.fillText(`SLOW CONNECTION ${D} ms`,_?24:t-24,76),e.restore()),u!==null){let t=b?120:64;e.save(),e.fillStyle=`rgba(3,6,12,0.82)`,e.fillRect(24,t,196,34),e.fillStyle=`#ff3b3b`,e.beginPath(),e.arc(42,t+17,6,0,Math.PI*2),e.fill(),e.fillStyle=`#f6f7fb`,e.font=`800 14px Inter, system-ui, sans-serif`,e.textAlign=`left`,e.fillText(u,56,t+22),e.restore()}p!==null&&r.phase===`fight`&&(e.save(),e.textAlign=`center`,e.font=`900 46px Inter, system-ui, sans-serif`,e.lineWidth=6,e.strokeStyle=`rgba(0,0,0,0.75)`,e.strokeText(p,t/2,n*Bt),e.fillStyle=`#f6d57a`,e.fillText(p,t/2,n*Bt),e.restore()),r.phase===`countdown`&&Zt(e,qt(t,n,_),`ROUND ${r.round_number}`,`Touch gloves. Protect yourself at all times.`);let O=cn(n,b);if(r.phase===`knockdown`&&u===null){let n=r.fighters.find(e=>e.is_downed),a=n??r.fighters.find(e=>e.player_id===g),o=a===void 0?null:(i[a.player_id]?.name??`Fighter`).toUpperCase();e.save(),e.textAlign=`center`,e.font=`900 44px Inter, system-ui, sans-serif`,e.lineWidth=6,e.strokeStyle=`rgba(0,0,0,0.75)`,(T===null||T.y>=O+6)&&(e.strokeText(`KNOCKDOWN`,t/2,O),e.fillStyle=`#ff4d4d`,e.fillText(`KNOCKDOWN`,t/2,O)),e.font=`700 15px Inter, system-ui, sans-serif`,e.fillStyle=`#e6ecf7`;let s=n===void 0?` BEAT THE COUNT`:` IS DOWN`,c=o===null?`STANDING EIGHT`:`${wt(e,o,Math.min(t*.5,t-32-e.measureText(s).width))}${s}`;(T===null||T.y>=O+30)&&e.fillText(c,t/2,O+24),e.restore()}if(r.phase===`knockdown`&&u===null){let i=r.fighters.find(e=>e.player_id===a),o=Math.max(...r.fighters.map(e=>e.get_up_count));if(i?.is_downed!==!0)o>=1&&(e.save(),e.textAlign=`center`,e.font=`900 36px Inter, system-ui, sans-serif`,e.lineWidth=5,e.strokeStyle=`rgba(0,0,0,0.75)`,e.strokeText(`COUNT ${o}`,t/2,O+64),e.fillStyle=`#ffd77a`,e.fillText(`COUNT ${o}`,t/2,O+64),e.restore());else{let{x:a,y:s,width:c,height:l}=T??Xt(t,n,_),u=a+c/2;e.fillStyle=`rgba(3,6,12,0.88)`,e.fillRect(a,s,c,l),e.strokeStyle=`rgba(246,213,122,0.5)`,e.lineWidth=2,e.strokeRect(a+2,s+2,c-4,l-4),e.textAlign=`center`,e.fillStyle=`#ffd77a`,e.font=`800 30px Inter, system-ui, sans-serif`,e.fillText(o>=1?`COUNT ${o}`:`GET UP!`,u,s+40);let d=i?.is_downed===!0?i.get_up_prompt:null;if(d!=null&&i!==void 0){let t=r.tick>=i.get_up_window_start_tick&&r.tick<=i.get_up_window_end_tick,n=d===`get_up_left`?`←`:`→`;t?(e.fillStyle=`#ffe9a8`,e.font=`900 64px Inter, system-ui, sans-serif`,e.fillText(n,u-90,s+106),e.fillStyle=`#7dffa8`,e.font=`900 34px Inter, system-ui, sans-serif`,e.fillText(`NOW!`,u+62,s+100)):(e.fillStyle=`#8fa3c8`,e.font=`800 30px Inter, system-ui, sans-serif`,e.fillText(`GET READY ${n}`,u,s+98));let o=c-60,l=Math.max(0,Math.min(1,i.get_up_meter/Math.max(1,i.get_up_required)));e.fillStyle=`rgba(2,4,9,0.9)`,e.fillRect(a+30,s+120,o,16);let f=e.createLinearGradient(a+30,0,a+30+o,0);f.addColorStop(0,`#7dffa8`),f.addColorStop(1,`#2ea860`),e.fillStyle=f,e.fillRect(a+30,s+120,o*l,16),e.strokeStyle=`rgba(210,220,235,0.5)`,e.lineWidth=1,e.strokeRect(a+29.5,s+119.5,o+1,17)}else e.fillStyle=`#c8d3e6`,e.font=`600 14px Inter, system-ui, sans-serif`,e.fillText(wt(e,`Waiting for your rhythm instruction…`,c-24),u,s+100)}}if(r.phase===`foul_recovery`){let a=r.fighters.find(e=>e.is_foul_recovery_target);Zt(e,qt(t,n,_),`FOUL RECOVERY`,`${i[a?.player_id??``]?.name??`Fighter`} is recovering`)}if(r.phase===`rest`){let i=r.fighters.map((e,t)=>({corner:t===0?`Blue`:`Red`,stats:l?.get(e.player_id)??$t()})).filter(({stats:e})=>e.thrown>0||e.landed>0).map(({corner:e,stats:t})=>`${e} ${t.landed} of ${t.thrown}`).join(` · `),a=jt(r.fighters);Zt(e,qt(t,n,_),`CORNERS · RECOVER`,a??(i.length>0?`Landed this round: ${i}`:`Conditioning governs recovery`))}if(s>0){let r=Math.min(320,t-24),i=Vt(n);Zt(e,_?qt(t,n,!0):{x:t/2-r/2,y:n/2-i/2,width:r,height:i},`OPPONENT RECONNECTING · ${Math.ceil(s/1e3)}s`,`The bout is paused`)}if(o!==null){let a=r.fighters.map(e=>l?.total(e.player_id)??$t());xn(e,t,n,mn(o,r.fighters,i,a),!0,[y(r.fighters[0]),y(r.fighters[1])])}e.restore()}function dn(e,t,n,r,i,a,o,s,c=`Inter, system-ui, sans-serif`){e.font=`${a} ${Tt(n=>(e.font=`${a} ${n}px ${c}`,e.measureText(t).width),i,o,s)}px ${c}`,e.fillText(wt(e,t,i),n,r)}var fn={ko:`KNOCKOUT`,flash_ko:`FLASH KNOCKOUT`,tko:`TECHNICAL KNOCKOUT`,doctor_stoppage:`DOCTOR STOPPAGE`,disqualification:`DISQUALIFICATION`,forfeit:`FORFEIT`},pn=(e,t)=>e>t?0:t>e?1:null;function mn(e,t,n,r){let i=t.map(e=>n[e.player_id]?.name??`Fighter`),a=e.winner_id===null?null:t[0].player_id===e.winner_id?0:t[1].player_id===e.winner_id?1:null,o=[],s=[];if(e.method===`decision`||e.method===`draw`)for(let t of e.scorecards){let e=Ct(t.player_one),n=Ct(t.player_two);s.push({label:t.judge.toUpperCase(),values:[String(e),String(n)],lead:pn(e,n)})}let c=[t[1].knockdowns,t[0].knockdowns];(c[0]>0||c[1]>0)&&o.push({label:`KNOCKDOWNS`,values:[String(c[0]),String(c[1])],lead:pn(c[0],c[1])});let[l,u]=t.map(t=>e.punches?.[t.player_id]),d=e=>({thrown:e.thrown,landed:e.landed,jabsThrown:e.jabs_thrown,jabsLanded:e.jabs_landed}),f=l!==void 0&&u!==void 0?[d(l),d(u)]:r;if(f[0].thrown>0||f[1].thrown>0){let e=(e,t)=>t>0?`${Math.min(e,t)}/${t} (${Math.round(Math.min(e,t)/t*100)}%)`:`0/0`,t=f.map(e=>({landed:e.landed-e.jabsLanded,thrown:e.thrown-e.jabsThrown}));o.push({label:`TOTAL PUNCHES`,values:[e(f[0].landed,f[0].thrown),e(f[1].landed,f[1].thrown)],lead:pn(f[0].landed,f[1].landed)}),o.push({label:`JABS`,values:[e(f[0].jabsLanded,f[0].jabsThrown),e(f[1].jabsLanded,f[1].jabsThrown)],lead:pn(f[0].jabsLanded,f[1].jabsLanded)}),o.push({label:`POWER PUNCHES`,values:[e(t[0].landed,t[0].thrown),e(t[1].landed,t[1].thrown)],lead:pn(t[0].landed,t[1].landed)})}let[p,m]=t.map(t=>e.ratings[t.player_id]);if(t.some(e=>n[e.player_id]?.cpu===!0))o.push({label:`RATING`,values:[`Unrated`,`Unrated`],lead:null});else if(p!==void 0&&m!==void 0){let e=e=>`${e.after} (${e.after>=e.before?`+`:`−`}${Math.abs(e.after-e.before)})`;o.push({label:`RATING`,values:[e(p),e(m)],lead:null,news:[p.after>=p.before,m.after>=m.before]})}return{headline:fn[e.method]??nn(e),detail:`ROUND ${e.round}`,verdict:a===null?e.winner_id===null?`DRAW`:`${(n[e.winner_id]?.name??`Winner`).toUpperCase()} WINS`:`${i[a].toUpperCase()} WINS`,winnerSeat:a,names:i,judges:s,rows:o}}var hn=[`#4f86d9`,`#d9483c`],gn=14;function _n(e,t,n,r){let i=Nt(e,t),a=bn(e/i,t/i,n,r);return i===1?a:{...a,x:a.x*i,y:a.y*i,width:a.width*i,height:a.height*i,rowHeight:a.rowHeight*i,verdictHeight:a.verdictHeight*i,judgesHeight:a.judgesHeight*i}}var vn=new Set([`KNOCKDOWNS`,`TOTAL PUNCHES`,`RATING`]),yn=(e,t)=>t?e.rows.filter(e=>vn.has(e.label)):e.rows;function bn(e,t,n,r){let i=t<480,a=e>=900||e>=640&&i,o=Math.min(e-24,a?980:720),s=r?62:gn,c=i?72:112,l=n.judges.length===0?0:i?36:52,u=c+l,d=yn(n,i).length+1,f=t-(e<640?118:70)-14-gn-s-(a?0:u),p=Math.max(16,Math.min(i?20:28,f/d)),m=gn+(a?Math.max(u,d*p):u+d*p)+s;return{x:(e-o)/2,y:t-14-m,width:o,height:m,wide:a,dense:i,rowHeight:p,verdictHeight:c,judgesHeight:l}}function xn(e,t,n,r,i,a){let o=bn(t,n,r,i),{x:s,y:c}=o;e.fillStyle=`rgba(3,6,12,0.9)`,e.fillRect(s,c,o.width,o.height),e.strokeStyle=`rgba(246,213,122,0.55)`,e.lineWidth=2,e.strokeRect(s+1,c+1,o.width-2,o.height-2),e.textAlign=`center`;let l=(o.wide?o.width*.42:o.width)-32,u=o.wide?s+o.width*.21+4:t/2,d=c+gn,f=o.verdictHeight/112;e.fillStyle=`#f6d57a`,dn(e,r.headline,u,d+34*f,l,800,(o.wide||t>=640?32:28)*f,14),e.fillStyle=`#aebbd0`,dn(e,r.detail,u,d+56*f,l,700,13*f,9),e.fillStyle=r.winnerSeat===null?`#f6f7fb`:hn[r.winnerSeat],dn(e,r.verdict,u,d+92*f,l,800,25*f,12);let p=l/Math.max(1,r.judges.length),m=d+o.verdictHeight;r.judges.forEach((t,n)=>{let r=u-l/2+p*(n+.5);e.fillStyle=`rgba(255,255,255,0.06)`,e.fillRect(r-p/2+3,m,p-6,o.judgesHeight-8),e.fillStyle=`#8fa3c8`,dn(e,t.label,r,m+o.judgesHeight*.3,p-14,700,10,7),e.fillStyle=`#f6f7fb`,dn(e,`${t.values[0]} – ${t.values[1]}`,r,m+o.judgesHeight*.7,p-14,800,o.dense?14:17,10)});let h=o.wide?s+o.width*.42:s+12,g=s+o.width-12-h,_=o.wide?d:m+o.judgesHeight,v=g*.36,y=(g-v)/2,b=[h+y/2,h+g-y/2],x=o.rowHeight,S=Math.min(16,x*.6),C=_+x*.7;e.fillStyle=`rgba(255,255,255,0.06)`,e.fillRect(h,_,g,x);let w=Math.max(6,x/2-2);for(let t of[0,1]){let n=t===0?-1:1;e.fillStyle=hn[t],e.fillRect(t===0?h:h+g-4,_,4,x),Ot(e,b[t]+n*(y/2-10-w),_+x/2,w,a[t],r.names[t],hn[t]),e.textAlign=`center`,e.fillStyle=`#f6f7fb`,dn(e,r.names[t],b[t]-n*(w+3+v/4),C,y+v/2-22-w*2,800,S,9)}for(let t of yn(r,o.dense)){C+=x,e.fillStyle=`#8fa3c8`,dn(e,t.label,h+g/2,C,v,700,Math.min(12,S),8);for(let n of[0,1])e.fillStyle=t.news===void 0?t.lead===n?`#f6f7fb`:`#aebbd0`:t.news[n]?`#55df9b`:`#ff7b74`,dn(e,t.values[n],b[n],C,y-16,t.lead===n?800:600,S,9)}}var Sn=6;function Cn(){return typeof window<`u`&&typeof window.speechSynthesis==`object`&&window.speechSynthesis!==null&&typeof window.SpeechSynthesisUtterance==`function`}function wn(e){let t=e.filter(e=>e.localService&&e.lang.toLowerCase().startsWith(`en`));return t.find(e=>e.default)??t[0]??null}var Tn=class{settings;synthesis;Utterance;queue=[];speaking=null;destroyed=!1;voice=null;voicesListed=!1;onVoicesChanged=null;cutoff=null;voicesChanged=()=>{this.listVoices(),this.voice===null&&this.cancel(),this.onVoicesChanged?.()};visibility=()=>{document.hidden&&this.cancel()};constructor(e,t=Cn()?window.speechSynthesis:null,n=Cn()?window.SpeechSynthesisUtterance:null){this.settings=e,this.synthesis=t,this.Utterance=n,this.listVoices(),t?.addEventListener?.(`voiceschanged`,this.voicesChanged),document.addEventListener(`visibilitychange`,this.visibility)}get supported(){return this.synthesis!==null&&this.Utterance!==null}get hasVoice(){return this.supported&&(this.voice!==null||!this.voicesListed)}speak(e){if(!this.supported||this.destroyed||document.hidden)return;let t=this.settings();!t.announcer||t.volume<=0||(this.voice===null&&this.listVoices(),this.voice!==null&&(this.queue.push(...e),this.queue.length>Sn&&this.queue.splice(0,this.queue.length-Sn),this.speaking===null&&this.next()))}settingsChanged(){let e=this.settings();(!e.announcer||e.volume<=0)&&this.cancel()}finishLine(e){this.queue.length=0,this.clearCutoff();let t=this.speaking;t!==null&&(this.cutoff=window.setTimeout(()=>{this.cutoff=null,this.speaking===t&&this.cancel()},e))}cancel(){this.queue.length=0,this.clearCutoff();let e=this.speaking;this.speaking=null,e!==null&&(e.onend=null,e.onerror=null,this.synthesis?.cancel())}destroy(){this.destroyed=!0,this.synthesis?.removeEventListener?.(`voiceschanged`,this.voicesChanged),document.removeEventListener(`visibilitychange`,this.visibility),this.onVoicesChanged=null,this.cancel()}clearCutoff(){this.cutoff!==null&&window.clearTimeout(this.cutoff),this.cutoff=null}listVoices(){let e=this.synthesis?.getVoices()??[];e.length>0&&(this.voicesListed=!0),this.voice=wn(e)}next(){let e=this.synthesis,t=this.Utterance,n=this.voice,r=this.queue.shift();if(e===null||t===null||r===void 0)return;let i=this.settings();if(!i.announcer||i.volume<=0||n===null||document.hidden){this.queue.length=0;return}let a=new t(r);a.volume=Math.min(1,i.volume),a.rate=.96,a.pitch=.82,a.voice=n,a.lang=n.lang;let o=()=>{this.speaking===a&&(this.speaking=null,this.clearCutoff(),this.next())};a.onend=o,a.onerror=o,this.speaking=a,e.speak(a)}},En=[{name:`decapitation`,sampleRate:12e3,frames:7920,wav:`UklGRgQ+AABXQVZFZm10IBAAAAABAAEA4C4AAMBdAAACABAAZGF0YeA9AAAGAGAAd/9r/1b/Dv+d/kH+Of69/vL/gAGaAhUD9wKOAmICHwPSBLYGQ/pC+4r72/rQ+Sr5sPle+7X+MQM2BmQHHwfgBSEFpAU+CKkLYA649Q331faL9fnzlfMw9ST5+/5iBV4JDAtaCuYIVgdWB0kKSw/iE2HuFvGL8lnxVO/g7TXt4+6L8wT7agMsCvAN0g4gDb0K4QjzCOEMBhO+GHQdcuis667sVOsZ6dTmDeaH54Hr4fE9+0wECgylELYRuBDhDU0LfAnWCb8OABXvG6QiDyiLKwjk3uUl5fziMuAc3v/cvtx23kbj2Op98xH8EQYQD/ETiBVzFgkUHxCYDc0MWAtYC4sPrhWTHE4kpitIMV41DDlm11XZV9pG2ZPXOtVN0yrRjc/wzkXPstA51HDae+DX6I/xjfq1BBYNYRMgGAYaSRwnHU8dkxoAFz0USRJLECwP5A0ZDyUSzha7HdclaS2nNJw6o0JgRw9LVE6kUMZROMnOyWDLQMlWxRzEScGKv0u+eLx5uq+5xbnxuii8ub7nwOLDMMrT0IXWnt1r54DwWPp2A/YLiRBdF9wbex6gIAkibyGNH3IdGBpMFdESOA45C08JEQoUC1gMIBImGl0fFiogM7A6FEMZS1ZThlfAXGhgxGHyY1S6Cbszuki4dLensvmwaq+crAesQqy5rfiv1bR/un/B2swO2f3mdfQbAw8OrRS+HC0duyDeHmwZUhXJDocJfAmGC0ATOBemJCoytT+YTKJX0V1qYl9lbWeztN+z4K8JrOeo/ahZq6SvurVXwVLQGOOf94YKuBgvHU4f5B3rFjkS1gyMCgcQKhoGKkw9PEzkWhhiZ2aZZ2St4ai1pG6h6qIKphixgsTW3e/4/guGGmweeRq0FCwHEwP2BwwZyTACRwBZg2M7Z4ZoVaiRpKCgDKHkqFq4iNHe7h8LXxibGUARPArNA8UFWhWgMIBLOl9CZ9JqEKzepjah0KBBqfS3VdGH9OwNIxVxDgUG8v/C/lETLjDrS1Fe62gLa6anjKD8nTmgU61jxsDlmwFlD4gNHQJ38/TykQOGJq9GQFxCZn1oE2URnQiaVqC3rDrKK+k9AtkKPADV9k30rfo5Fk44x1WZY4pnGWf1nCqZO5vhplO9seDF/1MQsQykA9r3VfRl/yUePTy3VaNiJWZzYtCYSZc1nHGr+MZo5q4ADwxeCLj9DPOK82X9UBr9PRdWqWTKaS5oh2PYmZmZfp5xq4rEPd5T9a3+yfzA8/npoOdf8XsFYiXlQutYMmIYZphjS1/pmPGY7pw1pvm30NKu6Jf7GgCr+5vuDufK5Czm6va+C6IlfT29T4laJF5mXdFajlE4kjyUlZdxnamq9by30VXmivRW/Y35QfJO7hjsuuZh6ub2DAioGBssJUFPTD9T0Fg8WEVVFFU5VENTzJXSl82Z8J9Eqv+3CMZq09Ph3/AL9TH5QfVM7vDnROO44VnfyN3X5C7t7/xeERwiSC+qPM1HlFIkWFxaWVsAXFVaUllVVjpRD0phRoBIppSulcqXy5v0oDypUbV0wNvHk9Bu2cLcTuC946rjsd4L3UTdGt1X2SnYlNTn1MLaMuDm5drwK/dnAJUMvRmgKM8utTgwPzpE/0oNT81TOVazVPlWPlZMVRtSqU0CTMtIA0qLS3NKZprGnROgl6SRqvGwf7W7u2/G9dA92Ink4+uZ8CfzkfFT7TzmEOHK3RnZ99TczxHQjNO02d7gfupp9hMAbg8yHIoqEzWlO6RD1ElkSplNHkxOSS1GA0PjQEtAEz/mmiudmKBhqHGv7Lqyx3PV0OB57Fruqe827T3l8dwe27HWIdgS2nflQ/O5ATEXQSq5NpE/X0CJQNY96TpyNpwyAy6SM9mbyKJurdS6kclG2vPl0+8R7BHpjuDh2lbYYN936sL+ehW3KuY7UUU6SB1Hj0HyOzU4iDsXo5WpKLZgxHjV9N/q4jne2dYx0TjU89x38boMsCYwOtlE8kQWP3M2pzKRNm+k3q9qwDHShd/E4bza0NLp0J/YoulEBQwlgTlAQUI/bDdrLhAt+Tcoq/C4WMoh2cXal9M3zQPN69os+C4c2DXWPJw7GTO1LsQ0aUPusxDHwNnS4U/brNGqynPQMev1D2MtjzboNdwvFSgVMOtBe7ZCy0Tbgt1Z1DXKN80a3rX/ACD2Mv03IzIpKe8qMznGsPbDQdZe3QTXyc6PzDPZO/XVF8MukzVYMZMmfySgMh9HpcCG05HcBNcmzK7JCNMH7cYNyycmNP4ywC1lKPcxIkLFUQzOKt183gbUvsxDzyXd5PwxHL4u2jKTLTMloCBLKcQ75U2txafSxdQ2zT7Gt8cy1dnuSgx9KKIzTTKbKukiICSDL25BH1CSxi7QotBDy2PE+8F9yXHZ5PZmEPkjZiywJzEiPxrOGOQlvDinSVa+xMhR0LbMcsbMwj7BUcaZ19fu9guHH+IpXixGJ6UgQxrAF/AePS2VPvlMxFS+xxfM9MmaxRPCvr+WwenIK9nK7IYBDRZ5I1koZijvI3scyBc0FVQcniZyMylCyEySVDrE4si6ytjHxcM3v0u8WLu6vD/Et89q4HbzlAjIFwEhySaGKagmECLGHJIXgRJqFB0dYijKMzY/30hlUBVWQ1m8xg3HCcZAw4HAHb0du6e4/rnpvfHCF8sq1+vjMPQqAc0OahivG7Yfmh+8HFwYEBWuETsQCBFnFAwZgyEqLFs4vkGTSnhRV1fpWinElsepyPLFS8IJvw68D7fKtSi0sLXyuD7Aoshc1dXi8/KcAP8OSxiZHgEfZx+4HE8ZwRV7EN0OcgxRDoYX2CLnLYw6OUVKT41WC1wSX4LBrsGewKa8Dbm+tsGzzLKVs/K35L5jymTZH+3Z/DgMFBnZIPYiVCHAG3EUpAwQCvIKEhE8HNArBDxQSo1V+VyDYAa/bb04ug22OLNusZey27cBwxPSxOi7/zoT9RxHIXogNRlmEawLBAzUE88imjbnSN1VQ16ZYsS6jbdKslKuKK3Zr9i6IM0m5UQAoBNKHU0bLRR6DHUI9wseHMkyGEhgV0Bh1GN+tHyteahVplCqz7ix0G3tXgn7FzsYGxGPCUoHdg/BKUVDJFdqYYFlxLDnqZ2lfai+s7TKfO3aBxoWJBVWDFgCZQF2EGIwW0xsXsxkP2XlqGGjnaQ4sGbLwO7kCp0UIQsR/Bf4RgVEIxtE61nmYvRiy6RqoEuhm63pyZnwOQv4EoYJy/xG/NIS3TXHUjlhQGaAY8CiVaGDqH6+gOH+AWYRxAsh/I/16gDNIudGDl3RZLhibZ7hmzmgkLF50tz1DQcEBaf4iu8Q+qsbNEMkXa1mPGexYXqc255qrf/JaO5aBrcHufyL8MnyQwpgLiRQ+F9bZEBiG5vOmDGf5a8BzlvuLQMRAcD0Z+ko7BX+UCPGRb1aHWN1Y9NbmJaLmHujRbow3Ij3jAWQAkT5qu2h7yb/fx5JP9NWc2FzY7xf0liBlYWZYaQ7uoDW/PBa//X+RvRT5lDh9Ohx/V0dpTxkUcNdPGEXXm1Xa0+okEiUB51ZrYXEzd8n8yT8cvyw9VDoNuNI5jvzTgiFJLw9nFAgWUBfLl4+WjlVclJNkxWXp532qWK5ps7M5Dvy8vl3+sD1FekA43veDd+O5mX1ZggoHNMssUOJTxJX8VmgWKFWqFRiUudOVk08keySxZbknZmnObLfvR7O9tu15XzuafEY9CPs++hp47jeWdqV4W7lEOwr98EIKhjxKsA6qka0TA9UB1oyWiBa5FfGVVZSl0/vTHZMpEsdk8eU35fcmzChOKkXsTS6ZsL5yvTVHN9w4kbnAOgX6WbknuKk3afax9ng2ZzXLNmE3lrj/+4rAdkPSR3BLLE8WkWGSzJUB1dRV2RVuFQmU1NPH01vTCxIXEbjRI5Ip5QTl86aYZ8npPyucrr3xsrS5d1O5oLsCe+F7gPnFuA/3UzXstEOz6/P5dZx4GrwkwNBFSArzT+TTCFTlFYwWQ1aT1gdVS5Pa0ngRnVI0ZlJnkKjDq1yukTKVNlQ5TnuC/Ff7RXoet6W07XO0M9y1Frg2vS3DYgjBjixRStPclAwUCpOaEZmQotBckX4nSml0bLxw5rSK+MA6W3rrubD3CHZCNvQ4gr4LBJLKo87pkZDUOlO0UfEQQ47rDrDmxKji7H0wrPUFeEn5NfcxNIDzPXS3eGE+dYZ4zRZQhhHBUX3QBI6gzq2RFSni7YvyaDeqOW+3I/UmNC71d/pzAkcK5s8kUMuQJE4vTA9M0A+S6hSu1bOPdir2xPRisqQzmrfzvxCH9o5T0ORQbg7wjWaN01Jw7Xsy1PhaOcP3gnSctCp4C78LhxnNrc7QjgzLiop2DFsQlSyvMi92jnhGtmB0zjW+OUeCLom3TiBOuAxOCmGJ2g2fap9vnXU8t3K2FrNtcej0D7rVxNOLQY4gTYrLYInlTFNRGe3F8wM3E7cKtIpzRXQU+P9Bp0objZ8OXYyACdeI0AwyUMltf3DRdAv0O7GRsCowDnOQO1rFBMrOzRGMb0rnikGMCdAUE56wHLRS9PuzDvEEMLTyWXcz/oOGLIslTUqMwUt/CTUIgUuz0EnUfnFktTK1hbPq8crxCnI3NNB7N0FiRp3Ky8uOin1IR0bkhtiJYM2pUceubDGPc9izyzL/sWcwljDEc0K3eP1eg57IFMoZizsJ2okzRz8HX0gAS0YPqRL3lNSy5vTUtY30xXRz8mpxobH8M422E/rdwKyFFkhwyoELHsqlySEHcEWJxQzF4Md6Cl6OKJGKE+fVTnI98xTzZbL78gQxFPAbMEExJzGhs8r3Z3uQfwDD+AZmCLdJ+MuKywNJtIhZSCWG1EeQyBpIwEp7jMjQLBI8k5RVEDDZMf2yv7KSMkxxLfAi70XvEW62rxfwRLHEtEU3w7wcgHrDUMboSEnJ4EqlSnxJT4gux3wG8wZ/hoxHCMjuSrBNglA6EZnThNTulbrwvzGRModyRrItMVWwkLBQMCzw0DGn8um1k3ia+91/jUM4BccHTwikyToHtYaTBj3Eq4SWRdrIAEr1zOzQBZL9FLRWMFbx8bGxUjCBr0Vu623s7UvuPG8ose71qrpNgJ5Er4dZSSPIzkf5RhhE9QNChFTGvQnqjlzSSVVhlr1wf7EysDNulW3NbWNtWK7iczl4o/8IRMgISslySI5HJwVzBDMFYQjcDUGSItWOl1Qw0DCHbtJtROyObcZwS7TBO75CgsbkiEXHewTfAgTDqIe9jYkS6FYv13qvIi4IrM7rwuzh8Bp3PL9uxYKHfwXRQwMBmcMmyIXPbFRA10CYFy21rA0rp6yz8Jz3xsDhhOSFUANZwMCCLgeIz8rWNdgbmMht+uun66+usPW4fn3EHgX/A5VBEwFPRxFPUNWzmALYiOv3qeOq0i8aN0fABYRLA2d/JP4rwtTLb1OOF6qYeytOqiYqnO7595FBTwVEQ4L/yr6FwzRM7xRsV5BYDCn4aJFp/O4C96A/5IJmACQ8pL01xCROaNWwF+VXlSjNqGQqW3DyepmBUIKNv3K8tL7hB79RDhaLGE3XvWeTZ9dq/rI6fAtC1YNtf3r82r9ch8oQ0latWCiXSCdHp3UpSO/FuQvAW8Ebvfm69HwzQlhMxhSN19MYBtatZnNmrCkortZ3Sb1nPq/8OnkJOXI+Y4gE0SVVrtcG1m5UAWV35lgqGLEoeVa+hD8c/LA57zntvhrFnE5gVEvXjhgslrtVMWVpJkWp5C++dxq8Sr3OfI15Rvd5OHv86ERIzH0SblYZl1AW7pV+U4Yk9uWYqLitj/Rc+hs9Ub20ux84e7cE9+Q6jYAix8XPFxQAlvEXPxaRVYVUQdOy5Lhl2Whca/DxVjXiOTG7EjrW+Fe2JfTO9cQ3Xvw6QgsIpA7WU1KWJdcrl3zW0VVE08JTJ1MV5JRl5qf9KqLulHPy+Gz7HfvrO4g6Njg3dk21qbVBdwu6QX+3hTVK4Q9sUpLU7pYIFk7VvBRg03aSH5G+Ef0j0mTY5mRo2exwcFP0sHgeuqy72TxoerX4zrZZNKL0F7RVdXY4SrycQllH6cz30PXTl9W5FoSW9NYYVQFUDFNXErySnRPPZYKnI2lTrKLwBjO3Nlu4rDlUOTq4NHZfNMaz4/PTdTk3Jrr1/51FAYqRD6pSSBRN1OGUwhQfUuvR1NFWkP8SWiVOp6BqSW67ssg2ozk6ucL5HHc9dPozTfM8tCf3TPvqwo7JRQ6yUbUTJtOR0usReFAVj5yQWBNQZxEqke72c372YbeLt1d1YzM3crEzgzd3fM/EwwxKEJlTdpN7UglQNw5IjsfRduZNanQun/Pz9sL3ubUQs0EyqzQC+IbAu8jIDz+SDpMDkVVOUU0fjmOSkWjlLdMyxDX9tYdz4fGjsfY02/vmBXVM2ZB2UP3POQ00DItPgeeQ7GPyaPZmNhuzszDLMTT1jT65B4aOb1CD0CeNv4yZD43UjqykszV2pPYC8slxATKY+G2CGUrvzs0Pc4xUivSLrNEEKr0wAfS+tDRxne+s8JV24cDoyfzOMw31y2tJYI0rEypsxnKqNNazlnEEMMH0RrxERv6Nb49mjXLKf8pPjviUz67ycwizpfC6r3jw8/c8wT1Jk82SjKzJ2Ikiy98SPxby8iB1OLPZ8VwwkrOlOsoE/ssRzKXK30hISFRM0JM+12ezL7T48wew/LCEtHB7toW1C7dMvgrRCRVIa0tskJDVgDCXsy9zF/Epr1Ow5LULveEGTwsQy96KC8esxqvJLE6a1BGXBTK88wVxS6+JLzjwijXl/VSFHomQSwlKC8gUhwCI8QzyUTNUzFchsrgyaLDurwOumm/lM0d5ccAThcVJDcmbSBUFqMOjhC3HIkvAEIZUKpX08OkxSzBobuJtzu2uLsIxyHcxvR3Cxsc+ySRI4UdkBcGEy8N6hJ5IWMw5kCJTD1VnFhDxIjFWsGfvHG5Kbm0vEXE7M873/TyOwZTFvUhbCPOI98e8xceEUwNkgxMDt4WSCUYM7o++khHUclU8lZFxWHEt8CLu8y5ebd0tmS4vLtRwhbM8trC7Yv7tQrqEzAcGCGhHbIcfBcUEtoNKAxRC6kOJRT4Hj0o1DNqPpZHkk3cUVVTwVVZwRy/Pb6Jul24yrYSt3q5qblVvQbFT8xx2Gbkv/Dl/okHuhGjFhkYHBe+FC4Q0wxaCgsI4AdWCr8UZxyoJ2k17j4ERuJMsVC8Uy1Uf77svAS6vriCtSS11rWOtti53sF6zMfXrud1+X4Fzw70FiQYDxb6EKwNAwYrAT4EkAppFZwkejF2P71Hm0+mUyVV3FU4uwS3cbW/szC2F7iSvz/M6N1D8a0BgAsyECoPVAuNA7H/gPxhBq4SniUXNzBEnU4CVfBUrbm9s1WxyK8+sgK7usaG2p3zogTnDVsLBgW3+7P17fjHBEAZgDEYRe5QDlVfVKCzbrAsr4qyOb/+01HtRwJrDk4L8f/b9xb4CwEJGukzoka1UARU0FKFrvmqmq5tuSXSuO9oBq0NFgk+/c75wQLrG7I4w06aVlxW4VCWqi2rjLLGxKvj9voGBIUAyPag8EwBeyFAPt9Ns1P1UdenOqVBq065J9ZZ9T4C0/kD7qbog/rVHXA/M1CUUxxOMqXbpTazCM7r7RUETABm8YnqofYBGxE8glBJU+JMqKGro82uPciP53n+RPnC8YHtHfskHPw+xE+tUghL3kY3ooqufcy878kAXfuY7rTu4wJJJ/tGsFXWVntQ9UqIpP60ntN69f8CEfmS6BbnIf5rIw5FKFF0URpJQUAQnU2o18El5EPvMu1g3g7dEe2cET05/U+YUj9NDkS1Q62gAray02nuSvBA5wDdT9xf8eMWrjU/Sv5NA0jRPhc9L5tJp/y/Q9wM62/nANzY1JfgDfzCJBRBQlIgVbxQtUkCRn2ZCKTru27W3Ol67UvnKNyS2PndK/bHFcE3r0ieUSVNcEZ0QTxG5JnopJG2VdAJ3+Hmc9/l1HLM7c5M22b1rheRM+dEo0wFSi1CHTquNztAREkAnc2rur2I0mTcwts208PI2sZ1zRDavvJvDYIr2T7BTH5P6k2tRs8++DhkPPpBn07Xnr6sPbwCy53YcNqu0tbMPMi0xGTGB9Eh5pL3FxS8LQ4/BkhISN9JJUTxOnE54TPENg1BRE8gnr6rGLwgzRLY3t4j3Q/aV9H5yVPCvMJmxkHRSufT/t8SLSrGOYhEE0mkSHlEKjtoNwU1ATUtOvlFO1PInRqpTbhxxMfMBtFL0h3Ld8PqvEK96sCCy4Lau+wOBB8dyzH4QRhIN0rxQsQ+WzkIMwMxmDZUPr9N71qspfaz+MTW0MvWWNOkzQLE/8DnwNDDyszf3V/48hTuLJE8eUPfQ2hA3zmBMkwtDy+/Ot1Nnl3qqJy5E8aVz57Pess+xJm8Pru/w8vV0vC4DDAlCTM6NzA3PDBbJ3skcixXP9xUCGV/tBPAE8hJxA++pLjgt3rBlNeX9dcYpTFhO344vDBcJ90knjDXR2pe2635wK3JycQIvLy1wLrtzaruTxScMEg81jtmMUMnWCkfPJVUO2iQvAHGbr4/tGmvArZRy3jzUBr0Lv0v+yRtGjEhvTntVTFp3r7pwcS5pbEjtLjFM+xfF68t8C39In0ZjyIrP6lcY2uHvQ66PbAwrbm5UN2/CG8lpSwgIz8Y3R/VPZtbDGqtuy219avCrE3B5OypGCEqeCTQFRwamDIhVLtner5wutmwza+kwVLmuRO+KaghMBN1EMcoDU5IY1q3trPSqb6rHb/96C4UoiOGHnMPrw5pLMdQI2NSt96wv6hzq+LBj/D6F/Ej9xrbC98RkDJaUgFjPLTIrHWmiKq0wXXtkhCnHFERqAY6DiwsrU57YA9kqq9SqBer37zZ4xwMEhvME4oGEAcbHuVCAlvVY8+1qK6cq7y039DY+oQYHh3zDgMDWgQEHco+mlNLXWldpao+pwarorvg2jD7sA0nDDj9ffIZ/UEavzwPUtFaW1rGp6yku6e/s4fNz+xJBb8LoAUN+TH1WgKWHWg7JlDHWN5YzFNjpRalSaqEuVjSFe0sAZwGDwHG+Dfz6vnYC/YmnED6TnpWFFdOVL+pV6fUqRCzVcTf3ObyFAWeCFoAqPUR8J/vDvknDFgmPjq8R0FReFQKUldNxqYGp1OpOK/2vJ/N1+Ky9fYB0wWD/zL2J+/66jDsUPbrBz4eRzIwQeNKxE/KUAtPwEqeRu2lQaaEqQuwtbp5yFnac+vJ92sAUgKz/Uv0Au0+6Tbp6u/4/DoNPB6xMbs/ZUjdTaNPa099TARJnkVDqDKoDKqRrbWzNL57y1XaV+nN8an4mPkX9sjyS+z/5rHjKuXJ7Hf51wfpF1ApjzbLQd5H3EpaS2RIbUYGRRxCjKlYqoKtB7JLucjFbNKE4ObrYvMX9EbzPu9v66Lk/uIJ42vp7fYDCkcbJy7MORZEoEceSQFIy0MhPus56jchqA+rmbGpuufH19ZL5VjwcfOR8CbqDuMU4I3gT+Zt9CgGvhmpK5s4sUCUQihBuD49Oj053qgarTK1z8Fy0nvijuy28DLu/+X93WPbq+L88dYIxyIZNSZAX0S3REtAATkmNk+oqa0NuezKbt+/6hvuVuqS4qXdRuGV8ZQHwySfOMlBg0IqPdI1mDKmOBauX7tkz9zj4+vm6ubhZ9qw20vscgp2K4Q8fkImQNI5hDVoPCOw1cC01fDoqu/15fDaNtrR430BOSExNzA/sTzQNeoxDznGr0zBQ9si6gbjB9aJ0f7dIPiNG+M2SD3qOHAy9DCBOmWvecSA2wbiFttg0fbS4+RqCl4saz1XPLwyHyzKNKurU8GN2MHhHdqt0DDRHuTmCAAt2TmsOOUuoCqxNn6sXMI81zDa4dHdyG/NK+Y6C1grqTgLNVgtBCneOd+tMMIz1QvYEMxMxz3NDe5NFswwhjkQMUMmuid0OoGvIMXF08DUi8lIxWPPke61FZswTzluMpcngyfoOAdRRMC50QDQKcTSvqvE1txgBT0lwDV/NcwteyhyLw1Ew1erxhfRksxRwLe7KcG41e/2hxl2JmUqGiP0Gasb9y8ySbiyosFiyTLDGLh/toe9htEh9FkY9S2zMOUoOB9MGzon7TzhUoVfhsJVyHvEJrxWuH+49sYN4Lz/WBzMKNIp4iVvHzkggSfHOblQwl1Av5HKwsxJxD+/vbvCv5zI89/9+4QY1SniMwwzjSvZIFYaoxuCKdE3hkvsW+Vii7wAwT68fLXZrmSv+LAQt37HqN4p9SsN/R2oJNQh4R1OFRESUBIzF5Qk0zisS2RZjmOPaFG//L6UvyK7vbSAsmq0GrZcv6nKJ9y27yUGRBiuIMIlbCaJI30eqxiqGAEZsB/9K3k5/EhkVcpfwWf7ab24xrhwtYuw8qoiqI2o96kcsfK7ncnu2qHs1wPIEH4bayFSHnIWtwqNB4QFcwY+D+oZ0ihYOjVNm1sAZHNpuWsst3Ozfa19qWKleqPao0anKLDuuxPNdeaXADgUdiDHJ7oo/yIZGP0V0g5UDQMTViK8L3JBMk9aXotjDmcxqp+oUKRAo9ihJaRop5ivPsNY2hf5FA0WGi8gryJVHGIaShGvC4QMpx92OXROVVv1ZR1ry20OsNKsLaaooqSmzrNFxoLh9/xjERUajB2yFlQOawadDzQfZDZwUINhO2tibwewo6rzorKjNKwvu67bVPs7D6IZAhWyDPH8wPivCiAnwkjRXd5mwWfRnoCZoZpHo4+0xtO5+l4SvBg5ENEEJf7mC1Ex61CxY+dqgWq/oGacMKC8scHRnviSD4MUaAcn+WkDVSLlRWlgNWqXagqf/pplobG1gd0TBL8SCQ2n+1n2EAv+MyFWemOPZiydOZqJnle3QN/IA0QPHAf2+P76YhWKQxpcUmWFY6iZP5p4qNrNvvlrCiQEe/ES8P8P4jy7WX5iql83l/GXYai8zUX1awbt9j3oFezpFcdFOFt7Xy1XPpPjmP2tkdWS9afyfuV531H3eCkfUGpeKVyNVKWYiaWDxrHuE/7Z9efnXe3mDZ488VeZXcBX+VAWnJauJtgB+4D++O6M4b/vIRYWQBdVt1aCTAWUrpgZrZXQV/HK9gfsKOJF8m4ajkSUV49avFIxSsyYKqhBytvrSPin7ZPfC+MiAH0sq0oQVZBS/UY4RBqbFKx2y4HozvG551namN/I9S4bOUC2ToRRVkpJQ19I86BvtxbYDe4/9ebo491q4G/0zBrsPOBOJFMGTdJDqUD0mBOjG7d20FfhkOOC3W7RYc9V4C/7Hx8UOYFIWE0pRbs+wzzvQnKjQ7Nuy8vdLuPu4YXZXtGe0Sjd2fY0F+szb0NfSEFFYj5UONE4JkGPotOuEcFO0+7fy98m2/PR9MvBzFbZhu+7CSAjEDcDQFJBnD4rOGoxfzGEOc5FZamvtrHG/dQo3T3cdNYX0IfLocod0rThzfgxEW0p1Dc/Pl9Amz2hOVo1pTE2NcE8NEgCrhC6Vsp11rzchd7n3A7Xc9OC0GfUUt577O4DNhqkKlU3hjzPPu881zatMgUuOTAcNnBCZ6sjtWPCMs501izYdNQJ0VTKYsdWyVrQnd248TsIBh6wLO80TDczNggv4Ck6JVor7TTmQdqulLvKyPDWNd/b4fDapNI5zxfO79Ml4Xf2ZA7IIpUyrDnSOIo04iwqKScq1jATPhpL+LoCyUvU+9mw1fbO98lnyVrRpuAp+OkSvSalMx414zBMKtshHyPWLqw/QE6bwCbOsNVA0YnKvsSqxbHOsuVxAuseziyrMa0vEycnIXsmhTdHSpe+o87x1XzRcsqhxlzL2dnl9YAWUCuSMV4sDSPQHUQmODoXTZDEINBD0LjI+8Gcxg7YUvnrHOgtuy9pJ1EfNSTaMxJKksIE0BvQtcdAwrXFetoc/wIdqCmuJMwbwhv8KkJD/lPGzWHQ5Menw8vJa+HQBuwjSSu/I10ZBR4iMyJL98MTzGXGAr9TwSbUFvkkGzgm0CG6F/AbEDItS/BXocwexrm+jsHB2CoA8B2eIoMVpA2aGM02VE4pxIbE270ZvEjJHuqTET0kfh/jEfUVHi3rSLlXLsuAwyG7TMEq2kgB8hoJHS8PFQdfF2E4Hk8bV/K967cjuAfIl+x6EVsgphn/DswUci3XSMVVz8EmvCu2CLu+0QH4WBVRG/0RgQrlFTQz/0sUVy3A7rh/s3e4Fs0S8VwNqRNVCjcAdgqzJwJFzlSuWEG5LbN7sr/AXN4cAEgTng8PAkf/Kg1ZLspH2FSCWGa36bHbsVK8XNdw+k4RthUEDUcBngQSGn03D03bVypaOrc5sY2wkrgRzkfsUQeQEDEJ0fvo8+T7fxPdMEdJvVN8Vj5UZKsiqQGt5rc5zaHp8gLuC4AKCwI7+lH4XQhvI3k7qEyqVbJXnVSxqcWnPKhyrky8ptK567P9wQVWA3T5tfG+7rj2iQlSIZc5GEvDVA1ZiFj9VaeoBqYxqA+wJL0yzijmaPwMCQ8LVwmh/9PzW+5089T79w2jIgs5B0lqUlBXZ1gXVmxSdqI2oT6izaYQr169AND345b2BARmCi4I/ACX+lXzu+4Y83z95wsvIPs1u0V1UMxXjVvVWjlYbFTRn4CejZ/VodKmrq/ZvXjOw+Fl9WMAFQMqAvL8tfjz8TXxE/PB+PMDbhXLKo48hkmIVPFY3Vl7WHpWp1L2mmWaD5wunyCnrLKmwmrVtuiW+Cf+z/up+NruJulQ6DPotfDWAL8Xfyy1PlpN5lbKWf9ZkVeXU7NP7ZkqnKmhaqsSvKXSGuiE+Dn/pP2Z9AHrcORQ4krpGvmhDxortUPVUtlZAFvZV8FRykt0lNCXs54nrR/Efdps7WP0HfLn6Vzhfd895rT5JBlaNnNNJljlWktWBk0IR8WRzZe/pbm7e9Y06s/wi+044nLbkt2l8ywUhDa9TrFX9Ff4UbVNKJNymPKnmMNe4JnyXfO05S7WGddb6goSBDleUNhXklV6UOtP6ZXupM2+Nd538zP1VuSY1iHYlPQ7Hbw/y1HYUeRJhEG4jneYarEU14Lq6+Xo2uTT9OXKD/09MlZRV71S7EiNSU6WeKlLyPLb/Ns5zr/Jz9mpB6Y1jlGZU5FHMjyPSNSbxblB1IbgQdPCyUjUXfjPKLlIhFG+R5g9f0Eul2CyetKB2ozRIsTvy6HuBST2Q9ZK5z8ZOWo+xJYarzXLUdQuyyHAnctd8PAhC0J5S61D2Tb5PQiZ97OezwDW5csnwt3N3fX6KN1CekbxOGgx2jjplD+qJMXhzcHFGb8EyY7sfh+mP3RHXz74Mdk3Mk75p0bBZ9CQzzLEssFR1C0BczAVQ01FVjb2KRQ4SFFpq/DCvM7Gx3q9EMIo1jr9vyspQtREtTn8L+cxkEEnWtSvpcTPxr299bQiuPnNYvgbJFI77z9/OYMv9yuIOkJQz6WYuqHGG8XjvYq3zrvyynfsLRpANs8/MDpQLtYltioOPwlVwqg+u27IwMi8v/G4n7gIwVLYkf1/Gl4y+DdvM5AqcCSMJt4wfUTUV2WrcbxCxlfDuLrJtHm1oboVz37r0QuzJe41+jsnOZ40cS43KS4uzzkzTDVbjmSPvbnErsFwvqy4Y7TXs0S7ec9w5mQC8Ry2LUo29zboMUErYR7KHI4exy3/PvRPY13Hts++n8MiwRu96LYus/qxy7ScwObRmedB/4UTzyDrJYsoACPZHGoYnBkiHbApYzs3Sl9Ur10CtzW8GL/Qvdu5Z7NXsue2E7/pzKXe8vGhCAMXjSIrKDojVh1+F9AUABcgH6AwykLZUZZdqWJrxpTMDstbxvC9+bqquMK81spT3rzyHQkCHMImryd6I6sdLBilF5ofrCswOZZLwFYHXhq/Er90ulS1ubIEs/O3b8U42tDzhgo2G+odcxzXFm0PKAwDFPInED1nTARY81xFv7+4RLN/sbezk8GC2ob2LhJwIPYkfyIzFywRnhVcJL09C0+RWetdkcL6vVu4cLhzwCvUN/ITENweuBroDvYGNAcRHZA48027V8bBYL7kt6K2Sr4g00v14xLpISUd+hWgDZITcivlRaxThFllvTu2lLKPuyXREvVcEPIZDBIbBooH1RtJONhOEVe3vIS1wrLNu6vT+vnHFL0WYgaPAMwOPSyRR+1TUFSls3KvtrdGzg7zuw5mDr8ASf4tEtQ1I01GVIy4BbGEshnB8uCwAU8J0P0h9tkD7ij0RsBRyVATsfywsr1W3QP/YQUI+fTyxAMFKmZH71HUUOOxWbVHyTLsWAnCCxD9qfeXDIkzR0qxTxZM5a/3tJvN5fOzCiYEzfaQ+Y8aXzw4TVFO169ZrQy34tMc957/Y/RF6hX4wBuqPyNMdEqZrHSu/L1b3xj8vgK98nXtYP0MJLJBnEovRweriKzhul3YmfZ/+cfuvOjr9lsbhjrwRSNEFz0sqQSxRcfK55j3JfKR6HnsywQGKQpC5UjmRNs9SKpYtVrNW+tW+WfweeSq5Ov7uyEMP0VJD0hGQa0/LK8swJ/cR/T09ELqOd/E44H8MR5CO5dGxEVuPp86k6h5s4/IP+OF72/sz+Gz267hMPo8G/I130J+REI9yTYPON+ptbejzPviSe716wLk9Nsx4wP0PRBuL60/KUWCQSs6LzaZNyKoRLShxhbcBOit6ivkyNsW2ZPfx/MYEmEspD9HRphFSUGjO+U4AT5DqTq2XciF3e/sN+1F5mDeM9YL1gff5/ImDuYmpjd+QC5C6EBYOrg1xTRMOVuln7AWwA7Sy90X5iLhXdlt1DrQKNTh4Qr2vA+RJO83XkINRaZB3TwINsIzzDaZQU+nRbMCxN7V6N0U45/e99hN0a/NFM4O1vzpUwbkHoozMz+FQ7lBsz7aOOUyDTMmOvJFZKh6tQnHH9TA3ezdE9jH0E3Npc1V1oHoEAFUGq4vYTx/QlRBDTvtMjAtHi4iN/xG36emt17JsdcG3pHXydBGyiXKaNGf4rn98BpkMV9AbESjQao4yDKAMqQ5dkk+qBS6m8xn2ELbQNQyyUHEjsj81tXznRV1MLg+PUFCPMMzli6aNc1F6FjdtnbLL9aa1F7MxcRbw3PQQO1lE0cuajzGPNwzNyojLJ46M1AurfTBnc/hznrE0bzZwDbWu/vkISs6Qz6XMyEnxybHN09S561zwjDK6MKluiO6iMnh7RAYvzRyOSowySVdKTJBUl2PuVHL/8jmu3m2acGJ4zEQsC5ONoYrcyBAKKRCDV/ruY7Gx70Zstixkcgx98Egsi9UKOYXoB2LPFxeILjew2K+o7XCt8PUDQMlKfIyBCYAGl4lb0cbZQ69isBqtHOvgr9+6y4cnjKOLCcdoR2hPHZdmG4XvXGz5quTtvbc3hQyMbUyqyCNHCA4rVk5bf+6x7HFp6Os+M0EA/QjKCabFN0MjiS5UEdp0bTlrQamgqtaxwD78CJpKKYZdQ7aI3xKMGZBcOiyRqkkqO28mu0XGs4p8R45DlcVEzezWx9sv7HfqPehiKlCxvj52RwRIdAUgAiEFok8JV5QbPetWKbAoKqnnsNS8j4WhhvRENL+bwNGIytK+GA4aCmkjZ19nSerV8sO+FAUVRpLDlT//gVnIQVH5V/zaOJpEaHJm2ygu7MX2B7+dxS3FI0EpPosAuod9ECWWsFmzGiSocma7Zi7oKG1/Nju+dwMfw0XAtf3BfgoChso5kVmXO9ltmYgYiGbtJpmoE+wRs2T7fUGbhJCEVIGkfmi94kCNhv1Oy5TRWAWZaNjSl/bmU6YEJoNoRmx9ceg4tX4owTJAtf7m/J28UD3UAsRKJNC8VQbYeJk0WbBY9tf5pyOm8+eY6fJtajK/OKu9pICIAUK/4X0G+766EHu7fnRDUIlez3gTtZZiF26XbRaGVfvmJGYXZrinwWqC7oc0hbnIvfQBeEExv7x9qvrkeaA5UvyGQQrGvQ0kkf2VKxckl5UXr9Zc1bwU4+c9p3WoR6rq7n5y87jXPKF+u38v/lx8VLoCOaF5pLtu/0oE58qKUBtTPlUgVaiVQpR6kqMRleaepwvo1GtwL090a/l2vUE+zr6t/KA6xnlM+cQ9LIGrB63NtpGMVE9VOVTWlDVSgVL9KHjppCxCsIQ1f/pfvRn94jrR+dv4LzgjOyGA7EdrjcERrtNY0pIREo8bTp2oO+nZ7QlylXfTvBf9LHvk+Cc3BvgUPNBD3csNz89R6pG70OUPY0/RamQth/OdudY8/3whuYX3xbjXvWtFRQ1GkXySh1JekFyP4Cqerd6zlTmmfdw9c3nPuGx5t/4ShkrNKZBKkEWO5M2nTwdskDJCuV98OnrU95X2mLqkAvNKnY8SDsBNXwsYzaFsZ3F4NvF5KrcS9Zz3Cj0DRkuM8o7RzgGMnc1f7F8xaniZ+qR40HaK95J+LcdHjaJOqQw1SpFNJO2ys6P5LbmM94u2E/qMxC6L8o6MDbMKycwjkJoysDjIeor4K3ZP+eSC+QqrjcjNfcraysWPfjCe9cQ2wrT4c3G2Wr7UCB3LhQvCSf9K+o9Vsja3gvle9jD0xzh+wNdJRUyvCtnI3UlSTyHybTfN+Hc1WvR2d1a/g8gTi7GKTQd8SCIMwvArNIg1hnO8saSzsXo4gmxHi8jixrLGGYmZD2syg7W1dTbzqXLNNlr97UWTCbbII4Z+BhUKRQ/LMv31fvRT8iEx5XSBO4fDjkgmyJVGlEXvyRxOCtHUNeA2zPUEcyrzUjeqfpoF10iKiLiGYITZx6NMfZBadBt1iPUw8qEx5TRR+OT/rQWPx9EHwkXmhX1HLEpjzsoR9rT4NOTzRbLCct/04jnJAQlFxoe7BuIEnUHrgcFFX8p6jmqQ73LMstGyKTEIMQSy+rYR+0/BKoTjBeVEXUMqQnpC2QZVS2QO4lEp0i/0aTNE8jgxZjIzM5O3yL0zAjjFmsaKRqcFaoO8A25EsIg9DDGPYFFbkhl0WLORMmjx7jGo8nt02fk4PipCZ4U2xnZFy0ToQ46DOYQSBtRKXI3nj8/RPtFzcp2xm3CpMCHwnnG6dBo3rjxHgM9D1oSUw9DB58C1f24BGAPeR41LnY6ZkHuRN3Jb8jUxPjBHcNJx/XPF+AJ9PMCNg/zENEPrQb+AL8BiAY0EXUj1zJvPWVCkkRaxnPCOsA4wLHCmsn41wbtogIZEY8UFRCICTAEpgZaDWwcdy3VOg5D1kUqRTfG98BpwBLFns5J3x3zMQN3CrAH7gEe/ML5OQWaGlEuNDzpQp9Du0FFv629ZsDcyqzdcvWlBNcKFAT/+xT6XgJwFNAs/TuMQkxCgsBXvdi98sR41Svs/gAoB5wDe/gT9lkE5h06NKw/UEGvPLe6brslw5zVRe/MAZMEWvxg+Ar+kxbMMEo/OUPyQLO8P7w7xKTY0PGs/+/8c/Qm9IUHdibvO39Cc0F7POy8McWM2Un0TwFO+1TxuvTCCswp6zo2Pjo5ebibu/rKceW2+dP2QOxz7QUFkSM4OaE9Vze9t968kM4a68P4IfQo6cTtPQ3ILNk6rTonNJO4ncM43ej1EPnm7ivrLv9hI6w4HzziNnY0U79O1NDwGPo170Lp6fkHHNY1PDqJNO8vNLvJzEjniPEp6QriB/J5FqYx4jgyM3guX7q9y6nlCPJ26O/g2e0aEUEuhTekMZwr1rfKxsvgje495gTdzuPQA48m3zR+ML4oJy6pwTzaRe/g7YLie+Sj+0gfNDNLNXQtVinjNbXJxt7Z6Ovgndgi4B79mR4yLlgvGCgWJ+U1L8sU4aPpn+MA3DrhYfpKHYQvFDH/KDklbi2NweTUOOWH5BPc4tj25PH++B4iLhouDyVOIZYo7TnTz4zhhOQR3fvVhduA7k8OxCU7LssqSiKqIEcrvzo40Ajf7+JI3IvUtNR64Gb4DRPaJF0osCSBHQAetChZN1/Ma9tn4WPfbNe0097XruV+/b0VGSODJSghVxq+Fscc5itSOg7P8dnP3aLZQdT+0VrW1t+E8iMKBBvtIxkkOx9EGq4XZx5PK8o3v81F13bdOdzh1nnSzNEW1anev+/JBVsUoBzzHl0b7BULEVEStRmKJfUyfjxQ1KfaRNvU2J7UZNE/0ZjWdOHz8bsDSBOFHIceLxy8FgMSYxCyE4QdHCkbNL87W9U72j/a5Nbj04fR0NHa1eHdr+zV/aEN4RjhG8QbsBctEqQQRxIhGYojOy7vNtM77dif2r7YhdR80bXQINO62ZvmifX5BoMTUxlCGu4VRhEbDvMNYhQ8H2orGzUnOo/a2Npu2DnUl9FM0a/UU9wm6Uj7dwpEErETkxHcDPUIhguWFR0hLi2MNb45V9z62j7WJNN+0vPVH+CT8MkCBhBAFKQStAzeB50JtBK/Hxks4zMiNz/bctjG1JvTctY74IzwNgPiDxESrQ7DCKQGgAysGhspxDFGNf3ak9Zt04zTBdr35/r6dgl8DncLCQaeAz0NORyXKTkxjDOH2ADU79Iq2C7lx/nQCaoNEghZAlcDkw8UIfcsXjHB2fnVRNSh167ktfh8CEILIAU1AOQDYRLQI6UsAS/e1jHUi9XX3gzxyQNjCj4G/P/uA6QSCSQ8LEMurtcl1YHXUOJ29SIENAX3/cH5ZwUqGGcmZytRKonVv9XV3Q7wrgG2Bq8AKPtcAkIVlSTvKY0pq9bU1qjeHvDlAIkEgP68+vcBthRoI6snWyYn1pzXzOAG8oQA9ALn+5j55ARwGKAjLCaeIyzWI9hA4QHy9P3P/Bz3fPdWBZsYwCOxJWYjytfe2pLmw/fxAJz9sfbs94AFkBjUIfkiVCDT17La3uP68rb8dvvt9hb2mAA2EwQfBSJPIBwdcNnP3rbrTfdj+pX16/Fd9UwFKBYkHp4fhB3QGvTayOH77ib5yvvW+BH08fcyBeITch3MH/sdBRr82cLdiuVt8On41/ca89zwovfvA5oS7xvYHsocyxksGVHdgeOC7tD3LPsp9+LxkPER+J4E+hBKGSIcpBoKGOYW99vg3lblN+7x9T32jPI38O3vVfWWAZIO0RcPGzsbVhnnFfMVp91L4bPn0+/s9H/3SvV/8ifwIPL8960BGQxmFYAZIhq7F58VQRM1FHLeWuIA6C3uRPOU9Mjy6vC87u7uyvFr+EEBnQppEnEWuRYHFr8U1hF1EdAVYOHp5aTrW/IU9pD3x/en9erxU/DU8CH1avySBCsM1BJ9FdcVZBXxEw8R4Q+oEu4VQOKZ5vDrFvEp9LT1jvXG8hrx2O/p8FH1sfvKA4gL+REXFgYX3RYJFPYQUhBXEW0UShdz5NPoQ+7N8/L2R/a18wvxNO8679/xqvWU/awF1AuUEC4S1RLmEYYPPw/eDkQRrxVd5VXqfe888+v0SvPK8d7vBvAZ8iD2XfybBDcMdBAEEjgRzg2NC9sKUg5aE/AXf+nO7SbxAvOz8Ufvc+0X7S7xRviYAekKsA9UEaQPzwygCwQNIBLTF1nqNvCD8/b0F/J173LuVvAp+B0CygrWD1wQFA52C1oKSw7XEw7ohO1w8ALwQu6q7OfuH/Su/WUIVA4dELgNowo2CjsOkRXw6u7v8vHL7kXsRe1e8wn+zgiJDggOhwoZCW0NWxPSGVHwpfLK78vt3+6v9asAVAu/DUQM6gcJCW0P0BYe7SnwGO4R7FnsXvOr/mMISQucCCoF2gf7D5YXkO2J7uXrOevg7n35CAa9Cj0JCwYsB0EQpRdB757vVO067Xny2P7BCU4Mggk7B+cLYhTJGW/x3u7D7P3txvZjA8EKnQg9BB8GVQ/ZFpHuCe5964brEPLj/VIGnwWRAUEDzAubFCgY4+z96ufqofAH/bQGAAd8Az8EDQx/FJQYZu+A7AzsX/EP/S0GNQc+A0cCzwjhEhAX9O3663nrOfBv+2AFTgdXA1sCqgc8EXgWahd/7Cvrg+0X9RMAbwRmAV3+SADBCdQRSxV+7JrqJOv079D5zALnBMMCEAEbBk8PpBQfFmntq+v663PwxPnUACAC+P66/BsBtArZEUAU3hNL6/PqVe0d9Cj9vwCRAJ/9Tf3bA8IMihJrFMgTo+w47MTuevXX/bACTgJC/7P8jgC1CNUPDxNXE/8R6etL7C3v2/Rl+1b/4/4m/Cz79P03BAQMihBYEvMRsxAK7RbuwvEz+Gr+JAL0ASv/E/1T/RcCCwlRDvAQdxGfELntp+3o7h3ym/Z3/AUANQD//XX7Hvtv/d4BnwhADa8PHRAkDy0O3u2u7sDwuvSD+ZP9Qf8g/9D8tPu/+/j+AQTYCHsMLw61DmwOSw2hDALv5+9l8jz2xvq7/aT+y/28+3H63fqd/coBhgb2Ck0N9w3tDUMNaAz575DwDvKK9PL3IPyD/rv+lv1f/Fz7B/zZ/dMBGAa1CbwLjAxMDB4L3An3CTzxkPL89E34kfvb/V3+Rf3m+1H7Ivs7/XcBvQXeCLUKQAvKCvYJKgnrCIfyzvMm9pD5iPzC/UD9Wfxl+7z7df2mAL4E3QdpCQYKbwmBCL0HPQhL9P/13fgo/LD9rP2a/Ij7b/um/GcAmQRVB8sIDQljCHcHWQf59CD2svjH+3/9E/3/+/b6W/ud/YUBIQVEB6oHZwdCBjIG0vU59/r5kvy3/UD96/uT++r8OgBUBIYGPAe8Bu8FmAXn9l/4x/qP/NH8vPsV+9X7wv7BAlIF/gV4BZIE6gTc94L53/sw/dv8z/vb++/9WwF8BHQF+AQHBD4E0/io+un8p/3Y/PP7nvxM/6ICagR0BHsDOAODBI/6h/yN/Qv9dfwK/ZH/lwIEBPUDNAMzA4QEtft2/dD9//y6/AX+yADnAlwDpAIkAgsDfvsc/dP9X/0O/c/9NQBuAhADigL/Aa8C/gNS/Qr+nf1R/Rj+JgD/AXACCwKzAXICiQPo/Un+6v3G/aH+dADOAfQBcgFXAScCAgNS/nn+G/4j/gT/jgB4AVwB+wAFAcwBEP6s/qL+XP6D/l3/hAASAe0AlAC8AGUB2wHz/uf+xP7q/oT/WQC2AKEAbwCEAO8AOwFN/1H/O/9P/6T/IgBoAGQAPwA9AGwAmACh/7D/q/+w/8v/+P8dACIAGAAOAA8ADgA=`},{name:`dismember_left`,sampleRate:12e3,frames:6480,wav:`UklGRsQyAABXQVZFZm10IBAAAAABAAEA4C4AAMBdAAACABAAZGF0YaAyAACXAFEABgCR/wz/nP5g/jQDyQMSBAAEtQPdA8cETPyA/NX7jPqQ+R/5UvmGCGMJcwm4CIIHkwcoCcP30fj999n1OvSP89PzFvXRDlYPrw7uDGALHQx4DvkQrfS/8/bwju5z7Zrt8O5v8ZcVvhVnFO4RjBBMEfgT3xY98Kjv1Oxg6UPnL+aF5hroqur2G5UczxvWGQoXLhWWFYYYKhwAH9nqYuqY52vjaOCu3vzdvd5N4CTjDeYoJXolgCQfIiEfmxvEGV4aix2kIWEljChXKoPkm+Ny4NvcCdlI1jPUL9Mf09vTdtVE2N/ajd0f38IxvzE9MfIvbC1+KlAnBCWWI8gjNiXxJnMq0S25McU0ODfEOLw5y9lb2arX09Ry0SbOlcsLySXHw8Raw+XBRcGnwJ/AgMBEwQvCpsOrxH7Gk8i2yQ3Mdc00zhDPlM9kR3xHd0euR4lG6kXlRExCOkCGPXE8sDoSOIc22TTOMws2HzcHOY86QDvUPrpCoUVxSPNKLE7LUFtSUFUmVjxX/VcAWYzEI8KHv+m7WraUs1iwN62zqTenuqT0okyiy6EGoluiv6JTpauooqtwrhmzqLhBu5i74L4YvFpg3l/rXp5by1ayUpJNvUgURhNFfEOTRtpLq1KeWP5dnmADYrti9LhJszytIKZgoOCc8Jrgm7edW6BFpaqrqrLyuEq60WPKXoxXeU71RD0+yj7VQ2ZOH1kAYdBkV2aktmyvqKYWn+2bk5thneujk6xXtIi1TLCFXKpRBUhXRDFJb1NzX3Zm42j9ZketiaH/mnOYdZqQokOwPrxQvtVlhlyxUIpJ806eWWpj3Wh7aBOsQZ+emBqWv5lWo1SvDLcqsaNeZFC1RfJM4VksZIhpEmjnpq6aeJX0liOf6qyHuuS29GCcUfNImk4NXRRoDm1QahqmN5t9mNSamaeot1i/RrReX0FRLkzEU+Vinmrpa49mfZ2dlQqUcpidpOKwaLOmpp9TJUc2RoVUmmS0a01sj2XJnUyVvpO0mNql/LJmuO2uFaLjUu5PQlcaYnJqDW7ba3plopsJlFqTHJhuogWw/Lf3s7ekPZkpTBpE/0zhW9JlOmuMa0NnGF2RlhKTDpMil3GfxanrsAOy0qvEoGKYIk66SDpNqVbAYb9qfm7kb/NukmfZYPxW55aflQKWnZmpnoyleK21r6+vO6goo2abdZankkND9EEtRgpPWFdFXU1lymkxbHxtZ2yCahlmW2BLWeZT9ZRvlaqUwJZomMWbd6GNp++rwbHwspu3EbnzuVO337G+rCGn1KEsngyaBJYYlNtGqESrRWhIRUhGSfdNQlPzVVla8V/VYpJlrGl4a5FsEG1bbdds/2saawlpB2aKZWRj+mD8XXxapVYgVA9Q6U9MTDpI65Pdk9OU9pSVlByX35e/mTid058no7Cm4Kr0rxaxDLSHtMm0a7Q/tYuzp7G0sPqvnK/AraKpTahIpD+iM587nLKZy5bSlHNBz0AZRFFF9kiDTgxUhFplYCtkqWfQaQtr9WvqasNp3GbUY+5fEVrsUgVOrkgCRkeXr5gQm92di6LXphqrlrDEt6u6oLc8tA2tw6Zcon6eqJvzmoZIsE3HUjRb5F+3ZNVml2X7YKNcd1VBS3FEnEN0m5ufYqaFsWm5c75IwP62LKugoxKfBEubTRZYw16iYThjCWEEWkZPsEO/QKacKqMWrz25Mb0etyStO6QinwtHn08lWjFhZWNtYP9W2krdQv2fXKa8sDa9br50spCmEqE+oUNQvVxlYuhhF1zrT9xExUOHp3qz4rzxvcmwTqQDobtHIlX1XU5g+FxRUKpEtEWcq3+6hcSxv7+wr6RdohBK/lZsXX9d+lVWRp0/TkbIrrW7l7y+sVyl1aCmpEpRpltcXppYKkz2QfZEcq/7vNfCPLqUrs2lfqbnTsVZ5FyAWc1O5D9RObtF4bEvve67FrFnp6GjYKXwTExW6FnuVLVKLEBuPe9G07Y6wprGf7yVr+moH6jErQlVB1v3WqpVN0wKQ8k9qkREUGO/kcWgv+yzNau6p3upaLC4U9xY0VlzVu9P40XbPZo+y0WPTii+OsOVxIy7vLG4qsynG6dRqiCx71A1Va1WVVQXT15Fhz3oODU5BUCZR/BOf78UxgnGZsLTuvuy0K3fqvCpeKqzrBOys7flvt9W7FdGV8FUVFEdS35FFD+jO707lzwyQVJHLkwjUW1UEchHygbHvcQGwCO827cRtLqwZa2Rqz6rAKsNrEet7a9Usuy0hrnUvXRUF1arVmFWoVXBVJJTY1HGTtxJREfUQ0NApjwgO1U6djkaOQ89jT9DRI9HlkwnUF9S/1TpVq/LfswLy6TK5MUawpW+wboruHq0CbKor3KtlKybqzCrharZqY2q06vtrVOxwLRPuKu898A7xrxXAFncWN1X9FYcVYlSrU+JS9xHqEJwPp08/DlLOww9H0CURD5Ijkw8UB1TX1XrxcLGD8M8v1W6RrXKsXCuEatIqQipMqtori6y6LcYvO3AuFdqWOBWOFMzTkFIHkLmPbw7wj4ZQwZLYVEeVnRY58WhwSm6FrJ1rFGp36gQqqCumbY5v+jHulrqWJhTrEy6Q749ND1/RH5NEFVgWPrCTbuzsrGrXKhxqJSrcrJfvdHCM1loVD9KPz7NOTg/AUqeU3hZy8L7uQ2w76hzpkGpu7FuvDDCgljeUIpE1DoRPdlI41MXWrK/pbWjqrSkJqU3qzW2GsB2WwNVDkk+QJNCRk4OWMtcO774sBqniKOzpp+xc775w9RaW1CjRP9BykxGWddeEV5Fs+ym3KEspDmtXLmgvKhYvEztPi89Y0mTVtpdzF0asjimXaFho5Sr37gSwDC52lNlRfY/4kZQVNddW2DqXNSqHaKooOaj662Qunm/nbiLVQFJTkNZRzNVPV+YYglhsq51o4eeL56DoyatlrfFvCK2Z1fMTMJEcUSGTQNZJGD3YvlhT1sopLydMpxxnZuisqu9tfy6sbmGsVpW4kstRKNCakmWUndbn2FJZIpkJWF8XAGkyZ4unL+bZJ6Mo7CqerQ/uqK92LoftPuseqWTUHdJJkRMRF9GTEz5UzlbxWC6ZOJmFmgTZ/5laWIIX0daCqDzm/uYCpcCl3KX85hcmmKcOqDrpC+qYa8Is4q0Lre2t6C37bP9sECtoamSpl2jlZ/aUyVPeEyaScdHvkZrRZdGDElGS9pNo1FjVCBXill2W6ldr1/eYH5jJmQ0ZVdmVmcbabZpiWrRapVqemt6a8BrjWuvamhqxmjWZwFngmWnY1Bi6GCUXk5ci1vlWDBWoZnQmC+XCZZClaGUdZQGlLeThJNCk72T4ZPXlL2UQpVCl3aYjprdnOaeSKKnpJOo5apSrDSvXbDfscGzCbSHs6G077EzsMmtr6vJqF6kyaALnqtYVFUOURhON0ypS2BNvU+eUwtYLV2EY1xnUWonbJdtX21Hbd5qc2ipYzJepFjilmuUGpMrkiyTB5bumqOh3KdPruez27ZEs3OuaaRnnVtVtE8JTfpLVFDAWtpiQWoBbThtWmuMZ2pg6FeGlICSXJNOmF2ggaphsjO19682pyOdXZcoSy5LRFTPXlxonW2Hbo9rCGO8WGiV65Jel8effqxntWS38q58oIKY1U13To5ZCWVma45r2mYVXSxPoJKZlAyc6acStIO36KvfnU+VJEgwUhtfrGgFbP1nVl26T0iUTJalnYKr0rSOszOobpydlfhLYVVZYsxosWkjYaFSu0Q4lFOZwKdntdy3nqqYn3SXFUfiURpg0WfbaCFltluSTViXSJvLpQyyRLt+tbGlSJrNlSNHjlZcYitp/Gc3YtxXAk6DmUydsqdCtAa7tbXZp8OckJfAQ29OrVoTZSBoKGfxYVtWj0s4SLibFaPirGe2nbmUtWKrc6BBmg6Zu0fLUaFcA2N5ZeVkf2GxWGNO8EbZQ7Gb46DfqEexcbZNufmzGKw1pKWezJummribn0uuUsla42DtYyFlTWPBX25aBVQUTq5Ji0XLRryfgaPAqHivPbMvueK9575KvqK54bJLrFCo46Wvom2gDp/Fntmf8UqUUX5VSVpmXgtgJWNIY6BjiGMRYRNg1F1CWq1Xe1JtT7RMR0ixRxZFxkP/RBVEgUMKRiakxKVRqCSrra0YsX20U7kpvlHBFsMfxDXF8cbbxNjFdsKzvZG76rjatayw1K0hq9+oC6cppWqk5KMXo9ejTaOeok6ikqMLpW6l8ETWR1BKBUyYT1lSglRSVnJX3Fj1Wahae1s/W51bIVplWcpXXlbDVI5QkE1uS65GJkUiQZ4/YzysOxk/F0H6QkWsP7A7tAO4Fb1ewZTFf8byxa7DQ7/su1y4QbO1rp6qwKi1qNSnzKe3qWysr0tgT1tTaVb6V1JYLVgBVWNQWEsgRu1AcD0TPbM/k0R8sTq3mb0iwj7B471ytlCwd6vnqBWo4qdOq3pJUk9JU+tVoVQwUDtJ40GhOIo4K0Bns3m8AcfBybvEk7x5tBOuDqw2rj6zMFFFVoZX3FNISxlAUTYdNylCVrbQwDHE+r4ktgyu+qrnqzWyNVEJVSBVr0+XRRA9WTtZRCS5XcJMxYW8hLLBrDusoLItUQhVnVS5TtJCujZoOARFgbkmwUa9lLM2q8iqpa/fuvtUWFb+Tz1GUD0tQEtJ7L9ywzO9i7Fgqwqr3bBvUddVblQTTTdBWDuTQr5O7cT6wqu4wK0BqhesurPqUlxVdlGVR9g8Hj2+Rr1REcsTyFC8DbE4rP6tX7XHvv1VL1HRRx85YzQjPVdLKlSCxQS99rNfrDWrGK47t/fB51YwVQNOsUEPOg08F0cFUjPF/Mj8voqzJK0oqtmr27KdvJ7DFVcYVGFN4kEPPNE740EkSfRRRFVuwGS7X7MerFioM6fWqWOup7awvWLEBlmQVulRpkqFQjk+Xj/vRFdJUVCrVbdYocT3weC71LPyrFmpFacfpuKm3KherZSykrjVvjTCh8L0WBFXI1RMTp1I+kM9P709MDyFPTpBIEaKTI1RhVWzWGNah1w/XYrEI8P9vlO5FbW+sViuzan8pwan2qROo56jwaNbpL+lMag+qtKrmq+JtOq3qLtMvqm/csJowkDC4MEtXWJcb1tLWkRYOFWuUhhQMU2RSkpI8USuQQZA+T4zPSU9iD2rP5o/iELPRV9HoUrhTshPylLbVTpZtVqlW8ldBF9QYKxhp2GmYcq8WrtsuWC1kbILrsKrtqnopfWjtKF3n12fUJ6bnq+dwJ1fn6igK6MYphup7au2rzy2qbnfu92/Tr7JY49iCWFhXlRaDVeJUk1O+0pWSs9L7U8uUnZWCVtPX8NixmWUZuBl1be3sx2uUKe3o8SeI5wdnCud9aCYphStcbRGubm9/byQZOFfHVhfTwNJ8EYzSnRRQFpUYQlmqWg6aJmzrKktojObUZmImnufBqdLsLe6/7syZXJgdFbaTLZIOExRV5hfrmXKaApne6rCn5qZaJdemJyfiazatqO6VrPjXjxSJ0shTuBX5mHuaNlpS2Y0pKeacpZbl8+ec6uut5G7s7LAXeZQXUpgUQxdMWfPakto7qKRmQiVPZUAnKWpLrffuNGrAFqxTTlLxVZCZOBr7GzUZ8ihPpgLlYOZIKQNsjW3vrDwXvdQeEkeT55bsmdDbM5q/2LUmpuUBZRYmXKkArGLtVisDl2rTm1FBUwRWzxnkWzbawJmCZz5kz2Sq5TcnNunnrIss4iq9560UoZKO00eWJxkLGtabsRtE2hOXkSY4JR0lXWaraS9sJm2qLa7roGjUViCTdtJJUzHVA9gnWdBbA9trGq+ZWhc/FImkhyQwJDDkwOZR6GRqge0Q7fCtvuwsKiYn5eZGFDISvFJeUwaUgRZ1WD2ZqlrGm5+bxRv0G2LayRotmIiXaNWSpfelMKTipMnlE6VqZcLm1qekKHAprWqqa7SsHuz4LW2tfO0irOisByu2qqKp56ju5/5nA2b+JjoloJNvUr3SCdIMkcgR0NGMkaxSGdIPEqkTKpPpFKdVNlWBlmIWo5ci11LX/xfFmEHY1FkHmYbZlNn9mjCaWZq5WrcaihraGqOashq2GqeagBrMGuoaqtqSGvKa3ZrK2tEamNpxmj5aCZormZdZXhk5mOgY2Zi7GANX2xeWV3QW6lZKlZFU3BRuU4vmr+YSphPmBaYQ5gPmImYaZnCmXuaEptRnDGezaCAo16ntKncrJmwC7Spt5W5KLq1vKK7f7qpuCi1l7FYrfqpwaZAo9GfsE0VS1lJxUp1SjhN7lCOVItZsV1lYbZjl2Q7ZURkP2G1XTVYEVLRSnWc8poEm3icF6FApvOrVbJMt1e5qbcVsuuqmqNNn+9D1kI+SBNPz1ZmXcphaGNvYsheyld+TnRGFZ9noYqn6bCYuVW/bb9otsesnKRaoOFB50dsUo9bJmBhYaBe6FYDTA5BFZ+qokGqp7QPvOi6rrK0qHqjOUOISfFTgFzpYAVgp1nITmlEJaIVp02xQb6Rwyu9b7HNp7ei+kTRT1JaAV+hXSJXx0sTQdKk8aqatfHA68GguPes8qVBpctJplXcXL9dR1nUT/pDtT++qAGzs722wI+5f66RpmOksENeT+dXtltiWa5QVkSbPFSmkKygti/Bwr5Otdasv6bApcVFy1HvWe1adVh+ULFEmzxhPvqrgbVCv8XDp704tNyrsKdJqdRIb1IvWFZa1Vj7U9ZKAUJOOUQ+xq3JtMy+KcZaxPu8oLRyroqpCaljrIpMkVJiVkxYdFfkU21OSUU4P944VjxPQyeyn7ctvSDCysE4vbm3mrGrrNypUanMqsyrl68PTD9SzVR7V6xXCFb7Ua1OpkrxRJ88uDjlNvA4Dz3UQ8ZH0LQXu/TBScZ/xxbFTcTOvsi6qLdds46vLa0zq+mqNallqgmrGKz+q7quGrHcSlBNV1FrUoZUDFZEV1JX61eUV55XglYFVSpUgFGGUL5NK0puRohDhUBcP/k71DtVOu86ojrwO+s8pj+qQZ9DKkbkR+G0SLajuF67fLz9vmDBi8P9xV3FYccIxWnDfsMNwkPAt7z9uQi4/LV3tYWzqbEOr3Ctj6yFrKisAq2VrH6tFa3jrqavKLKss5W22k4KUSlS0lSBVl5YCViHVydWtVQkU+RQxE3yR4ZEFkFmP789hzwNPao/XkKCRyVMq1DEvLzB7MRWyN7G5sXGwZ+68rOHr3GrUKkMqPCpJav6rt6zZFL+VsBZLVtLWulWc1K3S5hGC0A8PYdAHkbZTXO6xMPuyWHHs8Xpu8Sw8ar+p/inKKrerja14FXrV/hYZVQSTalDeD8SQHtJDVIkwILDDcKvusCyOas+qLWom65at5NbuF3iWixTE0iEP84/VUaiUTi8z8AYu8+wsqhWpIalF6weuN1bJFt6VmdLBj+bPgBJIlUovpG/5LWUqeSjd6MxqTqz0lvUXJJXs00rQwdCV00AWe2/EL+zsJ+mKqLXpeWw1L3mYF5eUFVJS79FKU28ViVeVr9htbOplaJ+ogOpqbbUwl9g61ibSro/lkNzUPNbOV91tXKo+J/jnUyhXKvEtwS+rl4DVXFKcUXRSFRU211aYXm3BKtdoTScjJzaoiuuRbfFYNRa7VDbRDpBe0ZrU8ddq2JfY1Sx56Z1n3ec+Z3cot2r+7UJuAdh9FkUTyxFTkB0RxRR+FuwZLBmsWWms9Go4aFlnNebep0voXiqVrXJvVXD2L5mZeBeK1czTh5KNUpuTUdStlmyX7li42RSZkRkyaxLp5qhdJ19mk6Zfpn8mnWdPaItp5askrBvs7m3iLbhssuukl9XWqhVuFEgTnhIykVfRRJHMUrvTyVUc1boWU9feWOiZnFpPWr3alhsbW3sbZps12pMatVo+7Hir6Wt3ayxphalYKQon6qbwpncmD6XM5YnlzyXZ5fTmCWayZoImF+Y6JYrl++XW5gRmJaZSptvn1Ch/6QEpv6mIKiaqsKr2KsUreqsp64AtJq0zLXft9W4u7kStxy4GbaVseawCK+6rVGrbamnqdBkRmMYY4RhQV9FXmJcrVtcWGVW51UaVFJSPFHpTTpNokrZS5xLuEpZTKBNElIVVyZa0128YUpl4miDad1rX21vbYpuPm+6bZ9s5GltqimlYJ/4mv6WbpRAlCaT2ZPElVmXr5tZoD6lAKulsIyzRbNHsP6tPqeHYFtZ1lL+SQtGXEczSwZTkFvzYyhqN218bgduXGvLZh+hmZnEk+iRrpHrlCSaK6E1quKwIrQhs5mp0V7lVDlOzUv1TupWkGA4Z2Jsnm0kawBjrJvVlNySPpRimjOjBKzvseiyjKlLn7tQu0VmRZRNHVzaZrFrdWzJaFxdCpl1lfOXtp+Iq9C4l71EtbGpoFgtT9ZOxFYnYhpqX2zdaqpjlJ7/lyiYK55qqjy27LzYtJymI5uDSZVIS1PWYLNoI2u2Zv5dnZv5l0+adqEerp+73bvcsdKkoJpDRwBMrlnvYxhpT2pYZ6ZdD1J5mSeaY6E2rd+4R7sqsqmmTZ1HRoNGWE42WWxiv2WyZUtfslVwS3uY0pl/n+SoZ7V2vLe7KLKlpk2eM5lHQoJIclJfXT1kzmblZt9iN1wSVLBL6psmnAqgqKd2r7q3bbwZvEW3sq4ipw2h4529R65KTE/pVfBbOmGoZClmVmWEYzFfUVsIVQJOHEkaRpiehaBNowWoKKxWsmG5O70ywHK/SL78uty2MLJ8rQGpcqW3ohmh+58Mn1hCoEUgR3lKEU6HUTJW21dCW8Ndvl7nX1pgZGGvYYpgw2CfX6Bfsl4hXVRcfFqrWFxXMlW3U15Pw02/Ta1L70lgR45FvEPtQZ5C+kEiQA1BA0FvQJVAqaNepNykVaQopYyk56TIpomnqqeHqJiokKk2quKqHavNqyesR61Pro2vd7BhsaGyObWItsC38bgiuXq6CLwovAq+/7zvvFm+dL4qwK/APcE2wiDC4cOMw8bBHMCBvhu9Q7yXuhS55Lfptfe1h7WxtLCz6rEAsZuvJK1QrPiq9qnnqAqo3KeLp2ynMz62QFJD8kbcSfVMZk9JUmlViVepWDZZQVnpWHpYjldPVTtSf00uSXVE4z9KPW876DoqqtCsYbE6tii84ML0xrvIScmbxfu+J7lksletDapaqfipwj+kRatMlVG+VQBYrleWVS5RCEv1QyI+JzsvPqOvjrYkvoHFc8fZw4a7YbTLrTaqBKp7P+9Hyk/KVK1WFFQ8T3RG6D1JOf48l7G+ul7Eucm2xAK7oLHqrDus+0PCTMpTW1asVEVPfUWOPOM7L0OmuBTC6sawwn24sa+Dq0GsZUZ7UJxVOla/Uc5IVj/qPB1EXrmHwqzGor46tFmtVas7r5FNnVTxVhhUkksKQJE5WT84tfC/XMZbwPWzqKxoqiGt4ksWVDNWjlNnStI+XjiAPP9H7Lw+wlvAg7bVrumqtKt+shdTJlf4VmFRHkdcPXQ8+kRaT2XC2MbBwHW2f61Tqdapc64+tyBV8laCVGJNIETJPNo9SEV8TnLAcsZhxKO747LurASq2avdsFq401WfWJtYdVR1THxEujxOPJlCJUwcU3HBa8UHxWq/Vbc5r9mqEanjqNirYbFpuH9WgFl2WttYclRpUA5JIEOnPy5AWkKKRxxNlFMaV3jCJ8TEw/m/Ubv9tG2vM6rUpy6mpKVFpWmmqqjVq7uvibSLuNG8mVn+Wg9bQFrNWMxWwFTgUZdNoUuLR6RDB0LKQZVDaEOORCxIS0qUTVZRt1NHVpFXC1kLW8dbdb4qv1W/1b/uv6e+AL5xuhO4sLVgszWwMa26qauo/6Z7pYykHaNIorSiz6KSolShOKHDojijg6R1paCm8adUqVyrlayFrA6uF68SsZayjLSxt3G6+V95Yd1iRmN6Y+Ri0WA1YNBeGl0kWipXEVXWUA9NREuaR9dDWkMlQrs+xz6oQZhDzEcMTfRP31M7WHZcv14RYupjxWTXvNa/77t6t0SznK+ZqUqmc6JPn3Scops9m5Cb2px1n7eh0qWQqxixcraiuvJl7mOtYX9dh1lUUzFN90aOREBGQkycUnRbIWGEZDtm/LsOuJixZan7oRSdfJnXmQWdfaLGqZqyJrngZ7tlrGAJWbVOT0b1Q3VHZVGfXBlkJmjctRmuYKTmnLqZsZoun0Sn2rLCvHi/Wmh6YDdWikuAR7VQWl3GZkFqSbqdsTykaputmX2bAaNarme5trZFZMdYxkyxREtNpVnwZflqerTIp5iaKJWMlNuYCKbFsU61gmU4Wc9MjESuTxdfVmetaoKtwKFtmCuT45SRnHSovbVss7ljsFMBR6ZJXldMZChr02n8pWSbYJRxkkKXp6CtrvixPK3IXepKckLxSeZXd2VZafhqi6Q0mX6ThZUTmy+o1bdHv9e17GSDWkJTkFC/WpBkL21IcctvOrBooaWX7pV/mLCheqxsszW1kqzvX8BTQ0eORFtLUVRoYd1ni2qxatNlcZ2llXyRuZGMkxqaEqISqxWzxrVesWOoP17eU5NLg0j0SQFP/VU7YLlncGsibkBtf2vuZuJglJ2cl8iVpZRMlEyWiJmRnjGmCaugrwSwfrJetFCv96rPpuGfFlv9VstShU2FS/NNYU5nTg5RjVL5VjFb3V0LYSdksmdwadFrMWyJbaNtT2+ebt1tXGyparpp5We5ZWpkHGCvXHlZyJuPm8WZHZkdmHKYEpjWmK+XwJYNl1CXrJjKmOyWWZdIlraXp5jUmCiYWJcNl4CXspcRmeSYnplfmRuZ05hhmb2aSJv8mWea9pmimsacap6Znped3J1hnx6gjqBCoKCgqqENo8WjjaQ4p9KmwqcNqq6poKmNq4yuMK7FraSvwa8OsaqyG7TwssqzxLftuP28NcARv8bAbMFZwwG/S77Ovra7v7ioucK3NLfctDS0+q6nquqnD1h4UuBPkErOSOJGIUiKRyVIvkpbTP9NxlHqUylYOVzTXmRhvmKfZLdkYWQdY4Nh8F40XNBXT1Lsob2fNJ58nrmePqBHozSnC63Ysp+5pL6ewFG+J7dgr4CoIKPTReNCOEHTQq9J3VEhWddeRmJUYrFfdFy9VixPzqJZoZKhvKQnq22zVbu6vme+1bZ9rbWmEEWwQhVHtE0LV7FcF2D3YNldKleYTZGiQKJPpIqrhbXIvYLDpb7/tAKrYURBQlNGOlC6WThe2F8oXUNXeU7apbml6ajwscO8kcMWwZ+2iKxzpac8zkL5TTJX5VurW5lXtk7OQ2ukbaYfrM62JMLKxZW+dbLoqiBC00NnTCxVSVoWXLhZUlOwSDVA5qZkqsmyVL2+xErCKLkury2p+D1rQoFLOVUCWvdaYlj6Uf5Hcz3+pYen56s8s3q8BMHzvVS3PK95qTOnQz1sRbVNb1PiV5pYj1byUa5LNENQPIGopqvCsDK2cL46w/XBNr2at5Sx+aynqjeq6D4oRCxLflANVdpWIlfyVRVT606WScBEjD+FOhs61aqorO6wZ7U3ug6/+MJoxvDFJsNpvo+5G7YIsuSu26xdq5uq3qq4PppAhURKSIFKKU7vUI1TJlVnVmxXU1ctVxlXrlYGVWVTgVF3TilMbkkJRwFEwEC9P4A9VTzFPMg7hjrjOUU7Fz0JrDOt0q3zrQGviLCYsWazAbRUteu1/7eGug+8Vb2Zv96/0MHVwgvFU8XtxKfElsXyxAXFmMRgxlHFcMSOxc7EHcUtxSfFtMSXw4jBiMDevbu9/btQu926G7r4uLS5zbhSuZO4s7cEtwW1hLP+sUywEK8arv2sQKx4q/WqWar1qeKpOaqxqaqp8KkKqoWqXz5nQVVDrET5RxNKakv8TeRPv1H3UjpUvFXZVfJW9leDV3tXtFbsVY1UmFGUTlZLBEfcQ0o/HzwFOA44CjuzqYmrNa7CsT+2nLouwAfC48ODwjC+Obp4tPWvrKv6qPinsKZHqJ1DbkmjT5BUklgCWgNa31gcVXFPYEhEQZk8KDyMQNurv7KEuaLAusIAwU+6JLK+q8mnC6ZfqBNL61JfWJVazlnTVcJOaEWyPJI6skGXrNa19r/AwcC7mrFNqRal0KSgp0lRvliMXGtbglXiSn5AzjwARbut2LeVvue9PrUnq/ak1KN3pzBUmlwZXxhcmFMHR4U/2UMRrJ+4B8DzvZGyYadDorui/Kj/WHNez17hWOZNRUNEQo9MtrOhvYC/arShqB6iqKFIp0hXOV7dXrhYYE4IQ/M+e0ibr1q7EsB3uV+tbaQDonqlGq54XbBgKF75VURJG0DwQdhOZLQYvo697bTBqKyi8KAoo1iqjVsTYPFfC1rRUDBFM0AlSO5RIltXvbq92reIrbukaKCbnxWkyauFtdtgtGCdXTVXpU6hRptCs0UkT3lYzrhav7S+4re7rienTqLIn0if7KKFp/CvULlXYm9i/2AQXXVYzlDBSmlF00MeR/hO0VVjXEtgZcFiw4HCKb4DuKauq6e2orSfyJ2AnUKeYaBVo4Wo/66StCS5f77jY2RkS2NEYjBh6F4rXOBYSlRWUBZM9UmlRqBD40JkQ9JFhEjPSQdMkE+ZU+hW1lkTXIJd+14XYCe+ksD1vzrAI74Rvjm+wLzOvOe5GreKtgGzBbKNr/Ktfqz/qeOoLKjWpf2kfaMqozShQaCrn+CeCp7inYadj569noifFqCCoLOg+KAJos+jZ6T/pPCl56f1qcirpq3Nr/Gw5bENswi2s7hvuDW6zLwLYLVgeGBQYMBfJV/0X7VgFV8gXh9dKl0dXDRb+FfFVUdRBk9kTClJTUWSQ/k/FkGvP4pAUUKoQvJEgUh+TKVQY1SLV2Fa1FwxwEnE6MOywkXAJbuztrey3a7JqiqnaqWopKukVKZBqbSsCrBmtVK7ncD2xHNfk17xW8ZXBVR1TYFIikJTP9BAkUTqSo9RUlZ3W0BdxseTxMG9n7Wtrhur5aiHqLaqUK+nuI7A5cSGXDJabVUSTv1GwUCKPLBCtEvSUzpZ3sKTwvG4krCHqRumJ6b3qMCtn7iiv3lYflSHTrxDbD1IPShEJUt5UhBY8sTwvuu1aq0wqWapIK4at4G/EMZmVZtP00VZPQA61kBbS5JTTFacwzW5Ka94qc+oDKyosje7uMJSU49NQ0Z+O8M5SUAPSqdRb1THxG29uLKWri2tkLCduBjE6MzqyQhQiUfTPWo7Qz77RkxOC1K3UnTCK7o9tI+wT7J6t27AMss7z4fLYE4qRt4+DDq8PApFikwHUbZSFFEfxCO7WLQhsUOxZ7MfuWjAu8h7zNjHn0opRjY+kDdENk85xj4LRddKKE7ATgpOeEvuvzm6u7WDs3yzuLMitlG5uL1uwqbFzcdgx2LDKERmP5Q6ezWJMq4x5zLkM904iD1mQvRFiUh8SrZKBUtWSyFKj0jyxuzE+cFPvgC9DLteuRW5Orn0uSm6frv0vPK+mcDgwu3EgMYAyCXKo8tRzfLN+s7t0M3SN9OE0jbST9OF0mnSJ9KCz0jNp8zcQnxCkT+RPrM8FztUOoI5xjhOOMA2eTeDNtI1lzYrNmg16DTaNAU0WzSwNeY2CDZWNb40oDNLMwQ0rTM6Mw80DzO5NFA1iTURNRQ0+TSnNKAzijOqM/Uz5jSRNBY1+zOUM7MymjPVMvoxzjGCMWMwCi8fLSouDC9FLkwu2yx8Ldot8C1nL/QsLiv6K2MszSwwLCstYS2NK+srGSrjKOUnjyiUKcsnyCf1KZ4p9ypiLGUsQizFLaou8jDtMEAyljR6NSY3LTi9OIU6WTpkO308bDy4PIE8wDxNPD070TpNOtDSvdCUzZvL8MmKyKTHSceixsbHesiAygzNm88g0srV9dix24Tbi9rd1/nUTTSmMM8sEyk2JuMkciZrKeEsQDFwNH82WzewN5M2OzSZzsXKJcl7yK3IKcqVzPrQxdTu2CDbw9da1BAw5SuBKHwnyiptLhE0zzcZOTY56TaZMzjP+MsYy3LL5M3A0gfY69s+23XXVy+/Ka4lKyZzK/YvnjRiNSU0VzEIzsTKa8l+ygzOUtJI2APa19dT0tso9iMnIt8nOC+iMzQ1HTQdMIPOqssTy0fNg9GR2Dfdydtm1pLQ2Cb7I38lZitpMG0zWTO7MAorEczDyo7Lz86a1I7ZZNtq2D/S4c2dImwiLCeVLMAxADRxM1wxeSyUzjvN9c3D0JDVqdvO3wTeydeu0SrOPSOWJOgoni28Md0zpjTcMycxEC1tKM7N983nz+DThdkV3jPgpt9m28/WPdJ8z1wl1SSFJqAqEC7/MAAzADQPM7MxMC9BLKgoAM7azefNB8/B0fPUZthN2zneq98M3gjbN9ih1NrRwc81ztwiSSJrIsgkRSepKlstwi8FMgkz7DOTNEY09DNCMy0yLzEyL+wtXSw2KvQo5iasJJnN/Mw3zfDME80lzvnO/c8q0RPS29Nk1UXXbtjY2HrZzNrU28zdm93s3CHchdzB2yzcT9vB2iPZ/Njs2G7ZVNgE2OLWRda71ZXVwtQX1HHTLtOi0vnRPdHL0CvQic8az37OEc7nzcTNx81+IrMityL3IkMjTCMDI18jWCSpJHUlIyZCJkcnRCjxKAsqOCpUKzssHC3fLawuyi+8MNMwXDHOMb8xEzJwMm8ypTLEMlMzXzMiMyIz4TLAMmEyYjGcMO0ubS2ZK94pjSg6JhkkZiKxIHTNvs1+zkDPFdC40WrTXNUH2GLaV9y73ajecN6T3Sjc+NmU1wjV/NLv0NDPaM+LIxMk0yUCKOoqky3xL3ox7jEeMrcxmTDALhks7SiSJXIjgM+30O3SYdbX2SrcQt1d3fba1tZC03nQBc/iIEck2SgOLQEwqzGWMd0v1ivMJ80i+B88z2/RcNV92k3eHd8E21PWWtI20C3Q2yanK6ovxDH4McAvtCv/JZMiotDK0w/Zbt4Q4BbdRNep0pDQNdEnKEwtdTAcMZUvUiuBJb4hV9H41CnbqN/y31TaztQ+0e/QeCUwKzsvVzC2LgIqHiTcIfcjxNYm3Rzhp99z2WjUmtG20VwmMiwmL0QvpCyaJx4i9yBIJQPZB9/44P3dINjI00DS3NJWJqQrNi6bLv4rPidcIekeVCLB14Ldx+Cm30bbPdZY04HS29OSJvAqfi1uLTsrlCcTI9gfTCBIJO7amd894qHhyN1B2VLWtNS61HfWJie5KmMspiyRK8MoSyXeIRQf2R6VIQkm2d3c4bvkb+XZ4nDfwdum2JjWJdbL1iDYV9pcJxwpeSomKyIrCSoAKPclSyLtH0cezhyeHCAeqR89IhwkM95T4Bziq+NE5EvjWeJ64A7fFt2L21ra4tho2BfYO9id2P3Y0dl12lPb+Nzu3Uff3iWAJvUmMyebJ7YnwSfWJ8YndycXJ3wmEiaSJQklbiTDI/siNSLoIdAhmCHqIDsgrh/gHvodzR3CHHQbpBo7GjEazxkKGZgZZhl4GRMaQRphGjsaaRqnGlkaOxp+Glka8Bl7GY8Znxn7GVYatBq4GswaJBuSHLwc5xxRHQwdJx0GHWgdmB0THYsdzB3YHWUegB4YHzkfcR+RH6IfyR8W5dPkkOWk5UDmduZ25yfoJ+l36ZTq4epe6y7s2uyH7C7s5evE6/rqPOp+6VDohueY5s7lheS444jjxuIi4rDhd+Fc4ULhb+GR4anhLeLy4nHjCuTQ5MflCecVHZUdFR5LHm8eWR4JHr0d5xzAG34auxjtFsoVxBShFPYUCBbAF9gZWhtp62btyu4u77rtp+vT6cLnW+Y05fDkKeXU5QHnLun46qMbQRxjHGgbshmJF1AVGhMnEm0SwBP3FZMYgOyX7RLuh+yC6pboQufL5uHmIOgT6jrs6hkYGnYZ3heuFRITVxH2EfkTnxaOGM7vjvD67oTsE+rW6J/oaOlS6/rtwxjsGCEYXha3E4IRUxFqEukU7RZL8Jbwr+5x7DvqEukf6fTpzusk7hcXOxcUFhUUpxFkEN0QBBPTFCkWBvEd8J/uAuyC6v/pf+op7C/uRvD/FU8VWRRZEjQQig6YDgQRKhOKFAIV0fCV76ztl+wJ7Lnrbuzj7TvwF/I88kIUzBLyEBoPFw2nDH0NFQ9zES0TEhQ7FPvyzPHt78nuQu4D7iXu7u7z71LxAfNq9A30RhOREncR4Q9fDkENsQyxDP4N7A4lEHgRTRLTEgETzxLT9Knz6vL18fTwavCm7z3vDe/m7iLveO/g73HwCfEc8ufy1vN99AL1DPUj9SMRghAiENQPRg+sDgwOjg0eDf0M9gylDK0M6AyyDJcMvAyZDKwMDw0uDRsN+wwrDUANVQ17DZkN4A3lDRkONA5/DrsO3g7fDuAOuQ7UDnwOmg5vDlsOFQ4xDjgOcw6BDrMOtA6jDrAO2Q7BDrIORg4zDkIOBQ4rDu4N6Q2xDaEN0w2eDWcNdw1SDUgN/AwXDQINyQztDPEM6QzoDMgMrQzWDJkMgwxtDFMMMAw/DDcMZAwADAIMAgzwCyoMNgwODDYMGQwrDEMMWAxKDPUL4Au2C80LqwvRC98L9gsrDEgMZgyMDF8MlgybDKcMngyFDHoMbQxMDHQMOQwmDPYLR/gZ+NT3i/cb96f2ofZI9g/20fV+9WD1VPWL9Zb1k/Wx9e71VPbS9lr32fdC+L/4FvlJ+Xj5avmK+UD5VgrWCSEJnghQCNYHsQdjB5cHNwjcCIsJBApOCm4KWgpCCpD5xfgg+KP3RfcR9w/3Pfem9x341/ho+Zn5dfkg+WEIjgfQBsIGwQYwB/QHswgRCS4JDwmkCPf4cvgv+DD4WfjZ+Kf5lPr4+tP6IwhqB5gGRAZyBhMHywdNCGgIPgjCB6X5MPka+VX50fmv+pj7/vt++zsHZgaXBXoFOQb+BnYHmwdlB+AGSPoE+hP6dPou+w/8Zfwc/E77vQUTBdIEXAX6BXQGmQZgBuAFvfp1+oL6xvpe+wP8ePxS/Ln7+gRyBHYE7ASBBeoFCAbrBaEFFPy3+6n72Ps8/Nb8Pv1W/f78ZvwjBJgDmgPyA18EwQT1BPIEywRfBKX8ePx9/KP88fxe/c/9CP72/a/9Q/1QAwYDBQMeA0wDowPVA+ED4QO9A4IDMwPiAp/9nf22/d39F/5a/qL+xP7J/rj+kP53/l7+S/4UAgQCDQInAj8CWwJiAmkCbQJkAlUCQgIuAg4C7QHOAbEBQP9J/1X/ZP91/4r/nv+0/8r/4f/3/wcAFgAjACsANQA8AEMASgBRAFwAZQBwAHwAiQA=`},{name:`dismember_right`,sampleRate:12e3,frames:6960,wav:`UklGRoQ2AABXQVZFZm10IBAAAAABAAEA4C4AAMBdAAACABAAZGF0YWA2AADs/0MAogD3ADoBXQFHAcAA1/+x/pL9uPwN/I77GvvQ+rH78fwh/vL+Uv9i/5H/tf+FADUCUQTzBoMJ6QoTC9MKzQkICJsELAC9+/v3Q/WI84vyRfL18Wvzz/bn+dT7x/xV/Wf9rv1//hIBwAQDCn0PwxOvFVEVZxTrEYAN5wdRAAv4QPIl7qzrb+rt6czp/OhA7U/y5PVX98T4gfgs+V/6aP1jAeIHxg9RGOYdNSIbIs4gSR6IGfsRhwiq/Zr0He3F54bkjOJW4kHizOGd4Xbnlexd8czzJvXG8yL0BPVh+Gv82wQZDpIXoSAZKfQu6DDlL8wtRSn2IYwZgQ7xAlz2Luy34/HfMN2l2yXattkl2KzWH9rA4XPlrOeD6D7oF+gk6c7qYu2Z8CL4QQGiDVYbtiaZMK04wz5FQ8RBrT8kPG02by+sI+QXuglZ+xrwBeeC37TZEtYr1WvT09MS02fTEtKC0C7OGtOY2BjdUt5G4K3eBt9q3Kndp94i4OTiSOgc8F774QV+FLMihzABPQRHrE4sVetY5VzoW21Z5FWTUIhKGkM5OB8uLCAcEu8BzvSs52vd7dQ80OvM2ccExmPF58M1xtzFO8WXw4fBKsLnvt2897qSun6+gcPdxbjJEcv5y7jK4MmGzRjOos6X0ODPR9S413HdouJ55j3snPbp/vkIJg+/GVckxi+lOc1Ef0tOUotYLl5TYn9lJWj5acVqIGnmZ+9kfmG8XaBZ51G0SxxGnDx1My8rCiHbF04K8wJz/GvxHe585aDgvtyF1aHTGNJUzFvKjsc9xq7CqMFFxV3FNMZWybLKIshSxgHHHscUxIvCtL3FuDS1wbgXuzy7Jruouq25Ybsguym/pcBmwVjEjcVzxtPJ6shxxo/F88Xcy6vNANCg2JPbNuSa82376gWyDXEaTiXtLcY5J0XfSthQ4FfIXO5gd2X8aN5qtWtabIJta2shaJJjsF1LV0FRAkgfQwo7fi+PJGodNxV2CVb+/vZg76fniuIG4Njb7NlA2PPUSNX/1LHV1tTq0orPmMvGywbM88Ypvze5ILQetAW2trrKu129QL/Ewt3DVMOOwrrH68g0zkrPxNYQ4BnqA/flCCMX0CWmMRBEXFDgWNJgZWbtahRt7m7+bnVovV83VuBK8zqcKpgYyQvE+djsBOWX3DfVHdPx0EXTRtKi1sTWvdKrzu3LF8ZjvVOzkrV0tjG3+bgHu66577q+vQDI0tdI5db4QQirHfszkETuU/5aLmDGZTZoimp3YsRU80MVMAUecAjn9nTsHuLi3PvdWOPA5BrlKear4tjZW8riuia3nrfztUu2bre9vJXExNMY5nb9pxVyL6lEUla0XjplDGkba09hR1E5PREnlw2l+7ztOOjd5jjpsOqK6QThGta0xx6496xUqmirnK7/sU+86svj4/z8sh7IOqtO0VllYQFlGmfHW7JKpDCUFu0CtfaQ8MnwKu2z7Rztr+Wv1Fu6rqbEppGlR6hTrqC10cXi5IEMBS44Q71TH1zUYK9kQVt9RFMr/BTLB8n/1fuW91X0AO/56YLYI8OwrSCpiavUrtq1hsab3WsADCBGOfNJoVN9WmNbZFnuRWYswRQiB9MB1PyB/TgA1/cQ6njZwsSArV2q561YskG5Ns0U6B4GjyNuPfJKXFGyVE9YGUxpOQglABXODT4KOw3dCacBK/Kf2QjD0q70pOKmJqsMtFDDE9/d/2Qc2TNdQilKOE7dUPJO3TsiKV4Z2hDyCigKQgdPAvf0xN/Iyf20KKabp5qs3bbHxR/g+ABGHp84CEhOTwtSpE+pTglH4TS1JM8VnA6mD0sQihBoB6v6IOYPz8K7xKmjpWeoHK/BvQHQ8+fgBPgdmTNNPXFBxkMKQ71C7zwjL4sdThSsFTUXhBb3EYEN4wFw7drbS8UGs+mmXaWiqUKvJLy2zt3lyQBqFsUpCTcsPcZA7UAzPwRBaT35MP4oBSBBHdsZLhniFsgQ1Ahy+7/poteIxYW3sazepuGoBa4lt6LC8NJ56ZP/iRMlI08v1TXVOZY6UzojOD45wjqhM08siSYhIUkeNR1wH9wfxByaFtkLlf6F7bbcxs1OvsayPKvspQSo1qqIsMK5lsUR1JTljvsZD6oeKSvBMYI2tzfAOfc4MTdkN3g44jm6Njct2ClvJ+8m8CiZKkcsmyz+KFAofiEoFn4KgvlM6jTYUsyiwgq3cq+/qtOmjKc4qhyuNLLeuBrEQdI84MzxMv+vDIwX5yHpJogpjStELj0t7C2/LegurS3CL/oxsjUSOSE4GzJzLscsIiwMLIkryyj1KA4qCCwLKYQl+SDSGy8VAg4KA8b5re3L4mvW2ctswwS7xrSCsJyslKnXpyWpZawKrwe1MLutwgXJQdOX2x7kn+59+F0BPAl2EYYZBh3uIo8oxSmeLAUvMzH+L4gvETHVL/AsEi5MLlcwujKfNRU3oDN3MYExmjDAMOouwy6+MCYzNjGZM1IzATM2MHstsymmI6wcnhdjC4MBlfZA7cDh5dYVzR/DtLoztgmxuawAqRqnzKVeppqpTq3XsSS4X77qx4fQodkW5QvvJ/ozA3MLaRP0GuEfPSN0JeIolysFLB4tuSyyKrYq2ysgLtstjzJ+Ncs5y0CgPuU8QTkuN/A4yjWsNWkzLTOwMZouoy3TKdQhRRqEEacIe/vn7CXfLtLCxYe7GLRCrSeoTaRXoUehOaXXqvSyMLs0xd/Rl97V7hT8GwcqEboZ7CC6JkcppSr3KVEqKivPLIgtvi94NNM7tEAbP688OjucO6k8FTwXPMg4rDLoKDseUxAT/JXnHNU/xDu2E6uYpDugup34oBmo4bI7wEvSneQy9hQF5Q5iFvodACEeIyMkJifpKVouCDjfQbNJCEg8RttF9UUORE5AfzhkLSIbiwJJ69fSXbw4rdWjZZ0emuydu6k1uK3M9eZ5/AkOlxpeIEQi9SC/IbAkeipANzpFnk74TDxMikzGSvZDDDYeIfwD7+SiyFy0laZKnnOa/Jpkp528ndY98tsG9BMyGk4Z+xlUHuwiZi8XPrxQv1BCUAJPlUnAPT8sDg6c7fXMorQlpiaey5qAoB60Rc7s6boCYw6iEqMVEBf5GiIlMDcTTSlWDleLVaROWUGEKaoHguFuwAKsAqDDmgiZ4aoTxYngl/c3BS4Lgw3aEAwc5S71RahcP18LXtRYZExcNuQQpuY3xKau16F7na6dObVE0j7uR/7/BO8EqgdKD7od+zdcUrNdBV3mWJlLQTCsCNXesLvQqLWfmpzVnXy1WNZJ7YT5L//PACoIRxbVLMpKrGEfZEVhrVY6Q7cdEvAky5GxdaW9obGgOrKgzdXkCPIn84zz9/lqBeEdzz+3XD5lamEPWLlDbB9K9IfOcrVBqbCmjqdlsnbQh+XR79XzVPJk9akCWBrRPORZkWgTZiZb30aYJP353tQdvdyw+6pUqkWuqsho327qxev868Tuu/wtE2ozk1S7aUNqX2R5Vjs7bBNa7l3OabrfsAGv7K9ctJ7KINr13pLhS+G76Kf3ORB2MrNSYmcja5ZkfFb6PKMZvPIw0u+9ObXHseywQ7EQvabN89Yy2MLZhtpK4wnzrg0vLyBPtGK6a3hlWFktRDclrf9o3XDG57vptSa0ObTZsYy8bMt21vfYvNdX2u3gw/BmCUAlykJAWmFoDWziZc9a1UaSKW4Fkul4z5jBL7zGuYm41Ldksja8c8NDyb/MYMwNzvzV9eCN9BUP/S/cSb5b5Wamap1kZFpWSiky7BEW9t7fotFZyMTCYsI7w4TB6L+QumDG3cpmzC3PR8wPzBPRs9fW4ov03xA4LS1DCVUpYUFo32XeXgtUbkFqK2sSoPlj5HHXA84KzLbI/sgmx+bFS8V+v6a+L8Omxt/Ip8ckx+jH0sjd0GzbjOpc/BUVPCz1Qd1QWFwTYvZlvmMDXqtU/UheOvcmqBFO/bfubeLD2gDWGtO4zkTQHc/ezUPMNMghvpi9G8Nxx4HG8MjvyAjIRsmN0K7YluIL7r8ADw9CIsQ14kPZT/9WBFwAYBhi7V56WetQf0dtOYor9Bx5C0D6PfHn6Vni3NwK2UjVStTA07vWYtKCzsbM5ch+wrXF/MakyaTJUcxeyzzKhMkCy9nNmtdA4fvsAvpgCbEaJSzyPO9IdU9MVQhZWFuIXRRcOVfzTm1FIDn6KwcdJg2/AHvzLudW4P/Ykteg1bHWLtdd123XN9iP17/UFM54xd2/BsX/xw/F+sKYwdDABsOcxyTLa89v00zgf+0H/84OqB6CLlw7uEVtTTBTXVf5WUdZ9lRjTSZEZznOLWsh1xPZB9oAM/Zf9Dnyae8e7gftvenR4//bTtjxz73HzcD8wSHAzMHTwq7Et8fpyWjOQdMu4JPxUgFUFCMkMDHSP1hJUVHwVGFXelb5UKhIKj6CLYAckwgM+HTwqeyV5Y3kPeTi4pXkIuOk3jDQ58WwvVPA9b5YwHy//sLJypTZaOYQ92cKuyIRNUtD5UwbUdtTKFY4VJtKDj0OKtkW7wKy9vvrFeRe47Tiw+AB3QnaBtPXxjC7NbrZuQi6Y7tBwqLHWdVg6gUDGR0lMxdBDEsLUBZTXVHqRvo2uyLXD2wFDvye9uTzMfTb72rnPdvjzdi9wrcguNW6Tr2NwynSQeZGAAEbrzF0QWhKOU+wUb1HXDhTIk0RFQWV/Db3FvZ38orsZd6Gz2C8qLRhtjq4Rr0eyLbdOPgeFLsu1EHwSqZOj1DDRYAwYRrLCoT8sfSn9YH3pu6R3evKZ7jTsECyg7Z2vSDM/eXCB60kNToaRZ1KfkwOQBMr+BmzDLUGYAcQCCkE6vYW4srFELDQsAyza7ouy9nmhgmOKRc990bXSSlNOEHdKNgUlQysC6gOMgzDAF3pe83otOGs76zYsqPCI9/PCIAoRD2ySCtL90wqQoErOxavCHsK7A2qCnv7jeKPxaKsn6cMrRO3Bcpb6RIPpi8UP4RHPUhbRkYw6RtED5AQ3QyMC/0Aqe2A0Fm0IaSRp4quKsEe48MIFCkUPRlJwkknSVNDES+IHyka2BpxGDQOZv1332e9YaY0okmo+LSazwHzFxYSLdE8lUEFQktF3TfZKLogohrRGz4RTwH45pzFNatnmyOdEKcvuGHZEv/GHqoylz0GQpRCUkXtOZAtjSq7KbAptCMlDxnzaM8ms76ffZxjpHW1ttHZ+x8bADLXP9hEU0U3SKpJojtDMYouajD5J1UbdgeY6MjJSa1SnIWXAJ/Hr/DLEe8AEO4oeDViPk1AOkBoQp1DcTnPM+cx3DIELCgi3wvd7oXPi7DYn0qWTZjwo8y3Ydho+BUXuyz5Nqg6gjwhPb8+AkMUPwQ3IjURNcMzkC82IoEOO/Wk1eS5KKaHmWGU+JvHqonAnt0E/nYabyv8NjM8uD32PQRBo0ayTpxI5ERJQ9tDRELPPV01/yKNClnuZdBItvOk85kDk1OWpaArsX3GE+Fg/awQ7h8hKhErNC+DL88wTTNVOfJE2khSRn5DH0BXP6g7DDcKLXwe4wrs8cnbCMe2szinfZ0nl6SSfplcpHqxEsTg2KruygG/ELUcoCFUJH8oPiaoKO0pvS7bNf9Ay05pS8NIt0oES9dKkEk3Rt8+ITSjJWgXFwGP59bRzLzPrk2kLJzpljeSApOSmrGlA7WGxerVkuu+/sEOuRlDIo0kaijUKfIpIiezIyom9CruMq09F0X9T69Su1LtU/9Tk1NqUuJO00uYRXI8DDA4IvwQ5v316fLXe8dhuJStAKbsnpWZ9JUmk+qTDprNo9qtArplyebY++ms+O4EcQ4vFWIbwx18HaofTR++H4QgWSPIJu8qnTKFPT1GTU8RU7lSSFLGUVxQgk5BTIxK+kQCPOszCimMG/8OOf6P6//YkctvvRayJ6h4oQ+e4ppNmYCXipsxpKKtDbyrzMrZp+rE9qMEWg7eFvcaYxwAHfIceButG3AbNB5BIt0ocDHYOqBEXVCUVEpUcVKyUHdPVU3PSHlEATz/MCch6xMDAmvvrNsoy+i8vLEtqkCliKFanpCc951Xp8uytr+pz9/dyurr+GsD7gndDOsNrg+6DEQQuxF3FhkcQCU6MtBA4U34UwxTcFF3UDNOpkj8Qog3fyfGEdj73uZR0k7CqLWbq5Om3aNmoiCiW62eunjKStzR66T2mQCDBCcEGgSBA+wE5wqNEnEfZi+qQcdRuFMgVDlTDE+TSp1ADy83GN/9DOL4y9q8oLH8qTyn9KYXqNO3H8uZ4PnvjPwyBAsG9gO7B+8I7BGGHLIrSj5BT6dVE1ZxUp1MKkCyLrUXI/li3s7IqrrDsfWtQ62MrHq7RdBa4ojvUvaS+VL4sPkpAIsMGiB0NC1JnlYNVhNUEk0hQAQpbQlx6rPOB74ttr+xQrCar0TBgtOC41PvYvO+8UTxbvdFBYsYIjRYSrBW4FTeTsRD+C4kD5HrRc/avmi1PrKqs5G0zcft2pjqa/As8lr08/sLBnEcbjUATHRXNVVQTOw8wyEcAJbegcrpvnq6nLkxu3bIANmD5JPrC+vU7Wv0LwVMH4g77VAEV1lRKUUkL3oP6e1+1G7Fe8C7vre8DMSH0wPdzeHj4d7l6/HnBmwmc0KmVGlY6VDMQqgoHAPj5OPPpsblw0PB+79jy+jV+9cn2lnereZS+SoXBjYrTFdW/1ARQTkkwgFs4S7QK8goxRvFP8JpyabUy9c92nPeheg5ANAc8Dr5TVhY8lENREUpvQZi6DjZV9CGz43Q88t+zN3VYtrm2xLcqegFAOcejzykT8VYLlMQRDgqZAsZ7n3bM9KKzmXN38nJwsvLTM7+zWTPP9r17lQNAS7dRO9RNVPbRc8xUxVl9cngftiG2JHaa9UOzbrFxcj+yaDLadBf3fDxOxXcNNpIpVOTVRJKxzPYF/3/juub4gDhFd7l3HvT0cRbxn3GhMf5yXXVNenqBXUmr0DgTcpUg1RHRxIwKRa4/M7qGuMF5dvijuMw2znNRcL7wqXBgMNkyTzZG+21DH8oD0A3TTNVn1aJSEI0ahuUBLPzqOtP7Fvq4Oh65oLaB8qVvfW9h74gviTD787N4VD+Zh2jOD1IslCgVHRWP0q/NvUdBwXj72zp0Ogo6d3qAedv3tLTv8XSuja6KLrHvNjAx8tI3WLxQwn4Ivg4yENUTLxRDFJoSho7iSkmE+QB4fbo89/tDPGI7kTr2OAl2MjJm7tAskWzGLRut0a+vcj71orqqwQKHKAyM0L+SxJRp1X0VWxWlEgfN8gjpRF8Ajf5CPbx+Yb5Q/lz957zYu2g4m3R6bxHr/KrE617rwa19rnNw6LUn+z4AzkftzHAPS1Gck3cUx9VJ1bRVEpKIz48MfggHxZWCLID9P7PAvAEuwKbAi/+2PQa6Ffbxsz6uYytNabtpROmpqc+rTi18b1+y+PZKPbpDK4kJzqrRgtLc1GfVERZ41bWVs1P5j5TLyUkjBcgDtwCKgCM/JL9Af7A/XL6kPlv8YPkVdl0ycG5Sa27oe+hQaKJpTSqba5muC/DO9HC41D77RCfIowyZT4eRd9Lb1BzUx9UDlO7Sx0/WjQtK/4iYBziGzkZHRyuIsEhCB0OFh8KQf3/55bTRL5ZrAWh1Jj7md+bHZ4hpVKvGb6Z1WvtzweYHzY1g0R4T4FUyleJVVZSE1JdUgNKCjtUKCIewhVJF+cazRq1GJEUQRG0CQX64+s71by9ZKq0nD2VAJaAmZahH6w3vOjRx+zFC7Yk2jjiRi9Og06eTjBQjlI0U1xJ0TkxLZAlOyEBIygg3x3qGWQTvQjQ9JrZo8G3rAKeuZMelR2boKast1fR6fEaCVwgkTcSR6ZIbUlTST9L7kweRhQ4hS0bKTEqpCikJAEeeRIk+BrfK8M2qZCZ55A5lVKdqq3wyhTuxQ++LXw/6ElrUeFTqFKTU/tO6kDYN9sxuzC5LLAk+BSnAurl7sGkpnWYJpLYmZOoYsKF4IcBliKgMUo4DTzPOuU6+UQMP/w2DzLWNWg0lSnLFlb7ytH6reuYuI5hkUicw7QF2aP8uBn4LSs4CTj8Ol1DlklPPf83qjgcNWAp/BGH75jIxaoCmQKSCJ4KtnfbRQIHHYkwxDEQMn8ypz08SA1Aqj+3P+A3MShaB3fbA7Qdnh2TIZlqsMDRH/tsHIgsZjPxMTk37EQrTX5Jq0Y1QdYxuxH26DK/IKSXl/CY3LFD1nH9mxdNJZUnAymbL6tBtUqYSXpIiUAsKYwBFdc0s8KfOpjKotTDjPBXD6setR8zINgihzgGUmxQokzeRiczAgnd2N+1mqH8mWujxsKJ6UcEKhBXE6oW/iPZPCtVRlXyUN9FLyxP/YvO8K0LoR2c+a0l0jL0qgYZDUgMRBbrKlpIoFZ6VXlPnz3lFa7i4rqBplCgfqJkv5Xg5voLBvgJyQ04HvQ5+1Y/W45Xk0p+MD4D6NWcuBmrbqe0s8XVUPLr/UT/WwMNDLcjk0JDWnJYfFGxQHIdS+xSxw+0jqx6q8O72teR6h7zDfJb9BoCOx2NP95YL1ecTps6yhav6Y3GJ7bWrvitnbj/1T/o2u408Azyof2/GIQ5WVS9WVFTdESfI5L7JNcAwDS3trSbtOXFjNwz7MLu5e0E86kACBuNPONUvlqlVHFFJCf0/rnbBsgRvWG6YrsfvWrR0OIl6o/pBerx84MJfygcRAZYJ1zlVfNHBy37BYzi68uGwcq9zL22vNPEUNRy3ULfZuAx5jX0SQ3OKi9GDFd8XJhWPkk3MZ4QPu1k1FjHfMIrwhzCvsBxyaTTXtgW2VzZ2tsx5vz4ZBMjMdVI+lUHV1JOtT4/J4EKTu6m2QfN4cnjyD/KAMngwn/NPNMp1HnUv9Sx2iLlxPedEU8sMELWUKZYeFU/TFw8FSg/DR71weSZ2YXUKtJV0brQwMumxH/MLNAF0aHQidJY1k3gze9DBisfpzXrRRpRCVeSVk1OwkDXLcoW+gBu7xPiDt0c2R3Zitli1+XSgsuAx+bKP8s6yZjKossT0R7aJ+gr/ZoTZigkPCNH5U+2VANU+EsMPjcurxtrBij2gei+4DPcxdqW3cXc59nj1iDOcMTrxMLH2MYSxlXGS8nUzTHYL+ed+DAM0CEtM8ZBl0tKUXZVFVWcTWdCaDPtIVYQHwDE8+rpeOQs49njouPN41Pgsdrn0wbJrsGFwgrBYsJuwlTEasjqzmvaresAAAQWoyk1OrdE/UxZUatUg1ZUT2pEkjRhI1sVlQQo++TyC+zk6OPqQOpk6B/lDOGe1v7KvL6dvJa7Lr3IvkjAyMMMzHjYJumP/HkTpibPNxxEMUyEUQdVKldIUndH+TgUJ6QVEAf4+sPxvOzF6zPqQOmB5pjivNkGz33CN7avtuO3+Li3uy3Avcd81H/nH/26FEArXTy3SKFOy1O3VTNWH0xfPdEpyhTkBNr9pfcX9aD0TfRK83rwKOkp2R3I6bj1tNq0GbVht068mcah2XjxFAznJPo3hkRwTIVRjVVPUlJCAy90G5EMYANO/8j9Q/rD+C/13+lC2hfGubTSrMisn6/UtcrAfNF/7HMM1ykFP0BMbVILVepUR05KOwslJhG/BhECYgI0Bc8BGvk86BnULL0QqsKp96o3see99dRB9coWJDApQ8NM1FFjUzBRIzv1IgUSfAs0B1sFnAIM9y/mvM5at3ikg6KJphOy9cS84z0JTCptP/5IuU/cUKxPcTbyII4ROwuQDHAKrgJG8OjZeLwrpKucW6EFqwLCqeMjEXYtUESfT7BRm1BcSfkyNSEkF88Z0RdgDn38X91avO+jLZ81phC13dNp/TwkGz4YShJM3kpxTDY17CH9GN4ZGRhAChb2iNGUsU2ccJkbo/a2rt27DJYsoD9+Q95DEEX4PDIqiyCjH00epBUB/hDZCLa0nsiaX6bVvWvohBaoNL9D8kZSRbxHKT20L78q2SZUIXMKtuHruJydpY++lbelEMW+8uUZHzG4N1Y5SkENRX46nTlDN7kwKh2m+UnJc6UGlLOWoapf0D/8ICLrMbo1djYgPctH4ju0Om88RTNAH/z3jMkLp4WVmpcfrOrQaf4qHfwqKCv6K+00gkcBP/NAdkDSNr0fiPbCxrSlRpYWmsmwZNkwB0QhxizzKy8ubTb0SypH6kZ2QoY3Zx288d3A1aOelCaVk62j1I//JRmXJPgo/ihEMhRFw0lBR8JHUkEsLqME6NTMrvaaZJMZoM2/4ukgBSgYtBx9H9cjnzHKSKpNsksRTktD/ih//g7TKbGAn8mX1J/Tuvrda/8XEdMUNRRbGSUlsT7IV69ZC1k2VJhDfCQt9bzKLK8Zn2aYk6CgtyfbZPlyBawMdgsVDF0ZxDKQUSxYklUbU3dGtS6MDGHh+r/UqM6cl5t8pTjCpuGr+cQGVwk5C0IQgBaxKhtE0l3UXnVdEVgvSw8uYgl73xi+GqkcoKidypwvsc3Rpuxl/FMDAQQpB7YI6BQgKfs/VlU8X+Jg6VxtUZY+rSHx+zzXdb7xrsqkTqPZpS+z7MoK47H1JQKHCFAKCwmeClkTwSSrO/lSMmPqYqpfkVlgTnM8IyNOAezjVst+uIyvXqo9py2m07FvxNvU3OFR7vPxqfWK+pT8dwKVEIMi7DmiTDNdZ2BpXBVYNU58PzcoZgsB76zS2b/rsRKqk6cwps2nbac6si/Cfs5O3KDlJedv6qnopept8Ub8JgxMICY0ikc9Vx9gLF9ZXMNWR0y+PpYulRgK/DfoFtRQxOK8zLqUtCixgrAfszm5c8UG0RDZVNt445jkNuYI5Xzp5PMBAdQNzCEENGhFHlJFXJtho16CV4RRqkmfOx0qjxUq/fvpMdl70F/H8L5vu1G6C7v+u5+7Rb7Rx0zPgNec2t7cPdqF2S/YCNkd4Brrq/d+CHAa+C8WQWpOPFh1XalaXVYOUlpJczvmKjYY2AUI9Q7k1doazjPIA8XmwXe//7/Svqi+ZcWZ0FHVcNre4J/kKeTS44jm5u3586gEHRT7JAM2hUOjT2FYAVloVrVPmEVlOLckaBDM+jTostk+zvvHXMX7w7PElcMjw4S/WcSZzFjSYNak2MLYCdw73jTnuPO2Ao0VSiqpO81L01NjWqZZt1T3S4U/Kis7FQf7w+kM2ljRM8tJyxvLY87Ty2zIaMfbzmnU/9ay1ZfVb9dr2z7p+f2LFaYqY0D2TcxWelrKVQ1Mzz1aKIkP2fWT40PWktDuznHP8s6mzW3In8lj0HHSBtMe1GPYTt8k7SoBgBwLNftGpFLKWGVTb0jPNIIaDv9y5l3aINBAzQLQiM/JzIDG1sdfzdDMZM430pPZLOr6A5kgjTqySr5TnFZBTVU7aSAHBEbuP+Fq2pvbqtkx1oHNUcaryi3KpcpXzxDZ0+4RC7crp0KAT41VFFDAP8YmIgr286fnl+H24KDeuNYkyHHB9cL+wrrFbNCh5QcGASk4QulONlSQSiozhBNo+A3pcOIL4DHetdfYyR++3L8cwVfGRNMk7WUTITWcSVVSI1VTQpIllAZE8/zr/OeS5ufee86Qu3m7ab0ixHrSoPPoGZs3eEi8T7ZLoDLjD9T3n+t87DjuRuqg2IrBXblrup/A9dIy9JoeDzzATFRTtVBxOdMaZgFJ9mf0zfQ56enR1LcHt1+7O8fZ4HsKni/4RUxQq1IVQvsh8Ani/qz8Gf7z9Cnc7bxrsqm0hb1a1Of8Sye+QshMlk9bRLwlAQxLAlkBA/8U8rbYs7vUrEWwwbzb2D8DsipkQ7JNv074Qh8lMQ7NBm0HkgX09EDWQ7fPqzewUMAY3hwM7TFTRoxOIlDjQ2wocRWtD80OhQeh8wvQTrAjpsmsdrzA3tkKUDEURXlL2EutQVclihXlEmgUZg3/927VmrSUpFyqz7tv2ycJky3/P1dGuUYCR9YulBq/FuQVuRAd/pjdxbkyovahIa4ZyKbxah5TOdBEHUd4R2Y/FCkMHRQclRlHEIj4jNXYsq2e+aCeriHMNvh/H/I3VkJtRTNG6kfvNXkq+ye6Jzse/wVk4qy8waMXmWeh97NE1nMCBCZ9OJs/hz9vQU1FKzViLt0sNCuNIqUMj+r1xE6p45mqnFqr1cZa77sWOi67OHI7tTo2QFdFXDkwNLAzSjJ2KjATb/ESyfaqHZtWl4GhnrZe2PT/vB7NLyk4rzcHN+o9A0ihPCo5VTlcN9Atdxnn+AvT2bNnn2WUzZXNo1a7ht4LAH4aximDMdAyojLPNXhCqUMIQWpBGUB/O0kxHhwe/NbWB7jeo+2X3pSnoE609dAx80sPUyHYKBosMiwjLt80CkEqS41H4UcVSHhDlTu/KgUQbO8lyb+vWJ5ElVySw5w2rmrIeeZ7APYRTx/9I+wjaCTLKTc0MULaTNhLikluSj1HmEAMMjkZI/vt2yXAuayBnoGYepVVonW2NtLb8H0JrRpfJFglNiY0JuMpnisPN0hF3E3kS95MYUydRmY86i8dFsv4BttdwB+qApx8lROSNZOJoYm1PdH36EIA2xCSGpEapxscGokfRiQrM8ZCclSjUdtSrFHuTdZFeTn1JmkLGepV0JK4sqiQn3yYnZUKmkyr+8Gx2Xrx1wNXESsWZRaVFVUYARwjKXE6Y0i5WMpZHlqQV6lS2UpHO/witQdZ6Z7NI7mUq8+iPJ4km4CjjLhUzPbi9vLVAGgGKge1Bl4JPw8MHBkqPEC2UkdYR1hnWDhUu0lKOZQgqgEy44nHDrOrpYeeb5vumhyrIMCZ1rXrb/pHBBQHaAehB4YNcRhAKflCllfsW/FaSFjIT+5CES2IDcXpJcr+s26pIKI8oZ6fgrECzaPivPbXAlEEIAMjAcwKXxzLLLdFKFx0X4de5FmjT486tRjK9WzS8rc+qj6j5aFZoWm2Qsyj3x3sZPRx9J32cvs7CusfrT9dWXRd31oUVVFFxSvUBxXhHcWrtSCvW6wxrF7AnduJ7+P7b/yv+FT9uAq9HxVAbVcaX/BaiVHjPqwdDPOUzye52q7zrKqrmbYS0PDhgezW857z6PkiC3Io0EdHXY9fPFijRsIo0P4O2KbCZ7aCs8S0Xb+t2GznwO5L7F7tU/oGFJ02B1TzXr1aOUznMiAJD+UFzrbAh7x8ulnDqdkJ5Mnn0eRs60QGUSiMSRVd+1dxS08rQgJE3onEI71XvaC//chT1rjget5l4BLz2BOWOTNUy11NVHM5phDL5MHJFb+wvJy+/sAe0rvZ8dr/3rvvoRIXOvhSBFm0TOItBARk3wXNr8m7yInHF9Gh2MTaCtub5UUGuC2gT0JdjlQvPVAU2OyY10POk87HyvjIMdVA1qzYBuVABT0vlk5wXBdV9zqjEzLvKtw/1yzWRM78x2LMKs6E0hPnaQxrNTxRT1ziTmUxJgkN6ojZG9m52CLLBcm9y/XMRtcN9doiwEWcVsBYQkT/IGT+5ubK3kzePtVfwRfCzMT2ydLcVQIAL/hJV1VPTRA0fAsF70fgb+JQ3TvSmcJHxd3ELdEq60cWuDi2Ta1TxkIyIooCde3f6SXph+XL0QTDZcPlwz7Rd+4lGRM9H0pjT3s6FhdI/vjuuey/7FDg5cv+vG++WMKkzgHvghj4N6lHZUx4OwsZWP0A8bHsPO+P52TT/7xHvhXC9c0z6PoPODDXQxVLaEmuL+0S2/xY98XzcPIw53LQLLx4vJq9EMx850ITdjUARHdKMEolNc4cKQp8A2YDF//D83fciMRuvNW/J8iT2fb3DiDPOaFEKkjGR1sxTRo6Cm4ECQA+/LbxO951xNq2ZbhnwffSaPPaFBYxRj9yRvJGU0G3KsMYEQzcBg4FdwAw8nne9sYFtY20V7kexbLbZPoWGiUuGjosPqNAzzliKUcZJBNHEUoThg4B/0PpXs8Quo6yGLW1u3rKvOR5B6gjJjP5OiU+lz3kPCcqExuAETUPQg9dDmEIpvof4fDJ0LfRsAOzV7p8yHbf9PnhFoMrezZ0PcY+5T/KO8wrOCATGdkTfRNxEU8KIvu/667TLsHhtOuyrLZ+vEPLnuJo+2cUICXEL/wzGjasOKo6JTbXKV4guBw4G58c6RpcFJIHiPXp3m7L47rbsIixKLfAwS7S6uhnAeUWxicaMiw25Dh9OCg36Tj9M/AqoyUwIy8h+R7qHTcZCg4P/H7nCtLkv3q0T603sAy2XME206Ho1gAYFhgmYC8mNLI1gzUCNkI4mDxvMSsqFyjFJ+Ym9STAIA4XKwfn9nreWMqMuk+xFavgq/KxLLuMyafds/IvBrMXqSIqKAkqYSqKKhQtqjCGNJYr8Ca/JB8iJyRxIjAd+hNPAzPwV9nax+m61rBxq8atXrX3wXHRJOe5/tcQER9IJvArxCwMLZ0uwzEAN9Q4gjHQMNwvtC3dK3ooQyA/Ek0AeuqM0iDBnLYXr6CtWrSiv4jOWOVr/jISvB0BI7AlNiipJ9kqoi2tM8wypi6NL2Uwwi4JKvIgbRIt/QLm3M4rvjiyXqwZqwSzMcBV1J7pXgCSD4QYlxtTHbMcdR4/I7QuFTVzMzA11DXfNNEuLiOqD6X1f9phxZO3BLBirdG2lMd73vL2MQobF2sdjB5lHuohsijhNLg+CT3sO0o7nTaCLMYZiP/44EXIfbhesWOtdbcFyXniyvlzDOsVABt/G9AcwiRAMVFBij+4PlA98TanKDwRAfJw1AfA6bVEsem14skA4rL6swqgE34U0hT6GMIkITR/QUtC8UCbO9YtahVP8z3UEMD+tUWxTLg3zSnqAADfDFgRXhN9FSohBTMtRTREz0EKO7Qrzg+s7MPO9731ta2ytsHT2XzvjPy1AQECZAasEjYqOkCXQ9xBTjkRKCMKVuWNyve9ZrkLutDPzusC/KgBQAEUBe4NUSMJPEZFe0J0OnInXAeq4VzKRr9ZvF6/a9jM8L/8Y/4WAOYGKhlcMXlGMkQiPXAt3BAH7EfQxMIVwJDAidcU7zn6YvsB/cMEjxg1MmZGvEVbPm0s2QrM5d/OCcWMwg3E1tq87c30HPW69qsDJh7LOSxGrUG/M2AXiPKS1vfIIcUlxVvPaeGO68nsNe9t+8QVozMhRkBFPTvXI70A1OCs0O7LMMpdzWveCedV6IHpqPY/DuUr20AqQ7w5ZCSKAQrkuNLozkDPS8253RvlYuUv6G7x9QmaJ2U8TULQONAiMAA54/vU69Dz0dzQPtwM5SfnAunj8ccImSXHOm9EhzyZKkIMdO6R3HPWbtUw1IDTmNy33Z3eP+aQ+fMWSDHMPmU/azPwHND+AOjw3NPautm01GPXJNt42yTerulxAlwfyjRLPxg8/i0aFTD7uemr4srhpOHW2ljaNN1K3bjgc+vaAgAfPzJuPHs9rTL6HusElPKT6LTldOUq32jVqNjX2HrayuD37/8INiK0MiY6QznlK5sWXf9c8RbqSOmy6ILj49kE2H3YlNmo3ZnoMfzEFgUr3jT6OEY18SYsE/T/mvSO7oTtFe6U6WfeG9jV2HPaTd1/5kD4pw4AI8EuSDTQNfIs/B3oCzn7fPMi8EDwNu/F6ojgldUW1qzW+diS37Ps4f70FM4kFi1jMd8ySSmsGu4KXv9X96T1VPbJ9PXxquhj3OrVF9bB1kHa/+J18UYC3RXWI5wqmi64L/krgh9zEWQFKP7b+o/74Pra+iD2R+3e4LbXH9et1wHaKeF87PD6/gvpGjAkUCnMKzwt+SlhHyMU0wfsAFD+ev87ALb8tPdp8CbmM9yB1LTU5dRR183cMuYy9CMD4BEWHbIiDyekKBMplSXzGhQQ/we1AiwCNgFhAcUAR/yy9SPu0+Op2tjV8tUf137aAeE86oH20AQIEaIaOyHUIz0lUiWSJRQfNhb6DQwGRAJjAqoAvADo/wr7FPcW78flRN2W1srX99ix29DgEufP8tcA+w2xF/8dBSKGI5Ak+CMOIwYbXxM7DbkHXgX6BCcEgATjAaP8jfQ36s7iSdub1VrWGtjn2/3hsukj9oUBQQ5OGNAdwSDAILYgcSGYIQQbZRODDZQJfgYWCH4IqwX1AHP6ZvFc6MHfWNlj1arW9dhS3Qvk9+0c+o8F2xBaGI8bQB3dHQMeCR8vG7gVERHLDQAMyAy7DNoK1Aba/ePyqedb3x/ZP9di2YncpeLi7U37dwdJELIWLRpnG8EciBuSG1IWVxEsDQ0NZQ0cDLIIGAVo+3vv5OTM3ufYrdiB3DLjeu3C/P8I/xLfFvkarhsHGzcbNhwmF38TpxGTEcUQCg5lB7/99PKO5Qjes9gc2RrdjuQ+8pwAuAv5EhcW9BbgF9wXrxt8FlkSeRGxEk0RmgyUAeX1M+fo3S3Z09iA3b7mivOJAtkNthNpFfYVsBZAGrca4BgWGPMVYBVMD2oCDfIz5FfcZNip2+7kiPI7AqoNfRToFCgUxxVIGUca0xdxGI4XZxEIB8j3Yefz3SDZ19kr4a3sGvs1B04MRg1aDakQHhj6GNIZuxnDFI0Kjfsh627gwttE29fjffEIAgILhAzoDE4O7RGVGjsaYxpoFhcOvgDV7XbgH9tX2fvgrO/d/0QIXAqsCVQMSRPZHP8bQRu3FQ0Livkr6Qrfx9vy3QXrVfm0BCkIwwjMCzkUgB0LH/UdsRoAEcv/M+yi4ALdT98v7fr7owWhBxkIWwyjF20hBiKKIHgaIwuK9r7mhuAt3ujlEvTe/xwDhgLlBAgOohtlIJ0frRlsCs71xecY4bjf9uRD8yj8j/6e/4UCfgurGXAgOR4NGG0IsPR95jHhSeAa5ufycvsH/VX+eQN/D7AcdyFgHkAVHgP17lDk6ODb4I/nz/Lr9+v4IfqMAwESUx80IYgcYRDw/ebsGOWs41bj2er78j/2rfeD+ggHPBZbIAUgzBm8C7f4uurh5RrkIOSp7Nfy6/Ms9Xf7SwhcGLkhyh+IGL0IKvdn7EvoFelk59vuM/PF81P2Yv2KDIca1iHGH2wYMgl69+PtAOsD6qjoC+148LLx1/In+sQHxxaIH40fJhnYCi/6HPAR7Qjt+es07A/wn/HR8yz5RgUNFKgdryH5HckUwQT99q7wUu+U7v/rZ+we7nvuyfD29wcEbxK+G4QfBxuOEUwDzfgg8xrzZvMU8K/siO6T7oDwJ/Tf/scMvBdLHRAdHBbuCfb8oPaj9Lv04/JZ7mvrWeys7Eru4/Ov/rULQBYkGx8cdRb0C38BYflH9Sn1E/RL8Tjsxurw6sHr1u/598sDzA+bF6AadhvCFYAMcgJ//L/5c/kS+AD2VvBm7Bfs6OvA7Xzz2f03Cm8S1hYEGfUYohP+CngCWPwo+jn6W/q393ryqOsQ6xfrHewu77j1sv+SCpkR0hUkF04WsRBBCE4BQ/3J+l/7Gvu5+aL1we+C7JTsJe0m8Kn03fsOBXIMjhEbFDoVIRWcD94I7wJa/6D+fv4O/vX8lPkP9NTuz+zx7PbtiPB79fj8jgWmDLQQ3hKeE7ETWRAnC7AFZALRAIcABwCs/+H9ivnY8ybvwu3Q7eLubfGj9dX7ugM7CukN5Q/hEAMRShBaDOkHGAQcAogBQQECAYj/3Pst93Pyq+7u7WXulu898qD2SP0+BIQJ8gyGDh8Pfw94D+0LIggABZ4DDwOoAsYCBwHo/R76WPVH8dzuTe9x8DPy1fUU+yMBSgYKCkEMBg1MDWIN2QylCVYGMAQjA5ECjQKrAZD/Gfzo9zf0ffF+8CfxbfLO9Jz44v38Ak0HgAlyCvwKEws3C8YJHQeMBaEEsgSnBLADGgLp/jv7Offj8+XxPfJP81/1s/iH/WEC6gUaCB8JaAlZCaAJyAjFBisFnASKBD0EPAP0AFz9Qvng9eHzK/Mc9J31ovjs/GYB7ATKBpMHyQewBzsIqAc9Bo8FKgUKBVgEugKq/8n7FPiY9WH06fRh9uL4q/zJALYDLQXKBcsFAgafBhkGDAWaBJMELgS7AjsAm/wI+dT2rPX89Vf3CPrk/WgBrwMEBSEFFgV1BW0GQQXNBLAEhgQ1A9AAcP0G+gX4+vZf9wr5yfsm/+EBTwPrA8QDAwT2BEEF+gTXBJ8EiwNCAfP9tvrE+Oz3gPh/+oX9jABhAh8DPQNUAx4EWgUBBecEtQS9A58Ba/5o+6j5+vir+bv7jv4HAUMCbQKNAgoDMgS9BLMEoATnAwkCJv87/Ir61vlP+kD8zv6+ALMB3gHsAY0C8gNTBDYE3wPCAoMApv3C++r6sfov/GH+LgAgASYBRwHhATQD7QPRA3MDPgLo/4D9F/yI+477Dv0C/z4AxwCoAOwA4AFRA3MDOAN6AuoAg/4E/Vr8OfwL/bL+2/9GAD8AkABuAawCCAPWAi4C5QDy/p39Ff0A/ar96f7U/xMAEABzAFQBYgKNAk0CpQFCANP++P23/br9cf5N/8D/zv/r/2cASwH8AeEBiQHKAKT/yf5y/mX+kv43/6P/vP/H/woAoQAxAVMBJwG+AAYAWf8J//v+/v5N/5z/sf+z/9L/JACAAK4AlwBlAAwAuf+R/4r/kf+l/8n/1//a/+L/8v8AAAIA+P8=`},{name:`jaw_dislocation`,sampleRate:12e3,frames:8640,wav:`UklGRqRDAABXQVZFZm10IBAAAAABAAEA4C4AAMBdAAACABAAZGF0YYBDAAAGADQATwBaAFMASQA2ABQA4v+y/0j/7P49/qP90Pzt+wP7M/p++en4Xvj196b3iffH90L4XPkW+1z9MQBuA0YGrwhGCqgLmQxHDdEN5A3GDU8NkQzJC9EK9QmXCD0HWAZIBWgEiwOlAhABPf8u/cT6+/c69WTyge/a7PXqDukB6Bznheay5i/nX+gS68XusvT4+qMCwQnxDrgTmBfxGQscshxfHTYd5Bz2G3IaiBgEFjETMRFUD9cNVwy5C8YKCAnlBowDIQDo+kH1X++z6C7jIN642uXXsdVa1KfTitO51KPWPtpn32zmF/Fb/FAIURRpHekj/ig/LAAvly/3L+8vhS6wLAArOyghJdYggB4UHQQayBgOF3EUQRIODz4L5wQ5/HT0ierr35bXrM+FyUjF88GfvzC+bL3rvT2/18L7x33QjNtU53D2YQi+F/YjdCxiNNs4TTyiPylBsUBHP18+/jwMOpc37jSYMMcuTS2mLEEqcij9JBgh/hvfFwcNygDC9QDqd9xg0NPD0Lo6tBaurqq4pqWkKqRipBGmW6mTrpq3d8MU1NDogvzlEYQlszNoPxNJlk1AUS9RSVHXUElPXU3qSTlGPUI4P1w/Pz9/Pb09FjyJOmI28jU3M+YtpyY1Hk8RFwbe9rromteLyW280bJpqvKkrp9PnfWbW5wfnZeecqEKp4Kt+7eQw47WzeZv+g0MsBp7KFo0fD78RJJH6UsPTJlOpk5sTs1NVU1HTLBKLUkdSK5GeEZIRXpFJ0TXRuxGTkWBQxw/pjpOMQEpUhvzB3v1d+RF1i/HcbqgsbOmx6CYnJyYiZYklCOUF5Q0lcqXyJsqoC6o4bGJvjjMd96y704C1Q+oIKYsyjIAPZBCokUqSAZJsEqKSpRL0UphSEBJUEmBSq1MV00RTnRNPVExU8JRRlJ1UBhP3E2tSp9GGj3WNf8tBCJkGCMHYPVm5E3TvspIvO+wEanPnhmanJa0k8qSrI91j1qQ7o9wkvCUeph2nYyjnK3Dtaq/kM0z2m7kAPQKAskQWhj2IggrqDLvOsRBAULQQA8+IUMORa9GX0bHReBExEaISitNVU63TUxOrk5fUdtSElN8U59U9FHmUF1MIUsvREA+9DbJLgcgtRToCmz7+u3s4/HUW8iiuQexz6ceoLmbkZaBksiQLY9Pj7iOa4+qkKuRqJStl3mb8598pTGtZra/vYXNZ9e75Y71/gDiDlYd0COaLTkxMjeLOSA6XT/xQE0/RkP6RAFH2EaCSspNZ0s9SilLG0wOTq1OmVHwUZNQClX2VlxYsFcCVYpT9FEtT2hNEErxRIw8KDRaLO0ipRjbC/3/afA54kXYjcvLwOm1vaybpSGgTp1CnBKayZhfmPqY7ZgcmlGb2Zv8nVOgRaRrqaeuLbU6vDvGkNEF2ozkDu5J+BcAQwrkENwVnBoZIf0gTyggKF4t+TCNM5Q1Azh3NyA8FDxFP74+oUEqRYFERUX8SelOD1ENUftT/VQYVolYsVh4V8hUJ1PwUrNRsExGR8E+Nzm9L+cksxPcA47ym+ds2svR7sW8vFuzTK6LqFCkvZ+AnT+bPpoPmQ+bHJzLn0ujnKULqkiwSLSYvGTB6srfzm3VX+HU6MTvtPrD/5oHyQhbEkAXVxtrIEkimyicKt0sBTO4NK82XzYcOCc5yzi0PB5BeEOBRJxG3UlZSyZQpFDhUcxP20+zT9ZNz0sySf1E3kH1OtsyNybHGj4RDQRH92DmmNbAzFLCI7zEtGuugasTp0elUaOmoSGibKJ1o3mloqYcqW2tXbQzurTA28rY1LbegelW9Tf8nwN6C4ARfhPjFSIZ2hkqICoieCPeJ1Aq7CyJMHgvFDQoNFU5bD7qQXFH0UvFTl5SUFSyVJdUTVTMUkROzUg+Q688gDMKJ6oXpwXF8vDkQ9coyl2/M7c7s76vC6w/qziqFqpqqsyqsqyKriWxYreXuwzCz8l707LbaeJZ7Lr0JPXQ+wABdwWUBzUNCxKUFHoY9SBrJX4oqy1mM6850juwQDhF60cQSwFNok4ZTzhOmk/GTctKvUXZPms4sCw8HPUNX/xR65DaHc2GwZa49LKMsF2t9apgqrSqfK2/r7azgrjXvKnEZc3k1FTdpeO67UbxxPbm/Cf/YwN8CNoNURMDFkMgqSahLBMyoThRPjdEjkiSTeVOZFAVUW9Ru1AuTlpJA0IjN9wqlBnkBTnzU97zzn7DV7vps8Sw/q5tr5uw0rEZtKe32bw1xJDJfdGk1vTbbeVy7ADzAfd5+rz+3AGUBx0N7hIDG4UiuCpVNCY8lEIXSTNMFk/4TzJQB1DGTaRK+0MBOW0snBqFB1jy0t3RzonBn7nus3GwFa5vrXCufq9EsgS2d7olwKXH+8/t1/ffNupk7bTzyfgl/eYBygmWEdMYXSKqLuE3d0J/SpRPVlKUVL5VJFVLU3NPJUfnPJ4uKRurA9bsH9hryGa82rbnsI2uAK/osJWyRrZTu5HCB8fF0CnWLdur3h/k1ufj60PvJff4/sUK2xbOJPgwZDzLRUNOVlTRV2NZWFmDV4JTME68REw0Oh7PBhvvIdr+ydO+VrUJsNOuXq7ZriOyKLaau7jBycdQ0IXW8NyJ4KXhJef16Ynx1/urBagTYSLaL1k/N0jzUVZXcVqiW4NaslfeUx5L9T5aLEIVXv6T5sTSk8OXuCeyLq9Urp+vKbHxtJi5qL6swijHLsuU0GDSTNZ72jzg9ulZ+HoGrhUfJRU23kTLT0RYoVxwX2Bg41/iW7dUdkcrNQgdigFN6PrRcsEct8ywBa/arkqwxLINtXK5jb7cwTbHtcrLzHLOR9T62QXjtO3U/qwP3R8ONONEhVF2WrJgx2P/ZLBkeWKoXDtT/EIkL1ASN/Vo29jHHLufsvGthatMq4Cu17F4tHG4jruiu4e947+RwKrDock30iTcl+xvAokZ/C+aREdSD1yFY6ZnZGlBaZdmUWFnWHBJejX5GyYA5uQR0YzC87lLs/Wve7A3sFKzELbuuvO9ir+9wT7DqcOxxnPJZM7a0w7i7PRoCgokszniS4VZ+2IGadlqY2owaEdjZVrATBA4ECCXBE7sftcJyP297LdQtLOy5rK/s3e1rLdYugq6ILlLuYG6AbxCvibCicrS1ALkOPx2Fhku70ExU9te1Gbxao5td2y9aKlivFhsSsA3dB7ZBNno7NbAx6K/6buZt6W1urUbtci2AbY/t2+2wrONsw+y0LCSs2e4zL6UynvYQewMBNkdejiOTDVbW2Vpan1tqG7ibVBrUGU8XBlPcjtBJU4PKPeF4WHSLMdhwLm6G7pduwW7RrpeuRK3v7XUsaKw+a+Trs+tI7HPtmy/8s2Y4C/1Og3cJVc/sFJDX9tmfmutblJwl24Ba5JlF13iUYlDnjBWGev/ju5o4KvTs8oQwuq+Frwluv6567ijtyS0VLBFrt+rWKnEqJWpQqv6rWa2dcJa07jlg/8tGaMufEOTVUpfMmbaamZtNW0rbDhqFmWeXIJSbkNJMVUeyAqK+K3oCN1K0wvLGccJxOXBkr93vtG8irk9t7i0AbGTrYGq86dHpwenQao2r8626MEn0b7l1/5EFkcvJkQHUgddnmPBZ9RpV2rbaWBnSmHsWpdRu0a3ONsmFxbWBIP0NepK4ZfXwdDyzZvLkcigxk7FPcNKvQ27D7iCtJix1q5PrPSqF6rjq+quLLNZuBzA3s3B233wWwbDHToylEFKT3pZJWDQZDdm1meAZ5Bl5mLrXs5Y+E+jRVw6Eyw0HfYOyQKe97/w1uhk4tjdJ9dN1MrRtc+wzHjJdsbfwlO/qL0guJ6zVbDSq7KoVqmwqcyrIa6Vtd++iMuq2oDubP/LFrkpIjv2RnhQD1dfXAxfuGB+YDZgCF40XOJYbVJ7SktCtzfNLcMhGRiTCuT+YvrC9L7wzO+i6vLlauSF4Abe7tk41WbP1MguxPbA5bqhuVq2HbIGsfCuEK+OsFGwI7M6tgK8WMST0JXhIe+NAs4TdSUYM8g+UUmZTr1SDFiMWTRctVyKWxxbI1n4VrZS2EvpQ1Y6fjDCKIkcFA8jBJf75vXi8HvrN+cY45XfbODp3Uja69Zn1EzREsvvx53DR76DuiG4FbVHs2uxa7EusfGxh7S8t6O8JsImynvV1OHK788AXw7yHDIreThLQvRHrU1oUOFTS1U/VrNWMlZVU9VSIVDGTLRGfkLAPA4xiyl+ICQVBw9KCtQDuPwJ+BD56fFY8arthOdw4Nbcetrp1KvPist1xzvD475PvMe4lbUksxWxmq9Irm6vnbFhtaK5dL8HyrDTnuLS9R4IeRj1JWsxnzuCQo9JSE7oULpRR1KyUjdTM1OhUNxOLkuGR5hEYkCCOegxTynOI2EbLBRNDEMDAP/b/Kj6GvRU8KzrNegJ40HeI9oa1G3MfsjpxTHCI72nuc+2M7N1sJGvRa+HrSuuurCNtBi6hMCKyy/ZHOnv+/YLzhwmK/81F0AcSEdMyk6MUIxSQ1NYUkNS80+gTIZJ8kZ+Qi8+BzeWL+slwh9fGxkV3Q0SDZ8G8gHq/nH55PV38FjrDeRl263Umc5UyaXEPL4muRK09LBprkqshaxdq7ysVa9OshK5A8GryjPb+OjS+zULhxm5KP01uD9RR61Kkk7FUaBTHVVFUy9Rnk1bSu9GoEHAO1w07SoIJxofrhx6FTYQSAujBPv/g/0F94ryuelW47DYGc9byZfC/bp0tb+vG60qqlqp4KmmqQ2rZ66zs/O9DMeg1nTqzfx5EWEjWjKsPhFHZ04gU8xU11QfVftSsFC8TDFGBUCHN5YwRCtkJG0gzBvJFiEUFRByC5cHvAIr93vtgeXW2n/TdMnmwFC3TLAZreuq2Kc4p82lVKeQqt6woLlNxdLU1uUs+rMQlSXxNI4/3kicTnZSyFSkVP1S0lBbTmBKBEWWPSA3rjHWLEUokyE8GpkUvgtTCe79RvNh6VnettLjxZu6TbLSqPykCqHsnqOetZ/somKpe7N/wRTTnO3qB0QeBzHhQsxLTVJaVmZYblgnVsZSDlCzSCFEYjuqOEYw2ygZJHggaRkqFloQwgu6/tPzdOL20jrDxba7qhGiiJw+mq2ZRpusnYSjOKw3u+rQ0OzJCP8gnDVER5dQ21bGWUBaZFnGVQxTRk+GSPZCpTxDOQg2Sy/IK4YiVxotE9IEmvWp4NrMxbvorX+jmpyNlzmWD5cYma2dO6aStPzL/eV+BXEhdzalR8xRh1fhV1hXD1e6Uj9NBkfeQRJA+jucOsA2ojCDLHAlvBcGCUj08eB/yrq3taoon6KYVJWylCqV45jwoJyueMD23cb87x1fMSNDcU6vU45Wo1atUkxP/Ed/RIU++jpFOxM6ujbkMvUtOCYiFxoBE+cDz3C4dqi4nXCXUZQ4kxiWTJyzpki3S9DP62oHCSKgOJBF302WT4NPu06KTDNJiEQoQf5AZj7GPNk6WjLgKssflA1W9qzam8FQrtCga5k0lNmRc5Lflrifn664w+DgTwGVH0I2BUUWTQlRIVBkUDhNEEpSR6JEG0a6RBREfkQhPokzYyPzDGrwtdHauX+nzJuolR+TMpMnls+eF6zEwBjeXfxjFiwstjt0RxxLQk3WS8lJ0khuShJL8Uy+S1hLo0h1Q4I4GSSPCVzrm8qwsjCi0JdDkmaQ0JFclkefRq+txn/koALOHpgwVT5KRcRI9kjgR0RGu0fFSEZMLE0+Tg1O7ko0Q+411CANBGjjHsVTr1Gg65h+lZ6VfJh5nxetkMGy2/D40xDVJgQ0RzxYQYlBS0UERfhGjUl7TFJQQFPGU+BQaUfhOkckJAj55LDE0q0XoDuZdZamlUaZpqDmrQvBr9qJ9KgJEh3/LUA2ITpJPj1CLUOaR6FN01GpU+JUXFUSUoxJdjwaJBQEWuLsxHSx+KMnnECZcJknnR+k16+9wD3Xie5OAtMTziCdKHwv1TJFOBc7HUHcR6dNrFBqVK1UaVLoSu09jCf9CaPn98pmsx+m854DnD2cWZ/3pWSxM8IM11Dr/P1KDeYYBB6bJRApqy4gNUE9LERHTFdR9VbwVtxV1k9tRdgzmhqA+a7Zjb8lr8Skv6Bnn5SgC6VSrG+3PcdA2PjrcvvHBskPKhi6IDUn9C3/NUY/BkfXTrRUGlflVgpV7k6qRCowFxW39bLXpsDfsOSncaPsoSykJaiArvG3OsVU1eDkffRlAY4JUA9eFbkbhiGdK+E2+kCzSKFPIFXCVzZXXlVZT5RD6jHqGLH6Lt5Sxhi4e67iqRSo1ah+rO+yB7sAx2zUwuG87Nj3dv9DB0IMxxOkGyYkIC6CN9xAWUnCThxT3VOlUiBOK0cGOpQmpwtF8fjWscQquD6y1a36rJ2uM7KQtgq+u8dl0ZDbwedW8Xv2Uf0/BKYLOxQcHzUqMjKMPHFGMk21UQ1UyVNSUZNMEkZpOdgkdgrc73TXK8ctvam18rASsKCx7bSWuSXAyMbRzj3W394s5vbsxvCh9ej6vAPKC0cY0COdL4E5mEPQSipQ51EAU/FQrE2+Rbk6bSvjFvn7Eucp0oDE/rovtpmza7JCs562wLnwvrfEP8u10jLZi95D40jn0+wi9Af8fQauETkdtipvNkVBVUlmT0tT3lQ6VX1U7lEMTD1D6jOFH6oGWu0Q2FzH/7vgtNqxE7Dkr6KyP7X8uRLAkMX/zO/QhNiN3kDih+Up6Sru9vNb/rgK/hc8JLYwoz6dRs9MzlHKVNZVPFVNU9RO70f4PkEyOR/GBkDvhNvgy0LDEbzLtoKyKbPVtFm3QruQvxrDl8aSy6rRe9Kl03jX7tpj3wfj9unM8nj8agwMGwoncjN2QAhJPE+dUrpVXlY0VoNU2VDMSSFAVjLpIAILvPYm4h7TFcjnvoO6NLhhtoW3PLcgupW7jbzUv7bDJsjRznLR9tUB2YDeCuRP6TPvCPZW/b4HdxQhJ9QzkUECTPVS5lbSWsBcC12bWn1Yt1SMTPxAfzPNH34JVfQY4gfUPMZgv9i6tLd8tna2Abh4uZe73r5GwYLEH8YoyMnJbMrAyonKu8tZzVLRM9ol48fwtgHgE3YlSTbjRDRPLFUEWn5dtl78X/9faVwQWnRS8UtdPiUq+xS5/sfnYNriy13D8bruuL222LWdtU23Z7nGt2C5ibrIuq6+478Qv1G+tb0Wv5fEvcczzBTSsN5Y7rX/aRULK7k4s0aNUola0l41YgZjIGOIYbxeI1rVUydJnjsKKskW7gB18Gjfd9P/xZC9QLrztou4lLjyttS5brpzvCS+vrv1vF+8w7v9u6S8Wrx6vRvFb86N15vkefhVDe0fATOGRL1NKVfZXdVic2ViZqpl+2R4YdJeG1k9ThhACy9WG2UI+fSl6GLZJs0MyAXDl77Kvvm+pb+vvWC8nbsduAe2RLb1s+qybbIhsq+zG7jUvszJtNTJ5Yv51A9pJ2w4UEn+Vb5dAWNSZvtmc2WlY9th4FumUnlGTjigJUEToQZ38angNNKzysbJusIbwGS+WLmCu5O6qLviu2e0lLS9sIevPrD/rfqv7rI0uDTDX9JJ5yYAShvGM05H/lQ0YD1oa2qQbGRso2s0aR9lxV2OUzlCQzOnH+0MKvbv54Lbq9dRzo/NxspvyYHHTMXgwsi/rrl8tq2u56v9qiuqNqujrEGyt7xAyYPfQPZpEuYrrD+QUnxfJ2YTa15ti27Ha+ZnN2MRWVdIBjhFJUoSg/3o73fiXNmP0gHR+Mtey0TFIL10t7uyxqv3pwqlRqLBnjmhaKePrQ64ycoS4O/3FhVsM+lJm1hdZFJp6WsHbIlrXWmRYdlVhkj4Ms4hKw1g/x/uwN4X2LTSW81JyvvHtsLVuzK2xq9Oq4GmHKNwoH+fJKN7qlS0f8W42fjzFBX2M0JLsFrfYkloy2mUadBnk2IhW15OSj2hLW0dzhBlBXv8O/Ly61rneOFd1trMUsMyucKtwqSXntKcp5tQnsmjK66jvcvXO/t5G8k2f0zgWghjOWbQZlhlKWHvWidR6UTfNG0k4BZDDh0CBPl+8ZvnZ9wD0UfHarlyrJejO50imv6YjpoUn4am4rUzzO/uvROzL4pGe1ZcX9hil2OzY0teFVdfTmtBhDTIJ34eHhe/DewG3f3C9BrptNhnyvS5+qxgpZagsJ7Inv+jBK06u8bU3PREFwY0EkdCVRRcE2CFXw5cL1XhSzdBEzYSK8AefBMHDAYESf6A8pDkVdSawd6zQqmzoYidppsvnIefTqjsuQ/UJ/X+Fxw0cEgjU1RasltUWYlUr06xR3A+JzaBL60krh66F6wP3APS9Bji7szhuw2wBqY/oZCfWKFZpdavWML93RIBGiX6OxhLc1L5VX9X31REUB9I/j5KNvMvgyjrI64bThP2Bur5Eeat0YC9x7BJqLGijaDToUylqq5xv8TaPvcAFFEsUD1sRu1KVUxOSqNEVkDfOzg4pjWEMXEsXSPsGiULZPl8477MkrkUrs2nGKWxpIeoI6/3uu7SLPJ3D5Ep/DlnQ7xHvkqOSUtEjT+NPEg40DSFMrovcSjjIvIWEATc6ifSnL+rssSqe6f8ptWoHq+/vEfSZvDwDZ4nPDZgPxpFikbQROlBmD3QOV83CzjFNvUzby9uJu4X4AOU7DXTNL++saGrqaeip9CqgLGcvd/T8+4KCtoeli8ROdg8Qz8qP5A9ITzzOxg8yTxOPPw6WTVjLCgaDAGf5QHOabv9r0mqLqhZqCys+rQPxIjYOvWEEL8jfjChNxU83Tw5PGs7sDrxOic8jj0IPiw7tjS/KS8XoPy14KjImbekrt6p9qhyqpSvjLj6yOPg/vp0EQ4jFS0DM202zDelNx84zTj2Oso8Nj7XPkU72DYaKvgUV/tD35PIJ7mor8KrLaroq0mxq7qlyfHdFvaZClUaoyTwKysv0jH+NPY3PzooP8lCLkUtRqJFckDCNOsgCwnx6SrPR7zrsKiqM6lZqnyurbQZwdbRKOgt/UQPqhnCIaEmHizFLf4xXDcoPLVB70Z8SUxKsUekQm82DCIQCDDovc0AvLKxA6zRqVKra64qtUrAQM9G4S3y8wKbEOYYniDpJoAtJDIVOPE+skSKSMFLikyLSlpEWjrZJikNfu7D0lC+WrGqqsunhqfYqk2wyrkIyCnY8evn+8gJtBO7GLUeASPVKBIwdjcWP49G60yCUa9SUFFsTUpFOzVYH9gBt+FxyKa3oK5gqaandqlVrGaxwbsOyCjY4+fr9u3/1wgiEekZkSG0KuExbjqJQ75LLVE8VfNWZVVmUfJJtjs5JScIVOjJzV+69a9yqcmmvabwqEuuXrYOwJ3NNdjI4sfssvSx++4CEAjJEOAZFSZ3NBZA4ErhUWNWZFlzWeZWfVFURT0zHxtq/eLgcMl/uCmvPqlIp+CnK6q9r4q1dr/3yL7RYNwi5YztzfK9+C8D2gkyFjUkhjG6PLFH4FEMWTpcQl5xXY5Zx1E/SHg2nx2z/Z/iUsqRuiyvyKh7pQ+mmqhFrJKxG7mcw9bNMdgc4brmiOlN8+v30QCJBzoT6SB3Loc7KknyUb9aOV6JYEhhl18dW2VRTkICLQ4S9/hr3fPFx7V/q62m9qP8o5SkmabUqwOzBboYwPvDCcpqz+PWjt7J5N3tY/d3BXIbgysVOt1ITFQQXJRiZWYIaNJnlmb5Yr9b8E9JPfUjrQk67ubT6MC2s2aqIaVCpFOkP6UnqXStL7Jbtpu7Y8HMxQXLz8+f0kzZ/uAd6bf2fQUaGGgkmzGNQIxOe1ntYZ1lJWYiZhxllmJKWxBP4zuvJGUJHfCV1RfCtbOyqxKnnKRUo8qkkKZKq86w8bOOuLa5k7xNvwHBG8QayHPNdNUr3n3qqvuWDO8f9DN4QiRROF3kY5ppSmzzbA1sWGkQZfZbp04lPAgkFAZ+7aHXMMhYvAuyKqy6q9OqT63Jroyxg7P+tmi96r+FwnjDKMQeyRTLgc5D1L3cn+lq8xUFHBcyKIg7F0u7Vt1ei2XBaTBsSW19bSxrx2a2Xt1TTkJgMekYKf9Y57rSXcMauBOymaxHqruqh6wfrOOsBLHftPu1OriXuaO7u7xmvEG+1bvDwJfIlda14mzwLwVrHDo2u0vpWXViaWjsbARv/G5wbh5qFmXqWmNMUjsxJWYOGvdC4rnShMROvBy287IVsjOxh7BDskyyhrPqtKW4/Lv6ueS1+LaAtd24i7zZwrHJCdIE4cH7dw+oJRs5qEq8VUNfWGXaaZBqVWw7a3Jo3GMvXLpO3z8oKboV9/qz63jbe89+yF3EDMB+vpu82r5avZK7uLj+tuG0s7PysVGxy6+jr0KvhrNquc/GhNBs5qn9DhRZK0hEA1FYWg5gw2VvZ3VnMGZwYvFcJFZhTiBBoi59GVwFRfdE6KDa69GCygXIesXjxwzHKMTSw0DErcKCv8S5MLbAsu2yELSrt3G7LMTA0xzpkQLOGqYymES6USJby19VY/hkSmRPY2de4FhCTwVFezi2Jc8Sogb/74/kNNsb16zQHM1Hy73JssPJxSfDrL/bvU+8drf4tUu2sLmhvA7HHtOt4Sb0UxA1JaA6Y0nXVEdaWV/1YUxinmDxXYtWKU0AQBYxLBxfBsD1rOm23y/ZfdWf0PrOx807y9zEO7+lun22drOasMeueK8XsV+3b7+7zZ7hCPkAFTst9D6VTP1Uf1rqW5BbNln/VIxM10ONOBgnchRkAzv5Qe5258jhBNrz1AzWfNIZ0PXJt8WTwJu7RLnvtvazdrezvO7EYtSc588CixszNONF4VDDVmdajVqGWXdWuFGxSAQ/Py5JIIASMAcx/vX2wu5M53zgFdx5073K6sGjujC0GrDRryWwdbKNt67BDdW+66oI5SVaOA5FxE7vU/lV41SJUpFMHUWrO08x+iInFuMJi/0x9ovwkuda4A/Ysc/ixqu9N7gss1CwI68fsZi0LL21yg7i3PynGzI0gkSGTLFSNFQmUxxPZUidP041tygSHjURFQcpAd/8zPei7vHjuNd+ypbBQrnnsreuS63QrduxjLpQygzhsP40Gp0zm0JgS6dPA1LRUIdMvEUfPjgx0yeJHZMTaQe7/0X2Le8z6G7cxs1sw1W5CLQCr1iun68zs068EsvZ4Q4AixxmNvBC3klYTeNOvE2BSTBCGjl+LTkmMh4HFioO1QYm/PrxtuOi1U7HNrtts5+tuasLrVqy4LwXz7boZwuMKFM9/Uh7TuhOyUzWRxNCjDgwMLco4iCgG4MW6BA/CYj/uO8s3tPLFr9etUKwkK6Jr9SyD777z+XusA4wKoE9v0dsTTVQrE4oSgxDajxyNHIs4yeOIEIZGRGoBZf1e+IO0PC/JbTWrcep+am/rXi2RMb54GIBTCDCNiRFpEqUTWpMqUgtQnU72jJiLpUqPygiIjYaNQ79/GjoKNXVv5uxs6mdptWmxanCsnbEsN0jAQki7TdHRWdLgk1lTJxGDENUO3c1LjDiK9ooRSLxFnQHb+25103DD7R9qRCkBKP1pBys5rrN0uXyshQ6LyY/z0jXSyVMWUpMRq9BSD8SPRA9+ziMMxwqXBpCBL7n2MvXti2p0KJUoOeg3qWjsMDE3+FhBqol+jlqRiZMC02SSsNJ/0bKQ0FBTD8DPDY4IjBdJMINNPBx0Wy55qo/o/6e/57RomirPL6b2Y77rhgIMP89wUUlSQNJYEe/RtpEQEXJRQVGFkP4OSYrGBVm9pbVdLqTp3ydi5kFmUqdTaT6ssbMm+0LD7soCDYQQbVCB0UJRkpGBEUDRi5H2EjoRe1BBjZlH8EAid+hwbGsvKBlm+mYUJvTomGw9MZI5EcEEB+1LrY6NT9OQNZBokK3QzdHSUmiTV5N9knRQdsvBRjn9kTSXLdEpGCbrZe5l4Cch6XwtejND+usCTUe1C5wOE48yD0TPqJBPEVYSU9QR1KcU2dPGkdVNkca6fec0zu0UqO3mVaWLJaxmrqkVbS3y47oWgVaG24pbjIoOWM89D1HQpNIjkzyUORVP1dJU65JITvnIeD9BNe5uGKkVpmulC2Uf5eDneGoqLxs1mnwMgpTHBQq6y+DNfY62z9RRfNMsFIEWatbCV30WelRnUK7J8AFn99dvjmoY5t+lqmVJJg5nx2pjLrfzyro5f5REfccEyanKysyozkCQhFLPFRFWslf22J+Y1teZFNpP/Qh9PpZ1HC3l6MMmFeUYpN6lsicoaemtr/IIN7O8voADQ+OGKQfgiUZL405lkLnTJxXhF0eYfph+19XV1JHKy+bDTDl9cGJqlmdmJYalGOVKJmkoKGsfL1u0SXkNvXLBW4PtBgUICgpiTOOPD1I31MHW5phUmXeZuxkyl6VVPE/ex8M+oDWCLp7p2acEJiTlouYX51rpvqwor/Yz6zfqu0N+iYEnAy5E9EdcCjiNMdCvE+uWGdgeGQGZ/hmyWMmW/VLHjFXD6jq08o5tKukDZ11mfCYsZxxoqiqcraiw/vP/dxy6FXxtPj0/yEJ9xOUHt0tRDmuRlxUZFy9YoBlgGV0YwBeU1PKQM8jqgLN3qvD76+ApXafyp5qoLeitKcDsUC7mMda0KDZX+Ah56DvPfZF/ecGEhJiId4xoz/jSyJVTlx7YC9iwWFwXWFVxkfDMrAXh/rw3VfDLrOFqjClaaMepBCnjqoQsKa4gMKnyinVx9045WbtwPQE/VIGJg+YG0IpXTfQREhPwVYwXIJfSWARX25ZH1HaQrQtZBUs91rdVsl/ueKvIqpsqKqoQ6rfrhq0S7v6wYXKQdGc2Gjeo+M654TtQPUcAgUQACG2LZY8sUh2UqRZkF1rX/Ne/lwvWMRPRUPPLlMTJPRZ3mvKAbwotUmv0axqreaw8bVSubi/Bsh0zRLU9tdc3kzfw+Ql6lry7fjkBIQTCiXmNeRERE8rV2hahV2iXfxcWllNUoVEUDG+F90Aj+Rszg6+g7Rcr6itSq5jr0WxqLXivDPDu8g4zLnRKtTL1gjbcd815e/taPjjBmEXlyfON3pE+054VXVYYloQWoFXkVL9SdI8QCnvEpn8A+Xm0n3Hk8DhvBa5orhUuOe6e75Kw+XF4sm5y2zSWNLT09vXi97E5dbw1/2AD34eGTLyQjZMklNxV4dZeVl9V89TzkwaQSkvnhmW/wzqadj6y9TCCb7vuI+6prplvp/AbMKwxETGmMckzCzKtsz/zkXTkNxN5xb3ngilGaotPDobRk5Pt1NgViFXTVXuUZ1LbkIqMscapQLg69/WtMsAxFK+GroVuvW5TrxXvdnBQsVPxyTJcsvGzKjQftLb1oLek+li+Y8MCyFSMzxCLUpiUjBVpFVUVFBQ/kqZPoYtiRknAYjqDtp1zu/I3sLdwsTC98RPxSzKj8gmyvnIdsh/xr/G+cpE0AvYruZT9T0KCSBfNSlDoUuYUUxU+lWLVI9RREsRQHov+hv4BF3tPNww0jbJ98UNxU3G9sZcx8/Itchqx4zGD8VsxevFMsuA1u3hr/GMCF4iQTj9RnxRgVaKWB1auli1VO5MJUHsLbkWLQDv7HbekNb2z+3Ke8Z0xUbFZ8aXxITA7L2xvPS+lcKIyKLSzd+d82gMLSZbOTFGAFAPVqZY9VcLVatOzkKaNc8iAg0M9mnkxNa+zbLLKsv4ybDHYcWBw0i+LL1qu6u69rxXwUXOfN7l9RMWPjBFRKJSFll4XB5co1lVVFdJpDhoJHcJEPIk42DZzNLCzlbLrcnIx4fDWMAZu4+3ybXitkm7VMJj0YXo7wUZJmc9/E4fVwRbe1wYW2ZUA0r2ODglfQut+MDq5uKR2UvW49DQy4LDBrwwtT2xIq1jrEixK7pxyovmhgq7LT5FeVMaXOJdOF5QWqVR0ELhLMIWKgPj8WXke9xb12TTz896zEvD67sxs3awc675rnC0y8A51nr4Xx3RPFJPFlokX3BgCl+MVpRLTTmNJE0P//2E7zDoOd+f2RjPn8cgvXq0lazUp2+mW6lxslXFK+KwC4Yx0UiOWAhfxmH5YM1abk+bPhMo+xSjA7H5Ou555sHdxNHBw463DK95qaKjIKTTptO06s8l9nQk/UHiVVliumVoZgJgHVSRRWctnRwDC3L41u1g5M3aD83Tv1W0hqiNoJ6dyp3aokWv9cvC89wiJUUvWMphs2SbY8NdWFNhQjwuhBvmDvsBrvuv7+/mF9WRwzaxOqWXnhWdoZ6vp924ANgTBtQylUy4WvZg92CSW+ZQ9UTpMVkgIhd2DIr/gfc866DZmcW+s5WlZZwlmaKbY6OZtYDWkgX5Mt5OjV4aY8BidV1OVtxLxTnhK4QgXhPwCpD+vOzG05+6aqiRmqqUIZNilUCeSLMk2a0J0DTcTNtY+F1BXIFVuEgeOCUqVR/eGrES+AfM+sXke81KtYujkpjrlA2XTJ5ArwLTlv67LStNOlzvYWRgKFxAVKZI5j5KMzkq9yNUGD8HJvGC1Fy5S6TumCCTp5JUmBCnb8HE7XscBkAYUxZcX106WTlTEErrQOk3bzBVKhghWRIH+9fbw7zrpWyZFJTTki+Xp6NXvFjkpRVZOpVOGlfQWXtY31JgTaRGZEL6PFo2LTC2IcMIOeswyEeus5uolFWTfJbkocO43NnyBeosFUiMVSBZtFhQU/hOWUycSiVHYkSpOSUu9xWY9qrPzrGfnliV3ZEClcOclq8fzif5MyJqPOZMdVLKUVpPQkwFSlZILEbYRaVA5TdYJEgHxN9ev0GpmJzGlueWHZ1Zq57EpeghD/Ar3z4VSaVL40lGSVVHQUmrSrBKw0cLQtIz/Bve9/bUurQ3oqeZxJbUmEmhaLJqzjvwlxG8Ksc67kNpRrJGqUUNRwdKO08hURBO0EboNu8bOPcJ0BuzrqE9mpOYQZsKpOOzds1W7w4Omye4NKY7Tj35PQ1AlkOjRnFLRE0iTQFI3jwGJpwDB9wBvHOoCJ8Fm4Gc1qFkrWHBwd0g/IYVhCc9M5A4ZjzgPupC+kcZTpVRbVK1UKdJ3Dg1Huj40NLTtqWopaFDn6GgpadDtTjKbuciAiwVPSJ6K5sxmjWKOP09g0MAShBPYlFjUJ5L6T6IKMEGhOH7wn+vHKZColGi1KZTsLG/ftRM6vj+tRBjHKoksSkBLww1VTxkRC5LB1CHUsxPcEjZOXggd/1M2gXBpa5fpmejWKT7p9WwLr9X0hbkyfnqBoYSzBmYIZEnhS1YNT4/DUeTTThQIlBTTOpCDTAlFBbyvdAiuyKvAqm2ptanCq2ntnXEtdU/5ir2XgXoDroYJx+jJa0tqjcCQxVLzE8JU9BS3E/ASJo5aCIGAXjffMYttqKtTKrpqbOsc7IVvMfJ/Ncn59v0ev7EBswP0RbqHtsn0DSnP0tHdE7eUQpSJVCCSfA8qCbMCJLqm88Zvt2yAK6grJyu3LIeuuDCqc2v2Djll+/e+Oj9PAXBDp8ZiSXJMvc+XUhoThpSZ1I6UFdLk0BzLo8TEfLJ1kzC3bflscSuEa80smu3Dr8oyBPUOt2q5mvxyffH/ecFPRFaHQosrzh+QhFKw0/AUsFTFVEfTCBBSjAjGEf8/N+cylK9gbe/sxm0F7bYu0jBTMnMz4HWYdye4pvmluwS8B38xwpaHcMt5TrNRrpOQVPRVZpUy1GMSwI/1yzOEJDzldlPxwm9n7bTs0K0s7YNvHvBnMmy0L7X2d104Bbl6en48IL5PQSyE9QixTA0QWVKtVDjUzhV7lTnUHNJHj2IJ7MOcvOJ2dvHNbxitgi0MrWkt4y76L/ixQPMnNDB01fXa9qm3gLly+8t/FwNRh+wMplAakuVUVhVKVdKV5xUTE5+Ql4x5hZx+y3jt86FwS64i7RAs66zEbdDvKXA/8UvygfPW9F+1SvaseCu6MP1vgUoFwwsLj/hSxBVCFqKXBNdwFtHWLdPeD/aK1wSCvj44f/O9cICvE63yrdLuD65fLwovW6/2sDLwLvCO8WYyUrQYdii5oD77RB5KGo8k0vLU7ZZQlwsXb9ZCFUxS0I+Gyf+DRHx29njyLy/m7lKt8G2gLldvNu/r8E+w1zEjcLWwB7CrsToy1LUrOOy+O8ROSsjQ+JQWFnYXlNiWWPvYONcIlO/Q68tTxYe+u3fP8xCxD682bnTuai8Er2IvQbAkb8SvZ69Pb/ywMrCK8qK1rvp/QZcId077EwdWP1f8WNZZX9krGCIWONHNTVHHR4FIusJ16rJJr+nvMy9m759vhy8R77tvCO6c7iUunq4ib2bxw/a8O8YDEApVUP4UcherGR1Z+dmXmPpXmhTLkQFMUMXufzt53LWmMyUxLvCyb/Fvui89LpEts2yx69drsau77A5tt/DsdhV+X8eMT0QUdVetmf1a7FsWmtGZu9d4lEOP6AmEgmD8njiRdj9zvXFu79/vWW7L7d/scmqRqWIowKnMa2MudbIHOi0ChAwvEu8XddkHmnDaMVnjWGlVspFUDCxFbUEqvJV5cTZg9O8zknM9Mbxwai4/rGrrD6qmqgOq0SymsDz1ob54CA2QiRXnGSxanpsp2qOZhheZkyXNXkZpv4P7f/i6dqO2DLPz8jKwgi/aLZVrO2lbqJXoNakGbE3wsfflwerMGlKllzSZXNqv2pQZ1pdYE+yPaQpWhZnBQ359+yz5nniG9krzz/BdbQ1qtiixZ+en4ilL7KaxrDqIxRmOXZSFmEWaFlpkWdBYH5V20KELn0ZsAbu+BnsN+Ug3IHSpcRhuNasj6GmmjGYpZcYnyqrHcW96gIWSzyJVTZgK2aTZupgC1rGSlg3zSO0EdgJuv6U9L/snd6K0PK+27DDpOWb6JdpmByeo6wPxx7vYRv3PupWkGJyZu5lTWDkVmlJsjkGK14bChK4BGv3AOv51nbDLbHpomWZ05PxkpuWIp+8slXXlQJPKQpGKVgbYD5gm1rLUhdENDcJL6AlHhlwEZMFe/yI5/DTk73HqQyg+Zw4nSilRbPX0Afy8Bv7PgJTM1ttXCNZrFFRR5hAvTdfLYolmBsuEYMDAe0H0hG6hKexnLaWxZaBm/Kk6Lvt4t8MTTFNSDRVy1c3VZhSSEk3P2c4uzIWL5ckURmECaTszNG0upGnoZ2ymH6Zgp5Uq9rEr+tCFAM1cEdjUetTe1N6UNhKvkTMQIM88jnEMbgg7gjB5yzJQbKlojScNZrMnUWofLwW3r0HmiigPv1KR0/oTMlIK0OfP0E8KT6AO+MzTCKgDQTwI9AbtrGmiZ6KnFmfG6kIuszZqv46IKk3WEGZRYNEjEOMQfxAREDeP7M7gjdOK2wWvfMB0tK1aagbocyfJ6Ibq7q9xdvM/sgcCTAoO24/tEIZQjJDdUP3QsRCYkJUO+MrjQ2+6TvG2rGmp9OikKHEpjKyycdC6AcJfSDKLQ02bTp7OXs6vjx3QDdDI0W/Qn86HiihCrLkrcUysEWnLKRjpiytkrrR0unx0wziIcoskDF3NLs2/zprP+JDSUnTSQpHYztIIykCetqPvLOtmqZVpTeoc7BiwLTXD/SaDMMdfCcVLFUvYDT5OVlBskYaSiFJQkOANcMZTPUz0965iK1iqAeo86s6tejGq92E9U0I3xW8Hy0nzCocMzI6AEM1SZBMNky5RP4zGhpj9OHRP7qVruWquqqrr0q6JcrO3unzOgRCDv4TixywJeouoDlAQ9RJmUwbTLVFlzU+GZfzvdBuuq6vmKz5rPmxX7vnyaTbDvEi/0UKuxFiHP8l/zCzPNtGPUzZT7RPS0q4PFIkOADH2lrBiLMgrmysr6/rtsTBwc+n4B3wSv2BCNkTlxxGJrAzDEGjSetOaFAGTi9FADOjFSTwCs/xu+SxGa4+reywd7mDxrTUhuTF7zT4LwHnDN0YcyUNM55BLkvlUBhTGVGXSd45ox5W+jfXDsF3tEOwpK+yshW6bsRY0FHcquR47EfzFfzoCPQYhyn+OcVG504XU5lSO04bRNUvzhE67vXQQ7+atkGzgLRQuFW+7sYR0JLXN97A41fsUvUYA1EVpSk+PLhJm1FbVf9UnFGiSBg3JBqu9yTYbcQOuby0VrRPt1i8D8MVylHQFdc13THjmuxB+KAK4R/VMo5DXE0RU2lVR1RRT41DUC0sDynuh9Ikwsm5NbZUtm24pb3Cw33Jq85K047X3t3r5APxHwQiGRAvpEEKTVBTq1XbVQRT6EoiO1IiRQMe5nzRO8RmvbS6droUvnDCnsY4yrjMrc5+0qHW4t4O653+AhSdK3A/Ek3UU8tXaVjyVbxObkLBLBEQsvBu2K7HVb9xu8O69rs9v8jB3cQRx+jIp8ljy1rQEdrS6Gj/cRfsL8JCHU9mVpBZqlkZV+dPoERAL3EUNvhb4CfQ4sbswWbAf8FVw4nE8MTExLbDvMKGwkTF5Mlm1UXmsv56GJUya0XLUS1XHFqGWWdXNVCuRPcwihlV/GnoatfxzWHHrMXAxVXGtMWzxQvDdsCnvkm+tcCxxH/O3Nsd8toNLSnpPxJOHFZPWvJbNVuNV+VP10PMMDwYJwAM7QvcytFqzHLJGcfwxavEC8FCvnK7u7i9t9+4n7zqxDbSheeeACQcMDbARupRNFjEWp9a/VeOUm1IzDkKJ5sSYfxs64Hgv9c20SXP28whym3EGcIFvla6D7kMujO7ib/EyCLZKe8TCu0lNj3ETDlVyFriXIxc4FmNU69JAzykKP4VPwIW8ADlWNvd2KzVf9G5zB/JMcTxwPy6DLhRtZy0Mrbiu6rFTdUq7I8J0yWmO+RLrVPfWKJa61iVVXpPBEWLNssidhKDAcfzbuon4j/aBdbk0jLNX8f0v4e5wLTAsVyxcLFYtK+6/MUd1ynxnBJ0LK8/Mk3WU+lXq1ioV89T50uaQIQzMyG9E0QDGPkr8D7qXOOQ4LnbwNW1yifFB7wjtpGxrK9RroWvNbViwX3R8Oq2Cn8oRz1jSn9S+FVxVolVzlHTS2RAljI1JpIVqgeC+n7yEe285PzerNf/zTfH3MC1u/yzga9hr2Kw+rTAvVnMT98s+W4ZPDNDQmxMyVF3U3xSF1CoS3RELDrILFcdiA7qBBX+l/f77pbmG97j1U3OJsdZv/u3trNssbKwtLMPuj3FA9V669YJoiMSORVFFksgTf5MoEtjSU1BhTi/LbUkIRumEVcKDga3+hX0ZOsV4JHVqsp2wgi7mLTzsjG06LbxvKXIE9qU8mESLCv4OnJDbEmbS4pKWEiERDE9djShK2Qj+xY+DjAKnwSN/FbyCOu03+jRscluw5C837q5u6W+KMRB0MvkRf3tFfUq2DfHPlJC9kNNQ8xAYzv8NIAuPifgIh0efhh7EX4KQwLp9PLl89cxynzCS7yQuaC4pbqLwNvMleCv+T4S0Sc9NdM9aUH/QIU+pji9NGMuFSd1IbkaTxZKEmMKZAV/9sXnI9nXzBjEOL5fu+C7J7wnwWXKMdz08uALmh8OLJwzhzcdOUE4cjMAMAYrBCZaJfEfrht3Eu8KwwGM8JbgJNIRxmPAfb3ovHe+ycLty/XbTPXjDmsjNjA8NzI5zDhgNm4yDi0BKBEktCBBHhEa9BOxC7D/pfAJ4jDTI8nDwqjAKsEDxPnJgtTW5Mn8IxMMJNAtrTDNMakxljAWL/gr9yodKgAnMSacIREXWgg79dHhs9JqyJfEp8JDw5XHLM8O3ZLzwwh1HLcm5iwTMCwv/i2mKwMp8CeaJ/AmRCQ+H0kYOwrM+VvmYtfLzFPHVMYPx7fJ4dEx3o/wagRVFpYgziRPJZcmgiUdJvklICaYJp8mvyPLHRkQe//c6ZfZt8/KydTHTMhby5nTdOG/9JsHaRbCHnMjlSWrJgUmnSSXJQ8nVybSJfIiWhs9Dkf63eWN12/PS8wby7HMHdIj3GHs6v9RDyYaER7yITkiVyP/JC8nICqmKxQrYyl0I0wYEAMo7bvb49DHzHvL/swF0Y/ZGOn++csJjxS5GPUcRB70H1AiYCQlJ7InGCdFJM4b4Qz1+O3kvdaszzHNa82K0MzWXeG07wX+CgpGETEXQhqgHGEfiSNmJgYpgClkJ4ggcRNM/S7ontj30UvOc8570IzVu94+7u77EAnKEMIVMBjCGyYfRiPwJS4poimaJvkgphLk/L/orNrb0+TQnNCJ0yHZNOT28tf+oAfyDMMQ0RQIGHYduyLBJn8peCpZJuIdoA/x+mbn79lT1BfSwdLk14PfPOgy8078fQPVBoALZhERF7UeCiZbKtQrriolJt8aqwYl8cbfatYA09TSidX12kDjtu3998r/HgXuCLoPRxaTHgcmsiqWLCIsTyglHzcNBPdT49DYntMg0zvVktmE4Ybqw/K3+hgAugZsDIkTrhzQJOgpaiyALJApdiHbEIL6WecH23vVj9T/1QzaiuCP6MnwEPbe++UBXgiXEJsaWSLrKGQsZy3DKgYkBRa7AJjr+N7n19fVPtaS2cDepOVd66XvivRX+hEBqgw4Fw4hCig0LEQtdivCJCEXOQHB7MXe+deo1UbWl9nS3obkdOnK7s3zqfhM/0AJShRnIGIo6SzYLWMsKCcJHKEJEfVJ5Mrb3NfR18LZEd6Y4xfoGus57nfxLfjfAvIPKR2SJggsNy7QLUAroCOEFM3/V+yC4J/b+tkY2x7dUeET5TDoIOv/7fbyw/vJCAQYTyMqKrgtXS7kLFwndBsrCG7zP+Sv3GvZndn92t7dC+FP5CfmCOhW61jxYvrBCPQXyCNDKhEttC1OK7olxxk6Bwzz9eUH33zcTNyg3UffYeEn4yjlKudn6r3wEPtcCsoZ9SQNK9Et6y2gK9gldxr+CPv2XOmK4aLdttze3ZXfkeFj4oHiAeTT5o/suvbZBS8VdSETKcgswC20LOoozCA0Ep4AbvGg53Ti9d8h3xvgIOBu4F7gTOBy4djjqOra9oAGHhhKI0Yp9ys+LHIqdSWyG88MuPtL7yLoNeRN4iDiqOLo4iziGuH53yXhu+Ow6sz2vAZcFrAiLSnzK/4rmCrNJlgfNBNMBav3Re6i6YznQOcP5y3mquWq5BzjZ+Jy49XnaO/i/CINVhomI8MnzSkMKjMoIiTUG7AP5AGg9ibvEOtq6Kfm6uR549DhXeC83pfe3N+D43nsgfqKCokY7CHpJicpOCm/J/MiURvqEEkFLvsL8/jtreuL6onqAeli5qPjO+FY4FvghuIp5+Hvof1RDeoZjCHaJVwnMidaJekhmxstE4sJMwD592vzA/DS7Rfrqeim5djiROEM4M7fCOKp5rHuOfvgCTEX7h4zIwUl3SSEI7AgRxs7FKcLYQPh/GD4dvU68x3xKO5n6j7my+KG4N/fGeAM4p3mFfDs/NIL0BfMHhYilCO3IyUiXh+nGgUUZAxKBa3/Afsm99j0DPFY7pvqz+bF44HhduCD4E7iZeYG7WH4DwaVEZEZLx46IFkgMh89HZwZvhSpD/wJlwRZAD39uvoF+Bz00O8/62vnruQw44/i0OIx5DLoWu8t+q0GVhEbGBMc+R2AHqId2xt5GHEUkg9DCgkGtwK0/3D9T/pu96nyCO4s6vfm0eS7437jwuRw5/Xs0fURARQMGxTzGEgbEBwGHL8aVhgJFV4RfA3UCfUG+QMYAUf+LftE91vyk+0i6qrnQObI5VPmJOii68PxbvvaBMkNxBPcFkAYiRj9F4YWJxRcEbUNzwmVBo4ENQLM/9v8LvkU9Xjxk+2L6mXoa+dW5zvoIOrJ7XbzYfy8BW8NhBLyFOkV3BXZFBIT7xCbDrEL+ggHB+sEdwNeAsP/3vvh95Tzf++J7Mjqs+lS6QHqzuuJ7hb0MvzTBG0LUxAtEz0UexT1E6wSoxBGDk0M+wn6B7MG1AT7AmEANP0R+T71XPE+7kfsc+t66zfswe3N8Ir1Zf0rBYcLUA8gEfAR7hFFER8QPg6VDNgKIwk5CG0HHAbJA+8ACf3k+Ab0+/Dz7mDt7ewd7RLu3u8589n5GQAUBicLJw7UD9wPvw/cDoUNkwzZCpoJ+QcEB+cGOgXnAqX/TfuB98bzWPGv79ru3u6N7+/wzvMH+Bf+pAQcCYsLGw2aDYMNugzzCwwLgAknCdAI0AfpBnsFzAOhAKf8xPgG9X3y//Bk8IbwAPF/8vj0U/nP/ucDTQihCqoLVwxIDBMMZgvRCmcK2Qm9Cf0IjQc5BRQCUf67+Qf2nfMW8nXxavHe8dby4/T2+PL9xgJvBtoISQrFCtMKjAqfCYcJbAlXCQoJbgiRB9EFqQI5/9b6Kve49IHz6fLi8oXz6/RJ9wD7tP8dBBcHYQgtCTgJKgm9CKsIoAhMCFAIkgjyB9AGTwRkAYD8uPhd9rT0NvQr9Gv0pfVv9yP7JP8HA8IFEAcACHoIWghkCBEIIQg/CFsICQgIB8AFIANT/5j7bfhr9qL1UvWP9S72kfcv+sf9vwCtA2UFXgbHBvAGIgcnBxMHnwfDB3MH5QaiBSoDrf8G/F75bvei9mj2dvY095X4rvqw/VUAuAKAA1kEGQUSBY4FBAY4BpUGywa+BsUFGARWAaH9i/qZ+Lv3aPeL9zT4cPm8+5j+KwEEAx8E8wQ1BVkFcQXTBSMGjgbpBrwG1wU4BLUBWv4x+4P5xfiM+Lz4Y/mw+nj8xf6fAEcC6QIxA4oDDwSXBC4FuAUZBuMFbgVZBDwCJ/9P/I36svlo+Zn5I/oa+4z8Xv7s/yEB8wGTAuMCewMdBMcEJwVvBV8FxgSjA58ByP6S/Cr7nfqD+r76Wvtn/MP9Nv9JABkBpAEhApkCQgPjA1gEkwSeBGcEzANTAj0ACf59/Mn7ovvH+zT83Pz5/fL+wv9QAN8ARAGvATECxQInA3ADewNBA64ChgG//yn+LP3G/Lf83fw1/b79c/42/7D/JQBsAMcATQHhAU4CkgKsAqgCbwL8ARMBwv+g/gv+zP3U/f/9R/6h/gD/Xf+u//f/WwCWAPQAUQGQAaQBnQGAAT0BtgAJAFH/+f7c/uH+9/4f/0v/fP+u/9b/9f8NADEAWgB7AI0AjQCCAHEAVwAzAAsA7//n/+3/+f8=`},{name:`shoulder_left`,sampleRate:12e3,frames:7440,wav:`UklGRkQ6AABXQVZFZm10IBAAAAABAAEA4C4AAMBdAAACABAAZGF0YSA6AADg/wsAOQByAMIAMQGzATsCFP0K/Rf9Kv1O/Ur9I/3q/J/8Q/yn+xL7sPpU+gr6APor+r36efvD/HP+OADiAcoDMQVRBi0HqAfsB9sHQAfkBkAGBgYoBiwGMgdkCE4KkwzYDu4Qve4E8PfxdfPy9GL1svUY9Sr09/Ig8q/w4O8o73rvRvDo8d30kPhI/FIBbwUhCd8Lmw4JEGAQ8g+PD84NYQyeC8AKKQoWCycNaxBjFJkYnhzHHxEj3OKt5f/nbOlW6fPoOej25hvl+OOX4nPhKOKT47vluOkX70r1c/tRAjkK6Q83FO4XBhrkGY4ZHxj3FS0TuhAfEO4P3xB5FXsa8CCvJ+MtOTMWN9fYYN3S31jhouGo4Bjfddu21z7W19RB1N/V49fA2q3fV+cu89f7WwVhD8wVvxqWHwgifyIUHwQc9xh6Ff0SoBFNFMIXVBxCJVcvRTYcPrREjErWx+XL388j0nXS6tGczjzNtsi+xV7EpcTQxVvIMc4d2CDhHPHC/84L+hWqH0Il3CcRKNAmTSMzHsgbvBm3FJcUHhu9ImErQjTCQGhKDlOkWrBgaWQPwJLDmsaPxlfEE8LsvFy5Y7fvsYOxkrO3ts685sT/0oHi7fFJBKsSLBzHJeErfi7eLWMoaCJuHq0aMhYjEYYSIBbiHZ4ptjZuQklO0Fh6Ya1m/Glbvi7CI8LhwAa+hLj+sVevva3urb6t6rICuVDATczz3BzrEvuxB1oYuB9mJRQp5SZyJU0hMRyJGKMQ9g5TDWAOYBaxHmkrhjdTQu5P5VfUYLxme2ppbHO2d7hmuGK1BLXqr96rn6lyqJ+oM6pFrmW1Jrr4xMXX2uqN/SMN+RtXJvspTC3bLZAmJB/EF9gRnAp9CVYIaQ4SGY8kbjNkQqFPo1rqYOdnNWxybRxv9LHFruera6jypWGi6J9un0Gfe6GXpeiqH7PHvj7MQdu+7M38tApXEiUVpxlOG68dqRyCF1gSlgpJDLkNZA6RESsW6R9uKrw2bUSyTgpbAGJ+aM5sPG9Ice2zfrR4tFiuOKsupnSjraCjoQukwKWZq7q1ZsHB0PfehPBE/h8OPB0IIhAkdiR9JIgk0B9gGLwTEg9zDcwLOw4QEZQXbyAyMNs7+Ee7UE1btmPJZzNrqW5ZbhqusKvhq16pIKU2pvKk76Q5pSCmt6vesQS6P8bNzofcSee7+OQFZQ0wEwUbORkIGYMXTxS4Ed0N8QrWCEMIsQ3pFEEbbiPGKo85vkalUWZZbF+yZKZnb2vLbAxsTmsZqYqmyaRAol6if5+lnoqgnaN7qiuxgrrCw8bP7OG78bj8uAb7DL4MTw+2EtUP+QtnCgoF/AC0+9P8cfy2ANECdQZPDL4daCmiNtNCtUtDUPhYmV+FYgxieGJHYgNi56THpS2kEKNOoh6iRaRNpk6p3KqurVi1+739yjbYV+Dj7K75MwnIEmcUoBIgFPoUxxLJDUAHFf+69832sfvr+vT8NAFkDswb4SmXOeND9ksoVMVZwl/kYI5ijGEqYcVf8aYSo+ShyJ9rnrKdzp57oOyjIKoUtMK6ksdz1IXgie5P+80CFQkqDosRmhOkEHkNrwiAAUj9Xvgp9B/zLfOr+2//4AoWFwslGDUgQTRLmFH1Uxta11uhXV5eZV06XV1cZVs1reCqjKpXqM+pXqmzqFSsrLFttx2+yMpg2CHeG+qw+ngCfgfKD6QUfw9SC48M0wfz/4P9jfk59X/zjPY9/gwBHAuZF7gg6CmvM+I6vUFpSbhPk1JSUxlU/lTJVJFU71PfUWqpMKhTqBqnJqdJqAirpa05sMi2hr35wt7L69c64ArqcvMi/Dv/8AGGBMwEXv4M/7z4oPY38y/x0PKv9r/5vACaBTsRKRq2JAkvbjdqP/FHQE0eUFBSIFNNUyBUuFOtUDdNr6xYrMCrbatkqxCsCK+1s8i48b1OxdnNgdki6DfyIfi1/j8Fzwc/CeMHKAKJ/Kb36fIt8Eftme9c8aP0ifqNAGoLMxZqIRAqJDL4OgNCwUdcTJhNtk6sTjlQSE8NTRFLUkmyq/SpralQqYupkKrhrKqwaLWwvLrIutL/3RzqA/Mb+WD/qQJlBBcCeAHc/RX4I/Qc83vvwu347ib10/f7AI8LvhhvIu4tQzhRPwtD30hMTGdOKlCcUMdPBE7jTEJLx0iHRTGrOaqXqxCtCK/FsWO22ryyxU/QU9rs4fLnwfAy9bj44frA+Ir1jvGx8Grv4+m16STpGunf7KLy/fpbAlQLzxgRItkq7DMDOx9AmEU+SJ5Jn0hLSL5GaEMnQqY/CzzNpjqnwqjHquOtebJDt1a/U8fqzFLVx90U5vvte/TX+Mj3pPes9gf13+9i7Svo6+TT5Bvn9+wG9IX7HQmTEzUj/zBQOr9BOEazSj1N202UTkBNgkqhRxREfkLxP9k+s6QdpVinvKqRrq62n74xx0/QvtzK5unsdPHA9074gPaO9LHzyu6J6cjnVeal5fHmUOyP9RICLQ3wGqQm+jE3PCJDOEjkS1dNZk45T3ROuEvUSONGhURVQv1BZ6LMo8OmbKwgsn259sPIzgzageTo7S/zHPcC+PD35fJP73bqxOQv3ovds90l4nHnVPG6/YILIRxNLHU2G0CbRv5L802mTqtOEEx5SVpH6UMpQ49BLEPunQaf1KG1pq6s1bWhvtDJKdbR4J3sf/LC9Ff1p/GF7qLqv+Qv4LfdX99Y46rqKfS4/iAMaxx8K3M4pEKYSXFNOFBsUtZRVU8pTI9IO0REQaNBD0QjmR6cip8Ups2tBLi5wofNpNdq4ezm3+zP7HHo0uTF4Cndh9g41+vXRt3X4xvwZf4vDywhgTDuO95F9Ev2T7RSelPmUXtNrklaRtdCwUFuRM9GpJbRmUSfk6f3sZC+7spt1QzfUOdb6lvpHeUp37XYqtJwzo3NXc5L1XzfCuyR++oN5yDQMYg/HEnhT4BSsVS/VKFT4k8DTNxHeUXnQ6ZHo0w8lxGc+aNor4u7KclL1gHggeaB6D/n8eEC3OjWH9LZ0PLRHtX229rm4vcZCOgahi3NOw5GgEwdUVlUqVJvUBVMKEaPQT8+zD/rQd5If5OPmZ2i260eu97J1tXo37LhJOCn3ILXK9FkzWLJUMhNywrU7OH78rYEwhiZKr46dUflTqZTz1TmU3xRP0zCRfpBFkDrPutBl0kCkmOYyKKEr2m81snG2A7g0OBb3ULYJ9P+zrLKX8i7xyzNlNiY6G/8ew0OHjcvnDu8RcpK6Uu8SthHdkQUQAQ8hjvuPOFBsUk+VHGZ8KNlsFK/+8oA1W7brN4o3XPXfs+tyNXDEcMBxirNpdd55vb62hEZJws3ZEJASZpLskypSuxGTUDnO2k4+jkMP0pJ9FLJmX6iba9nvGTJ8dID2cfXitPgzVrIwMCTvGW8ccB8yCDYE+2kBB0Y3CybPVBGx0kSS2tJe0VEPCU3gzOAMes2K0AATIVW7Z5Lq0S6Ocal0dzW8tYX1MzPGsv2xUrCb8OEx3TQv+GN8RoIHhv6LRk7RESVSeRKdUYmQ748YjWOMi80qjbXPeVJmVUeoo+scrs7x6LOFNVR1m3SB84dypTEeMLLwmbIedM74nv4xA4wIVI0tj85RL1G5kV6Qfo5aTPNL7QrUSxBNtdByE5EWgqryLeZwvPOydVe1N3PFMiRwZG9i7r5u0K/wsl42+jvcAZXGe4nfjLxOH85jjaxMd8tgigFJwUrUTGxOY1HkVJvXK2yDr/nyFvNjs93zkTJqMQjwMK94rxCwHXKjdWe5tz7zg9pIqww5TmrPgw+2TuAN6gxhC4tLMMsGDAQO79GE1QHsOG6YMYYz5DTitX1z6/KLMUIvxi9P7/zxBbQeN1+8RUGwxaIJ3QwWTTfMhwuqiluJrgghB76Hfsn7TI1P95KslbwtavBt8hrzJ3MwMm8xy3E8r7iv3O/w8Pj0aPeJfIABMQVQSO2Jzkuui8VK2woOCHNHrkeOSPyLWM4a0SGT45WcL4BxefL2M6Wzg/KOMeNxLrBQr4CwmfHiNEJ4NjzMATTEXEfeyh7LPsvXyzkJQwcbhrYGQkd6ykpN6o+yknPU47AHseNzwPVbs8syB7ESsEzv+u+6MIiyObRC+Ev80sHgBc3IWonHSmVKB4h/RxvGZ0WmBQFG3IkADFnPeRJvVE2V9TFUMpGyiLIXMWLwHG/7bwxv77CM80A2FzqEPqvDDcYCCT1JoMmYiKUHlEUEg+LDX4QRxhWJMsywz/lSvBSE1jfxoPJ7sc9xWfC0b3ju1S9QL4Qw1DMvdlO61j8nQwyGZwh4ihEKSElOyBVHDcXRxalGMQeWChsNotCC01OU8BXy8jey63JVciDxPnArLu1vE7AEsjJ0SPiP/abBgsXwiavKggsRyhaJVMdgxY6FaoSwBJNG38nyjQlQgBNPVKBVQDDQscax7XE1sESvfK70byJwGTHFtHw3o3um/7DDtIYgCAFIt4heyDfGSkUNBLXEN4V9hv0J4kz/kAkS91RJFYBWenDbMMewsW+0bnutzq5uLwTwW3LqtfW5fL4LAnJFTkdXCGsIdsZ8BTLD1cIXQjdC6kTGh0ALb45O0cyURNXallNWwfAyL1quUq2BrPWsrCzvri/venI+9fc6IT9mRBzGKYh7iLtI8MeVxjSEvcMngnCDO8TqyDiMDhBS03iVMZaBl6eX3nCor0LuKy0ibF0sZyyYbbSvsPIHtp97N76TwzvFeQcbyCvHAgbzxT5D20JiQXMCnwUIyCtLk8/qUtNU+5apV8dYYe75Lc1tQKxeq01rd2sUa+MtJ+/JMwi233oo/ZyBN8PPBNYE+4RzQ0YCoIKcg2NEb8XHCNsMsg9/klkVFJZdF4cYIJhnrXjsuGxcq+trC2vBbBqth+/q8p22Lvkn/k+BvkMOxVFFbkRPw0hCCgEZPxTAD0JmBOCIM0sST0uS/NTy1zbYF1iQWIUrjmtUamCpmOnpKbnqoKwtbicxCjVrudD+mYImBIaFpwZlRguFB4L4QKi/kb+swLECOkT6yDkMGdB+U9bWKldI2HhYvJiEKnIpgKk06EMoeKhDqZlrKO108P21QnkMfIIA8gLOA8KD5IJIwLz9tD2sfen9F38dAifGLgqwz1HTNdW5F2nYxdnCWb0ZKmjOKBFnwKdzZtunfGfTaehsa+/UtEF4mTzIQGSCfwQiRJOEP4MLgQu/aH6R/3sAPkJBBYDJV00o0TKVOFcsWI4aJpolmjSZjSiYZ2amdCZRJy8nYCjj6w7tqPFwNtC7d37EwMiChsLJQtLCWMB9fo/9hP0lvkSAXAQDR3jLOI+Xk1PWNtgOGXgZwdo5mf7ZpqeYZsqmo2ZuJofnBCiY6qCtN7GmtdR50n1t//uCe4IAgZWBIT7u/UW8Bnuu/AH934FnRS7JuQ3UkexVFBd42FoZeRluWTPYShfUpfBlRGWN5eymWWet6bss2HC2dL15sP3fQPkDFwQxRHLCKUAyPdn8X3pzez/8ef8uAqCIYE0OkXOUWlddGLqZdVn12ZkYyRgI1xvldWTKpMklBKXIpx0pEOw373yzMrZiOu79dz5+/oa92zzG+505x3lX+Dg443offZHBkIW9SlKPFJJO1V4W9ZgxWGLYgdhxl59W+FX+pV2lqqXWZoHngCnb7BqvbXNzN0g7ID1Mv17AIn5nvQt7sXqNed/4xnl+etQ9/QHwxhcKm87AUnUU8db7V5+YFRgcF+XXJRXJ1TJltqWUJivmxuhM6nVtIXClc8+353t8/YJ+7z+L/oc9KruaOkw5JbhIeTK6jLwdADbEQ0k7TVWRMlN8lSkWOZar1ltWBVVI1E+TiRNjZgBmhqd0aElqCi0zcAW0BLemO0G+Vb/dwHnAVz7FPYq7+Ho/+S55Ojn9fBH/DUJ4xqUK446r0UxTN9RCVVnVXFVPlKCT4BMe0r+nMGdpZ8mpMOplrKQvc7JDtZR4KTpiPJS9Aj1ke/A5izhwd7y3ijfh+BD6RL1Bwf5GkcrVzj3QUZLUlDcUEJRPFCDTWxKekYVRaxDGZ+Gol+mI6uUszW+c8qE1pviruqA7wHvYu8L7GvnKONN3wHf3+A85QHvBv2lDFIdwC79OtRDQUmITIFOS02iSt5GpUG8PoQ8/j2woQal8agjsBu6TsZw08LgtOsw8MPywvJx7mrpauLX3ZraEdoq4WvozfThBPgU9iXcMdU83UTdSOxJVEo7SJpFLUJGPzc9ijwUPfylzqlTr2e4u8JIztrXUuIp6rvrQelo5efdVNlm1onV3NV32SzijOzf+ooN2x1sK2Y2ED1EQT1DJkSVQto9cDkONnI03TX7Oeemfqszsli7esfa1HjhFuo+8EfxbO1u6EXjL9zs1+rVrtpg4FXsxvzrDdweyywkORpAQkPBRD5ESkKAP6c7pTnrN0k76j59q2KvlbXMvf/IQdUp3/jkOOqP7GHs+Onw5XDiHt4L3vnhq+jh87n/4A4CHowp1TSfPEdA0kDLPgE9wTnGNZU0FjQCNmU6capBsK+3z8AQzKjVi9+k4xjnwOZY4xbfAdqf1WLWm9lD4hjtUPsQClIZJSesMnk4YTqiOuU3WDQkMAsuwCvgKw0veTc0qs+wrbhWw/XNddpJ4/XnpeWw36fbKNdD0ljQs9B31rjgyfH7AcYRkCPhLwI4kT7SPyJARTpNN8kzgy/tMIIymjbLP2mtrrYkwmnOC9ow4KznXefx4Z3agtUHzxLOn86U1NHeFu9fBKoTJyUpMo04uDwpPto6TzW2L9IrdyihKoUwbznjQp2seLUkvl/KgtKS02fTy9FZzZjJScaMxKDEFsrU1ubnQvl4EQchNzAqOnY/8EAnPME2CjNoLDQrHSxDM1Q9nUeGrl64jMEIyz3V0tno1zjSGs72yKTG3cd0zW3Uf+KL8rQFaheWJzExOzboNs80OS5gKoMlfSUGKJUxRT+iS19WgLjqxyDV6ttd4GLeXNaCz0nM+8nSyAnNddf+5mn6UxAhJDYvwjlzPFw8jDgeME8riic3KOksvjWFRFNR3q3PuEXGec9n06nTOc9XxivCIr+Iwf/DLss72R3tHAXEHDMrvjSEPag7tDwtOC001ytiLJYxIDt1RftS2Fw4syO+m8kfy37JWsU0vnu5fbg3u96/E8oy2w7zLwv4Hi0tATJYMrIwGSo4JY8exh3YIegpIjczSKJWGGIStt7A5cWPxwPGp8JDvXS5uLl8wb/J1NkS72UIxRwDL2k1dDrfMjEuwSi1I30hISbVLn1BXU/dXJdmG7ksxSvLycuxxtTBCrviueC7zsMOzpThf/WeCu0csSwCNdQ2cS9zKGQeIhzVIispGTTlQyNTkV+4aPe0mLmMupy52bWYsh+wNLLyuenHCd+y73cGSRufJ5ktXi2/J6EgshjYGqMdfyfRNatIP1lFZJZrAbVotquzo65eqo6n96UnqLWudby71OPuNgoyH7QsvDHpM3Ix8CYVHoYagxx6Jzk5Kk6BXNpmI26ntwi8w7zatluv1KgdqsCvorp3ycbijv3ZEyAlMjMqMqwrASX0IQUb1BlLJMozUUVGVx1jB2wvcFW37rebs0iubaepo0SoQa5vvpLS8e67BcUVHCMjJvkheBgtDTMEagFoCX0dKDTbS7VbUmhJbhW1bbbTtkyw9Kmsp+Or8rNwwSHX9/KTBsgXxSERI4sgYBgKEngJ0winFNMkdTy2UjJgtWlcbXuzsLCQrIqpjaWyoxiozbEdxuXaefeZDjMduybLKCYhtRioDaQKbg2WGZAwNUSHUhJg8GbXamStvaq8pi2gCZ/1oiirHrluzsLlzADfE20fICD5HJ8PyQUw/rsDvAx1HXIzBkggVdJgo2e/aF+nE6L7npycm571pJqug7uu1GnxDgkRGFQgORtAFFcLnwfnBf0OPiDfMn1FBFZeYWdnv2n9aAyrQqZ3o/GjYqiNsCnB8tRU70kEYxFgGHsYyQ8uBxIBov9jB2IV/Cd+PbJNlFmYXrRgbWBYo12gJ54GnUufH6fMtePJQeDK9T0I6g5FEVEKLQE++Rr42wLRFOAmZj07TidcgGG4Y5Bj7V8CqMmknaSrphGscbeRyirdavQmAkAJsAUCABX6GPap9lz9oAjEHuIzBUdvU0NZxVxkXAFZ/KXtobuhCaUUq2+2WMcj2wjwugAhCx0LyQS5/uD4Mvev/dULmh70MsZDyk/RVOdWOlWSUkBPR6LboTel6qrDtuDHaN7A8GH9PgKZAbL3RvC46kbsQPEz/SQS5yi2OihH9k9VU7tRqU4mTF2kcaONppGtNbfIxh/bzO4l+3sABAB6+fvwB+vI6PXqYPgiDLshMjaERTJOMFKUUnpQTEwwR32lOKflqvWyiMCx0/PmwPToAAEBGf009ITtOunP6nv02QTSGBAvTD75SD5OQU4uTMJJ0Ea2prSmWqpksJ66d8wP3czqi/R4+RL3eO1258HkcONR63n8ixCQJcc3jEM9SrBMUUzgSOdC1D57plqoA64ttj7DZNKB5Mbxm/SS8jXsGOT430Tf1OUC8iEEVRpLLYQ7LkR5SV1JrkVFQQA9uTsoqN+rMbNBvhLMWt4L66bylfX08Pjq6+Ii3tTf9ubv9SUKzB+oMAs84UKhQ3pCHD3NNw40jDQWpoKqUrK9vpLNCt4o6tDwx++m60nls+Af3NXf4ukZ+dcKfx3nLsk5HT9rQlpA5DwaOY04EjqnqH6s2LQowGLOkdqw5cfoXuhR5FDgI9lM1hvbn+Zh9d4K8yBdMRk7XEFBRDZCQT4zOkQ2uzUyOxCrdbJTvXnL8tnQ46jqQOuN5RveEtnL1oDY4+B98vsH3hvJLUI7BUKrRO9Diz/SOJIz4jFTNi8+lqywtZbDAtRx4kPrx+0x5y/hIdp3163WWNuc5jf3Cw1nIn0wzzplPa48ejlyNLQvQy0mMI43k0ALrdW3dMXw0yLfV+Lz4KLdMdbQ0AXO6M921qfjbfcbDx0jnzEHOqE9Yz0NO7I2mzPwMFcxCTt7RVWthriNxLnQ3thf3dDdq9dJ0mbOosvUzp7WJudM+ooP5yLvMPs5RT5mPgo7MzZSMZQvQzK0OQZDEqk9skG/XcqV1cPZ6tvm2ETU6cxpzA/OpNb+44z3ZwzGIPgxLjzgQIpAFT1uN1AxtC4WL/gyTT52Sjupm7R9wdDN1dNJ1bLTy8vgxaHETcTIx9XSH+N/+GMPpSRXNLs78D11PO81RC+4K2Qpny3oNEdCEk/Tqey34MUBzm7U09O+z53Jr8P+wf/AYcVi0H/iOfg+DoohvDGVOWU9kzzROAYz7C9FLnQy8Dm4RitSg13ptdTB08s40qbQRMx6xfy/ab0JvLLBkMvS2wPzhgxnIV4xKjq2PiI9bTf2L50qkCb6JyQwXjwtSYxWgmKltZm/dMh3y1/JjsPbvde5Aretu/bDANBB42H7iRHEJWAyezlnOLE01S8pKZAlDyf/K4I3w0awVvRic7CavJvExMdnx5HC6rp6tFexabPTuU3Eq9Tk62UCxBkjKlw0GzhGNZ8uUSgXI2oheSTULbs6UkmoWIJkMmx1uYy/EcPAwAu7ZreuseOw8LMTuzPLKtz08QQJRxs4LEA0mjZbMrwrbyKjIAQiVycVMPE9p03xWwNmym2Kt9G8Fr6kupO0Wa4rq3CpO63XstS+5tAL55/9PxVVI/Ir8C6nL8kpXyLPITIiaiYGModA1E0aWtVlpW0Vtuq7Q7yntxi0E7CpqxCqdKzQsSnAcNPJ628DoBeIKcYyYjNNLxQnUh4VGXIWNxpaIjIz40U4VTtigGtBcRK7mrzVu0+z0K6Oq/aqO6tJsDq5s8ho37D3Bg0cHG0kryjpJgQjbhzkEooUoRiQIv8yN0RkVCxgTGqfby5xNLZvtWiuZafQoqqiKqMsqVS0o8Lt1lbyWQwXHMEj5CfxIXwcVBXvDYQIQArREVIjPTVZSo5YFWIyaa1sx7BEsVGu1qmRph2nxakOsCS7dc214hP5Xw3qG7ghGyXQIm4dJxXeDVMJ4g1UGB8n3jjcRwlXzmGEaQdrTGyfsSSxSKzJqLqm6aXQpwm1t8CT0ffkefvACoIWNByOG48Ucw/UDP8IWAkJFBEiVjOaRO1Qt1ySYopleGYDrLqnd6OAoc6jZaSNqRO1bMW43MD0aQyKGhEfCiQkIdYXUgx4A3gETQhlFl0nhjXlRkpW2mCxZYRmxmVDrmGquqjIpjmkG6UEq7G0i8Yk2aHuKf45CxoT1RJ7CvcEfvqu+T75GQRMD9kfIjOaRz9Tm1vXYK1iV2C/rUWpZ6dvpsmmYqsQsem86s1N3qfzcgSMCTMP1A2pB7sBtf8xA30I9xIeJVg3bEXaUlxZml4fYElhl1/8sQGsfaoqqiKvrbWJwbDOVuO78qUDNA5PENwORAYJ/qr5ufmI/iUHMRR8JZI2+kbZUOpVRVccWFxXL60ZrKepgql2rVu3IsKM02XlBPeQATUOCBEhDJMCz/tT9lT1HftOCf8XPCkqOldEyUsRUE5TuVIDUASpiqeRp6KrFbLcvAXIfdcO6ZL2wQN3COsEKv/j9k/yJvTg+Q0FpRC8IJkwaUFsS3FS61M6U+xR/k5mrRWusK7BsZG3ncZC1b/lGPcQAkQHiwX+Aq39C/O38Wv04vx4CiYbny4qPTpGXUt1TXROYkz+SeiraatorLGys7u0ygnbQO55/+kGjQfMBjP+8Pba79Lrle9M+EgKzR/2MGM/CEkcTYdOhExwShRF76luqsCsFrAludDE09SN4ffsjfWB9Jns/OZh4JbhwOQc7Z8BARNYKSc8QEd5TZxOZE5hSxRF20AgqWuqXK7utFDAZc6w4YfywPpu+pz2O+/v6dnoE+ww8zkAHBPrKBM4V0IxRl1HskY9Q+Q+oD2ip7+poK//uW7Iati36Lv0CfmN9I/uauah4lPflOQ38IwD8BlPMMs9pUbcSQdMvUisRd5Cb0GVqmmu4Lb2xH/U1Of99Bj8Xv1C+Y/1oe1z52fq4PJRBNoYHSsZO15Dwkh0Sb9FfkLvOxI5Q6WUqBWv37hyxkjZYOTU7hbvYOzl4kfbtdp239roU/w1EO4nBDZKQWBHjUZhQzk/jDlTOPM7b6i5rtO5Tsk218LhceoR6pTkT94Z28XZr9/q7rIFzhufL987CELvRdZF/UBTPTQ4HDlCo0KqArXGwvTRP+BW6gjuQ+vi4oLawdVG2lbnUvxsEoInzDabQAtFs0Q8QPE58jUeNjs8xKMarvu6Kswg3Lnm0umb5nzfetlp1ZTZAuXv+SYToShLOZZFU0kLSptHxEKJPbs9eEMRpPitAbzly/7a8+To58zip9oh1b3Q0tSZ4tj1Ug1IJZU26kG6RlVDCj7+Ni8xJjYLO+meSamjtu/IGtci4Dbh8tkc1uXNIct+01flOf9yF+kuLT1aReRHEEa9QXs6zjdPPe9HNKMisB3BUc+j1iDZr9MHzR7H+sU4ydHU1uxACX8j5DjXQWJFd0IgPLg02zH1NoJC6lEdqjS7vsog1xLdmdmD0KfI58GQxabQr+ZJAyEeBzToPydFNkTrO0AymC+BMg8/4U7Wo+azBsXY0aDYvNRbz3vFH8BrxAvOheNGAGocYzTxPyFF80QnPNo12DROOGBDIlHloWqy0cLe0LrV+s++yKbBB8A7xPDPEeY8AfYbvjK4PlhCAT45NtIw7C0eNQ9DVlM6onSwLL9xyQ/MHMa7vlO6Qbp7wPPTbu9wDtUmEDiCPxY9yjYaL7YpoSgGMcxCOVetpGe17sAgxhbGrr/+uLO1BbgZwQHTFvJbEd0nnzeFPfU3cy9BJ0QmBis5OvVLeV7zqe+78sYbyrfFrr1xtxS2B7xxy9LjRQJsHk8z7Tw8PBE00yqrIr8jBC6OPl9Sq2LGrE29NMQAwpu7ebTesoC1X8DQ1ITwRxBLKbs20DzxONAw9SryJEwp0zZiTNRfAGxVt9e/UMDPvRK3x7Kisra31scB4SUCehwaL6E5VTcGMAQpASQHJ08xa0VLWf1mJXBvu37B2LvetQWwLq5Gstm9U9QC86gOoifQMwQ3ITC8JlogrB8OKIo5IU44YORrPbdqviy++LfjsSKss61wtFzFOeHQ/WsXZyayK/YqZSNXGzMWfht0K9VBmFYHZbFsiri/uUa1nK3IqMum1Kt8tyjOrOrwBmQd0Sq8KdcjQxvuFB8WdSAENgJLNluAZ1Vtn7nAubi0rK7bqj+uobnSyybmpQEeGJAlvyiZJXEbghAbDxwUuSb5PLlROWCKaEa47rkXtS6wGqlHqGSt1LmbzifnvgRiGEshWiPmHUYUaQ93EV8cjC5YQnRTJ2DpZue1T7RCrsypNKcVqQKybsE82IH0QgvCHN8hsx3VGCwQUwwUD70bqS9QRhJXt2EqZZe0DrNerkeqJqqEqz20qsV53nf8GBCKHNofzhlDEyYNrgxTFnsmPDvZTZtad2KiZfK6SbVDsJ2rTqswsNa71NDW5pf+SQ9CF5QXWA/UBLL8EPn0A6EWoC9CRHdS81phXqSzxLEyrXWqdqqvr5G6T86r5yP/5RC9GkAa0hG3CEoD3wS9DVcdvTC3RNtRFlpnXX9dMrElrMGpqaqTrqq4cMkB32XzkgSVDpIQcwnIAEv9i/wLBbcXGjCiQvROcFfaW7hbvbYIs0qw6q5qtGO/bc4h4S733wY+D6EPRQoV/k/4qPbr+2oLxiCsNZtHO1ESVgNWhFR/ry+suquUrQWzir4j0fHnL/v/CXQNPAhXACz4N/eo+GsDxRX0KaE8xEgMUK5SKlHlTxKt0qr5qpGuWblvyODb0PEqA4cLKhCMCkcDkftg+1ECiBGiITMzkEILTSZSv1PnUC5Nr6yBq0qugrKnul/IVNoC75AASAWLAvf6j/MD72Tv3PRNAlkUViv7PF1IdkwzTi1MfUnnq/mpXKqmrgi2E8W51lnqF/rIBNcGbwJz+Crx5PG59doEaBZgKa08OUcaTzZRL09aTUxJ3K3KrkCwHrjtwR3V/uiY+R4C9QJE++f0Ku606qHsp/WHBkob8C8XQHxJQE3PTbVJzUWrqreqyqtSshi7Usrd28jwV/14A+YEc/4c8x7u1utj9TEDQBZXKUk3hERkStNMMEwMSQJGCqqmqnCtmLFcvAXLGdlz6ArvQvOK8Yjt7upM6G/oBPdCCN8ezzTdQRVKwU4VUDlQfEt8SAVGiatkr7G1HcGd0PrfrPOk+Zf8TPga8NHpI+XJ6WryKP8CFZEnkThgRO9JQ0vER29FB0DtOlilJacrrF+2TsME1ivl9/Gt+AP4u/Cm6srmQOe766L4FAscIKMuBT4TRRlJAUp7SMxF/EKFQgqnQa1Jta3BXNY55THuUvK88YPqD98i3UvcP9sh6an+YhUTKz88a0dATKNN0k2cSUVEsEIwon+lvq2fuaLHjteP5JPut/C38tznb9xU2ObWCt0J6iL/hhe0KeI7dEUWSiJL1UZiQ/s8uzo5QJSh/qjRs2nCotHR4MTq5PG86Dzh1NlL1fzYzORd9usOgCI2OXRGOkyDTZdML0lmREI+Zj2BQQmfRaketsrHqtkG4kLorei45m3fvdfH1u3V19197jUJjyADNG1Bt0ZzSG1JS0XwQXM6SDrDPouaEKOarwO9D85p23bkAemt5Z/gLtnj0vLXN+Dh8mkKZR4GLkA8QUYrTBtLa0WiPr87fT1mQrRLTKAMrHO5j87J3cTnReZB5UndV9XZzYPQztRZ46P1URAKKSY7c0UrTJNLV0gtQys8qjo/PPdD2pf/oFGtyr3ZzJXYptwG2AnRy8p0xSjGGc362hvxBgq3Ja05dEVkSxhKK0WlPoQ4ljSqNbE8UUhHmP+joLMOwRrKvM+X0MnKHsa4wDnFZslz0t7pSAD1GVc1ZUSoS5xKuUYLRF87OzhhOpk9BUrZWCWjVbHIwsrQ6NW00/nOD8Vrv9m9l8GwypPcxPh3FbguaT8HS+xLXEpbRSg7zjLfLVsz3D6bTSqaDaoeu83K9dPa123SJsyFxM7BMcLpxFrWie7nBzEiojUaQhxGUUFsPZM15i09KNIulDrYSvxZr6IyszvB9Mor01vNGsdWwNu80b0cxAzUU+u3Bacg9zPSQCRGI0YlQXA6NDXXMGk2Y0L0T81fiKgFu8rHzNI714nRtsqMwOa7Xb0dv87MY+Ej+04UhyuQO59CGkLqP4A49TF2MU42bj2WTJpZ/aBwr/K8JMSixQHDsbwwtwi26bV5u2TKW+KR/XEXay5DOok8TT1zOBownSVyI2YqYjbkRfBW4GSjrTe7UMV/yYbCZ7x8tx+2c7ZqwqXSx+fJ/QcawSovNjg50TfHL3smdiSHKH8wCkCMUB9fUGliuhrFDcolyOnCd7xRuNq2Qbs2xevYrvAzCuofEivaMJgwmCtrI1sddRpjIR0v4EGOUrFgf7Etvr7DocTsvYa2V7HusCW0i7zdynDidvwKF6cloC1BLMon+x4uGyMb7B2OKn4+VlG5XxBof758w47BaL8UuNKy0rBRspm7ostX4nv9TxXaJE8s0i0CK9EjGR1IHW8i9C/xQoZSZV4/ZuHA3cWIxdvBgLojtR215bn2xMDUD+66BQ4adSYmKzwqzyJ2Gw4WeheiITgxMEbBVBpfoGVOwtrFv8EVu0+3/bHJtC+9A8055Dj+mxe1KBAsjS7AKKAgdxlhF4kbPyYXOCFKxlX2XfhhDr95vOu4H7V2sRKyqLk4xu7ZV/C/CskbISSRJgAj/hi8EJYNgxJVHLEs+D8mTpxXPlxLvS6857fNs3OyL7OTuLTDTNZo7FoCwhL7G9IbABaCDWcI/wfmDtQeJDKeQmFP21agWv7Alb4VuwC3TrTLtkq/u83n4Qn3nQviFvwbGhsKE0MJAwYaC1YX2Sa/OJdF508/VZJXmsDVu7u3tLaat+u+xcjJ21LxSAVJFGoZ2RWVDxMGTgPQA2MM8htwLlE/cUp9ULpSUr4IvGe4/7U6tyy8vMWL11juggNeEE8V7BS1DfMFZwOqAxkMYBswLuk/AkooT2xR/cB1vYm5HrewuBe9IcgR2g3t+v92C4cQiQ7VB+oADf0p/0IMwh7VMphAA0nyTBJOkL95vFC5s7i3u4LCQdEq5QX6qQm4ELIQcgvSAqz/NgAxBsMWnyi4OqJF20rnTOlLrb12uvC33Lg3vQfH3dZe6ZH6GwSHB0YDZP2w9sr2x/3ZDIsglzObP7lGVEk2SWVGp7irtiK3fLuMxC3U5eeu+GsD1QYqBZv+V/fe+B3/5gxQIGAyQz93RQ5I1ke3RHC5dLhcurm/V8oA26ruWP5cBaYEIgAB+dj0nfXf/UcP4CPbNZxAdUVORnFDwz/Lte60xbZ9vEvIEtpF7iH/oAYCB/j+lflG+Ub8pAidGCYtgTsoQ9NGSEZgQxRADrdxuKm7F8Vy1uHo2fnlA9QEBv6k9fHw8e+z9CsGYxtgLb86UkFsQuw/8juItNa0lbfovnLLX9y47R/6AP7m+YPxweyU60rz9QPsGdIsfTroQDdEuEEAPh05E7Nttd28RMgF2o7rF/kI/TP91Pag7/nqvPFkAGsV5yklODQ/3EFPQKU9WDqAszm1dLvJx9vXzOis9k/7uPdz8U3ta+wD89MAIRYvKDU1ND0/P5I7nDXGMJavqbLEufPEK9QP5b/xCfew87rraeLg41DwlwI6FyQr3zeaPeQ9LTx7N14yMK/Asq66cseZ2OzoR/Hh8YXr9eX44V3jj/F/B2ge8jAEOwFBDUBfPEE4GTRBsMS0ML4GzX7dYuu97yfssuUM3zXdCeNX8msFmx0CMPs4mjvcOD00WTBjLySw1rU/wT3UQOVN8L3yH+185/fiDOVG8KEAsxkkLco39DyGO0425TFhLW8wBbBOtzDFydbA5gbsNOjB4kfeQ9wy44ryVAm0H5gwBjtUPPk3nzPZMFwx8TY3tRjB4tDT4Y7r0ecf4bfaqNm+2mnmKftmEsQoxjc5PKw7zzRzLyIuBDEWPIi6SsmG2MzihOU/4ubZV9Uf1vLcRertAqsb1i5dN2w5XzXYLAMpTi5uNqq24sPo0n7f1uSZ5Zvd4Ncw1iDZzuQK+0wWdSrYNCw5/jPiLhMpWiizLtk6KbubyB7W9N6Q4Pja9NR40bvTrNwY7+8IqCAKMFE4PTYbM2gsmCqeLSA3d0MVxBvSAt0W3o/amtNV0Y7QUdmd6TT9CBUIKBcwgzOLLpsoByGRIV8reznhumPHhtEi2AHWh9LOzCrM5c523LfwTAjmHJMpeSwDLGEmSyOgImYoETQeQMzECdGi14jXf9IHzFHKsM2m1XzoqAKAGYYqDi/SLzYrdyLyIfshUyo0OG1DbMvc1SPZ19gS0tLNOc1v0ILbCe9cBcsX1SIhJvEijxtDFp0Wxx3BLJM8tUYN0G/XfNq41prRqc0czTbT3d+l9ssNdhsHIpIjxR9BG50XaBsCJbsyaz/eRhDScNZ61HLQxsrFyWPLLtQD55H7/hB6Hu0g8R+iGC8Rsw9mFFoitzAaOutBMM5F0VTS6c0hygnKzc453C3uZwAgEVIX2RlJF4AQfQuYDWgVnCPfMSs+DkTU1R7XrNJnz5jOws6C1fTeTPAmBZkSzhpOGagPOg5UCqILvBbmIhgxpTqSQIrW9NMV0EvNN8t8zS3VPOEF8uUFlBOLGboZ7hK9DE0IqwtzFDkhQDCdOc8+1NUr1WrRdM5XzYvP69Vm4cHy0QSYEJsWchYIErELWAY/Cc8PmR4ILxQ4wzuJPVTVbdN/0MTQZtI11nTg4vEIA1oP2xUjFk8R7Af8ApMGYA/2G80pUTJRN1Y5NtVG03TOUs2wzqDSyts+6Jb69QkIEZETLA9KB8wCsANzCoISCR+NKwYzRjY5Nx/VNdE70EbQB9NN2X/livTBAUUKQQ0zCzgHoAL8ACUCdglFF3IjPyzvMCIzZDMs00LRws/hz0TUOd4K6nf3SQJsCO0JQAjZAzz/Vv6BAjMNpxuYJuYsujA/Mnkx69Rp05DSqtP417rgGe0D+v0CHgYJBigCcP0X+nT8egP1DC4aGyXJK8IuGy94LvXV+NNt1WzYkt0X5kDzgP86B70IOwh2AVT89vwO//oGoxKbHaAlSCr5LEUtbyvE1VbU19P81TnbOOTn7tz4OwHnA4P/LPw8+Z/4afpIAWwM1RYCIWgnGCpOKscoz9a+1WXWZNkd3h/mAPDp+ZUB1wNXA9H+t/pR+Q79nQJHDc4XxCDyJbEoOykJKPYlfNce18nYxNwS4/3rAPXl/PL/MgAY/bD40/Vc92X9eAe6EcYawCA+JJwlQSWiI20hCdbc1ozZVd6f5sPwevkh/lP/Qv1D+aL31vd9+lsBSAsGF7IeiyOLJakkESPRIFbXo9f42BjcVuFt6VPzpfiH+yz74fY081jx9PPz+s0DYxDLGcIfBiN8I/0i6SAJHoLXp9f52ebdmOSB7fL1A/vP/F76FPjw9Hb0w/a7/SQHahGAGewe8iDBIMYf6R0DHPzXBtmH27DgSehZ8dz3CPu6+zn5PvbD84zzjvc+/vEH5xEyGU8d2R5yHjMcLhrUGCbYutnp3JHi2OmA8+j57frQ+sr3TvSK8bnxePa1/X8IehMoGhQeHh/ZHtsdERyuGlIbwNoA3ofjkevS8nj44PpU+Zb2PvOm8UfynfYU/2sIiBHlF14b9Bw1HGIarBfxFRQXpNmG3Mfhnuij74/1gff+9k70gPGh8J7xUfbW/qAHPBGrFwwbFhw/G6oZFxeBFYMXqNpi3XTiQOnW74jzt/XS9B7xwe3i7VzvI/TN/LkGBRAQF8Ea6BsFG4IYBBb/FOYWfRo33fzhn+iV7j707vVy9JDxzu5U7nTvKvSB/HMFag7pFRQZ0BnpGOIW7hMVExUVVhkn3e7hGejI7SvywPSC84rwK+557Wfv7PQW/Z8GrQ+OFW8YcRk/GNQVlRPFEqQUVRit3Z7iZ+ia7kby5vJP8YXuT+xr6yDtvPE2+mMEuQ0FFSAYhhhBF5gUFxP/EfITNhjbHHrifui17rjywfLz8GHuWewC7OntjvJL+kUEbg0RE1QVIhX7E7cR6g9vEOUSaBcQHfDjBOor7/DxJPKg7y/tDuvY6mPt+fI1+6UEpwyQEakTLBQdEvMPtQ6hDjkSwBfyHKfkselp7mzwfe/j7Rjr9ul96ynv8PYKACoJMRBIFGAWOhWFEjgQDQ56D2wT2hjJHbPmKOyn79Dwlu8C7brqgOrG7CzxCvgyAqsJqw/QEisT5hD2DT8MqgxoD6QUwRnSHZfo1uzI7kPuUezR6dnoHeqT7fzzr/ysBVsMhBC9EZgQ/A1qDG4LYQ1CEQEXkxvs5zTsx+5a7pvsierC6QDqx+x48ZL5PQK5CUoOARC9DiMMhglMCC0JPw0+E8wYhBwN60jty+0J7YDrQupK6hLsoPAd91wASgc4CwoNbwxpCuAHPQbMBzYMuRF4FyUbwuss7nfuRO0c62np6OnE6/fvl/U5/poFFQrtC5sLCAmaBjEG2AeJC68QShbbGdQbTu5D7nXsBevf6YnqaezH8CH3eP5MBY8I3gg2B6QExALpAmIFxQpsEKIVFhnh7YTv+e4X7aXrUetf7MnuWPNq+hABcQYQCdEI8AZwBI0ECQaRCd4OXxPAFr0YUO/I7zjuvezR67br3u0g8rz4NQBrBWwIuwhIB0IFhwPyAyMGaAqOD8cTWBZAF/HvDu+Y7bDs/ezE7iLy7fbv/Z8DwQZUBw0GzAMTAnsCKQWKCWUOKBJZFE0VFfAr7+ztQe1Y7bnu3/FX99v9MANTBj8G2QQpAwEC7wIwBYwJRw7yEewTmxSG8mHx1u8572Hv0vAt89z3R/2MAU4ESATIAjIBWQDoAcYEOAmwDYYQ8xGDEhryG/EB8O7v5PB+8jT2jvvj/1UD9gOVA/oBEAA9AEkBywTdCRsNlQ+AEG0QCvJN8QjxdvGo8o31j/kh/s4BKAPoAmkBp/+U/lX/gQKvBm4KNg1qDqIOYQ5P8vfxDvIO8yv1RPie/EMAmQFZAUQAs/7F/bT+3wFlBQEJnwvZDDANvQwC85Xyf/KD82z1fPiC/Pr/EwK8AWMA5f7P/e3+0AElBScIbAqZC/gL2wuL9PTz//Pk9Pj2kfkD/aD/mAADAEf/1P24/dz+tQFWBXgIHQrTCsIKXgpA9QT1VvVJ9jH4/PoZ/ggA6QA3ABP/Of5U/p3/ZQK8BeIHIAleCQwJjQjG9bj1R/Zj97j5A/yY/ub/m//l/g7+2v1w/ngAjwP+BZsHRAhMCOMHQgfu9hz33/dW+WL7aP2a/vL+P/5c/QP9SP3m/pgBXwQzBhQHNwftBngG9vcm+MD4D/oO/CD+gP+2/13/lv7w/eH9+f4oAZgDfAVjBosGXgbdBaYFJ/md+Xf6w/tX/Xv+2/6T/uH9mf2W/eH+AQEAA4IEPwVtBSUFqgRoBMj5Fvrf+if8uv3//kH/Dv9g/ib+Xf6P/xkBkAKsA1AEXARHBPkDygPP+jf7G/xO/Yv+TP9T/93+WP4W/lP+9v56AO0B+wJRA1ADDQO8AqgCpfsI/NX80P3e/pb/iP8g/5P+Yv7B/ov/wQDAAVICjQJ0Aj4CAwICAoP84/yN/Tv+1f4b/wb/0f6H/pz+Ev/n/9IAkQHcAdoBnQFXAS0BQwFm/b39L/6+/h3/Tv9G/x7/Cv81/7j/YAD0AFYBVgFCAR8B9wDlAAEBcf66/gP/Y/99/3D/V/9F/1D/ev/T/zQAaACHAIYAcABUAD8ASAAt/0v/ef+b/67/sf+x/7D/t//C/9f/5//x//D/6f8=`},{name:`shoulder_right`,sampleRate:12e3,frames:8160,wav:`UklGRuQ/AABXQVZFZm10IBAAAAABAAEA4C4AAMBdAAACABAAZGF0YcA/AAAQAGkApwCgACAARv9s/tL9XP0A/a79s/5q/77/tf////wA9AJiBV8HggcYB58FfwI//qf6Z/g397f2jfaz+WL8Af4b/iL+5/5WAQgGHQvtDmUPsQ4yDAAHof+r+BL0CvIs8cbwIPJg9jX5a/qi+uf6Jf1fAiAKORKEF1wYqxYKE9ALOgEJ9xrwH+zd6hjqAure7NPx2vRn9uX1ivbe+WcAhwmDFOocVyI0IaUeDxk2D0wCIvff7WLoh+UK5YrkYOOp5n3s5e7Y8HXwkfC38vL3AwDrC4AYjCLAKbws3yoCJhYegxKHBMf2eu3i5d/h+98k4Azfid3N2vrgYOX35xjo+OfS56PqVe+I98kCiRBRHtUqqzPuORA+7TwzOZ8zmCoKHn4Q8wBZ83Lq9OLr3qLcSduP2uzXqtcy1lzQNdDi0w/X7djV2XHaPtoj2z3gVuPp6ArwoPnVBtsUXSKBLeA2fUCwR2tNsVHpU21SK0/DS+5G4D5hNdEp+x3mESEEJfuf8LHltd9M29zV4NKX0GXQ4c2IzNLLQ8z0y3DMTMrBx/7CYcO+xyLLPMu1yezJkcjsxXjFGccExuTGocdeyPzHq8v00QXXHdwf5CDti/i9BBcQwhsRJn4vcTnwQdZKglFLV8Zb7F/WYxNnuGnYatxplGcNZbtiul2kV6hRMUrORJg+zTWYLsomTxyEE8EIzAFJ+Mbx+euH5YzdGtvJ1pLV3NPa0dzOMc2Dy3bOhs4x0CDOhM4A0PrQsc9+y/fEW8DJvBi5MrO8sj+0rLZJuvm6CryFvdq83r2Bv8i+vb7/vanCIsXixErKnM2L0SDbW+T+8Az+zRDIIMwtuDmBRstPMljYXdBh02MLaP9qImzmZx1j5FwIU1JJ+D5LMDQhJBNKAxr0Puhg5WzeK9oF1RTTYNXp1rrWzdYy1CXPGsh7wLq2Sa5xsfCz7bCxsTG02rRWub7CoM1Q2PnoJP6xEAMkDTphTL1WZ19DZr1pcm0LZuRaWkqVNMMdkwj++NfxMOoq4xHiMOTc4A7f/tlpywK46Kjcq+ernKzXriixxbquzc7lhwGlHy87ulAiYSRrgG4HbIhc7UTQLBwSivg/6U/iaeE85ILk49wJz0W9KalZqBWn4KmAro66l9Oy84wb6T5wVpZjrWgjaxteKULvIXAC9uw54b/h/ON34/rWxcUGr72lbqgqqwmzYcfe4ncNfzi7VOtgymcwa6ZdAj7HIE4Mvf67++P8ifgs6MTPfLRlpoqnEqszt07TV/czIaxBH1RRXa5eGlL7MiIZWAmDBdD/ZPsW8W3ZHLaHnt2diqEhrB7IJfT7IW1DolQbW0Fbj0ntLU0YsArWBYACp/zS6JDK3KpAm+qb2qTXvHvkfRXvO2lQRVvGXbNZND38H30OoQfwBCb9SOhCyTKvWpgKmZmgmLKf00IDTSv9RWxOf1T1VQlD6iqeGwQXQhk1FpcJ+ewSyjqsaJ9qpV+0U81M9PccaTnRSHhPE1CbUEE8JyocIRAebBq3FNwEfulCxmirvJnOnDSmdLxl3gMF6yQfOihCREUXR9ZHxzWWIrsZNxwnHIsZaQ7M83zTbbhYpOacn6COrIq/IN0HA5Qg1DItPktB6UPlQ5hGZTb2KnMnyyYYJzYgkBJj/8vkY8tGsVWjAZ2ooXusKb6I1gX2IA4lJBsyxjdXOv45Ejv6PO89cDSsLo8qJyqdKLMneyBSF7gHVO721XLB2rAjp+ugkqTJq5W11cbk3mL20A5AIG4raTQmNZE2LjfENzw3KDmxPWs0Oi3ILFArvyzxK8YsCCn+I8Me+BJ3AMbufNt1y929qbKXqzylUKL8pTWs+bNjvYrIg9q56UT9sA6KG3EjlyaLK+wsRS1uLncuADDFLf8uTzMUN9w9bD3EOLE0qjD4MGkxKjG2MG8uty39K6YqRieZIroZsRF9CIP8PPAD5KPVZ8lqwOq5FrM7ri2rhqjPpTimGalirAivybTdurfCU8o31trgT+xZ+VADUg2XFCobViF/Jigs9y7LLnYy4i9BMLYwCjGmLpMuEi/0MPIvrzQcNrE3ejpMPHM3OzQeM+Q0NTPzMmk1TDbpNKQ03TMNM/IvvSz4KaohExryEfIL9gI2+EjrHOHW16PS4MqNwby5ILUzsRCu4qsTqtWobqu3r6u1bbrHv+rI+9OW3sToC/Ml+3wC0Qt3FQwaJxwGGz4ZKxspHB8cmhkmGtMawR16IiMqbjJROfg3bTmXOEE79zknPKY7qTeeNMsvUSduHSUNZP1N6gjbu83SwI62w68uq1SouKasqwyzSr0qzEbdQ+0j+YkIAxN+Gfwc3R/BH8ogSSN3KEUtHDWXP9dDTkKGQQhAET6JOpYzESowGmUElexV1F/CL7Z+rk2pO6aCrpG8R88i5jj6wwl8E8oZ5xzjG9Id2SEzLAE7tUabRNtDU0JuPik1sSStClvsUdAkvPWuIKi0pOqs8MBd28j2ygqzFDcYXhjOGD8g+SuXPcVF6kRwQyY+wC45F6r0jtQxvPOu2qd8pVG1m9Ab7vgCyAz+DswO2BKCH1o3DE9pT3xNsUScNHYS0OnNx3qyeqijpWGyZc4c6xsAOghCCRoKixZQLBtKclMDUlpKxTRODmTijMH4rx2pU6gZw+zgzvo9BGsGLwehEz0uZk6aWIJXrku5MU4GtNm2vKiuIquxtrLXyfT2/QT84fudCREoOUrVW59X00l6LSH9N8+TtLeq3ajUtKrV8u699sT3t//MF+I8sVxzY9FdB0k0II3tk8ZRtGSuE64OyUzlYvB+8SHyyQHOIc9JUWShYDVQ/i3c+TjPibenrrCuHLQE0EjiSebF6DPyEg7iNw1a1mXlXJVE7hhT5H3ACLLor+ywRbvh0h3eD+Je5vD1LhieQHxfe2oJYRhJ+RvS6U3GHrUZsUaydbA1xh/SHdTb0/ffh/zzKblPdWgkaodcMkBRFbzmx8uEvVO7rbi0swXFbc/I0FjSmtfU6y4PSzxlXLttGmpPWYM6TQ7F5B7M/r+au4e6YrcTuLzDi8icypHNPtgu79US8jlEV+hpMG65YyJNxilFA4Pi9s2nxZPDKsTWv2u3gbxQxKPFlcRKyA7Ur+lAB6EsrE0NYjxunnDnZt5TujcIGCP4/N+M0oXMsck1x+rFcb42tOm7XL96wKm/EMX/zBnd/vIFDxEuuEmvWzNo5m6Pa1RfIk/5NUUZBADy7KrdzdRz02nPEc5ozynL/sBmtZq1F7nIuc67vbqvvdLDLc/93MzzvA0LJcQ7xE4bXOBlQWtWb6doeV7kT1g+YSrdFcQBAPEt5TPdt9We1RjVQNQL0WDP7cwOxVq7lrFytPi0/7bDtli3PbjQu+DAlcgz09bi9vI1CmkcyzEqQ5ZQ2FvWY7xopmwWbvNpR2FtVotJcDhtJ78WzAXF9qrsIuQt3kzc0NuB2vnZWNog2wPZrtMNzi/EXrq9sFKyQbRatHy0LrWwtUq4frtOwHnFXM993dbq0/7iExgoxjnURzBU2VxPYtlnE2p3a6dm3F7JU0NJ7Dj8J28W6gWx+kXwmOnG5wnh1N/D4R3gGeFX3RDas9Brxx2+5bXVtoS4kbeqt2G3vLsRwLDJx9b65oD5vRHLJe84mUYYU6BZwl4hYnVk91zUUnFFKzTuIFAPDgBz9tbv6+9J7q/tZ/Dk7aToCd8E0Ma98ba+tl235LZMuN++A8la2xfyBRDTKuY7zEpCVblaf13VWF1LjjUGIFIPMgD390Tz4PH771DrQeQ61HvBu7EYrTitJK5Psjy+LM+t68QOyywuQtBPoFd6WltYtEZ6LmMYjgcr/aL61fs3+X3z0ObE0D64ha9CsQm287561qfzRBUUNeVGa1GCVcZVO0IDJtcKEv92+Fj6lQD/9zjlI85ttQK0drf0wNvUAvHyF4I4wEm1UDFUzkyrM9UXCwraBLQC+P1f9XbcI76crLevJbXsxF7lAA5FMn9Fzk5RUKRGCyygFCAHbwdCAy/4BOKbxFGvcK7AtXXJi+kEFHw2KkdWTEZKazvUIxEXzhW+FJYMhPf+2Ey5aK+ws9vBWeEYDw4yWUIURTpGWDohJe0XAhVPEuoE9+d6xw6upKqns9rKYPMnGd4zED9aP9FAVCzKHU0aNBx3GOgC+d/KvqeuLbbTyIPvoheUNb1AKURBQ7c7mSU9IcweExyeCqLoqcKHrB+rpLc90Bn5SB7kMU04SjpRPxkxMigAJvwjnxqS/rPX+LjJp5Csqbws378HHiJQMIE4gzlNPqQxPCqJKA8mcR7VBo3bAbq9qW2r9Lpl18D9jBuaLOw0xDbkOfw7+yz/KBQoeiPiFvv7adZMuRGqwqeHs6nLyexMDqkh+SxBL7IvIDWjOZ0yPDMYMD4uXB88B9Tnfsazs8WoV6ypu0bUN/bkD8cgYCixJ2gn9Sk4NUE22DGTMvQwsCvvHegGned6yae0LKpppI6qdLdGzI7pIga3GH8gFx8qHEkd+iW+M986xDYHNSk2rTb8MXEnNhH59NPZ3cEGtEqqUKWzqKqzBMXo2ufzHQg8EwMbPh7yHdEd9SC2JHcsUjmJP5U/p0DpQbhANT/GOiMwZB4MC9jw+tbWwru0Qakko+agRqWWrb27es7x4dTzxAj1F9kefyBEIqkhmR+oIhYn7CmSLk83yUFOTcVN4U0iTQ5MaEy3S3RGWUA8OCYptR22DgT8auYw1grJW7sHsaSqU6THod+fNKDgo92qjrabwkTTeuR776L7UwImD8EWWB3pHkUeWRwFGtkafh9tH0Uhth8eJ38vDTeBP4BH20ouS3FKw0twSfBH00oMSuhIskUGQTs8nDNJLQQjJBJLAoTwj+TG0jzIqb/ptGasq6Vto5qh+p2unGObTZ8ipritT7miww/OeNm05izxPfwMBDILxA8wFHsV+xW3GHsY6BQrF9oaHBx+H4slkS66M7Q/80tvT1BPLU0jTY5MpU3gS9pHIUXBPbo0DS7pHsMO4/ar6KnWVsUqtqasEqRAn3OcMpyZmQmdFKcytnXDxdfk6Ub1UfstASoH6gmCDfoOkApOCqwQZhmGJi0x/z70TKhVzFaXVyVXFVaWURdLK0ANLpcVd/vi3svCJ7Pqpi2f4Zr6mGCalKlavvDY1eoU+uAHQQ3SEB4RJhDqE6ob9SjuPL1O5V/RXh5fW1tyVNlHSjQyFnP1+dPnuWmnx5/tmvua8abwvQPbH/JxAMUHNgdHA4AEUwtMIH83olKvYR5ioF2tV5VE3CYa/2HWAbl0pjCfQJ7Pn3e45dC45qryYPbB+Gb6tQX4HpY/f131Y0VhIVcSQogfl/JIyqKx4KQIodShergZ15brTvVV9kf1ZwHfF1Y45lneZ+VkSFnmP9oVp+Rzv2CrJ6XBo82t7MxP5Ajuw+4P8OT/ORvDQ1Fiu2f5Xs1JECPS7+PFWq/LpzCn4avvyfHfzOV06DLw3wcsLeNULm6AaaBZijj/Ba/VJrtEsQawNK0QyWXhLOn66kT0fQpQMmNXk22AaAFXVjK7+37KvbVhrh6vRK2WyNHYAt3+3Yruyg6jPPRfG25kZKJLOxzr53THA7olt8CzMLjQzEHTftWN3K7wPxrCRmdjjmn8Wjw8ugc43fbGbb8ZwLK+wsMV0fPR69ad4KH98ChoUJBmn2moWkQ53gkc4SfNTsYXxtfCJ73bx+3LEcw61R3qOhKYPUJajmjgXtZFgRrI7krV68thyq3Jx8MvvTzExceByBHS1OgtENI53FQgZPti3U/MMHkHoOdf1sDP39LdzoDF1Lx3wZDCnsNAy+3iJQKFLZRLn10PZg9gLUzBK44Geeze23fX49ao1XjNR8LavxHB9cDGwkTMxd11+pEeYT31UeNdLmNZWYRFhyuHDhj3mOkA5e7ipt/Z3I/SAsNCuzG+V7wYvSDCPc9v4zICfiFxO6FMplgcXnlfX1NbQJkmVA02+Qbq4uD33sfgiuFZ4T7a884cwAC6hrpyuuO6RL76wxHRKuI8+gUWxC2rP9hLB1TTV6pZu1OPRnE2ySLED4kAtvOZ7NjpkOdY6ETnz+Z340fb+M8Lw7y4wLq/uRi5HLpTvCTBO8vX2AXpZvrfDrAjNDPDQCVJJE5bUSBTRlWuT7tE3jhvJ8gYFAqgAVr4M/N371butuzM7rTuo+0w6P7iedjVzm3DjblftVu2/bXctme4sLyowS7JX9Lj3vnutQNLFTAlKjJZPR9F0UrLTlJQHFFoUf1NbUVdOX0tMyBiFFcKhwEb/+H98/nV+Vv5VPn4+NL27PGG6G/dGNNZx9+7J7VYtaS0GrUFtzm7MsB0x5HS9OLJ8dkFBhpwKoI4EUK1SLRMIU59UGRQskvPP8ww9iOAF+IN+AVw/nv8Nvvw+3j5+vQE8dDnjN1u0erDXLe1srq0NLXrt2G9BsYq1Ozme//JFg0pPzrRQoJJgkwjTe5NdEeJN4wngxdoDaMEtQGOAroBmP8w+V/twttdyZ66/649r/6w2bSPvgDOOun1Bj8g3jErQG5Hf0yKTYxNezy6KiMbyRSSEVEQ6wqTBsL7Q+hUzzm7sKvDrEexU7tzzGbo1AsvKr86hkUCSVpKd0qiN5gm+Rj/E0ASLhDxA0HwedQmuyepqqqGsPy/ANueAGkj3jU4P4pBpkEkOlQiGRIPDZoJEQq5/iDoIcjLr66lwqvEu63bYgRnKE86+UKEQ7BFVTerIykbZxnMF2sKou0zx6aqrqMlrOnBH+qXFLkv4DnlPlRAUjZoIkYd1RthFb0C2d3It3qiz6PItIrVzAZZKI04JD3XPho/JS84KpkpFB+6BqXaP7Ldnj+nncCb8LEe3DXAN/o4wz7kNCgrPCmWIOsCF9bHsLCcOKFkuVfnRxUvK2UzVDS+PgA8wDYOOHMspwxj2mewbp42rCXNn/8rIQIylDJTNKNFhTxVOLs0hh828nG+76EXm5iw+NvjC6IkhiqRKRs2zkN8Qk9BtDOEDo3WR64lncag1sLC8IUW3CQ8JAQtqEHDRxFKmkKPK8z9ecQApAGYe6Mgyan12w/SFjsWISL9PxZJXUeMPvcgeO/gvbigP5eYoNbE0vALDQgT+xSsH4w7NFSjVD5RnkDXGvTj6rhdpK6cRLRr3qwCIBX2Gkgeciv4RFpeXFwQV4BFriGo5xS7g6T9nGKhesKT5/ECBQkSCl8Q/B8yPnVculv0VwFJdClj+cHH+6zJobWdvqz00A/zQwHdB9IMrBKRJZBAiluKY3VfcFbYPsUUvuirvoSsQKKIn+ejub/r2/bwn/S49Uv03wFzF5Q04lVlZlxmaWAaU2I3OhKR5lDHo7P3qYGk0KPLsULLhtqU5dbl1+Wq5Vjx3QG1G60+Y1sOal5pjmTZWWhAHSHH/afUDroZq8yjn58RnoueGqusvbLPCN1T5VjnEejc7az22wvsIvc/y1QlZKdtQmvbZRNe+03sNEcR0/St3FTH4Lnvshyuha2prSatk7KlwTzM59h/3/ngl9/B4V7mafDQ+wwPECB5N2ZONF+xa0hx0m/cbIJmtl3PUOY6kCU6CT3yvdv4zOvA0rgWst2y+rCTsfKwSbp3wjzOoNez3GbaOtwy3/3bqdyk58zsg/5BEdIqpEI1UTdfUmkub7Vu+2hKZENZTky7Ny4l2QpS91viQdExw3O8gLLEsuOvirE5sKuuyK41ugjFCs3V0HvQWc80z9TPjtNV2trl8vNVA2sf6jZtSK9WZGDiZ8lm9mIRXGROxzufJIoO8vmE5WPWN8anv8a7QLy/vJK7armdtqW0Yb9jxA7H68cEyK3K5NAX2cTlWvjLEe4r6kH1VC9gGWeNaWtinlbhQj8sGhQi+3DliNfZyxPKB8kjzUfKo8SyvBXES8y90PLPYdWg1PHc5uu2ArAdVTdETiNcsGOdZGNbFUrPMBAU6fkX3kPTrM+MzyjPd83SxiC9X8JJx0fIlMiO0bPhPPtGHBs68lDZXg1lFl5lS0EuOQsv7IXd3dQh0zvVadF/x0+++8GvworCQMgN1PbvFBqTPMxSCl+4YFNRgDcMF0T4luP33Rjb29lCzsq7bLo2utW9FcS61nX8MiOgRspYqV8fVgc8HBv1/z/tguwb617kJdONvYe+Yb+zxarbof4WKhBI7lbQXPxMzC7SCwH1Ke0/6c7mINQfu/a0QrX6uQLNdfYMJaNEEVXCWL5FsSLpBqv2WPNx84TpBdB5u6a7scFr1MD8oyhRRzdT+Vb2RfMkrwnO/hn+lvzX6r/MgrVDty3A8ddiA6cuzkUIUGFR/TU2FQsDLP+X+nzu5da4tuSvnLMRxXDnRxhVPN9KLk5WQwwjIRALBk4INP/d5yTGZbD0szvB3d9mDRcz6EXHS3NLqi+sFpQLdwkGCBL1QNO1s7+tVLXpym712CC3Oa5D7EPxPfUghBAAC/EIKv9H5r/D2Kx6rJy4sNJ4/LQkuToXQgBD8z5xJUwYyhNpFPwLiO91zYWyCKvcssrF7OqfF2YwYD+gQAhAxzekJjAfAR+HGd4MCO4LzECzjqg6sI7BKeLkCQwosTaiOq460T6rMgopwSWLJgwiHBWL+MnVxbnlqamsJ7nX0NHyuRLUKBYyZzKENOA2IzRNKdMlRyU3IaUWYQPQ5trI47I8pzypx7TSycnoiglzHnssTzHhMj0zkDVyOnQwECwkLGgsuSdxG54EyenUzdy4+atopY6rYLiezWTpHQTHGS8mASwMLsgsJS3+MDk7XTejM9o0MTUCMjMv2SWNFaf+tOV2zHm4vK1Np3um3a6evBTOkOQ+++gORRrWIZol7yRoI8olxSeoLjA4BjpyNyo3xDhKOJs29TGMKnEdQQs19uXe0MrEu9+vYakXpKuhWaiYsTO/5M+i49L1vAMUERsbjyA1Il0hdx8bH3kgJyZZLV81Fj8iRNVDoEVDReJE1kNgQSA8YzQdKU8beAdb9gLjdtFYwdW0zqz2p+CjRqETn6Olsa2quFjHF9b/4nTx6f6GCDwRchWlGVIbARxEHsUd1SC/JgErbDPDOpNFRkzjSqFLHUvCSQZKMkmORd4/uDQrKcEZ+wZ483Le8MvxvaWxrqq2pV2hf58gnpikLa4guxnMktt26rP5lQGLCawPyBP6FVEWDBjxFzcc+iSwLVw5uUVyUg9TzVINVLdS3k+mSxREVDgiJ00SB/vT4E7KirlzrDikzJ4jnNWam6IpslnEStgN7tn9HglMDv0QKhOCEV0TlBhRH2UtGUFWUqBWmFUgVExR3ku7QYouoRL49UDaO8EYsW+m/p80nY6hRLQry+rf2vQ9AgYKNwtOCx4M7BJYIGM3+U0EXCpbUVgpUu1E8StVCYbkT8UbsXGjop5DnL+js70w2/rwnv3AAYECGwP2DBkfOjpKVhhiYl+5WMBKJS8zBNnXrbdpptSf457ypNHBw95m9Ef+EwCuAK8LvSMqRF5gCWefYNVRaTQKClDbiLlCqMWiDKJ7tKDTh+lt7+Dw//RrCKUroVB6a1RopFyEQskSsN7ZuiyqH6a2po+979pR6wvrs+7J/U8gH0zMaG5qVF6LP6cNCNnBuj6uUqscq/jKZd4W30vgIOxfDf89U2NxbEFfcj9fCnDXq71ftTe1RbZx0Rbbftqg4DD6FCc0VodvgmY0SVgXOOBdwUS4pLhNs8PIe9UH1hzclPVnJyVXN2+hZTBG9gsD2Om+bbneudCuBMQFyn7NKN1fBCA6imGdb2ZhrTg1AFPUjcPywfi8grXSwHW+XcHf2LkNw0PxZLNp5VBqHQvqbM5GxhHFv72bvFDC/MVU1ZH6SzOjXMFtJGoKShMZVexB2TPUP9Awwsq+1r3qv5fMpPIAK7lXa2rQZQtHzhaY8A/h4OAt3KXKzrqevrvAdM2s7wYl5E60ZFxsclWyK2j+tOaw3wTd1NgAxNq0RrjHutbKW+9lJfRNX2CrZu5Way6zAmbpi+LE4+Hfe868s5awQrPNuuHQCPmTJndKgl0JZIRYojgtGH39bfR08B/x5uC2x8+swq3krZe4D89n+i0jm0UEVy5eF10hRQskOwmm97XzMfVE87PlpMwUr5yqZqtgtFLFxOEHBTgp20PYU4tZ71uMRkAsaRVFCisHAAvZCiECzO7h12684q1IrnSx7Lh5yiDorQzVKRRBk06cVOVWVVOgQHApeRbcDMMFnQCc/lL5PfD+3ffIlrNOqQ+qMq97uk3J0dou+sEZKjITQ95MqFHKT09QK0sfOFMmDRsOEsYPrw3rD50NnQbS+SLmic8NvAqtPazSrl+1Br33yunekfpjFPgr9DolQmtIr0t5TJ9NcUosPNUqhBvOE6wMBwukC1oJawZaAC/23uqV2Y7GBbaRqnGo8qxEsla6Y8Yb267y+gi8IOoyWjugQvZGU0ZhRCVDOUaeOywrOh8dE80KKwlmCHkHDwQGAbH8QvEa40vVt8hPu9+vRq5RsGW2nL7+ysHcYvIoCDweVi+LOQ0/GETDRSNGEkXpRsY6RCx0JfMgFh3sHDUaSRdOEXsF3fjY49rNcLzwsE+peKs/sMC3ksTM2FTzhQofIGAw9jiQPbBB0kFQQpBDejlTLQ4ihB89IOwd5B1dEo8Fiu9z2NHF8LPQqLGqubAPvAnOveaFAdIUnSPSLI4tkS44Mi01TTJDJzklIiclI/khzxUGA1DrZc0GubCrSKeMr767AtRL8ckNYySDMHozijBXL181zS+8KNglYyUuH8EUMwGV5YLHFrSxp3mpTLS4yrLrFAsSII8qQiyrLkkxijqIM8sx+TEKLFIckP4K2ee6wapvp1m0v8788XEQAyEIKPssAzDKPFA5gDgdOQ407SIbAevTZbZDqYqvlstW80sUhSYWKEUq1S88PtE9DjhbMxomFQEP1bez+KY1qJS+Q+aXDNodWyD0IvQt1EGlP6k+XjR5Fm3oqMFHrV2lLbsP4rIHUB5ZJIgllzE7R/RFKUTiNisUZOHzu1qrO6y/zHH0EQxNF0AWtB+cOlxEwURuOMIaZuejuoGqWagsxxHynwgzD4EPEB70PgVLykiqOtAR1du/tv2p96wW0fT13wWECt4SZyt/T/tR6UsbM5IBH8o1rGemdbmC4cP+EgS4Bg8Xlj3xV+hTFkMkGNzavLdxq+mpTs9H9BYAmPtwCDEoe1C8WSFQMDIZ+QzH+bChqou1xdjb7132qvf/CkY1XFsEWlJKbyEj5jy7+61Hrcq8reGT8m72m/6AF0VF9GJNYOdPDiVS6Pq7Bq/NrNiyxdKR5JLlzundA0QyUlgcZPZY0DjcAgjSNblMsdqxk8A810req97j51sGdzhpXFFmqFrZPL4Gv9juvbG1ULJQshLMm9fY2Bre3+/uFm1FBmRnaTtcPj7cDGLf4sMjugy6FLnExOHR9NQF2VXi2v6FKXRQnWZ7al5cJD4QDSvieceNvaC7ibvBtpPHDNCz0tDU+97Z+LAg50e+YFBuPmjeU4wzxAfl4ibMHcNzw2XBk7vHuSPCKsfsx6HLrNgY8akXnjxwWJppRG9dZFlPQi4OCLLnKNWczTfLqckHyOS/mbmSvzrBBMHmwpzK9dp58vcYbTpeVrBmKW8XazhcV0bDJdUBYehd1VzKBMYHySrKJ8exwRSy+7fquju8+rz3vlLFjdTO6jYMJyxdR4NbpGhub61wOGaIVs0+1yNcCFHvCt9S1T3QE85Uz/rNq8jqv+60pq/Vshu1FLjAtU64Wr+Jy9HdQfc4FNItakJZVEVhUmlgbsBp1VzeSUI1Wx7bDBz6feqe4Vbdj92e3qjdVtrO0TPHpbvprVuwWbHcsIOwkbKbtUK9bcki26HzSxBYLCxEI1VWYcJoPmxlbTVjRVRNQQMqlRIu//3uDepm5dvhauFE4FHfMttb0aDGHLXFrQmxq69FsSKx8rV+v5DNneHT9xwSlC8jRZJWr2CFZvhpAGhUXPpLtzTdHaYJ9frP8NbrDezH6MDl0+IW2GjJMbf/qtaqAas6rQyxBLgFyPje4v7uH6c8X085XLFilGV7YuBQVTgQHowE+vQh6qLouulg6K7jzNkwyMq1zKk6qyCtZ7K8vUjRcO1tEhIy9khXVhBePmGSWlxEvyiMDUL9yPdi+Kb39vIJ58DSZLphqhCpWqumslPED+LICJ8taUarVIhaB12tSi0uQRT3BHL9fv3H+rbzmNwqwKOnrafRq4C60tMW/Vwmf0VOVaha/FvZSrgszRQ5B3ED2P/B9J3g9MJ2pymmlqtTvCbg0Q6GNpxLMFPwVYlL8y0TFesICQj8BCb1R9j1tfikvqlTuObXkgeGMFtHjE8CUX5FlSdOFDEPQA7tBCvrxMURqAanZLGhyTT3RySPP3VJCUvsPyYiOxQbFE0QvP/x3vC3BKP9qZe7NuEMFGM2I0TJRXhGWCyzG5ca9BpdCpzkeb31pCWrK77w5U8VxTHvPLM/JEBaJ6sceh0SGWkDpdvptIylRLBSzH79ZiZBOfI7zTveNeIlzyCkHvkOae0kwwSqRKm9vP7kfhXGMlw6pThSPPouAihBJ68gYwdt2Zq1qKY6tBfV4gURKQw1XjXSNtc8RjCBLgUpSxbg8B3G+6zCpxe4QN14CtElaizZLS001TeoM5Azry1UFlTtfsXIrQSqN76t4psMaCQnK0croS7+Oz41UTTGMB4fT/sV0Ni0dap9swbPofZ4FLYhOyQoJz8w7TyYOmY71DUvJCT+8dNluSytP7ARyO/sSQ2hHVAj2iJRKAw1rj5JPz89fDM9HWT3d9C7to2sq6pEvdPa/PtvEQwZqBqzGkckrzaqPXs/Mj6kMxcfafzY2K+91rCAqnGtPcBz3I31YgZ/C94NwA22FxkskED9QbZCZz/1NZcg4wJj4KnDe7VlrSusuLdJzyLroADsDbISQhG/FGsWPyO+NS9JAkjJR4tFBj73LRwSj/Xq1zbC47Vjr4ms2bFBwnjad+1L+d0AcgXcBjkIbg9QHCEqVD2HTd1NN038SIhDLzYPIZgISOit0k7BubbUsQOuV62ztLPDpNhz50L0Svuk/G8ApwJXAgMJ0BCKIEIyS0NxUmZQQ07ITPJJgENdNPsc4ARk7f/Y0MYFvMqyTK5erYKt9LB1vdvNSuCT6/n1wvuj/9AAEgO2AwsHWgxPG5Ao0jkySP9VEFY0VSpSLk08RPE26iXIEb33hOE7zVLAIrdTryCu5qtUqSephrZXxs3TVeRE9DH5w/v0//3/fAATAqkIfxMyHS0vBUBvT4hbb1q6WcBWf07sRSI1ux74BJTnO9FnwMK0drC9qwus36xxrE25U8vY2nXpzPCr82jzCvPE9W/73gM2EDUghTTHS69Zh16xW59VUE1dQeEtBxNL83HaEclIv9y4r7KMr4mvx7QlyAba8uJ75Obn2emi6yzxUf2vElcruUhFXZFlPGNmXiFTGz8LHdP34tUfwYixP601qjeq366zxTjYhN8j4bnlXeTU6yr8LBTgNXNTe2b/Yf1YVEeRJzUFXuPgyYC82rdjus+6wMv+5hPtQ+8v7F7uJfoWFSs6s1gda1Fo/1t8Q9Ecn/Yl1enBbbpptj+2BsW32fbcpNk321fsXws4Odlbnm6oZWZU5Cup+0/Rl8CHufW3lrOpwdrPGNZy12rlKAK8LmlYFW7AaYBUfCdc9AjNa8ELwwbBmr5X0J/UitTf3fwBKzIhWZ9uK2VRRpEQy97TxI6+EL+3t0y9bMUtxN/QgvYpMfZcI3CsZd5BfgOI2VHGesFLvpivZLsovuLCJt2eEQFH3WfWZn1BPQbZ11XJnsq9xYmyErdjufHDl+SSI4lViGyHZbg5GgIU4djUoNPZw3CyZLdmugbSxASvPbVjD22zSRcNK9q3zI/OY8e6qrGpCa9bwDz1eDx3YU1tKViQJ6r4w+SA5sfZO7cSrf2up7zx6tIuD1kYaPBYNij3/AXtK+x44uHCEa1Yroy8JempKc1TAGWzW4wqLvvG6n7qEeH3wdOkF6jNtRbbJxvsTYBhxWbkQ8wUDfiO9+rwzdqysOGjKKg2v6H30TUsVZZfrFckKksFQvsy/FLsMszdo0qh8KhqxkEAJDjkUpRcqlVNLA0LeQTMBSL+kdvxsUOgk6U9v+nw8yX2SB9WQlgCQDYeLw5mC+EJnPkh04Kor52Ppz/BTvIBJxFHSVNKVKtM0StuEz8PDQ6JA/jmd72InyeexKhcxVT2qCgjRT9QUFJHUjA2OSD9GVcbRhdhAq/csLTknGaem6s5yHPxnh1zPTBK704wUNVFrTFuJ5UlGSRAGbgD7eDeuZ2i2p0Zp8W8zeA0DmwxmULHSKxKe0liR2A0yyvGJ6UnpCQrGQD9p9q7u3amZ58Rp/a11tF39kEZtC6LN7o59zqvP0tEMTSMKjcpxyntJlQcEg1V7UnPcbUEpD2cQ6IFryjFM+K6BhcdUy1/N3E5VzqAOqw/4DjQLN4qaypCKUwm+xyoDfT13NobwCqtMaP1oPmoVrZwynTmxgPzHBYuWzRsOOM1ljaOOYw+bzuDNU0zFTMEMnMwKiZdFxMCPOhizIi5r6vYo2Cjp6wSus7O5OYPAsISSCFOKKIsXSr0K/QtCTSlO8k1bjINM1czNTTLLRgiVBL0+xfhi8oIuWCt9KVFqFyyUcAe1hDwYgZZFosjRivPK2UsCS33MQY5xECtPu458jjQN+Uy9itQGssC0OSLyeK3ba0ep1en8bCjwULZ4vQ7CRwbASDNISoiNiMpJhgwEj0SPHg6Izt7Ossz5CXxEpb1Ztg6wUizwqxCq8O4gM2A5tf/NRMMHH8fjR2XHVYiaS8BQRM/jD3oPLg3yCmWEavxL9OeuzqwbKq7roG/lNnr9WYKsxLZFVAWKxztJjA6UkTGQ6RC7TqiK0IOvubLx361Y67aq+C87dnJ9sUHkRCJEV8VVBtkMLRGHkY5RJY9RSuGCZvehcHTsQKthLPHzfTqEwAXB8QHeA1/HH42uUnLSTxEPTSiEvDmv8TDtLSumbao0p3yIAFpBSIGlA9bKBpHzEtqSD44fhfm6I3GbLfdspm+S+Hw+ukElQR/CNEeCj/1T+NLajsDF6rjQsEDtMiw27sK3IHwMPaY90AIACoaTNlRFknILsj9YNLcvCy2ZrnV2RbyhvUR968HaSodTn1U7kjqJ8nw7ckButa37MGp3/PtpOzz9akT+T5IWexSwjwWDf3ansS5v0+/79xc7Trv1/LSDX86Mll2Vo5BwhBB3OjC8b5uvjvSD+EK5J3n4gTtNUBYbVdgPucK9deLwme/m76gzsDXR9nJ5OoHBD1pW2VaSj9SCK/a18iKxH/Cws311krWpOOmDuBBI15MXBM+rgaH2TLKQsnBw1fHmc2Oz3vdiwpVQNlcwF5QRHIS1+TL0ZfQtstkwzPNbs5S2Gf8OzImV59lZ1DVICXtDdMzz+rOMMBlv+/BSsdQ3UoPgEO0XTFkM02jHUnwrNr02HPUO8PevLG+asG013sEKTymXPtnxln1M04GvOzs5YvmSdq5vQi517mUwEDauQ3IPuhapGWrWfI2eg0Q8+fpa+Vr3XfGPLF7sGayU7+34b4WuUQMXHllilkAOb4QBPVa64LqLuYR1fe2DKvNqmKvIsIe5x8Zs0MlW2ZkcGTJSd0naAgL+eDyXvCS6FbW4LnbpuClJatltlrU5gGFLWVNn11bY3xlQ01FLisPN/0r+2v6K/WS6KzSTLZCoDyh0qM0rAi/LuJiDOIyIUwSWl1fymCDVOY5OyCODa0FtgOtACT+UPQf4VjHC6wEnkuc/Z76puG2ZNOj9qYX/jPbSEVUzVeBWVlV7zulJOYTGgpqAS8CzQPXABH2VOaszk62q6APmBeZ/Z1sp/+4LtCe74YRmi+jQcJPb1dLW95Z5lmRUM45BSf6GIgPxgrWCiMOCQyzA8b5F+jJ0eW9zKikmTiZy5sUovOuOMC219X0khPMKnY9NU3wVK9VZ1YIV11SXkjZM/kgcxXADp0O7A67DzQRGAqfAHDxZNfpwUysF5z+kf6TvpjMoLWtpcMO3W38Xhn1MaNFVE4+VG9WgVZUVhNYJ0ecNHIiZxtgGBgWrxZMFoMKRQAl74DZQsCpqD6a+I/4kYiZ46aHuFzScvHfEpYq3TsHSPVMbkpkSupM0k5FPH8uBCgIJfcj3CUeIlwSUf/U5gzNGbMTnxuSzpMOmn2pYMLL4lADBx1wM3NDi0rDTr1PJ1FZSuM8SzdkMzsvfioeIf0J/OtmypeuJZyLkxeaeqfRvlrkPQu6KjM6lD+tQDFBVUdMSRI+zDtqOKQ1gipmFYLyKso8qiaY+JFInJKwwNfV/Lwa2Sx3NMk0yDr0RVBBizsEPYg7RTAqFA/sZb8noveVKZwRsCrXsACEHqgt4TEVMow3qEHrO7I4DTXTJpMIi91Qt8Khc5j2pgTK/PVPFxYkqiYoJ3Ax/kJQQAo9CDa1Id37+sqGqxeeJ6TPwkbvDRVIJHsnISvYO7NN9khXRuU8HiMR7/u/5qcpnvW0Z+NAC78ZVBd+G0Qtuki/TDNL7jzuE3ndJbYZpjCmh8WT6rEGDg2fEDYfVz+8SZVLvj2SGzXhirdRp5ajYsC76pcAbglZC/ccUj4rTAJKszewD9PWqrTGqXSsidB49WIHWwsyFW4tak55UPBJ4DBU/cPMS7RVrDjA4+WS/l0BgwSeGKY3X1BvTR46sRAA2iy7a6+RraPOIO0W9Kf02/+6If5JzU+4RoEpy/L/yIq6y7ZGxjji++6T73v0aA6gNzNSiU64OS8Rc9/swwi8W7oj0tfnh+y48HD85SBuRMxTlUsmMl0DRtmOxBu/h79g1QTmh+wG7rv71hwYQIxTtEtDNU8MHt9zyXfDOcPayzjdI+EV4gzoswLRKn1JTlElRHEoGf3/2xPPTMzuyx3Q/ts83pnd2ub//rYmD0UQUqBIni+PC67lV9GOy8bJxMgR0XHb7N/R317ssAhVLXxHaVNZTp08fBuO+77ldNsA2J/WR85U1I/Z5dxg3g/rJQfeKQVDMVAtUeVEnipRCXvsy9oa1zHY69YC0YTSC9VC177XZuOF9scTuTDvQrNMHU3pPPkkQwUh7WDg5Np6233aBtbvzDXOH9CtzxHQE9if6mwK9ia5OxNIiE60TDtAAi1kE1P58equ4+Tj9OLS3ZvU+8ecxqnIJMlizR3S7uCX9iIToCv1O0FGsksjSos8FiowE8P+fvMx65LpLOkJ6zHqyeCa1XPLjMpHy9XLiM9Q2C7q1P5DFesqIDuVRUlL5U5dSoY8qir2F4gGivw/9z30YvRp9JXwHut935bQWsZoxuzGDcd6yifTpOEt9N0LPyQzNOg+A0abSb9KYkDDMVgfQA0O/u3yAe9K7abv8OwB6K/fRtKaxVq+lL3Lvsa/AsSJzTHa4vI6DGIjSzaXQJNH1EoXSyZDGTE5IDgOjAGK+0b4GPqw+qr4vvC94obQkMDturG7nrxWwhPLLty08mgQMCiTOCZDkEj5StxLF0BQLxkd4g5QB3UDBgUIApj7Ye+m3nvKG7nettq3jbvsxaLZCvR+ECMqEzsfREhI8ElgQiYvqR04EW4JBwbrBkcCzfTz3s7JN7detFa3LsBEz2npbws2KoU6REL/RGlGgDg5IWwPXQaQA0EAxvi46JfRr7uurkexc7jdx6zlRQtyKVg5BkEiQzBDdy48HYgVghUvFK8JqvM81Ky53bEFufvJ+emzEZ4wjD5dQVdBUzuaJVMZ2xX3EwcHde7uzQ20m60GtZbJbe0tFk8vzDdROXw8SylxHpocXxpfCdDpVMSCrmGuCrut204HGSdRNLk1Rjd0KK0eqx3FGNsG4t5WvCOrwLPNzZP6diHfMJ8ydDVAMSQm6iVZICsJU95Tu52qBLaI1vcDvSERLmUu3jWOLkwrTyqqGLPyqMYQr1yykc4F/N4dkidKJ0swRy/0LNEq6hTd6XPABa6+t+rZugaFH+kipCWeNb8wZy8fJLj/c8+ls7WtO8Ve8e0U/R4sIEQuPjkKOKswsROi3t66Ea8qwIXqdg6vGZAbrSfoPEo7jzVrGb7l4b+xssi+Q+f3ClgWyhacJNw+wz0mN7MbP+mWwZ20tr2P4ywEHg4zDywe1DvvPsg3kRs857zCGbb4upLeTv6qB88JnRnEOIZCPT0dJaj03cq2u9+4qtdR+p0GigfaEt0ubEVZQawwhAg42MLB+ryPyinr4PpF/ooDEBthPQtGjD2SI+H2KdJPxODB69QE77n50vmAAm8dFD5CRac8RSLM9QXSX8QNw/jNhOac8GDx4PYEDosxrEaSQbwvbQkk4a7LhcYGxvzTZuUU6Wfpv/M6DscvF0UdQKQvEA6C6BzTest5y9HO++EF6m3q0e6m/yYdFzkvRtY/yy48DvDsmNcA0G/PIs7Q2xjmOuig6oTy3Qk/KMU9xUWJPnssfQ9p8LHdlNcS14/VZNby4LrjF+Mp5/z1Tw3PKNE7n0M6POYt9BKL9j/iFNqB1ojVmNLy1EDap9ty2/XfL+ytA3seOzPqPQ8/hjZEJDgNdfcG6XLhR94c34Dc5NRZ3FneJ97Q35PnOvYdC3wgpzH7OzFAjznXLDkZ3wLY8ETo+ONA4RLfj925143XJdqz25ncvODT6pb6bg16IfwvaTgpPLU49S5VHr4KTPqP7THm6+Of5NfjUeEa223WT9is1zjZ9NvW4ALrWflmDgogJSyUNBQ4Uza1Lp0iSBNYBJL4tfKr7z3v4e0y6mbkYdyo1qTWm9Zb1wXaD+BT6yz7eA1yHpwq1TDqM7IzaCuoHswPcwHG9pTwse9n8GLxpu8O63PiytiD2ZzZLdlc2yvgy+qX+sIMmRwgKPktczEyMiIqzh2uDswBfPg/9Drz1fJH85Lw7+lI387XG9gv2EXaL9+/50v3YAhMGjclECzGLpEvHycGHGcOrQQZ/YX8jft7+v32i+4f4jLZ8di02WbcH+N08DwDHBb2IhYpwSuwLBQkkBaeCMj/svw9+y375Pdw7+HjIdlE2hvbk9+m6iT85A+KH8smgSmxKZAjzRTlCFgAMv+9/uj9N/bp6FDbn9c42QLfCOuw/XAROR+6JUkozideGoUNHAY+BcoGzwM9+ELnIdk82AHcUuU99/kM1RvuI3MlIyafGGMMhAbaBawDdPy/7sPe89Yp23Tknvb0DS8d7CM6JOMj/haLC3cJJwovBYz3NuTj1sXYneBd8iIJphliIB0hXSC0ExwMsQtPC4wCRe/Z3JjWZ9xb6vgBwRSjHHgdhx+pFWgOFA0CC2X/C+zf2nHWjdwJ7rwHLRjsHCQesR6tFacTvBH3CVf2huDA1VHar+hNAacUrhvTHPwenBcwFnoUdAzB+DjhAtah2SvoZAC0D70TnBSrGHMSIBH2DvQELO+k3DTVNtzg7dQGwxMbFlUWMhuaFh4WNxDyAOHm7NjJ1lricvmcCzARXhKlFRcYOxajEygI8O/93bHWN9vY7JEDERCgE00UIB2IHF0bGBddBHfrA9yz1nDiuvf2CPgOTQ6LFNceMR5LHRcUWf9Y5j7b2tmC6fX9iQhNCTULbxLJHcYcHBo5DZ/1i+Hg2fHYL+jy+8wGuQcjCRoRKCAnH9EcjBFD/IfmO9zc2KfgCvG3/+oDUAN7B+YVQh9fHz0bZQ6e9mXj9Nvo2fnjd/VWAKYDKAJ4B48VGyKsIbAdzBKu/aLoLt9b3JHenOyE+YD/gf3y/hAG0RX2IashkR1iEi39f+sk4eTdPd3l55f0LPxj/Yj+YQOTDSgcXCSGItAdQxFs/g7sN+GG3b/cVd+J6vDyiPeJ9i35vwCnDcUbhiX9I48g8RZRCHb01ueL4G/enN6r4l3slfOB96H4jfiN/9cI0BVLINkl6yQ0IGgYUQsF+i/uFeY/43/ikuLd56TuzPPL9Gv0ofRK+O3+OwptF7Qh3CQ3I9YexRcODS0BsvQR7NbmvuQg5HbkmOiX7znzjPXD9a32zPmU/6QHExEwGnQhfyX2I/kgQxvnEY4GX/mS8MPqJOhG5+jmm+Ya5U/pke/F8FryM/IE8131e/pXAl4L7BM5HQki4SQaIzQgMRrnETsHqPwR8jfswOgo55bmf+fK5pnlGegt7HXuv+7L7ibvtO4b8jL4EgB2CfwSDRtYIBQjyyEIH9MZrhEGCfj+g/bh8IntxOtC69jqB+v96Ufojux+7nPvJ/Aa8PXxWfXb+FoA6wjiEUoZTB6xIQ0iXB90G9kUJAuKAIX4h/J37rXtFO4s7tPt+OwI67vtVvBs8KzvO/AR8k72Xf1+Bl4QQBdYHGkfqh/RHNAXHhCIBl79MPbf8tvwr/FJ8Uzw/O3965ntwu5a7pnvqPAl9VD8fwZrEKAXEhwEHl4bxxWeDcUDhvqL9Rvzw/L+8nLyv/AL7R3ve+/E7v/vCvN3+mMEVA63FekZ0xv1F70QNAbE/ND2VvQs9AX0pfKj7o3sl+1H7vnvz/M0/MoHkhFjFyoaaBkrE8wJLAB0+hj4mvfK9+L0RO+Y7gjvRvDx83j8AQlQEjkXKBneFpAOiwQR/Uv5g/h5+PP0au7e7FftBe/c9GIA5wylE9wWuBa0D/oF0v62+y/7nvny9KztRe0N7vfx+vpdCGkR8BTaFVYP4QUh/8P8yfzC+rv0+O017nTwOvY2Ak4NwhL2E9QQswfVADP+1P58/Iv1Ge6u7g7xsPgCBYcOPhLgErUNGwWxAM7/jf5e+Q/x/e2J7yT1/v9vCpoP8xDTDc8FdwH5AJj/gPos8sLuR/Cm9eEAdwqDDv4OwQqdAzYBugDq/hz4bPA/7zXyMPrDBT4MJQ4hDuQHjQOSAr8Byfw59E7v0vBU9roAlQmfDPUM1grVBYgEhwSSAGT4bvEA8bb0ov39Bj8LrgsRDBYHeAQbBOAB2/qE86fwCPOj+aQDbgmbCrAKhQioBVMFKQQF/872uPFH8nT2cv9xBkUJZQkUCmYH4QZmBs0Djvx89SPyYPQb+i0CzAYZCBYI4AhkBmcGugUdAqP67fTg8ln1X/uOAkIGCgf1Bp4I2garBgIGkQIP/Ej22PNQ9RP6qwDYBAQGHQYhB7QHEwecBvwEKQAR+uX1aPSU9j/7xAALBKkE4gTrBSoH4Qa3BlYFegHO+433vvVl9vP5IP/5AkYEOgSDBFQGKwcMB78GqwSVAJD7Gvid9r72dPnM/VsBcgPiA/QD9wT/BjAHMwenBqMEtQAB/Pr4ofdk93/5z/zh/8ABHwIvArMCeQSbBokGSgacBccDUACG/N35kPgj+DP5/fvQ/t4AwgHlAQQCtwJcBEAGNAYeBnkFEARqATv+c/v6+Vr5KPld+oH8s/5KALQA+wDsAI0BtgKjBL0FtwVsBdAEbQMzAX3+Xfz++mf6N/qj+jb8Cf6A/zQAZABdAHsAGwFVAs4DCgUEBdwEbQSMAwwC7f/q/ZD8vvtp+077vPsb/Xf+e/8IABsAAQAFAHUAOgFWApcDPQQzBPcDhgOUAjYBiv8S/gT9mvxP/Ej8TfxW/VP+Hv+a/9L/wv/V/w0AoQBbAWcCQgNxA1gDIgOlAt0BwgCE/3r+yf13/Vf9Uf19/SP+1/5m/7j/3f/l/wQAPwC+AHABEwKEAnICQwL7AXkBygDr/y//qf5t/l7+Xv5n/sf+Mf92/5//qP+j/77/AABnAOAAQAF7AWMBQgEJAacAMwDB/3j/WP9R/1j/Xf+J/8H/3f/g/+H/6f/8/x4ARQBjAG4AYwBSADoAIAAMAAQABwA=`}],Dn={head_burst:`decapitation`,eye_left:`jaw_dislocation`,eye_right:`jaw_dislocation`,ribs_left:`shoulder_left`,ribs_right:`shoulder_right`},On={duration:1.1,first:[330,420],second:[760,880],gain:.16},kn={duration:1.2,first:[520,360],second:[980,720],gain:.13},An={duration:1.3,first:[300,280],second:[640,600],gain:.11,delay:.75},jn=2.5,Mn=20,Nn=.05,Pn=2e4,Fn=650,In=[`pointerdown`,`pointerup`,`touchend`,`click`,`keydown`],Ln={jab:{from:520,to:1500,duration:.09},straight:{from:420,to:1150,duration:.12},hook:{from:300,to:880,duration:.14},uppercut:{from:240,to:820,duration:.15}};function Rn(e){return Math.round(14+(1-Math.max(0,Math.min(1,e)))*22)}var zn=class{settings;context=null;master=null;noiseBuffer=null;injuryBuffers=new Map;crowdGain=null;unlocked=!1;unlockPromise=null;crowdStarted=!1;destroyed=!1;timers=new Set;lastBreathTick=-300;lastHeartbeatTick=-300;clapperRound=0;murmurGain=null;murmurLevel=0;lastOohAt=-1/0;lastChantAt=-1/0;muffle=null;rockedLevel=0;lastRockedBeat=-300;lastTick=-1;unlockListener=()=>{let e=this.context;e!==null&&e.state!==`running`&&e.resume().catch(()=>void 0),this.unlock().catch(()=>void 0)};visibility=()=>{let e=this.context;if(e===null)return;let t=document.hidden?e.suspend():this.unlocked?e.resume():null;t!==null&&t.catch(()=>void 0)};constructor(e){this.settings=e;for(let e of In)window.addEventListener(e,this.unlockListener);document.addEventListener(`visibilitychange`,this.visibility)}unlock(){return this.destroyed||this.unlocked?Promise.resolve():(this.unlockPromise===null&&(this.unlockPromise=this.performUnlock().finally(()=>{this.unlockPromise=null})),this.unlockPromise)}async performUnlock(){let e=this.context;if(e===null){e=new AudioContext;let t=e.createGain();t.gain.value=Math.min(.8,Math.max(0,this.settings().volume));let n=e.createBiquadFilter();n.type=`lowpass`,n.frequency.value=Pn,n.Q.value=.7,t.connect(n).connect(e.destination),this.context=e,this.master=t,this.muffle=n}if(e.state===`suspended`&&await e.resume(),this.destroyed||this.context!==e)return;let t=await this.decodeInjuryBuffers(e);if(!(this.destroyed||this.context!==e)){this.injuryBuffers=t,this.unlocked=!0;for(let e of In)window.removeEventListener(e,this.unlockListener);this.crowdStarted||(this.crowdStarted=!0,this.crowdBed())}}setVolume(){this.master!==null&&(this.master.gain.value=Math.min(.8,Math.max(0,this.settings().volume)))}event(e){if(this.unlocked)switch(e.kind){case`punch_start`:{let t=Ln[e.detail.split(`:`)[1]??`jab`]??Ln.jab;this.noise({duration:t.duration,frequency:t.from,sweepTo:t.to,gain:.1,type:`bandpass`,q:1.2});break}case`whiff`:this.noise({duration:.11,frequency:850,sweepTo:320,gain:.07,type:`bandpass`,q:1.1});break;case`hit`:case`counter_hit`:{let t=e.detail.endsWith(`body`),n=Math.min(1,e.amount/260),r=Math.min(.36,.14+n*.2)*(e.kind===`counter_hit`?1.25:1);this.impact(r,t,n),(e.kind===`counter_hit`||n>.7)&&this.crowdSwell(.35+n*.4),(e.kind===`counter_hit`&&e.amount>=50||e.amount>=90)&&this.ooh(Math.min(1,e.amount/160));break}case`block`:this.noise({duration:.045,frequency:1200,sweepTo:600,gain:.14,type:`bandpass`,q:1.1}),this.noise({duration:.09,frequency:260,gain:.08}),this.tone({from:160,to:110,duration:.06,type:`triangle`,gain:.05});break;case`perfect_block`:this.noise({duration:.05,frequency:1800,sweepTo:900,gain:.16,type:`bandpass`,q:1.6}),this.tone({from:280,to:210,duration:.06,type:`triangle`,gain:.06});break;case`guard_break`:this.impact(.3,!1,.9),this.tone({from:230,to:78,duration:.2,type:`sawtooth`,gain:.08}),this.crowdSwell(.5),this.ooh(.6);break;case`stun`:this.tone({from:96,to:74,duration:.22,type:`sine`,gain:.1}),this.crowdSwell(.3);break;case`parry`:this.noise({duration:.06,frequency:2400,sweepTo:1100,gain:.18,type:`bandpass`,q:1.8}),this.tone({from:330,to:180,duration:.09,type:`triangle`,gain:.07}),this.crowdSwell(.35);break;case`body_collapse`:this.tone({from:118,to:52,duration:.42,type:`sine`,gain:.16}),this.noise({duration:.26,frequency:420,sweepTo:180,gain:.05,type:`bandpass`,q:.9}),this.crowdSwell(.6);break;case`eye_shut`:this.crowdSwell(.25);break;case`corner`:this.noise({duration:.22,frequency:2600,sweepTo:1500,gain:.05,type:`bandpass`,q:.8});break;case`knockdown`:this.impact(.34,!1,1),this.tone({from:60,to:28,duration:.42,type:`sine`,gain:.3}),this.noise({duration:.3,frequency:140,gain:.24}),this.crowdRoar(1),this.hush();break;case`bell`:{let t=e.detail===`round_start`?3:1;for(let e=0;e10*r||this.clapperRound===t||(this.clapperRound=t,!this.unlocked))return;this.noise({duration:.05,frequency:2600,gain:.42,type:`bandpass`,q:1.4}),this.noise({duration:.09,frequency:700,gain:.18,type:`bandpass`,q:.8});let i=window.setTimeout(()=>{this.timers.delete(i),this.noise({duration:.05,frequency:2400,gain:.4,type:`bandpass`,q:1.4}),this.noise({duration:.09,frequency:660,gain:.16,type:`bandpass`,q:.8})},120);this.timers.add(i)}chant(){let e=this.context;if(!(!this.unlocked||e===null||e.currentTime-this.lastChantAtthis.murmurLevel;this.murmurLevel=r,n.gain.setTargetAtTime(r*Nn,t.currentTime,i?.3:.8)}rocked(e,t){this.follow(t);let n=this.context,r=this.muffle;if(!this.unlocked||n===null||r===null)return;let i=Math.max(0,Math.min(1,e));if(Math.abs(i-this.rockedLevel)>=.02||i===0&&this.rockedLevel!==0){let e=i>this.rockedLevel;this.rockedLevel=i,r.frequency.setTargetAtTime(Pn*(Fn/Pn)**+i,n.currentTime,e?.05:.9)}i>.15&&t-this.lastRockedBeat>=Rn(i)&&(this.lastRockedBeat=t,this.tone({from:58,to:40,duration:.12,type:`sine`,gain:.09+i*.08}),this.tone({from:50,to:36,duration:.14,type:`sine`,gain:.07+i*.06,delay:.16}))}snapshot(e,t,n,r){if(this.follow(e),!this.unlocked)return;let i=1-t/Math.max(1,n);i>.55&&e-this.lastBreathTick>=75&&(this.lastBreathTick=e,this.noise({duration:.18,frequency:420,gain:.045+i*.04})),(i>.72||r>500)&&this.rockedLevel<=.15&&e-this.lastHeartbeatTick>=24&&(this.lastHeartbeatTick=e,this.tone({from:52,duration:.09,type:`sine`,gain:.055}))}result(e){if(this.openMuffle(),!this.unlocked)return;this.crowdSwell(1),this.tone({from:e.winner_id===null?280:520,duration:.45,type:`triangle`,gain:.18});let t=window.setTimeout(()=>{this.timers.delete(t),this.tone({from:650,duration:.5,type:`triangle`,gain:.14})},160);this.timers.add(t)}injury(e){let t=this.context,n=this.master,r=this.injuryBuffers.get(Dn[e]??e),i=this.settings();if(!this.unlocked||t===null||n===null||r===void 0||i.blood!==`full`||i.reducedMotion)return;let a=t.createBufferSource(),o=t.createGain();a.buffer=r,o.gain.value=.16,a.connect(o).connect(n),a.start()}async decodeInjuryBuffers(e){let t=await Promise.all(En.map(async t=>{let n=atob(t.wav),r=new Uint8Array(n.length);for(let e=0;evoid 0)}},Bn=class extends Error{code;reloadRequired;name=`ClientError`;constructor(e,t=!1){super(e),this.code=e,this.reloadRequired=t}};async function Vn(e,t){if(!e.ok)throw new Bn(e.status===429?`rate_limited`:t);if(!(e.headers.get(`content-type`)??``).toLowerCase().startsWith(`application/json`))throw new Bn(t);try{return pe(await e.text())}catch{throw new Bn(t)}}function Hn(e=window.location.search){let t=new URLSearchParams(e).getAll(`instance_id`);if(t.length!==1||!/^[A-Za-z0-9_-]{1,255}$/u.test(t[0]??``))throw new Bn(`invalid_launch`);return t[0]}function Un(e){if(typeof e==`object`&&e&&`protocol`in e&&e.protocol!==4)throw new Bn(`client_outdated`,!0)}async function Wn(e,t){let n=new URL(`/api/hands/bootstrap`,window.location.origin);try{let r=await Vn(await fetch(n,{method:`POST`,credentials:`same-origin`,cache:`no-store`,headers:{"Content-Type":`application/json`},body:JSON.stringify({instance_id:e}),...t===void 0?{}:{signal:t}}),`bootstrap_failed`);return Un(r),Ze(r)}catch(e){throw e instanceof Bn?e:e instanceof M?new Bn(`invalid_bootstrap`):new Bn(`bootstrap_failed`)}}async function Gn(e,t,n){try{return Qe(await Vn(await fetch(new URL(`/api/hands/token`,window.location.origin),{method:`POST`,credentials:`same-origin`,cache:`no-store`,headers:{"Content-Type":`application/json`},body:JSON.stringify({code:e,state:t}),...n===void 0?{}:{signal:n}}),`token_failed`))}catch(e){throw e instanceof Bn?e:e instanceof M?new Bn(`invalid_token_response`):new Bn(`token_failed`)}}function Kn(e){return e instanceof Bn?e.code:e instanceof M?`protocol_error`:`unexpected_error`}var qn=typeof globalThis<`u`?globalThis:typeof window<`u`?window:typeof global<`u`?global:typeof self<`u`?self:{};function Jn(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,`default`)?e.default:e}var Yn={exports:{}},Xn;function Zn(){return Xn?Yn.exports:(Xn=1,(function(e){var t=Object.prototype.hasOwnProperty,n=`~`;function r(){}Object.create&&(r.prototype=Object.create(null),new r().__proto__||(n=!1));function i(e,t,n){this.fn=e,this.context=t,this.once=n||!1}function a(e,t,r,a,o){if(typeof r!=`function`)throw TypeError(`The listener must be a function`);var s=new i(r,a||e,o),c=n?n+t:t;return e._events[c]?e._events[c].fn?e._events[c]=[e._events[c],s]:e._events[c].push(s):(e._events[c]=s,e._eventsCount++),e}function o(e,t){--e._eventsCount===0?e._events=new r:delete e._events[t]}function s(){this._events=new r,this._eventsCount=0}s.prototype.eventNames=function(){var e=[],r,i;if(this._eventsCount===0)return e;for(i in r=this._events)t.call(r,i)&&e.push(n?i.slice(1):i);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(r)):e},s.prototype.listeners=function(e){var t=n?n+e:e,r=this._events[t];if(!r)return[];if(r.fn)return[r.fn];for(var i=0,a=r.length,o=Array(a);ie;function t(e){}e.assertIs=t;function n(e){throw Error()}e.assertNever=n,e.arrayToEnum=e=>{let t={};for(let n of e)t[n]=n;return t},e.getValidEnumValues=t=>{let n=e.objectKeys(t).filter(e=>typeof t[t[e]]!=`number`),r={};for(let e of n)r[e]=t[e];return e.objectValues(r)},e.objectValues=t=>e.objectKeys(t).map(function(e){return t[e]}),e.objectKeys=typeof Object.keys==`function`?e=>Object.keys(e):e=>{let t=[];for(let n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.push(n);return t},e.find=(e,t)=>{for(let n of e)if(t(n))return n},e.isInteger=typeof Number.isInteger==`function`?e=>Number.isInteger(e):e=>typeof e==`number`&&isFinite(e)&&Math.floor(e)===e;function r(e,t=` | `){return e.map(e=>typeof e==`string`?`'${e}'`:e).join(t)}e.joinValues=r,e.jsonStringifyReplacer=(e,t)=>typeof t==`bigint`?t.toString():t})($n||={});var er;(function(e){e.mergeShapes=(e,t)=>({...e,...t})})(er||={});var R=$n.arrayToEnum([`string`,`nan`,`number`,`integer`,`float`,`boolean`,`date`,`bigint`,`symbol`,`function`,`undefined`,`null`,`array`,`object`,`unknown`,`promise`,`void`,`never`,`map`,`set`]),tr=e=>{switch(typeof e){case`undefined`:return R.undefined;case`string`:return R.string;case`number`:return isNaN(e)?R.nan:R.number;case`boolean`:return R.boolean;case`function`:return R.function;case`bigint`:return R.bigint;case`symbol`:return R.symbol;case`object`:return Array.isArray(e)?R.array:e===null?R.null:e.then&&typeof e.then==`function`&&e.catch&&typeof e.catch==`function`?R.promise:typeof Map<`u`&&e instanceof Map?R.map:typeof Set<`u`&&e instanceof Set?R.set:typeof Date<`u`&&e instanceof Date?R.date:R.object;default:return R.unknown}},z=$n.arrayToEnum([`invalid_type`,`invalid_literal`,`custom`,`invalid_union`,`invalid_union_discriminator`,`invalid_enum_value`,`unrecognized_keys`,`invalid_arguments`,`invalid_return_type`,`invalid_date`,`invalid_string`,`too_small`,`too_big`,`invalid_intersection_types`,`not_multiple_of`,`not_finite`]),nr=e=>JSON.stringify(e,null,2).replace(/"([^"]+)":/g,`$1:`),rr=class e extends Error{constructor(e){super(),this.issues=[],this.addIssue=e=>{this.issues=[...this.issues,e]},this.addIssues=(e=[])=>{this.issues=[...this.issues,...e]};let t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name=`ZodError`,this.issues=e}get errors(){return this.issues}format(e){let t=e||function(e){return e.message},n={_errors:[]},r=e=>{for(let i of e.issues)if(i.code===`invalid_union`)i.unionErrors.map(r);else if(i.code===`invalid_return_type`)r(i.returnTypeError);else if(i.code===`invalid_arguments`)r(i.argumentsError);else if(i.path.length===0)n._errors.push(t(i));else{let e=n,r=0;for(;re.message){let t={},n=[];for(let r of this.issues)r.path.length>0?(t[r.path[0]]=t[r.path[0]]||[],t[r.path[0]].push(e(r))):n.push(e(r));return{formErrors:n,fieldErrors:t}}get formErrors(){return this.flatten()}};rr.create=e=>new rr(e);var ir=(e,t)=>{let n;switch(e.code){case z.invalid_type:n=e.received===R.undefined?`Required`:`Expected ${e.expected}, received ${e.received}`;break;case z.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(e.expected,$n.jsonStringifyReplacer)}`;break;case z.unrecognized_keys:n=`Unrecognized key(s) in object: ${$n.joinValues(e.keys,`, `)}`;break;case z.invalid_union:n=`Invalid input`;break;case z.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${$n.joinValues(e.options)}`;break;case z.invalid_enum_value:n=`Invalid enum value. Expected ${$n.joinValues(e.options)}, received '${e.received}'`;break;case z.invalid_arguments:n=`Invalid function arguments`;break;case z.invalid_return_type:n=`Invalid function return type`;break;case z.invalid_date:n=`Invalid date`;break;case z.invalid_string:typeof e.validation==`object`?`includes`in e.validation?(n=`Invalid input: must include "${e.validation.includes}"`,typeof e.validation.position==`number`&&(n=`${n} at one or more positions greater than or equal to ${e.validation.position}`)):`startsWith`in e.validation?n=`Invalid input: must start with "${e.validation.startsWith}"`:`endsWith`in e.validation?n=`Invalid input: must end with "${e.validation.endsWith}"`:$n.assertNever(e.validation):n=e.validation===`regex`?`Invalid`:`Invalid ${e.validation}`;break;case z.too_small:n=e.type===`array`?`Array must contain ${e.exact?`exactly`:e.inclusive?`at least`:`more than`} ${e.minimum} element(s)`:e.type===`string`?`String must contain ${e.exact?`exactly`:e.inclusive?`at least`:`over`} ${e.minimum} character(s)`:e.type===`number`?`Number must be ${e.exact?`exactly equal to `:e.inclusive?`greater than or equal to `:`greater than `}${e.minimum}`:e.type===`date`?`Date must be ${e.exact?`exactly equal to `:e.inclusive?`greater than or equal to `:`greater than `}${new Date(Number(e.minimum))}`:`Invalid input`;break;case z.too_big:n=e.type===`array`?`Array must contain ${e.exact?`exactly`:e.inclusive?`at most`:`less than`} ${e.maximum} element(s)`:e.type===`string`?`String must contain ${e.exact?`exactly`:e.inclusive?`at most`:`under`} ${e.maximum} character(s)`:e.type===`number`?`Number must be ${e.exact?`exactly`:e.inclusive?`less than or equal to`:`less than`} ${e.maximum}`:e.type===`bigint`?`BigInt must be ${e.exact?`exactly`:e.inclusive?`less than or equal to`:`less than`} ${e.maximum}`:e.type===`date`?`Date must be ${e.exact?`exactly`:e.inclusive?`smaller than or equal to`:`smaller than`} ${new Date(Number(e.maximum))}`:`Invalid input`;break;case z.custom:n=`Invalid input`;break;case z.invalid_intersection_types:n=`Intersection results could not be merged`;break;case z.not_multiple_of:n=`Number must be a multiple of ${e.multipleOf}`;break;case z.not_finite:n=`Number must be finite`;break;default:n=t.defaultError,$n.assertNever(e)}return{message:n}},ar=ir;function or(e){ar=e}function sr(){return ar}var cr=e=>{let{data:t,path:n,errorMaps:r,issueData:i}=e,a=[...n,...i.path||[]],o={...i,path:a};if(i.message!==void 0)return{...i,path:a,message:i.message};let s=``,c=r.filter(e=>!!e).slice().reverse();for(let e of c)s=e(o,{data:t,defaultError:s}).message;return{...i,path:a,message:s}},lr=[];function B(e,t){let n=sr(),r=cr({issueData:t,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,n,n===ir?void 0:ir].filter(e=>!!e)});e.common.issues.push(r)}var ur=class e{constructor(){this.value=`valid`}dirty(){this.value===`valid`&&(this.value=`dirty`)}abort(){this.value!==`aborted`&&(this.value=`aborted`)}static mergeArray(e,t){let n=[];for(let r of t){if(r.status===`aborted`)return dr;r.status===`dirty`&&e.dirty(),n.push(r.value)}return{status:e.value,value:n}}static async mergeObjectAsync(t,n){let r=[];for(let e of n){let t=await e.key,n=await e.value;r.push({key:t,value:n})}return e.mergeObjectSync(t,r)}static mergeObjectSync(e,t){let n={};for(let r of t){let{key:t,value:i}=r;if(t.status===`aborted`||i.status===`aborted`)return dr;t.status===`dirty`&&e.dirty(),i.status===`dirty`&&e.dirty(),t.value!==`__proto__`&&(i.value!==void 0||r.alwaysSet)&&(n[t.value]=i.value)}return{status:e.value,value:n}}},dr=Object.freeze({status:`aborted`}),fr=e=>({status:`dirty`,value:e}),pr=e=>({status:`valid`,value:e}),mr=e=>e.status===`aborted`,hr=e=>e.status===`dirty`,gr=e=>e.status===`valid`,_r=e=>typeof Promise<`u`&&e instanceof Promise;function vr(e,t,n,r){if(typeof t==`function`?e!==t||!r:!t.has(e))throw TypeError(`Cannot read private member from an object whose class did not declare it`);return t.get(e)}function yr(e,t,n,r,i){if(typeof t==`function`?e!==t||!i:!t.has(e))throw TypeError(`Cannot write private member to an object whose class did not declare it`);return t.set(e,n),n}var br;(function(e){e.errToObj=e=>typeof e==`string`?{message:e}:e||{},e.toString=e=>typeof e==`string`?e:e?.message})(br||={});var xr,Sr,Cr=class{constructor(e,t,n,r){this._cachedPath=[],this.parent=e,this.data=t,this._path=n,this._key=r}get path(){return this._cachedPath.length||(this._key instanceof Array?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},wr=(e,t)=>{if(gr(t))return{success:!0,data:t.value};if(!e.common.issues.length)throw Error(`Validation failed but no issues detected.`);return{success:!1,get error(){if(this._error)return this._error;let t=new rr(e.common.issues);return this._error=t,this._error}}};function Tr(e){if(!e)return{};let{errorMap:t,invalid_type_error:n,required_error:r,description:i}=e;if(t&&(n||r))throw Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return t?{errorMap:t,description:i}:{errorMap:(t,i)=>{let{message:a}=e;return t.code===`invalid_enum_value`?{message:a??i.defaultError}:i.data===void 0?{message:a??r??i.defaultError}:t.code===`invalid_type`?{message:a??n??i.defaultError}:{message:i.defaultError}},description:i}}var Er=class{constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this)}get description(){return this._def.description}_getType(e){return tr(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:tr(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new ur,ctx:{common:e.parent.common,data:e.data,parsedType:tr(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let t=this._parse(e);if(_r(t))throw Error(`Synchronous parse encountered promise.`);return t}_parseAsync(e){let t=this._parse(e);return Promise.resolve(t)}parse(e,t){let n=this.safeParse(e,t);if(n.success)return n.data;throw n.error}safeParse(e,t){let n={common:{issues:[],async:t?.async??!1,contextualErrorMap:t?.errorMap},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:tr(e)};return wr(n,this._parseSync({data:e,path:n.path,parent:n}))}async parseAsync(e,t){let n=await this.safeParseAsync(e,t);if(n.success)return n.data;throw n.error}async safeParseAsync(e,t){let n={common:{issues:[],contextualErrorMap:t?.errorMap,async:!0},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:tr(e)},r=this._parse({data:e,path:n.path,parent:n});return wr(n,await(_r(r)?r:Promise.resolve(r)))}refine(e,t){let n=e=>typeof t==`string`||t===void 0?{message:t}:typeof t==`function`?t(e):t;return this._refinement((t,r)=>{let i=e(t),a=()=>r.addIssue({code:z.custom,...n(t)});return typeof Promise<`u`&&i instanceof Promise?i.then(e=>e?!0:(a(),!1)):i?!0:(a(),!1)})}refinement(e,t){return this._refinement((n,r)=>e(n)?!0:(r.addIssue(typeof t==`function`?t(n,r):t),!1))}_refinement(e){return new Ci({schema:this,typeName:Fi.ZodEffects,effect:{type:`refinement`,refinement:e}})}superRefine(e){return this._refinement(e)}optional(){return wi.create(this,this._def)}nullable(){return Ti.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return ii.create(this,this._def)}promise(){return Si.create(this,this._def)}or(e){return si.create([this,e],this._def)}and(e){return di.create(this,e,this._def)}transform(e){return new Ci({...Tr(this._def),schema:this,typeName:Fi.ZodEffects,effect:{type:`transform`,transform:e}})}default(e){let t=typeof e==`function`?e:()=>e;return new Ei({...Tr(this._def),innerType:this,defaultValue:t,typeName:Fi.ZodDefault})}brand(){return new Ai({typeName:Fi.ZodBranded,type:this,...Tr(this._def)})}catch(e){let t=typeof e==`function`?e:()=>e;return new Di({...Tr(this._def),innerType:this,catchValue:t,typeName:Fi.ZodCatch})}describe(e){let t=this.constructor;return new t({...this._def,description:e})}pipe(e){return ji.create(this,e)}readonly(){return Mi.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},Dr=/^c[^\s-]{8,}$/i,Or=/^[0-9a-z]+$/,kr=/^[0-9A-HJKMNP-TV-Z]{26}$/,Ar=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,jr=/^[a-z0-9_-]{21}$/i,Mr=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,Nr=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,Pr=`^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`,Fr,Ir=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,Lr=/^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,Rr=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,zr=`((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))`,Br=RegExp(`^${zr}$`);function Vr(e){let t=`([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d`;return e.precision?t=`${t}\\.\\d{${e.precision}}`:e.precision??(t=`${t}(\\.\\d+)?`),t}function Hr(e){return RegExp(`^${Vr(e)}$`)}function Ur(e){let t=`${zr}T${Vr(e)}`,n=[];return n.push(e.local?`Z?`:`Z`),e.offset&&n.push(`([+-]\\d{2}:?\\d{2})`),t=`${t}(${n.join(`|`)})`,RegExp(`^${t}$`)}function Wr(e,t){return!!((t===`v4`||!t)&&Ir.test(e)||(t===`v6`||!t)&&Lr.test(e))}var Gr=class e extends Er{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==R.string){let t=this._getOrReturnCtx(e);return B(t,{code:z.invalid_type,expected:R.string,received:t.parsedType}),dr}let t=new ur,n;for(let r of this._def.checks)if(r.kind===`min`)e.data.lengthr.value&&(n=this._getOrReturnCtx(e,n),B(n,{code:z.too_big,maximum:r.value,type:`string`,inclusive:!0,exact:!1,message:r.message}),t.dirty());else if(r.kind===`length`){let i=e.data.length>r.value,a=e.data.lengthe.test(t),{validation:t,code:z.invalid_string,...br.errToObj(n)})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}email(e){return this._addCheck({kind:`email`,...br.errToObj(e)})}url(e){return this._addCheck({kind:`url`,...br.errToObj(e)})}emoji(e){return this._addCheck({kind:`emoji`,...br.errToObj(e)})}uuid(e){return this._addCheck({kind:`uuid`,...br.errToObj(e)})}nanoid(e){return this._addCheck({kind:`nanoid`,...br.errToObj(e)})}cuid(e){return this._addCheck({kind:`cuid`,...br.errToObj(e)})}cuid2(e){return this._addCheck({kind:`cuid2`,...br.errToObj(e)})}ulid(e){return this._addCheck({kind:`ulid`,...br.errToObj(e)})}base64(e){return this._addCheck({kind:`base64`,...br.errToObj(e)})}ip(e){return this._addCheck({kind:`ip`,...br.errToObj(e)})}datetime(e){return typeof e==`string`?this._addCheck({kind:`datetime`,precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:`datetime`,precision:e?.precision===void 0?null:e?.precision,offset:e?.offset??!1,local:e?.local??!1,...br.errToObj(e?.message)})}date(e){return this._addCheck({kind:`date`,message:e})}time(e){return typeof e==`string`?this._addCheck({kind:`time`,precision:null,message:e}):this._addCheck({kind:`time`,precision:e?.precision===void 0?null:e?.precision,...br.errToObj(e?.message)})}duration(e){return this._addCheck({kind:`duration`,...br.errToObj(e)})}regex(e,t){return this._addCheck({kind:`regex`,regex:e,...br.errToObj(t)})}includes(e,t){return this._addCheck({kind:`includes`,value:e,position:t?.position,...br.errToObj(t?.message)})}startsWith(e,t){return this._addCheck({kind:`startsWith`,value:e,...br.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:`endsWith`,value:e,...br.errToObj(t)})}min(e,t){return this._addCheck({kind:`min`,value:e,...br.errToObj(t)})}max(e,t){return this._addCheck({kind:`max`,value:e,...br.errToObj(t)})}length(e,t){return this._addCheck({kind:`length`,value:e,...br.errToObj(t)})}nonempty(e){return this.min(1,br.errToObj(e))}trim(){return new e({...this._def,checks:[...this._def.checks,{kind:`trim`}]})}toLowerCase(){return new e({...this._def,checks:[...this._def.checks,{kind:`toLowerCase`}]})}toUpperCase(){return new e({...this._def,checks:[...this._def.checks,{kind:`toUpperCase`}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind===`datetime`)}get isDate(){return!!this._def.checks.find(e=>e.kind===`date`)}get isTime(){return!!this._def.checks.find(e=>e.kind===`time`)}get isDuration(){return!!this._def.checks.find(e=>e.kind===`duration`)}get isEmail(){return!!this._def.checks.find(e=>e.kind===`email`)}get isURL(){return!!this._def.checks.find(e=>e.kind===`url`)}get isEmoji(){return!!this._def.checks.find(e=>e.kind===`emoji`)}get isUUID(){return!!this._def.checks.find(e=>e.kind===`uuid`)}get isNANOID(){return!!this._def.checks.find(e=>e.kind===`nanoid`)}get isCUID(){return!!this._def.checks.find(e=>e.kind===`cuid`)}get isCUID2(){return!!this._def.checks.find(e=>e.kind===`cuid2`)}get isULID(){return!!this._def.checks.find(e=>e.kind===`ulid`)}get isIP(){return!!this._def.checks.find(e=>e.kind===`ip`)}get isBase64(){return!!this._def.checks.find(e=>e.kind===`base64`)}get minLength(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e}get maxLength(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.valuenew Gr({checks:[],typeName:Fi.ZodString,coerce:e?.coerce??!1,...Tr(e)});function Kr(e,t){let n=(e.toString().split(`.`)[1]||``).length,r=(t.toString().split(`.`)[1]||``).length,i=n>r?n:r;return parseInt(e.toFixed(i).replace(`.`,``))%parseInt(t.toFixed(i).replace(`.`,``))/10**i}var qr=class e extends Er{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==R.number){let t=this._getOrReturnCtx(e);return B(t,{code:z.invalid_type,expected:R.number,received:t.parsedType}),dr}let t,n=new ur;for(let r of this._def.checks)r.kind===`int`?$n.isInteger(e.data)||(t=this._getOrReturnCtx(e,t),B(t,{code:z.invalid_type,expected:`integer`,received:`float`,message:r.message}),n.dirty()):r.kind===`min`?(r.inclusive?e.datar.value:e.data>=r.value)&&(t=this._getOrReturnCtx(e,t),B(t,{code:z.too_big,maximum:r.value,type:`number`,inclusive:r.inclusive,exact:!1,message:r.message}),n.dirty()):r.kind===`multipleOf`?Kr(e.data,r.value)!==0&&(t=this._getOrReturnCtx(e,t),B(t,{code:z.not_multiple_of,multipleOf:r.value,message:r.message}),n.dirty()):r.kind===`finite`?Number.isFinite(e.data)||(t=this._getOrReturnCtx(e,t),B(t,{code:z.not_finite,message:r.message}),n.dirty()):$n.assertNever(r);return{status:n.value,value:e.data}}gte(e,t){return this.setLimit(`min`,e,!0,br.toString(t))}gt(e,t){return this.setLimit(`min`,e,!1,br.toString(t))}lte(e,t){return this.setLimit(`max`,e,!0,br.toString(t))}lt(e,t){return this.setLimit(`max`,e,!1,br.toString(t))}setLimit(t,n,r,i){return new e({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:br.toString(i)}]})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}int(e){return this._addCheck({kind:`int`,message:br.toString(e)})}positive(e){return this._addCheck({kind:`min`,value:0,inclusive:!1,message:br.toString(e)})}negative(e){return this._addCheck({kind:`max`,value:0,inclusive:!1,message:br.toString(e)})}nonpositive(e){return this._addCheck({kind:`max`,value:0,inclusive:!0,message:br.toString(e)})}nonnegative(e){return this._addCheck({kind:`min`,value:0,inclusive:!0,message:br.toString(e)})}multipleOf(e,t){return this._addCheck({kind:`multipleOf`,value:e,message:br.toString(t)})}finite(e){return this._addCheck({kind:`finite`,message:br.toString(e)})}safe(e){return this._addCheck({kind:`min`,inclusive:!0,value:-(2**53-1),message:br.toString(e)})._addCheck({kind:`max`,inclusive:!0,value:2**53-1,message:br.toString(e)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.valuee.kind===`int`||e.kind===`multipleOf`&&$n.isInteger(e.value))}get isFinite(){let e=null,t=null;for(let n of this._def.checks)if(n.kind===`finite`||n.kind===`int`||n.kind===`multipleOf`)return!0;else n.kind===`min`?(t===null||n.value>t)&&(t=n.value):n.kind===`max`&&(e===null||n.valuenew qr({checks:[],typeName:Fi.ZodNumber,coerce:e?.coerce||!1,...Tr(e)});var Jr=class e extends Er{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){if(this._def.coerce&&(e.data=BigInt(e.data)),this._getType(e)!==R.bigint){let t=this._getOrReturnCtx(e);return B(t,{code:z.invalid_type,expected:R.bigint,received:t.parsedType}),dr}let t,n=new ur;for(let r of this._def.checks)r.kind===`min`?(r.inclusive?e.datar.value:e.data>=r.value)&&(t=this._getOrReturnCtx(e,t),B(t,{code:z.too_big,type:`bigint`,maximum:r.value,inclusive:r.inclusive,message:r.message}),n.dirty()):r.kind===`multipleOf`?e.data%r.value!==BigInt(0)&&(t=this._getOrReturnCtx(e,t),B(t,{code:z.not_multiple_of,multipleOf:r.value,message:r.message}),n.dirty()):$n.assertNever(r);return{status:n.value,value:e.data}}gte(e,t){return this.setLimit(`min`,e,!0,br.toString(t))}gt(e,t){return this.setLimit(`min`,e,!1,br.toString(t))}lte(e,t){return this.setLimit(`max`,e,!0,br.toString(t))}lt(e,t){return this.setLimit(`max`,e,!1,br.toString(t))}setLimit(t,n,r,i){return new e({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:br.toString(i)}]})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}positive(e){return this._addCheck({kind:`min`,value:BigInt(0),inclusive:!1,message:br.toString(e)})}negative(e){return this._addCheck({kind:`max`,value:BigInt(0),inclusive:!1,message:br.toString(e)})}nonpositive(e){return this._addCheck({kind:`max`,value:BigInt(0),inclusive:!0,message:br.toString(e)})}nonnegative(e){return this._addCheck({kind:`min`,value:BigInt(0),inclusive:!0,message:br.toString(e)})}multipleOf(e,t){return this._addCheck({kind:`multipleOf`,value:e,message:br.toString(t)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.valuenew Jr({checks:[],typeName:Fi.ZodBigInt,coerce:e?.coerce??!1,...Tr(e)});var Yr=class extends Er{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==R.boolean){let t=this._getOrReturnCtx(e);return B(t,{code:z.invalid_type,expected:R.boolean,received:t.parsedType}),dr}return pr(e.data)}};Yr.create=e=>new Yr({typeName:Fi.ZodBoolean,coerce:e?.coerce||!1,...Tr(e)});var Xr=class e extends Er{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==R.date){let t=this._getOrReturnCtx(e);return B(t,{code:z.invalid_type,expected:R.date,received:t.parsedType}),dr}if(isNaN(e.data.getTime()))return B(this._getOrReturnCtx(e),{code:z.invalid_date}),dr;let t=new ur,n;for(let r of this._def.checks)r.kind===`min`?e.data.getTime()r.value&&(n=this._getOrReturnCtx(e,n),B(n,{code:z.too_big,message:r.message,inclusive:!0,exact:!1,maximum:r.value,type:`date`}),t.dirty()):$n.assertNever(r);return{status:t.value,value:new Date(e.data.getTime())}}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}min(e,t){return this._addCheck({kind:`min`,value:e.getTime(),message:br.toString(t)})}max(e,t){return this._addCheck({kind:`max`,value:e.getTime(),message:br.toString(t)})}get minDate(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e==null?null:new Date(e)}get maxDate(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.valuenew Xr({checks:[],coerce:e?.coerce||!1,typeName:Fi.ZodDate,...Tr(e)});var Zr=class extends Er{_parse(e){if(this._getType(e)!==R.symbol){let t=this._getOrReturnCtx(e);return B(t,{code:z.invalid_type,expected:R.symbol,received:t.parsedType}),dr}return pr(e.data)}};Zr.create=e=>new Zr({typeName:Fi.ZodSymbol,...Tr(e)});var Qr=class extends Er{_parse(e){if(this._getType(e)!==R.undefined){let t=this._getOrReturnCtx(e);return B(t,{code:z.invalid_type,expected:R.undefined,received:t.parsedType}),dr}return pr(e.data)}};Qr.create=e=>new Qr({typeName:Fi.ZodUndefined,...Tr(e)});var $r=class extends Er{_parse(e){if(this._getType(e)!==R.null){let t=this._getOrReturnCtx(e);return B(t,{code:z.invalid_type,expected:R.null,received:t.parsedType}),dr}return pr(e.data)}};$r.create=e=>new $r({typeName:Fi.ZodNull,...Tr(e)});var ei=class extends Er{constructor(){super(...arguments),this._any=!0}_parse(e){return pr(e.data)}};ei.create=e=>new ei({typeName:Fi.ZodAny,...Tr(e)});var ti=class extends Er{constructor(){super(...arguments),this._unknown=!0}_parse(e){return pr(e.data)}};ti.create=e=>new ti({typeName:Fi.ZodUnknown,...Tr(e)});var ni=class extends Er{_parse(e){let t=this._getOrReturnCtx(e);return B(t,{code:z.invalid_type,expected:R.never,received:t.parsedType}),dr}};ni.create=e=>new ni({typeName:Fi.ZodNever,...Tr(e)});var ri=class extends Er{_parse(e){if(this._getType(e)!==R.undefined){let t=this._getOrReturnCtx(e);return B(t,{code:z.invalid_type,expected:R.void,received:t.parsedType}),dr}return pr(e.data)}};ri.create=e=>new ri({typeName:Fi.ZodVoid,...Tr(e)});var ii=class e extends Er{_parse(e){let{ctx:t,status:n}=this._processInputParams(e),r=this._def;if(t.parsedType!==R.array)return B(t,{code:z.invalid_type,expected:R.array,received:t.parsedType}),dr;if(r.exactLength!==null){let e=t.data.length>r.exactLength.value,i=t.data.lengthr.maxLength.value&&(B(t,{code:z.too_big,maximum:r.maxLength.value,type:`array`,inclusive:!0,exact:!1,message:r.maxLength.message}),n.dirty()),t.common.async)return Promise.all([...t.data].map((e,n)=>r.type._parseAsync(new Cr(t,e,t.path,n)))).then(e=>ur.mergeArray(n,e));let i=[...t.data].map((e,n)=>r.type._parseSync(new Cr(t,e,t.path,n)));return ur.mergeArray(n,i)}get element(){return this._def.type}min(t,n){return new e({...this._def,minLength:{value:t,message:br.toString(n)}})}max(t,n){return new e({...this._def,maxLength:{value:t,message:br.toString(n)}})}length(t,n){return new e({...this._def,exactLength:{value:t,message:br.toString(n)}})}nonempty(e){return this.min(1,e)}};ii.create=(e,t)=>new ii({type:e,minLength:null,maxLength:null,exactLength:null,typeName:Fi.ZodArray,...Tr(t)});function ai(e){if(e instanceof oi){let t={};for(let n in e.shape){let r=e.shape[n];t[n]=wi.create(ai(r))}return new oi({...e._def,shape:()=>t})}else if(e instanceof ii)return new ii({...e._def,type:ai(e.element)});else if(e instanceof wi)return wi.create(ai(e.unwrap()));else if(e instanceof Ti)return Ti.create(ai(e.unwrap()));else if(e instanceof fi)return fi.create(e.items.map(e=>ai(e)));else return e}var oi=class e extends Er{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let e=this._def.shape(),t=$n.objectKeys(e);return this._cached={shape:e,keys:t}}_parse(e){if(this._getType(e)!==R.object){let t=this._getOrReturnCtx(e);return B(t,{code:z.invalid_type,expected:R.object,received:t.parsedType}),dr}let{status:t,ctx:n}=this._processInputParams(e),{shape:r,keys:i}=this._getCached(),a=[];if(!(this._def.catchall instanceof ni&&this._def.unknownKeys===`strip`))for(let e in n.data)i.includes(e)||a.push(e);let o=[];for(let e of i){let t=r[e],i=n.data[e];o.push({key:{status:`valid`,value:e},value:t._parse(new Cr(n,i,n.path,e)),alwaysSet:e in n.data})}if(this._def.catchall instanceof ni){let e=this._def.unknownKeys;if(e===`passthrough`)for(let e of a)o.push({key:{status:`valid`,value:e},value:{status:`valid`,value:n.data[e]}});else if(e===`strict`)a.length>0&&(B(n,{code:z.unrecognized_keys,keys:a}),t.dirty());else if(e!==`strip`)throw Error(`Internal ZodObject error: invalid unknownKeys value.`)}else{let e=this._def.catchall;for(let t of a){let r=n.data[t];o.push({key:{status:`valid`,value:t},value:e._parse(new Cr(n,r,n.path,t)),alwaysSet:t in n.data})}}return n.common.async?Promise.resolve().then(async()=>{let e=[];for(let t of o){let n=await t.key,r=await t.value;e.push({key:n,value:r,alwaysSet:t.alwaysSet})}return e}).then(e=>ur.mergeObjectSync(t,e)):ur.mergeObjectSync(t,o)}get shape(){return this._def.shape()}strict(t){return br.errToObj,new e({...this._def,unknownKeys:`strict`,...t===void 0?{}:{errorMap:(e,n)=>{var r;let i=(r=this._def).errorMap?.call(r,e,n).message??n.defaultError;return e.code===`unrecognized_keys`?{message:br.errToObj(t).message??i}:{message:i}}}})}strip(){return new e({...this._def,unknownKeys:`strip`})}passthrough(){return new e({...this._def,unknownKeys:`passthrough`})}extend(t){return new e({...this._def,shape:()=>({...this._def.shape(),...t})})}merge(t){return new e({unknownKeys:t._def.unknownKeys,catchall:t._def.catchall,shape:()=>({...this._def.shape(),...t._def.shape()}),typeName:Fi.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(t){return new e({...this._def,catchall:t})}pick(t){let n={};return $n.objectKeys(t).forEach(e=>{t[e]&&this.shape[e]&&(n[e]=this.shape[e])}),new e({...this._def,shape:()=>n})}omit(t){let n={};return $n.objectKeys(this.shape).forEach(e=>{t[e]||(n[e]=this.shape[e])}),new e({...this._def,shape:()=>n})}deepPartial(){return ai(this)}partial(t){let n={};return $n.objectKeys(this.shape).forEach(e=>{let r=this.shape[e];t&&!t[e]?n[e]=r:n[e]=r.optional()}),new e({...this._def,shape:()=>n})}required(t){let n={};return $n.objectKeys(this.shape).forEach(e=>{if(t&&!t[e])n[e]=this.shape[e];else{let t=this.shape[e];for(;t instanceof wi;)t=t._def.innerType;n[e]=t}}),new e({...this._def,shape:()=>n})}keyof(){return yi($n.objectKeys(this.shape))}};oi.create=(e,t)=>new oi({shape:()=>e,unknownKeys:`strip`,catchall:ni.create(),typeName:Fi.ZodObject,...Tr(t)}),oi.strictCreate=(e,t)=>new oi({shape:()=>e,unknownKeys:`strict`,catchall:ni.create(),typeName:Fi.ZodObject,...Tr(t)}),oi.lazycreate=(e,t)=>new oi({shape:e,unknownKeys:`strip`,catchall:ni.create(),typeName:Fi.ZodObject,...Tr(t)});var si=class extends Er{_parse(e){let{ctx:t}=this._processInputParams(e),n=this._def.options;function r(e){for(let t of e)if(t.result.status===`valid`)return t.result;for(let n of e)if(n.result.status===`dirty`)return t.common.issues.push(...n.ctx.common.issues),n.result;let n=e.map(e=>new rr(e.ctx.common.issues));return B(t,{code:z.invalid_union,unionErrors:n}),dr}if(t.common.async)return Promise.all(n.map(async e=>{let n={...t,common:{...t.common,issues:[]},parent:null};return{result:await e._parseAsync({data:t.data,path:t.path,parent:n}),ctx:n}})).then(r);{let e,r=[];for(let i of n){let n={...t,common:{...t.common,issues:[]},parent:null},a=i._parseSync({data:t.data,path:t.path,parent:n});if(a.status===`valid`)return a;a.status===`dirty`&&!e&&(e={result:a,ctx:n}),n.common.issues.length&&r.push(n.common.issues)}if(e)return t.common.issues.push(...e.ctx.common.issues),e.result;let i=r.map(e=>new rr(e));return B(t,{code:z.invalid_union,unionErrors:i}),dr}}get options(){return this._def.options}};si.create=(e,t)=>new si({options:e,typeName:Fi.ZodUnion,...Tr(t)});var ci=e=>e instanceof _i?ci(e.schema):e instanceof Ci?ci(e.innerType()):e instanceof vi?[e.value]:e instanceof bi?e.options:e instanceof xi?$n.objectValues(e.enum):e instanceof Ei?ci(e._def.innerType):e instanceof Qr?[void 0]:e instanceof $r?[null]:e instanceof wi?[void 0,...ci(e.unwrap())]:e instanceof Ti?[null,...ci(e.unwrap())]:e instanceof Ai||e instanceof Mi?ci(e.unwrap()):e instanceof Di?ci(e._def.innerType):[],li=class e extends Er{_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==R.object)return B(t,{code:z.invalid_type,expected:R.object,received:t.parsedType}),dr;let n=this.discriminator,r=t.data[n],i=this.optionsMap.get(r);return i?t.common.async?i._parseAsync({data:t.data,path:t.path,parent:t}):i._parseSync({data:t.data,path:t.path,parent:t}):(B(t,{code:z.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[n]}),dr)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(t,n,r){let i=new Map;for(let e of n){let n=ci(e.shape[t]);if(!n.length)throw Error(`A discriminator value for key \`${t}\` could not be extracted from all schema options`);for(let r of n){if(i.has(r))throw Error(`Discriminator property ${String(t)} has duplicate value ${String(r)}`);i.set(r,e)}}return new e({typeName:Fi.ZodDiscriminatedUnion,discriminator:t,options:n,optionsMap:i,...Tr(r)})}};function ui(e,t){let n=tr(e),r=tr(t);if(e===t)return{valid:!0,data:e};if(n===R.object&&r===R.object){let n=$n.objectKeys(t),r=$n.objectKeys(e).filter(e=>n.indexOf(e)!==-1),i={...e,...t};for(let n of r){let r=ui(e[n],t[n]);if(!r.valid)return{valid:!1};i[n]=r.data}return{valid:!0,data:i}}else if(n===R.array&&r===R.array){if(e.length!==t.length)return{valid:!1};let n=[];for(let r=0;r{if(mr(e)||mr(r))return dr;let i=ui(e.value,r.value);return i.valid?((hr(e)||hr(r))&&t.dirty(),{status:t.value,value:i.data}):(B(n,{code:z.invalid_intersection_types}),dr)};return n.common.async?Promise.all([this._def.left._parseAsync({data:n.data,path:n.path,parent:n}),this._def.right._parseAsync({data:n.data,path:n.path,parent:n})]).then(([e,t])=>r(e,t)):r(this._def.left._parseSync({data:n.data,path:n.path,parent:n}),this._def.right._parseSync({data:n.data,path:n.path,parent:n}))}};di.create=(e,t,n)=>new di({left:e,right:t,typeName:Fi.ZodIntersection,...Tr(n)});var fi=class e extends Er{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==R.array)return B(n,{code:z.invalid_type,expected:R.array,received:n.parsedType}),dr;if(n.data.lengththis._def.items.length&&(B(n,{code:z.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:`array`}),t.dirty());let r=[...n.data].map((e,t)=>{let r=this._def.items[t]||this._def.rest;return r?r._parse(new Cr(n,e,n.path,t)):null}).filter(e=>!!e);return n.common.async?Promise.all(r).then(e=>ur.mergeArray(t,e)):ur.mergeArray(t,r)}get items(){return this._def.items}rest(t){return new e({...this._def,rest:t})}};fi.create=(e,t)=>{if(!Array.isArray(e))throw Error(`You must pass an array of schemas to z.tuple([ ... ])`);return new fi({items:e,typeName:Fi.ZodTuple,rest:null,...Tr(t)})};var pi=class e extends Er{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==R.object)return B(n,{code:z.invalid_type,expected:R.object,received:n.parsedType}),dr;let r=[],i=this._def.keyType,a=this._def.valueType;for(let e in n.data)r.push({key:i._parse(new Cr(n,e,n.path,e)),value:a._parse(new Cr(n,n.data[e],n.path,e)),alwaysSet:e in n.data});return n.common.async?ur.mergeObjectAsync(t,r):ur.mergeObjectSync(t,r)}get element(){return this._def.valueType}static create(t,n,r){return n instanceof Er?new e({keyType:t,valueType:n,typeName:Fi.ZodRecord,...Tr(r)}):new e({keyType:Gr.create(),valueType:t,typeName:Fi.ZodRecord,...Tr(n)})}},mi=class extends Er{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==R.map)return B(n,{code:z.invalid_type,expected:R.map,received:n.parsedType}),dr;let r=this._def.keyType,i=this._def.valueType,a=[...n.data.entries()].map(([e,t],a)=>({key:r._parse(new Cr(n,e,n.path,[a,`key`])),value:i._parse(new Cr(n,t,n.path,[a,`value`]))}));if(n.common.async){let e=new Map;return Promise.resolve().then(async()=>{for(let n of a){let r=await n.key,i=await n.value;if(r.status===`aborted`||i.status===`aborted`)return dr;(r.status===`dirty`||i.status===`dirty`)&&t.dirty(),e.set(r.value,i.value)}return{status:t.value,value:e}})}else{let e=new Map;for(let n of a){let r=n.key,i=n.value;if(r.status===`aborted`||i.status===`aborted`)return dr;(r.status===`dirty`||i.status===`dirty`)&&t.dirty(),e.set(r.value,i.value)}return{status:t.value,value:e}}}};mi.create=(e,t,n)=>new mi({valueType:t,keyType:e,typeName:Fi.ZodMap,...Tr(n)});var hi=class e extends Er{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==R.set)return B(n,{code:z.invalid_type,expected:R.set,received:n.parsedType}),dr;let r=this._def;r.minSize!==null&&n.data.sizer.maxSize.value&&(B(n,{code:z.too_big,maximum:r.maxSize.value,type:`set`,inclusive:!0,exact:!1,message:r.maxSize.message}),t.dirty());let i=this._def.valueType;function a(e){let n=new Set;for(let r of e){if(r.status===`aborted`)return dr;r.status===`dirty`&&t.dirty(),n.add(r.value)}return{status:t.value,value:n}}let o=[...n.data.values()].map((e,t)=>i._parse(new Cr(n,e,n.path,t)));return n.common.async?Promise.all(o).then(e=>a(e)):a(o)}min(t,n){return new e({...this._def,minSize:{value:t,message:br.toString(n)}})}max(t,n){return new e({...this._def,maxSize:{value:t,message:br.toString(n)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}};hi.create=(e,t)=>new hi({valueType:e,minSize:null,maxSize:null,typeName:Fi.ZodSet,...Tr(t)});var gi=class e extends Er{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==R.function)return B(t,{code:z.invalid_type,expected:R.function,received:t.parsedType}),dr;function n(e,n){return cr({data:e,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,sr(),ir].filter(e=>!!e),issueData:{code:z.invalid_arguments,argumentsError:n}})}function r(e,n){return cr({data:e,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,sr(),ir].filter(e=>!!e),issueData:{code:z.invalid_return_type,returnTypeError:n}})}let i={errorMap:t.common.contextualErrorMap},a=t.data;if(this._def.returns instanceof Si){let e=this;return pr(async function(...t){let o=new rr([]),s=await e._def.args.parseAsync(t,i).catch(e=>{throw o.addIssue(n(t,e)),o}),c=await Reflect.apply(a,this,s);return await e._def.returns._def.type.parseAsync(c,i).catch(e=>{throw o.addIssue(r(c,e)),o})})}else{let e=this;return pr(function(...t){let o=e._def.args.safeParse(t,i);if(!o.success)throw new rr([n(t,o.error)]);let s=Reflect.apply(a,this,o.data),c=e._def.returns.safeParse(s,i);if(!c.success)throw new rr([r(s,c.error)]);return c.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...t){return new e({...this._def,args:fi.create(t).rest(ti.create())})}returns(t){return new e({...this._def,returns:t})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(t,n,r){return new e({args:t||fi.create([]).rest(ti.create()),returns:n||ti.create(),typeName:Fi.ZodFunction,...Tr(r)})}},_i=class extends Er{get schema(){return this._def.getter()}_parse(e){let{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}};_i.create=(e,t)=>new _i({getter:e,typeName:Fi.ZodLazy,...Tr(t)});var vi=class extends Er{_parse(e){if(e.data!==this._def.value){let t=this._getOrReturnCtx(e);return B(t,{received:t.data,code:z.invalid_literal,expected:this._def.value}),dr}return{status:`valid`,value:e.data}}get value(){return this._def.value}};vi.create=(e,t)=>new vi({value:e,typeName:Fi.ZodLiteral,...Tr(t)});function yi(e,t){return new bi({values:e,typeName:Fi.ZodEnum,...Tr(t)})}var bi=class e extends Er{constructor(){super(...arguments),xr.set(this,void 0)}_parse(e){if(typeof e.data!=`string`){let t=this._getOrReturnCtx(e),n=this._def.values;return B(t,{expected:$n.joinValues(n),received:t.parsedType,code:z.invalid_type}),dr}if(vr(this,xr)||yr(this,xr,new Set(this._def.values)),!vr(this,xr).has(e.data)){let t=this._getOrReturnCtx(e),n=this._def.values;return B(t,{received:t.data,code:z.invalid_enum_value,options:n}),dr}return pr(e.data)}get options(){return this._def.values}get enum(){let e={};for(let t of this._def.values)e[t]=t;return e}get Values(){let e={};for(let t of this._def.values)e[t]=t;return e}get Enum(){let e={};for(let t of this._def.values)e[t]=t;return e}extract(t,n=this._def){return e.create(t,{...this._def,...n})}exclude(t,n=this._def){return e.create(this.options.filter(e=>!t.includes(e)),{...this._def,...n})}};xr=new WeakMap,bi.create=yi;var xi=class extends Er{constructor(){super(...arguments),Sr.set(this,void 0)}_parse(e){let t=$n.getValidEnumValues(this._def.values),n=this._getOrReturnCtx(e);if(n.parsedType!==R.string&&n.parsedType!==R.number){let e=$n.objectValues(t);return B(n,{expected:$n.joinValues(e),received:n.parsedType,code:z.invalid_type}),dr}if(vr(this,Sr)||yr(this,Sr,new Set($n.getValidEnumValues(this._def.values))),!vr(this,Sr).has(e.data)){let e=$n.objectValues(t);return B(n,{received:n.data,code:z.invalid_enum_value,options:e}),dr}return pr(e.data)}get enum(){return this._def.values}};Sr=new WeakMap,xi.create=(e,t)=>new xi({values:e,typeName:Fi.ZodNativeEnum,...Tr(t)});var Si=class extends Er{unwrap(){return this._def.type}_parse(e){let{ctx:t}=this._processInputParams(e);return t.parsedType!==R.promise&&t.common.async===!1?(B(t,{code:z.invalid_type,expected:R.promise,received:t.parsedType}),dr):pr((t.parsedType===R.promise?t.data:Promise.resolve(t.data)).then(e=>this._def.type.parseAsync(e,{path:t.path,errorMap:t.common.contextualErrorMap})))}};Si.create=(e,t)=>new Si({type:e,typeName:Fi.ZodPromise,...Tr(t)});var Ci=class extends Er{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===Fi.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:t,ctx:n}=this._processInputParams(e),r=this._def.effect||null,i={addIssue:e=>{B(n,e),e.fatal?t.abort():t.dirty()},get path(){return n.path}};if(i.addIssue=i.addIssue.bind(i),r.type===`preprocess`){let e=r.transform(n.data,i);if(n.common.async)return Promise.resolve(e).then(async e=>{if(t.value===`aborted`)return dr;let r=await this._def.schema._parseAsync({data:e,path:n.path,parent:n});return r.status===`aborted`?dr:r.status===`dirty`||t.value===`dirty`?fr(r.value):r});{if(t.value===`aborted`)return dr;let r=this._def.schema._parseSync({data:e,path:n.path,parent:n});return r.status===`aborted`?dr:r.status===`dirty`||t.value===`dirty`?fr(r.value):r}}if(r.type===`refinement`){let e=e=>{let t=r.refinement(e,i);if(n.common.async)return Promise.resolve(t);if(t instanceof Promise)throw Error(`Async refinement encountered during synchronous parse operation. Use .parseAsync instead.`);return e};if(n.common.async===!1){let r=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});return r.status===`aborted`?dr:(r.status===`dirty`&&t.dirty(),e(r.value),{status:t.value,value:r.value})}else return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(n=>n.status===`aborted`?dr:(n.status===`dirty`&&t.dirty(),e(n.value).then(()=>({status:t.value,value:n.value}))))}if(r.type===`transform`)if(n.common.async===!1){let e=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});if(!gr(e))return e;let a=r.transform(e.value,i);if(a instanceof Promise)throw Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);return{status:t.value,value:a}}else return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(e=>gr(e)?Promise.resolve(r.transform(e.value,i)).then(e=>({status:t.value,value:e})):e);$n.assertNever(r)}};Ci.create=(e,t,n)=>new Ci({schema:e,typeName:Fi.ZodEffects,effect:t,...Tr(n)}),Ci.createWithPreprocess=(e,t,n)=>new Ci({schema:t,effect:{type:`preprocess`,transform:e},typeName:Fi.ZodEffects,...Tr(n)});var wi=class extends Er{_parse(e){return this._getType(e)===R.undefined?pr(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};wi.create=(e,t)=>new wi({innerType:e,typeName:Fi.ZodOptional,...Tr(t)});var Ti=class extends Er{_parse(e){return this._getType(e)===R.null?pr(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};Ti.create=(e,t)=>new Ti({innerType:e,typeName:Fi.ZodNullable,...Tr(t)});var Ei=class extends Er{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return t.parsedType===R.undefined&&(n=this._def.defaultValue()),this._def.innerType._parse({data:n,path:t.path,parent:t})}removeDefault(){return this._def.innerType}};Ei.create=(e,t)=>new Ei({innerType:e,typeName:Fi.ZodDefault,defaultValue:typeof t.default==`function`?t.default:()=>t.default,...Tr(t)});var Di=class extends Er{_parse(e){let{ctx:t}=this._processInputParams(e),n={...t,common:{...t.common,issues:[]}},r=this._def.innerType._parse({data:n.data,path:n.path,parent:{...n}});return _r(r)?r.then(e=>({status:`valid`,value:e.status===`valid`?e.value:this._def.catchValue({get error(){return new rr(n.common.issues)},input:n.data})})):{status:`valid`,value:r.status===`valid`?r.value:this._def.catchValue({get error(){return new rr(n.common.issues)},input:n.data})}}removeCatch(){return this._def.innerType}};Di.create=(e,t)=>new Di({innerType:e,typeName:Fi.ZodCatch,catchValue:typeof t.catch==`function`?t.catch:()=>t.catch,...Tr(t)});var Oi=class extends Er{_parse(e){if(this._getType(e)!==R.nan){let t=this._getOrReturnCtx(e);return B(t,{code:z.invalid_type,expected:R.nan,received:t.parsedType}),dr}return{status:`valid`,value:e.data}}};Oi.create=e=>new Oi({typeName:Fi.ZodNaN,...Tr(e)});var ki=Symbol(`zod_brand`),Ai=class extends Er{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return this._def.type._parse({data:n,path:t.path,parent:t})}unwrap(){return this._def.type}},ji=class e extends Er{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.common.async)return(async()=>{let e=await this._def.in._parseAsync({data:n.data,path:n.path,parent:n});return e.status===`aborted`?dr:e.status===`dirty`?(t.dirty(),fr(e.value)):this._def.out._parseAsync({data:e.value,path:n.path,parent:n})})();{let e=this._def.in._parseSync({data:n.data,path:n.path,parent:n});return e.status===`aborted`?dr:e.status===`dirty`?(t.dirty(),{status:`dirty`,value:e.value}):this._def.out._parseSync({data:e.value,path:n.path,parent:n})}}static create(t,n){return new e({in:t,out:n,typeName:Fi.ZodPipeline})}},Mi=class extends Er{_parse(e){let t=this._def.innerType._parse(e),n=e=>(gr(e)&&(e.value=Object.freeze(e.value)),e);return _r(t)?t.then(e=>n(e)):n(t)}unwrap(){return this._def.innerType}};Mi.create=(e,t)=>new Mi({innerType:e,typeName:Fi.ZodReadonly,...Tr(t)});function Ni(e,t={},n){return e?ei.create().superRefine((r,i)=>{if(!e(r)){let e=typeof t==`function`?t(r):typeof t==`string`?{message:t}:t,a=e.fatal??n??!0,o=typeof e==`string`?{message:e}:e;i.addIssue({code:`custom`,...o,fatal:a})}}):ei.create()}var Pi={object:oi.lazycreate},Fi;(function(e){e.ZodString=`ZodString`,e.ZodNumber=`ZodNumber`,e.ZodNaN=`ZodNaN`,e.ZodBigInt=`ZodBigInt`,e.ZodBoolean=`ZodBoolean`,e.ZodDate=`ZodDate`,e.ZodSymbol=`ZodSymbol`,e.ZodUndefined=`ZodUndefined`,e.ZodNull=`ZodNull`,e.ZodAny=`ZodAny`,e.ZodUnknown=`ZodUnknown`,e.ZodNever=`ZodNever`,e.ZodVoid=`ZodVoid`,e.ZodArray=`ZodArray`,e.ZodObject=`ZodObject`,e.ZodUnion=`ZodUnion`,e.ZodDiscriminatedUnion=`ZodDiscriminatedUnion`,e.ZodIntersection=`ZodIntersection`,e.ZodTuple=`ZodTuple`,e.ZodRecord=`ZodRecord`,e.ZodMap=`ZodMap`,e.ZodSet=`ZodSet`,e.ZodFunction=`ZodFunction`,e.ZodLazy=`ZodLazy`,e.ZodLiteral=`ZodLiteral`,e.ZodEnum=`ZodEnum`,e.ZodEffects=`ZodEffects`,e.ZodNativeEnum=`ZodNativeEnum`,e.ZodOptional=`ZodOptional`,e.ZodNullable=`ZodNullable`,e.ZodDefault=`ZodDefault`,e.ZodCatch=`ZodCatch`,e.ZodPromise=`ZodPromise`,e.ZodBranded=`ZodBranded`,e.ZodPipeline=`ZodPipeline`,e.ZodReadonly=`ZodReadonly`})(Fi||={});var Ii=(e,t={message:`Input not instance of ${e.name}`})=>Ni(t=>t instanceof e,t),V=Gr.create,Li=qr.create,Ri=Oi.create,zi=Jr.create,Bi=Yr.create,Vi=Xr.create,Hi=Zr.create,Ui=Qr.create,Wi=$r.create,Gi=ei.create,Ki=ti.create,qi=ni.create,Ji=ri.create,Yi=ii.create,H=oi.create,Xi=oi.strictCreate,Zi=si.create,Qi=li.create,$i=di.create,ea=fi.create,ta=pi.create,na=mi.create,ra=hi.create,ia=gi.create,aa=_i.create,oa=vi.create,sa=bi.create,ca=xi.create,la=Si.create,ua=Ci.create,da=wi.create,fa=Ti.create,pa=Ci.createWithPreprocess,ma=ji.create,U=Object.freeze({__proto__:null,defaultErrorMap:ir,setErrorMap:or,getErrorMap:sr,makeIssue:cr,EMPTY_PATH:lr,addIssueToContext:B,ParseStatus:ur,INVALID:dr,DIRTY:fr,OK:pr,isAborted:mr,isDirty:hr,isValid:gr,isAsync:_r,get util(){return $n},get objectUtil(){return er},ZodParsedType:R,getParsedType:tr,ZodType:Er,datetimeRegex:Ur,ZodString:Gr,ZodNumber:qr,ZodBigInt:Jr,ZodBoolean:Yr,ZodDate:Xr,ZodSymbol:Zr,ZodUndefined:Qr,ZodNull:$r,ZodAny:ei,ZodUnknown:ti,ZodNever:ni,ZodVoid:ri,ZodArray:ii,ZodObject:oi,ZodUnion:si,ZodDiscriminatedUnion:li,ZodIntersection:di,ZodTuple:fi,ZodRecord:pi,ZodMap:mi,ZodSet:hi,ZodFunction:gi,ZodLazy:_i,ZodLiteral:vi,ZodEnum:bi,ZodNativeEnum:xi,ZodPromise:Si,ZodEffects:Ci,ZodTransformer:Ci,ZodOptional:wi,ZodNullable:Ti,ZodDefault:Ei,ZodCatch:Di,ZodNaN:Oi,BRAND:ki,ZodBranded:Ai,ZodPipeline:ji,ZodReadonly:Mi,custom:Ni,Schema:Er,ZodSchema:Er,late:Pi,get ZodFirstPartyTypeKind(){return Fi},coerce:{string:(e=>Gr.create({...e,coerce:!0})),number:(e=>qr.create({...e,coerce:!0})),boolean:(e=>Yr.create({...e,coerce:!0})),bigint:(e=>Jr.create({...e,coerce:!0})),date:(e=>Xr.create({...e,coerce:!0}))},any:Gi,array:Yi,bigint:zi,boolean:Bi,date:Vi,discriminatedUnion:Qi,effect:ua,enum:sa,function:ia,instanceof:Ii,intersection:$i,lazy:aa,literal:oa,map:na,nan:Ri,nativeEnum:ca,never:qi,null:Wi,nullable:fa,number:Li,object:H,oboolean:()=>Bi().optional(),onumber:()=>Li().optional(),optional:da,ostring:()=>V().optional(),pipeline:ma,preprocess:pa,promise:la,record:ta,set:ra,strictObject:Xi,string:V,symbol:Hi,transformer:ua,tuple:ea,undefined:Ui,union:Zi,unknown:Ki,void:Ji,NEVER:dr,ZodIssueCode:z,quotelessJson:nr,ZodError:rr}),ha={exports:{}},ga;function _a(){return ga?ha.exports:(ga=1,(function(e){var t=(function(e){var n=1e7,r=9007199254740992,i=f(r),a=`0123456789abcdefghijklmnopqrstuvwxyz`,o=typeof BigInt==`function`;function s(e,t,n,r){return e===void 0?s[0]:t===void 0||+t==10&&!n?I(e):he(e,t,n,r)}function c(e,t){this.value=e,this.sign=t,this.isSmall=!1}c.prototype=Object.create(s.prototype);function l(e){this.value=e,this.sign=e<0,this.isSmall=!0}l.prototype=Object.create(s.prototype);function u(e){this.value=e}u.prototype=Object.create(s.prototype);function d(e){return-r0?Math.floor(e):Math.ceil(e)}function _(e,t){var r=e.length,i=t.length,a=Array(r),o=0,s=n,c,l;for(l=0;l=s),a[l]=c-o*s;for(;l0&&a.push(o),a}function v(e,t){return e.length>=t.length?_(e,t):_(t,e)}function y(e,t){var r=e.length,i=Array(r),a=n,o,s;for(s=0;s0;)i[s++]=t%a,t=Math.floor(t/a);return i}c.prototype.add=function(e){var t=I(e);if(this.sign!==t.sign)return this.subtract(t.negate());var n=this.value,r=t.value;return t.isSmall?new c(y(n,Math.abs(r)),this.sign):new c(v(n,r),this.sign)},c.prototype.plus=c.prototype.add,l.prototype.add=function(e){var t=I(e),n=this.value;if(n<0!==t.sign)return this.subtract(t.negate());var r=t.value;if(t.isSmall){if(d(n+r))return new l(n+r);r=f(Math.abs(r))}return new c(y(r,Math.abs(n)),n<0)},l.prototype.plus=l.prototype.add,u.prototype.add=function(e){return new u(this.value+I(e).value)},u.prototype.plus=u.prototype.add;function b(e,t){var r=e.length,i=t.length,a=Array(r),o=0,s=n,c,l;for(c=0;c=0?r=b(e,t):(r=b(t,e),n=!n),r=p(r),typeof r==`number`?(n&&(r=-r),new l(r)):new c(r,n)}function S(e,t,r){var i=e.length,a=Array(i),o=-t,s=n,u,d;for(u=0;u=0)},l.prototype.minus=l.prototype.subtract,u.prototype.subtract=function(e){return new u(this.value-I(e).value)},u.prototype.minus=u.prototype.subtract,c.prototype.negate=function(){return new c(this.value,!this.sign)},l.prototype.negate=function(){var e=this.sign,t=new l(-this.value);return t.sign=!e,t},u.prototype.negate=function(){return new u(-this.value)},c.prototype.abs=function(){return new c(this.value,!1)},l.prototype.abs=function(){return new l(Math.abs(this.value))},u.prototype.abs=function(){return new u(this.value>=0?this.value:-this.value)};function C(e,t){var r=e.length,i=t.length,a=h(r+i),o=n,s,c,l,u,d;for(l=0;l0;)i[c++]=o%a,o=Math.floor(o/a);return i}function T(e,t){for(var n=[];t-->0;)n.push(0);return n.concat(e)}function E(e,t){var n=Math.max(e.length,t.length);if(n<=30)return C(e,t);n=Math.ceil(n/2);var r=e.slice(n),i=e.slice(0,n),a=t.slice(n),o=t.slice(0,n),s=E(i,o),c=E(r,a),l=v(v(s,T(b(b(E(v(i,r),v(o,a)),s),c),n)),T(c,2*n));return m(l),l}function D(e,t){return-.012*e-.012*t+15e-6*e*t>0}c.prototype.multiply=function(e){var t=I(e),r=this.value,i=t.value,a=this.sign!==t.sign,o;if(t.isSmall){if(i===0)return s[0];if(i===1)return this;if(i===-1)return this.negate();if(o=Math.abs(i),o=0;f--){for(d=a-1,l[f+i]!==s&&(d=Math.floor((l[f+i]*a+l[f+i-1])/s)),m=0,g=0,v=u.length,_=0;_i&&(u=(u+1)*s),c=Math.ceil(u/d);do{if(f=w(t,c),re(f,o)<=0)break;c--}while(c);a.push(c),o=b(o,f)}return a.reverse(),[p(a),p(o)]}function ne(e,t){var r=e.length,i=h(r),a=n,o,s,c=0,l;for(o=r-1;o>=0;--o)l=c*a+e[o],s=g(l/t),c=l-s*t,i[o]=s|0;return[i,c|0]}function A(e,t){var r,i=I(t);if(o)return[new u(e.value/i.value),new u(e.value%i.value)];var a=e.value,d=i.value,m;if(d===0)throw Error(`Cannot divide by zero`);if(e.isSmall)return i.isSmall?[new l(g(a/d)),new l(a%d)]:[s[0],e];if(i.isSmall){if(d===1)return[e,s[0]];if(d==-1)return[e.negate(),s[0]];var h=Math.abs(d);if(ht.length?1:-1;for(var n=e.length-1;n>=0;n--)if(e[n]!==t[n])return e[n]>t[n]?1:-1;return 0}c.prototype.compareAbs=function(e){var t=I(e),n=this.value,r=t.value;return t.isSmall?1:re(n,r)},l.prototype.compareAbs=function(e){var t=I(e),n=Math.abs(this.value),r=t.value;return t.isSmall?(r=Math.abs(r),n===r?0:n>r?1:-1):-1},u.prototype.compareAbs=function(e){var t=this.value,n=I(e).value;return t=t>=0?t:-t,n=n>=0?n:-n,t===n?0:t>n?1:-1},c.prototype.compare=function(e){if(e===1/0)return-1;if(e===-1/0)return 1;var t=I(e),n=this.value,r=t.value;return this.sign===t.sign?t.isSmall?this.sign?-1:1:re(n,r)*(this.sign?-1:1):t.sign?1:-1},c.prototype.compareTo=c.prototype.compare,l.prototype.compare=function(e){if(e===1/0)return-1;if(e===-1/0)return 1;var t=I(e),n=this.value,r=t.value;return t.isSmall?n==r?0:n>r?1:-1:n<0===t.sign?n<0?1:-1:n<0?-1:1},l.prototype.compareTo=l.prototype.compare,u.prototype.compare=function(e){if(e===1/0)return-1;if(e===-1/0)return 1;var t=this.value,n=I(e).value;return t===n?0:t>n?1:-1},u.prototype.compareTo=u.prototype.compare,c.prototype.equals=function(e){return this.compare(e)===0},u.prototype.eq=u.prototype.equals=l.prototype.eq=l.prototype.equals=c.prototype.eq=c.prototype.equals,c.prototype.notEquals=function(e){return this.compare(e)!==0},u.prototype.neq=u.prototype.notEquals=l.prototype.neq=l.prototype.notEquals=c.prototype.neq=c.prototype.notEquals,c.prototype.greater=function(e){return this.compare(e)>0},u.prototype.gt=u.prototype.greater=l.prototype.gt=l.prototype.greater=c.prototype.gt=c.prototype.greater,c.prototype.lesser=function(e){return this.compare(e)<0},u.prototype.lt=u.prototype.lesser=l.prototype.lt=l.prototype.lesser=c.prototype.lt=c.prototype.lesser,c.prototype.greaterOrEquals=function(e){return this.compare(e)>=0},u.prototype.geq=u.prototype.greaterOrEquals=l.prototype.geq=l.prototype.greaterOrEquals=c.prototype.geq=c.prototype.greaterOrEquals,c.prototype.lesserOrEquals=function(e){return this.compare(e)<=0},u.prototype.leq=u.prototype.lesserOrEquals=l.prototype.leq=l.prototype.lesserOrEquals=c.prototype.leq=c.prototype.lesserOrEquals,c.prototype.isEven=function(){return(this.value[0]&1)==0},l.prototype.isEven=function(){return(this.value&1)==0},u.prototype.isEven=function(){return(this.value&BigInt(1))===BigInt(0)},c.prototype.isOdd=function(){return(this.value[0]&1)==1},l.prototype.isOdd=function(){return(this.value&1)==1},u.prototype.isOdd=function(){return(this.value&BigInt(1))===BigInt(1)},c.prototype.isPositive=function(){return!this.sign},l.prototype.isPositive=function(){return this.value>0},u.prototype.isPositive=l.prototype.isPositive,c.prototype.isNegative=function(){return this.sign},l.prototype.isNegative=function(){return this.value<0},u.prototype.isNegative=l.prototype.isNegative,c.prototype.isUnit=function(){return!1},l.prototype.isUnit=function(){return Math.abs(this.value)===1},u.prototype.isUnit=function(){return this.abs().value===BigInt(1)},c.prototype.isZero=function(){return!1},l.prototype.isZero=function(){return this.value===0},u.prototype.isZero=function(){return this.value===BigInt(0)},c.prototype.isDivisibleBy=function(e){var t=I(e);return t.isZero()?!1:t.isUnit()?!0:t.compareAbs(2)===0?this.isEven():this.mod(t).isZero()},u.prototype.isDivisibleBy=l.prototype.isDivisibleBy=c.prototype.isDivisibleBy;function ie(e){var t=e.abs();if(t.isUnit())return!1;if(t.equals(2)||t.equals(3)||t.equals(5))return!0;if(t.isEven()||t.isDivisibleBy(3)||t.isDivisibleBy(5))return!1;if(t.lesser(49))return!0}function ae(e,n){for(var r=e.prev(),i=r,a=0,o,s,c;i.isEven();)i=i.divide(2),a++;next:for(s=0;s-r?new l(e-1):new c(i,!0)},u.prototype.prev=function(){return new u(this.value-BigInt(1))};for(var oe=[1];2*oe[oe.length-1]<=n;)oe.push(2*oe[oe.length-1]);var j=oe.length,se=oe[j-1];function ce(e){return Math.abs(e)<=n}c.prototype.shiftLeft=function(e){var t=I(e).toJSNumber();if(!ce(t))throw Error(String(t)+` is too large for shifting.`);if(t<0)return this.shiftRight(-t);var n=this;if(n.isZero())return n;for(;t>=j;)n=n.multiply(se),t-=j-1;return n.multiply(oe[t])},u.prototype.shiftLeft=l.prototype.shiftLeft=c.prototype.shiftLeft,c.prototype.shiftRight=function(e){var t,n=I(e).toJSNumber();if(!ce(n))throw Error(String(n)+` is too large for shifting.`);if(n<0)return this.shiftLeft(-n);for(var r=this;n>=j;){if(r.isZero()||r.isNegative()&&r.isUnit())return r;t=A(r,se),r=t[1].isNegative()?t[0].prev():t[0],n-=j-1}return t=A(r,oe[n]),t[1].isNegative()?t[0].prev():t[0]},u.prototype.shiftRight=l.prototype.shiftRight=c.prototype.shiftRight;function le(e,n,r){n=I(n);for(var i=e.isNegative(),a=n.isNegative(),o=i?e.not():e,s=a?n.not():n,c=0,l=0,u=null,d=null,f=[];!o.isZero()||!s.isZero();)u=A(o,se),c=u[1].toJSNumber(),i&&(c=se-1-c),d=A(s,se),l=d[1].toJSNumber(),a&&(l=se-1-l),o=u[0],s=d[0],f.push(r(c,l));for(var p=r(+!!i,+!!a)===0?t(0):t(-1),m=f.length-1;m>=0;--m)p=p.multiply(se).add(t(f[m]));return p}c.prototype.not=function(){return this.negate().prev()},u.prototype.not=l.prototype.not=c.prototype.not,c.prototype.and=function(e){return le(this,e,function(e,t){return e&t})},u.prototype.and=l.prototype.and=c.prototype.and,c.prototype.or=function(e){return le(this,e,function(e,t){return e|t})},u.prototype.or=l.prototype.or=c.prototype.or,c.prototype.xor=function(e){return le(this,e,function(e,t){return e^t})},u.prototype.xor=l.prototype.xor=c.prototype.xor;var ue=1<<30,M=(n&-n)*(n&-n)|ue;function N(e){var t=e.value,r=typeof t==`number`?t|ue:typeof t==`bigint`?t|BigInt(ue):t[0]+t[1]*n|M;return r&-r}function de(e,n){if(n.compareTo(e)<=0){var r=de(e,n.square(n)),i=r.p,a=r.e,o=i.multiply(n);return o.compareTo(e)<=0?{p:o,e:a*2+1}:{p:i,e:a*2}}return{p:t(1),e:0}}c.prototype.bitLength=function(){var e=this;return e.compareTo(t(0))<0&&(e=e.negate().subtract(t(1))),e.compareTo(t(0))===0?t(0):t(de(e,t(2)).e).add(t(1))},u.prototype.bitLength=l.prototype.bitLength=c.prototype.bitLength;function fe(e,t){return e=I(e),t=I(t),e.greater(t)?e:t}function pe(e,t){return e=I(e),t=I(t),e.lesser(t)?e:t}function me(e,t){if(e=I(e).abs(),t=I(t).abs(),e.equals(t))return e;if(e.isZero())return t;if(t.isZero())return e;for(var n=s[1],r,i;e.isEven()&&t.isEven();)r=pe(N(e),N(t)),e=e.divide(r),t=t.divide(r),n=n.multiply(r);for(;e.isEven();)e=e.divide(N(e));do{for(;t.isEven();)t=t.divide(N(t));e.greater(t)&&(i=t,t=e,e=i),t=t.subtract(e)}while(!t.isZero());return n.isUnit()?e:e.multiply(n)}function P(e,t){return e=I(e).abs(),t=I(t).abs(),e.divide(me(e,t)).multiply(t)}function F(e,t,r){e=I(e),t=I(t);var i=r||Math.random,a=pe(e,t),o=fe(e,t).subtract(a).add(1);if(o.isSmall)return a.add(Math.floor(i()*o));for(var c=ve(o,n).value,l=[],u=!0,d=0;d=s){if(l===`1`&&s===1)continue;throw Error(l+` is not a valid digit in base `+t+`.`)}}t=I(t);var u=[],d=e[0]===`-`;for(o=+!!d;o`&&o=0;a--)r=r.add(e[a].times(i)),i=i.times(t);return n?r.negate():r}function _e(e,t){return t||=a,e`}function ve(e,n){if(n=t(n),n.isZero()){if(e.isZero())return{value:[0],isNegative:!1};throw Error(`Cannot convert nonzero numbers to base 0.`)}if(n.equals(-1)){if(e.isZero())return{value:[0],isNegative:!1};if(e.isNegative())return{value:[].concat.apply([],Array.apply(null,Array(-e.toJSNumber())).map(Array.prototype.valueOf,[1,0])),isNegative:!1};var r=Array.apply(null,Array(e.toJSNumber()-1)).map(Array.prototype.valueOf,[0,1]);return r.unshift([1]),{value:[].concat.apply([],r),isNegative:!1}}var i=!1;if(e.isNegative()&&n.isPositive()&&(i=!0,e=e.abs()),n.isUnit())return e.isZero()?{value:[0],isNegative:!1}:{value:Array.apply(null,Array(e.toJSNumber())).map(Number.prototype.valueOf,1),isNegative:i};for(var a=[],o=e,s;o.isNegative()||o.compareAbs(n)>=0;){s=o.divmod(n),o=s.quotient;var c=s.remainder;c.isNegative()&&(c=n.minus(c).abs(),o=o.next()),a.push(c.toJSNumber())}return a.push(o.toJSNumber()),{value:a.reverse(),isNegative:i}}function ye(e,t,n){var r=ve(e,t);return(r.isNegative?`-`:``)+r.value.map(function(e){return _e(e,n)}).join(``)}c.prototype.toArray=function(e){return ve(this,e)},l.prototype.toArray=function(e){return ve(this,e)},u.prototype.toArray=function(e){return ve(this,e)},c.prototype.toString=function(t,n){if(t===e&&(t=10),t!==10||n)return ye(this,t,n);for(var r=this.value,i=r.length,a=String(r[--i]),o=`0000000`,s;--i>=0;)s=String(r[i]),a+=o.slice(s.length)+s;return(this.sign?`-`:``)+a},l.prototype.toString=function(t,n){return t===e&&(t=10),t!=10||n?ye(this,t,n):String(this.value)},u.prototype.toString=l.prototype.toString,u.prototype.toJSON=c.prototype.toJSON=l.prototype.toJSON=function(){return this.toString()},c.prototype.valueOf=function(){return parseInt(this.toString(),10)},c.prototype.toJSNumber=c.prototype.valueOf,l.prototype.valueOf=function(){return this.value},l.prototype.toJSNumber=l.prototype.valueOf,u.prototype.valueOf=u.prototype.toJSNumber=function(){return parseInt(this.toString(),10)};function be(e){if(d(+e)){var t=+e;if(t===g(t))return o?new u(BigInt(t)):new l(t);throw Error(`Invalid integer: `+e)}var n=e[0]===`-`;n&&(e=e.slice(1));var r=e.split(/e/i);if(r.length>2)throw Error(`Invalid integer: `+r.join(`e`));if(r.length===2){var i=r[1];if(i[0]===`+`&&(i=i.slice(1)),i=+i,i!==g(i)||!d(i))throw Error(`Invalid integer: `+i+` is not a valid exponent.`);var a=r[0],s=a.indexOf(`.`);if(s>=0&&(i-=a.length-s-1,a=a.slice(0,s)+a.slice(s+1)),i<0)throw Error(`Cannot include negative exponent part for integers`);a+=Array(i+1).join(`0`),e=a}if(!/^([0-9][0-9]*)$/.test(e))throw Error(`Invalid integer: `+e);if(o)return new u(BigInt(n?`-`+e:e));for(var f=[],p=e.length,h=7,_=p-h;p>0;)f.push(+e.slice(_,p)),_-=h,_<0&&(_=0),p-=h;return m(f),new c(f,n)}function xe(e){if(o)return new u(BigInt(e));if(d(e)){if(e!==g(e))throw Error(e+` is not an integer.`);return new l(e)}return be(e.toString())}function I(e){return typeof e==`number`?xe(e):typeof e==`string`?be(e):typeof e==`bigint`?new u(e):e}for(var Se=0;Se<1e3;Se++)s[Se]=I(Se),Se>0&&(s[-Se]=I(-Se));return s.one=s[1],s.zero=s[0],s.minusOne=s[-1],s.max=fe,s.min=pe,s.gcd=me,s.lcm=P,s.isInstance=function(e){return e instanceof c||e instanceof l||e instanceof u},s.randBetween=F,s.fromArray=function(e,t,n){return ge(e.map(I),I(t||10),n)},s})();e.hasOwnProperty(`exports`)&&(e.exports=t)})(ha),ha.exports)}var va=Jn(_a()),ya=64,ba=16,xa=ya/ba;function Sa(){try{return!0}catch{return!1}}function Ca(e,t,n){let r=0;for(let i=0;ie&t[n]))}or({parts:t}){return new e(this.parts.map((e,n)=>e|t[n]))}xor({parts:t}){return new e(this.parts.map((e,n)=>e^t[n]))}not(){return new e(this.parts.map(e=>~e))}equals({parts:e}){return this.parts.every((t,n)=>t===e[n])}toString(){if(this.str!=null)return this.str;let e=Array(ya/4);return this.parts.forEach((t,n)=>{let r=wa(t.toString());for(let t=0;t<4;t++)e[t+n*4]=r[3-t]||0}),this.str=va.fromArray(e,16).toString()}toJSON(){return this.toString()}},Da=Sa();Da&&BigInt.prototype.toJSON==null&&(BigInt.prototype.toJSON=function(){return this.toString()});var Oa={},ka=Da?function(e){return BigInt(e)}:function(e){return e instanceof Ea?e:(typeof e==`number`&&(e=e.toString()),Oa[e]??(Oa[e]=Ea.fromString(e)),Oa[e])},Aa=ka(0),ja=Da?function(e=Aa,t=Aa){return e&t}:function(e=Aa,t=Aa){return e.and(t)},Ma=Da?function(e=Aa,t=Aa){return e|t}:function(e=Aa,t=Aa){return e.or(t)},Na=Da?function(e=Aa,t=Aa){return e^t}:function(e=Aa,t=Aa){return e.xor(t)},Pa=Da?function(e=Aa){return~e}:function(e=Aa){return e.not()},Fa=Da?function(e,t){return e===t}:function(e,t){return e==null||t==null?e==t:e.equals(t)};function Ia(...e){let t=e[0];for(let n=1;n{let[n]=Object.entries(e).find(([,e])=>e===t)??[];return t!=null&&n===void 0?e.UNHANDLED:t},V().or(Li()))}function qa(e){let t=Ni().transform(t=>{let n=e.safeParse(t);return n.success?n.data:e._def.defaultValue()});return t.overlayType=e,t}var Ja=U.object({image_url:U.string()}).describe(`Response for "INITIATE_IMAGE_UPLOAD" Command`),Ya=U.object({mediaUrl:U.string().max(1024)}).describe(`Request for "OPEN_SHARE_MOMENT_DIALOG" Command`),Xa=U.object({access_token:U.union([U.string(),U.null()]).optional()}).describe(`Request for "AUTHENTICATE" Command`),Za=U.object({access_token:U.string(),user:U.object({username:U.string(),discriminator:U.string(),id:U.string(),avatar:U.union([U.string(),U.null()]).optional(),public_flags:U.number(),global_name:U.union([U.string(),U.null()]).optional()}),scopes:U.array(qa(U.enum(`identify,identify.premium,email,connections,guilds,guilds.join,guilds.members.read,guilds.channels.read,gdm.join,bot,rpc,rpc.notifications.read,rpc.voice.read,rpc.voice.write,rpc.video.read,rpc.video.write,rpc.screenshare.read,rpc.screenshare.write,rpc.activities.write,webhook.incoming,messages.read,applications.builds.upload,applications.builds.read,applications.commands,applications.commands.permissions.update,applications.commands.update,applications.store.update,applications.entitlements,activities.read,activities.write,activities.invites.write,relationships.read,relationships.write,voice,dm_channels.read,role_connections.write,presences.read,presences.write,openid,dm_channels.messages.read,dm_channels.messages.write,gateway.connect,account.global_name.update,payment_sources.country_code,sdk.social_layer_presence,sdk.social_layer,lobbies.write,application_identities.write`.split(`,`)).or(U.literal(-1)).default(-1))),expires:U.string(),application:U.object({description:U.string(),icon:U.union([U.string(),U.null()]).optional(),id:U.string(),rpc_origins:U.array(U.string()).optional(),name:U.string()})}).describe(`Response for "AUTHENTICATE" Command`),Qa=U.object({participants:U.array(U.object({id:U.string(),username:U.string(),global_name:U.union([U.string(),U.null()]).optional(),discriminator:U.string(),avatar:U.union([U.string(),U.null()]).optional(),flags:U.number(),bot:U.boolean(),avatar_decoration_data:U.union([U.object({asset:U.union([U.string(),U.null()]).optional(),skuId:U.string().optional(),expiresAt:U.number().optional()}),U.null()]).optional(),premium_type:U.union([U.number(),U.null()]).optional(),nickname:U.string().optional()}))}).describe(`Response for "GET_ACTIVITY_INSTANCE_CONNECTED_PARTICIPANTS" Command`),$a=U.object({command:U.string(),options:U.array(U.object({name:U.string(),value:U.string()})).optional(),content:U.string().max(2e3).optional(),require_launch_channel:U.boolean().optional(),preview_image:U.object({height:U.number(),url:U.string(),width:U.number()}).optional(),components:U.array(U.object({type:U.literal(1),components:U.array(U.object({type:U.literal(2),style:U.number().gte(1).lte(5),label:U.string().max(80).optional(),custom_id:U.string().max(100).describe(`Developer-defined identifier for the button; max 100 characters`).optional()})).max(5).optional()})).optional(),pid:U.number().optional()}).describe(`Request for "SHARE_INTERACTION" Command`),eo=U.object({success:U.boolean()}).describe(`Response for "SHARE_INTERACTION" Command`),to=U.object({custom_id:U.string().max(64).optional(),message:U.string().max(1e3),link_id:U.string().max(64).optional()}).describe(`Request for "SHARE_LINK" Command`),no=U.object({success:U.boolean(),didCopyLink:U.boolean(),didSendMessage:U.boolean()}).describe(`Response for "SHARE_LINK" Command`),ro=U.object({relationships:U.array(U.object({type:U.number(),user:U.object({id:U.string(),username:U.string(),global_name:U.union([U.string(),U.null()]).optional(),discriminator:U.string(),avatar:U.union([U.string(),U.null()]).optional(),flags:U.number(),bot:U.boolean(),avatar_decoration_data:U.union([U.object({asset:U.union([U.string(),U.null()]).optional(),skuId:U.string().optional(),expiresAt:U.number().optional()}),U.null()]).optional(),premium_type:U.union([U.number(),U.null()]).optional()}),presence:U.object({status:U.string(),activity:U.union([U.object({session_id:U.string().optional(),type:U.number().optional(),name:U.string(),url:U.union([U.string(),U.null()]).optional(),application_id:U.string().optional(),status_display_type:U.number().optional(),state:U.string().optional(),state_url:U.string().optional(),details:U.string().optional(),details_url:U.string().optional(),emoji:U.union([U.object({name:U.string(),id:U.union([U.string(),U.null()]).optional(),animated:U.union([U.boolean(),U.null()]).optional()}),U.null()]).optional(),assets:U.object({large_image:U.string().optional(),large_text:U.string().optional(),large_url:U.string().optional(),small_image:U.string().optional(),small_text:U.string().optional(),small_url:U.string().optional()}).optional(),timestamps:U.object({start:U.number().optional(),end:U.number().optional()}).optional(),party:U.object({id:U.string().optional(),size:U.array(U.number()).min(2).max(2).optional(),privacy:U.number().optional()}).optional(),secrets:U.object({match:U.string().optional(),join:U.string().optional()}).optional(),sync_id:U.string().optional(),created_at:U.number().optional(),instance:U.boolean().optional(),flags:U.number().optional(),metadata:U.object({}).optional(),platform:U.string().optional(),supported_platforms:U.array(U.string()).optional(),buttons:U.array(U.string()).optional(),hangStatus:U.string().optional()}),U.null()]).optional()}).optional()}))}).describe(`Response for "GET_RELATIONSHIPS" Command`),io=U.object({user_id:U.string(),content:U.string().min(0).max(1024).optional()}).describe(`Request for "INVITE_USER_EMBEDDED" Command`),ao=U.object({id:U.string().max(64)}).describe(`Request for "GET_USER" Command`),oo=U.union([U.object({id:U.string(),username:U.string(),global_name:U.union([U.string(),U.null()]).optional(),discriminator:U.string(),avatar:U.union([U.string(),U.null()]).optional(),flags:U.number(),bot:U.boolean(),avatar_decoration_data:U.union([U.object({asset:U.union([U.string(),U.null()]).optional(),skuId:U.string().optional(),expiresAt:U.number().optional()}),U.null()]).optional(),premium_type:U.union([U.number(),U.null()]).optional()}),U.null()]),so=U.object({quest_id:U.string()}).describe(`Request for "GET_QUEST_ENROLLMENT_STATUS" Command`),co=U.object({quest_id:U.string(),is_enrolled:U.boolean(),enrolled_at:U.union([U.string(),U.null()]).optional()}).describe(`Response for "GET_QUEST_ENROLLMENT_STATUS" Command`),lo=U.object({quest_id:U.string()}).describe(`Request for "QUEST_START_TIMER" Command`),uo=U.object({success:U.boolean()}).describe(`Response for "QUEST_START_TIMER" Command`),fo=U.object({quest_id:U.string(),enrolled_at:U.union([U.string(),U.null()]).optional(),completed_at:U.union([U.string(),U.null()]).optional(),external_cta_url:U.string()}).describe(`Response for "GET_QUEST" Command`),po=U.object({ticket:U.string()}).describe(`Response for "REQUEST_PROXY_TICKET_REFRESH" Command`),mo;(function(e){e.INITIATE_IMAGE_UPLOAD=`INITIATE_IMAGE_UPLOAD`,e.OPEN_SHARE_MOMENT_DIALOG=`OPEN_SHARE_MOMENT_DIALOG`,e.AUTHENTICATE=`AUTHENTICATE`,e.GET_ACTIVITY_INSTANCE_CONNECTED_PARTICIPANTS=`GET_ACTIVITY_INSTANCE_CONNECTED_PARTICIPANTS`,e.SHARE_INTERACTION=`SHARE_INTERACTION`,e.SHARE_LINK=`SHARE_LINK`,e.GET_RELATIONSHIPS=`GET_RELATIONSHIPS`,e.INVITE_USER_EMBEDDED=`INVITE_USER_EMBEDDED`,e.GET_USER=`GET_USER`,e.GET_QUEST_ENROLLMENT_STATUS=`GET_QUEST_ENROLLMENT_STATUS`,e.QUEST_START_TIMER=`QUEST_START_TIMER`,e.GET_QUEST=`GET_QUEST`,e.REQUEST_PROXY_TICKET_REFRESH=`REQUEST_PROXY_TICKET_REFRESH`})(mo||={});var ho=U.object({}).optional().nullable(),go=U.void(),_o={[mo.INITIATE_IMAGE_UPLOAD]:{request:go,response:Ja},[mo.OPEN_SHARE_MOMENT_DIALOG]:{request:Ya,response:ho},[mo.AUTHENTICATE]:{request:Xa,response:Za},[mo.GET_ACTIVITY_INSTANCE_CONNECTED_PARTICIPANTS]:{request:go,response:Qa},[mo.SHARE_INTERACTION]:{request:$a,response:eo},[mo.SHARE_LINK]:{request:to,response:no},[mo.GET_RELATIONSHIPS]:{request:go,response:ro},[mo.INVITE_USER_EMBEDDED]:{request:io,response:ho},[mo.GET_USER]:{request:ao,response:oo},[mo.GET_QUEST_ENROLLMENT_STATUS]:{request:so,response:co},[mo.QUEST_START_TIMER]:{request:lo,response:uo},[mo.GET_QUEST]:{request:go,response:fo},[mo.REQUEST_PROXY_TICKET_REFRESH]:{request:go,response:po}},vo=t({Activity:()=>No,Attachment:()=>Ho,CertifiedDevice:()=>cs,CertifiedDeviceTypeObject:()=>ss,Channel:()=>Lo,ChannelMention:()=>Vo,ChannelTypesObject:()=>Io,Commands:()=>bo,DISPATCH:()=>yo,Embed:()=>Yo,EmbedAuthor:()=>qo,EmbedField:()=>Jo,EmbedFooter:()=>Uo,EmbedProvider:()=>Ko,Emoji:()=>Oo,Entitlement:()=>fs,EntitlementTypesObject:()=>ds,Guild:()=>Bo,GuildMember:()=>Eo,GuildMemberRPC:()=>Do,Image:()=>Wo,KeyTypesObject:()=>ns,LayoutMode:()=>bs,LayoutModeTypeObject:()=>ys,Message:()=>es,MessageActivity:()=>Zo,MessageApplication:()=>Qo,MessageReference:()=>$o,Orientation:()=>vs,OrientationLockState:()=>ms,OrientationLockStateTypeObject:()=>ps,OrientationTypeObject:()=>_s,PermissionOverwrite:()=>Fo,PermissionOverwriteTypeObject:()=>Po,PresenceUpdate:()=>Ro,Reaction:()=>Xo,ReceiveFramePayload:()=>xo,Relationship:()=>wo,Role:()=>zo,Scopes:()=>Co,ScopesObject:()=>So,ShortcutKey:()=>rs,Sku:()=>us,SkuTypeObject:()=>ls,Status:()=>Mo,StatusObject:()=>jo,ThermalState:()=>gs,ThermalStateTypeObject:()=>hs,User:()=>To,UserVoiceState:()=>Ao,Video:()=>Go,VoiceDevice:()=>ts,VoiceSettingModeTypeObject:()=>is,VoiceSettingsIO:()=>os,VoiceSettingsMode:()=>as,VoiceState:()=>ko}),yo=`DISPATCH`,bo;(function(e){e.AUTHORIZE=`AUTHORIZE`,e.GET_GUILDS=`GET_GUILDS`,e.GET_GUILD=`GET_GUILD`,e.GET_CHANNEL=`GET_CHANNEL`,e.GET_CHANNELS=`GET_CHANNELS`,e.SELECT_VOICE_CHANNEL=`SELECT_VOICE_CHANNEL`,e.SELECT_TEXT_CHANNEL=`SELECT_TEXT_CHANNEL`,e.SUBSCRIBE=`SUBSCRIBE`,e.UNSUBSCRIBE=`UNSUBSCRIBE`,e.CAPTURE_SHORTCUT=`CAPTURE_SHORTCUT`,e.SET_CERTIFIED_DEVICES=`SET_CERTIFIED_DEVICES`,e.SET_ACTIVITY=`SET_ACTIVITY`,e.GET_SKUS=`GET_SKUS`,e.GET_ENTITLEMENTS=`GET_ENTITLEMENTS`,e.GET_SKUS_EMBEDDED=`GET_SKUS_EMBEDDED`,e.GET_ENTITLEMENTS_EMBEDDED=`GET_ENTITLEMENTS_EMBEDDED`,e.START_PURCHASE=`START_PURCHASE`,e.SET_CONFIG=`SET_CONFIG`,e.SEND_ANALYTICS_EVENT=`SEND_ANALYTICS_EVENT`,e.USER_SETTINGS_GET_LOCALE=`USER_SETTINGS_GET_LOCALE`,e.OPEN_EXTERNAL_LINK=`OPEN_EXTERNAL_LINK`,e.ENCOURAGE_HW_ACCELERATION=`ENCOURAGE_HW_ACCELERATION`,e.CAPTURE_LOG=`CAPTURE_LOG`,e.SET_ORIENTATION_LOCK_STATE=`SET_ORIENTATION_LOCK_STATE`,e.OPEN_INVITE_DIALOG=`OPEN_INVITE_DIALOG`,e.GET_PLATFORM_BEHAVIORS=`GET_PLATFORM_BEHAVIORS`,e.GET_CHANNEL_PERMISSIONS=`GET_CHANNEL_PERMISSIONS`,e.AUTHENTICATE=`AUTHENTICATE`,e.GET_ACTIVITY_INSTANCE_CONNECTED_PARTICIPANTS=`GET_ACTIVITY_INSTANCE_CONNECTED_PARTICIPANTS`,e.GET_QUEST=`GET_QUEST`,e.GET_QUEST_ENROLLMENT_STATUS=`GET_QUEST_ENROLLMENT_STATUS`,e.GET_RELATIONSHIPS=`GET_RELATIONSHIPS`,e.GET_USER=`GET_USER`,e.INITIATE_IMAGE_UPLOAD=`INITIATE_IMAGE_UPLOAD`,e.INVITE_USER_EMBEDDED=`INVITE_USER_EMBEDDED`,e.OPEN_SHARE_MOMENT_DIALOG=`OPEN_SHARE_MOMENT_DIALOG`,e.QUEST_START_TIMER=`QUEST_START_TIMER`,e.REQUEST_PROXY_TICKET_REFRESH=`REQUEST_PROXY_TICKET_REFRESH`,e.SHARE_INTERACTION=`SHARE_INTERACTION`,e.SHARE_LINK=`SHARE_LINK`})(bo||={});var xo=H({cmd:V(),data:Ki(),evt:Wi(),nonce:V()}).passthrough(),So=Object.assign(Object.assign({},Za.shape.scopes.element.overlayType._def.innerType.options[0].Values),{UNHANDLED:-1}),Co=Ka(So),wo=ro.shape.relationships.element,To=H({id:V(),username:V(),discriminator:V(),global_name:V().optional().nullable(),avatar:V().optional().nullable(),avatar_decoration_data:H({asset:V(),sku_id:V().optional()}).nullable(),bot:Bi(),flags:Li().optional().nullable(),premium_type:Li().optional().nullable()}),Eo=H({user:To,nick:V().optional().nullable(),roles:Yi(V()),joined_at:V(),deaf:Bi(),mute:Bi()}),Do=H({user_id:V(),nick:V().optional().nullable(),guild_id:V(),avatar:V().optional().nullable(),avatar_decoration_data:H({asset:V(),sku_id:V().optional().nullable()}).optional().nullable(),color_string:V().optional().nullable()}),Oo=H({id:V(),name:V().optional().nullable(),roles:Yi(V()).optional().nullable(),user:To.optional().nullable(),require_colons:Bi().optional().nullable(),managed:Bi().optional().nullable(),animated:Bi().optional().nullable(),available:Bi().optional().nullable()}),ko=H({mute:Bi(),deaf:Bi(),self_mute:Bi(),self_deaf:Bi(),suppress:Bi()}),Ao=H({mute:Bi(),nick:V(),user:To,voice_state:ko,volume:Li()}),jo={UNHANDLED:-1,IDLE:`idle`,DND:`dnd`,ONLINE:`online`,OFFLINE:`offline`},Mo=Ka(jo),No=H({name:V(),type:Li(),url:V().optional().nullable(),created_at:Li().optional().nullable(),timestamps:H({start:Li(),end:Li()}).partial().optional().nullable(),application_id:V().optional().nullable(),details:V().optional().nullable(),details_url:V().url().optional().nullable(),state:V().optional().nullable(),state_url:V().url().optional().nullable(),emoji:Oo.optional().nullable(),party:H({id:V().optional().nullable(),size:Yi(Li()).optional().nullable()}).optional().nullable(),assets:H({large_image:V().nullable(),large_text:V().nullable(),large_url:V().url().optional().nullable(),small_image:V().nullable(),small_text:V().nullable(),small_url:V().url().optional().nullable()}).partial().optional().nullable(),secrets:H({join:V(),match:V()}).partial().optional().nullable(),instance:Bi().optional().nullable(),flags:Li().optional().nullable()}),Po={UNHANDLED:-1,ROLE:0,MEMBER:1},Fo=H({id:V(),type:Ka(Po),allow:V(),deny:V()}),Io={UNHANDLED:-1,DM:1,GROUP_DM:3,GUILD_TEXT:0,GUILD_VOICE:2,GUILD_CATEGORY:4,GUILD_ANNOUNCEMENT:5,GUILD_STORE:6,ANNOUNCEMENT_THREAD:10,PUBLIC_THREAD:11,PRIVATE_THREAD:12,GUILD_STAGE_VOICE:13,GUILD_DIRECTORY:14,GUILD_FORUM:15},Lo=H({id:V(),type:Ka(Io),guild_id:V().optional().nullable(),position:Li().optional().nullable(),permission_overwrites:Yi(Fo).optional().nullable(),name:V().optional().nullable(),topic:V().optional().nullable(),nsfw:Bi().optional().nullable(),last_message_id:V().optional().nullable(),bitrate:Li().optional().nullable(),user_limit:Li().optional().nullable(),rate_limit_per_user:Li().optional().nullable(),recipients:Yi(To).optional().nullable(),icon:V().optional().nullable(),owner_id:V().optional().nullable(),application_id:V().optional().nullable(),parent_id:V().optional().nullable(),last_pin_timestamp:V().optional().nullable()}),Ro=H({user:To,guild_id:V(),status:Mo,activities:Yi(No),client_status:H({desktop:Mo,mobile:Mo,web:Mo}).partial()}),zo=H({id:V(),name:V(),color:Li(),hoist:Bi(),position:Li(),permissions:V(),managed:Bi(),mentionable:Bi()}),Bo=H({id:V(),name:V(),owner_id:V(),icon:V().nullable(),icon_hash:V().optional().nullable(),splash:V().nullable(),discovery_splash:V().nullable(),owner:Bi().optional().nullable(),permissions:V().optional().nullable(),region:V(),afk_channel_id:V().nullable(),afk_timeout:Li(),widget_enabled:Bi().optional().nullable(),widget_channel_id:V().optional().nullable(),verification_level:Li(),default_message_notifications:Li(),explicit_content_filter:Li(),roles:Yi(zo),emojis:Yi(Oo),features:Yi(V()),mfa_level:Li(),application_id:V().nullable(),system_channel_id:V().nullable(),system_channel_flags:Li(),rules_channel_id:V().nullable(),joined_at:V().optional().nullable(),large:Bi().optional().nullable(),unavailable:Bi().optional().nullable(),member_count:Li().optional().nullable(),voice_states:Yi(ko).optional().nullable(),members:Yi(Eo).optional().nullable(),channels:Yi(Lo).optional().nullable(),presences:Yi(Ro).optional().nullable(),max_presences:Li().optional().nullable(),max_members:Li().optional().nullable(),vanity_url_code:V().nullable(),description:V().nullable(),banner:V().nullable(),premium_tier:Li(),premium_subscription_count:Li().optional().nullable(),preferred_locale:V(),public_updates_channel_id:V().nullable(),max_video_channel_users:Li().optional().nullable(),approximate_member_count:Li().optional().nullable(),approximate_presence_count:Li().optional().nullable()}),Vo=H({id:V(),guild_id:V(),type:Li(),name:V()}),Ho=H({id:V(),filename:V(),size:Li(),url:V(),proxy_url:V(),height:Li().optional().nullable(),width:Li().optional().nullable()}),Uo=H({text:V(),icon_url:V().optional().nullable(),proxy_icon_url:V().optional().nullable()}),Wo=H({url:V().optional().nullable(),proxy_url:V().optional().nullable(),height:Li().optional().nullable(),width:Li().optional().nullable()}),Go=Wo.omit({proxy_url:!0}),Ko=H({name:V().optional().nullable(),url:V().optional().nullable()}),qo=H({name:V().optional().nullable(),url:V().optional().nullable(),icon_url:V().optional().nullable(),proxy_icon_url:V().optional().nullable()}),Jo=H({name:V(),value:V(),inline:Bi()}),Yo=H({title:V().optional().nullable(),type:V().optional().nullable(),description:V().optional().nullable(),url:V().optional().nullable(),timestamp:V().optional().nullable(),color:Li().optional().nullable(),footer:Uo.optional().nullable(),image:Wo.optional().nullable(),thumbnail:Wo.optional().nullable(),video:Go.optional().nullable(),provider:Ko.optional().nullable(),author:qo.optional().nullable(),fields:Yi(Jo).optional().nullable()}),Xo=H({count:Li(),me:Bi(),emoji:Oo}),Zo=H({type:Li(),party_id:V().optional().nullable()}),Qo=H({id:V(),cover_image:V().optional().nullable(),description:V(),icon:V().optional().nullable(),name:V()}),$o=H({message_id:V().optional().nullable(),channel_id:V().optional().nullable(),guild_id:V().optional().nullable()}),es=H({id:V(),channel_id:V(),guild_id:V().optional().nullable(),author:To.optional().nullable(),member:Eo.optional().nullable(),content:V(),timestamp:V(),edited_timestamp:V().optional().nullable(),tts:Bi(),mention_everyone:Bi(),mentions:Yi(To),mention_roles:Yi(V()),mention_channels:Yi(Vo),attachments:Yi(Ho),embeds:Yi(Yo),reactions:Yi(Xo).optional().nullable(),nonce:Zi([V(),Li()]).optional().nullable(),pinned:Bi(),webhook_id:V().optional().nullable(),type:Li(),activity:Zo.optional().nullable(),application:Qo.optional().nullable(),message_reference:$o.optional().nullable(),flags:Li().optional().nullable(),stickers:Yi(Ki()).optional().nullable(),referenced_message:Ki().optional().nullable()}),ts=H({id:V(),name:V()}),ns={UNHANDLED:-1,KEYBOARD_KEY:0,MOUSE_BUTTON:1,KEYBOARD_MODIFIER_KEY:2,GAMEPAD_BUTTON:3},rs=H({type:Ka(ns),code:Li(),name:V()}),is={UNHANDLED:-1,PUSH_TO_TALK:`PUSH_TO_TALK`,VOICE_ACTIVITY:`VOICE_ACTIVITY`},as=H({type:Ka(is),auto_threshold:Bi(),threshold:Li(),shortcut:Yi(rs),delay:Li()}),os=H({device_id:V(),volume:Li(),available_devices:Yi(ts)}),ss={UNHANDLED:-1,AUDIO_INPUT:`AUDIO_INPUT`,AUDIO_OUTPUT:`AUDIO_OUTPUT`,VIDEO_INPUT:`VIDEO_INPUT`},cs=H({type:Ka(ss),id:V(),vendor:H({name:V(),url:V()}),model:H({name:V(),url:V()}),related:Yi(V()),echo_cancellation:Bi().optional().nullable(),noise_suppression:Bi().optional().nullable(),automatic_gain_control:Bi().optional().nullable(),hardware_mute:Bi().optional().nullable()}),ls={UNHANDLED:-1,APPLICATION:1,DLC:2,CONSUMABLE:3,BUNDLE:4,SUBSCRIPTION:5},us=H({id:V(),name:V(),type:Ka(ls),price:H({amount:Li(),currency:V()}),application_id:V(),flags:Li(),release_date:V().nullable()}),ds={UNHANDLED:-1,PURCHASE:1,PREMIUM_SUBSCRIPTION:2,DEVELOPER_GIFT:3,TEST_MODE_PURCHASE:4,FREE_PURCHASE:5,USER_GIFT:6,PREMIUM_PURCHASE:7},fs=H({id:V(),sku_id:V(),application_id:V(),user_id:V(),gift_code_flags:Li(),type:Ka(ds),gifter_user_id:V().optional().nullable(),branches:Yi(V()).optional().nullable(),starts_at:V().optional().nullable(),ends_at:V().optional().nullable(),parent_id:V().optional().nullable(),consumed:Bi().optional().nullable(),deleted:Bi().optional().nullable(),gift_code_batch_id:V().optional().nullable()}),ps={UNHANDLED:-1,UNLOCKED:1,PORTRAIT:2,LANDSCAPE:3},ms=Ka(ps),hs={UNHANDLED:-1,NOMINAL:0,FAIR:1,SERIOUS:2,CRITICAL:3},gs=Ka(hs),_s={UNHANDLED:-1,PORTRAIT:0,LANDSCAPE:1},vs=Ka(_s),ys={UNHANDLED:-1,FOCUSED:0,PIP:1,GRID:2},bs=Ka(ys),xs=`ERROR`,Ss;(function(e){e.READY=`READY`,e.VOICE_STATE_UPDATE=`VOICE_STATE_UPDATE`,e.SPEAKING_START=`SPEAKING_START`,e.SPEAKING_STOP=`SPEAKING_STOP`,e.ACTIVITY_LAYOUT_MODE_UPDATE=`ACTIVITY_LAYOUT_MODE_UPDATE`,e.ORIENTATION_UPDATE=`ORIENTATION_UPDATE`,e.CURRENT_USER_UPDATE=`CURRENT_USER_UPDATE`,e.CURRENT_GUILD_MEMBER_UPDATE=`CURRENT_GUILD_MEMBER_UPDATE`,e.ENTITLEMENT_CREATE=`ENTITLEMENT_CREATE`,e.THERMAL_STATE_UPDATE=`THERMAL_STATE_UPDATE`,e.ACTIVITY_INSTANCE_PARTICIPANTS_UPDATE=`ACTIVITY_INSTANCE_PARTICIPANTS_UPDATE`,e.RELATIONSHIP_UPDATE=`RELATIONSHIP_UPDATE`,e.ACTIVITY_JOIN=`ACTIVITY_JOIN`,e.QUEST_ENROLLMENT_STATUS_UPDATE=`QUEST_ENROLLMENT_STATUS_UPDATE`})(Ss||={});var Cs=xo.extend({evt:ca(Ss),nonce:V().nullable(),cmd:oa(yo),data:H({}).passthrough()}),ws=xo.extend({evt:oa(xs),data:H({code:Li(),message:V().optional()}).passthrough(),cmd:ca(bo),nonce:V().nullable()}),Ts=Zi([Cs,Cs.extend({evt:V()}),ws]);function Es(e){let t=e.evt;if(!(t in Ss))throw Error(`Unrecognized event type ${e.evt}`);return Ds[t].payload.parse(e)}var Ds={[Ss.READY]:{payload:Cs.extend({evt:oa(Ss.READY),data:H({v:Li(),config:H({cdn_host:V().optional(),api_endpoint:V(),environment:V()}),user:H({id:V(),username:V(),discriminator:V(),avatar:V().optional()}).optional()})})},[Ss.VOICE_STATE_UPDATE]:{payload:Cs.extend({evt:oa(Ss.VOICE_STATE_UPDATE),data:Ao}),subscribeArgs:H({channel_id:V()})},[Ss.SPEAKING_START]:{payload:Cs.extend({evt:oa(Ss.SPEAKING_START),data:H({lobby_id:V().optional(),channel_id:V().optional(),user_id:V()})}),subscribeArgs:H({lobby_id:V().nullable().optional(),channel_id:V().nullable().optional()})},[Ss.SPEAKING_STOP]:{payload:Cs.extend({evt:oa(Ss.SPEAKING_STOP),data:H({lobby_id:V().optional(),channel_id:V().optional(),user_id:V()})}),subscribeArgs:H({lobby_id:V().nullable().optional(),channel_id:V().nullable().optional()})},[Ss.ACTIVITY_LAYOUT_MODE_UPDATE]:{payload:Cs.extend({evt:oa(Ss.ACTIVITY_LAYOUT_MODE_UPDATE),data:H({layout_mode:Ka(ys)})})},[Ss.ORIENTATION_UPDATE]:{payload:Cs.extend({evt:oa(Ss.ORIENTATION_UPDATE),data:H({screen_orientation:Ka(_s),orientation:ca(Wa)})})},[Ss.CURRENT_USER_UPDATE]:{payload:Cs.extend({evt:oa(Ss.CURRENT_USER_UPDATE),data:To})},[Ss.CURRENT_GUILD_MEMBER_UPDATE]:{payload:Cs.extend({evt:oa(Ss.CURRENT_GUILD_MEMBER_UPDATE),data:Do}),subscribeArgs:H({guild_id:V()})},[Ss.ENTITLEMENT_CREATE]:{payload:Cs.extend({evt:oa(Ss.ENTITLEMENT_CREATE),data:H({entitlement:fs})})},[Ss.THERMAL_STATE_UPDATE]:{payload:Cs.extend({evt:oa(Ss.THERMAL_STATE_UPDATE),data:H({thermal_state:gs})})},[Ss.ACTIVITY_INSTANCE_PARTICIPANTS_UPDATE]:{payload:Cs.extend({evt:oa(Ss.ACTIVITY_INSTANCE_PARTICIPANTS_UPDATE),data:H({participants:Qa.shape.participants})})},[Ss.RELATIONSHIP_UPDATE]:{payload:Cs.extend({evt:oa(Ss.RELATIONSHIP_UPDATE),data:wo})},[Ss.ACTIVITY_JOIN]:{payload:Cs.extend({evt:oa(Ss.ACTIVITY_JOIN),data:H({applicationId:V(),secret:V()})})},[Ss.QUEST_ENROLLMENT_STATUS_UPDATE]:{payload:Cs.extend({evt:oa(Ss.QUEST_ENROLLMENT_STATUS_UPDATE),data:H({quest_id:V(),is_enrolled:Bi(),enrolled_at:V().date()})})}};function Os(e,t){throw t}var ks=H({}).nullable(),As=H({code:V()}),js=H({guilds:Yi(H({id:V(),name:V()}))}),Ms=H({id:V(),name:V(),icon_url:V().optional(),members:Yi(Eo)}),Ns=H({id:V(),type:Ka(Io),guild_id:V().optional().nullable(),name:V().optional().nullable(),topic:V().optional().nullable(),bitrate:Li().optional().nullable(),user_limit:Li().optional().nullable(),position:Li().optional().nullable(),voice_states:Yi(Ao),messages:Yi(es)}),Ps=H({channels:Yi(Lo)});Ns.nullable();var Fs=Ns.nullable(),Is=Ns.nullable();H({input:os,output:os,mode:as,automatic_gain_control:Bi(),echo_cancellation:Bi(),noise_suppression:Bi(),qos:Bi(),silence_warning:Bi(),deaf:Bi(),mute:Bi()});var Ls=H({evt:V()}),Rs=H({shortcut:rs}),zs=No,Bs=H({skus:Yi(us)}),Vs=H({entitlements:Yi(fs)}),Hs=Yi(fs).nullable(),Us=H({use_interactive_pip:Bi()}),Ws=H({locale:V()}),Gs=H({enabled:Bi()}),Ks=H({permissions:zi().or(V())}),qs=qa(H({opened:Bi().or(Wi())}).default({opened:null})),Js=H({iosKeyboardResizesView:da(Bi())}),Ys=xo.extend({cmd:ca(bo),evt:Wi()});function Xs({cmd:e,data:t}){switch(e){case bo.AUTHORIZE:return As.parse(t);case bo.CAPTURE_SHORTCUT:return Rs.parse(t);case bo.ENCOURAGE_HW_ACCELERATION:return Gs.parse(t);case bo.GET_CHANNEL:return Ns.parse(t);case bo.GET_CHANNELS:return Ps.parse(t);case bo.GET_CHANNEL_PERMISSIONS:return Ks.parse(t);case bo.GET_GUILD:return Ms.parse(t);case bo.GET_GUILDS:return js.parse(t);case bo.GET_PLATFORM_BEHAVIORS:return Js.parse(t);case bo.GET_CHANNEL:return Ns.parse(t);case bo.SELECT_TEXT_CHANNEL:return Is.parse(t);case bo.SELECT_VOICE_CHANNEL:return Fs.parse(t);case bo.SET_ACTIVITY:return zs.parse(t);case bo.GET_SKUS_EMBEDDED:return Bs.parse(t);case bo.GET_ENTITLEMENTS_EMBEDDED:return Vs.parse(t);case bo.SET_CONFIG:return Us.parse(t);case bo.START_PURCHASE:return Hs.parse(t);case bo.SUBSCRIBE:case bo.UNSUBSCRIBE:return Ls.parse(t);case bo.USER_SETTINGS_GET_LOCALE:return Ws.parse(t);case bo.OPEN_EXTERNAL_LINK:return qs.parse(t);case bo.SET_ORIENTATION_LOCK_STATE:case bo.SET_CERTIFIED_DEVICES:case bo.SEND_ANALYTICS_EVENT:case bo.OPEN_INVITE_DIALOG:case bo.CAPTURE_LOG:case bo.GET_SKUS:case bo.GET_ENTITLEMENTS:return ks.parse(t);case bo.AUTHENTICATE:case bo.GET_ACTIVITY_INSTANCE_CONNECTED_PARTICIPANTS:case bo.GET_QUEST:case bo.GET_QUEST_ENROLLMENT_STATUS:case bo.GET_RELATIONSHIPS:case bo.GET_USER:case bo.INITIATE_IMAGE_UPLOAD:case bo.INVITE_USER_EMBEDDED:case bo.OPEN_SHARE_MOMENT_DIALOG:case bo.QUEST_START_TIMER:case bo.REQUEST_PROXY_TICKET_REFRESH:case bo.SHARE_INTERACTION:case bo.SHARE_LINK:let{response:n}=_o[e];return n.parse(t);default:Os(e,Error(`Unrecognized command ${e}`))}}function Zs(e){return Object.assign(Object.assign({},e),{data:Xs(e)})}H({frame_id:V(),platform:ca(Ga).optional().nullable()}),H({v:oa(1),encoding:oa(`json`).optional(),client_id:V(),frame_id:V()});var Qs=H({code:Li(),message:V().optional()}),$s=H({evt:V().nullable(),nonce:V().nullable(),data:Ki().nullable(),cmd:V()}).passthrough();function ec(e){let t=$s.parse(e);return t.evt==null?Zs(Ys.passthrough().parse(t)):t.evt===`ERROR`?ws.parse(t):Es(Ts.parse(t))}function tc(e,t,n,r=()=>void 0){let i=xo.extend({cmd:oa(t),data:n});return async n=>{let a=await e({cmd:t,args:n,transfer:r(n)});return i.parse(a).data}}function nc(e,t=()=>void 0){let n=_o[e].response,r=xo.extend({cmd:oa(e),data:n});return n=>async i=>{let a=await n({cmd:e,args:i,transfer:t(i)});return r.parse(a).data}}var rc=e=>tc(e,bo.AUTHORIZE,As),ic=e=>tc(e,bo.CAPTURE_LOG,ks),ac=e=>tc(e,bo.ENCOURAGE_HW_ACCELERATION,Gs),oc=e=>tc(e,bo.GET_CHANNEL,Ns),sc=e=>tc(e,bo.GET_ENTITLEMENTS_EMBEDDED,Vs),cc=e=>tc(e,bo.GET_SKUS_EMBEDDED,Bs),lc=e=>tc(e,bo.GET_CHANNEL_PERMISSIONS,Ks),uc=e=>tc(e,bo.GET_PLATFORM_BEHAVIORS,Js),dc=e=>tc(e,bo.OPEN_EXTERNAL_LINK,qs),fc=e=>tc(e,bo.OPEN_INVITE_DIALOG,ks);No.pick({state:!0,state_url:!0,details:!0,details_url:!0,timestamps:!0,assets:!0,party:!0,secrets:!0,instance:!0,type:!0}).extend({type:No.shape.type.optional(),instance:No.shape.instance.optional()}).nullable();var pc=e=>tc(e,bo.SET_ACTIVITY,zs),mc=e=>tc(e,bo.SET_CONFIG,Us);function hc({sendCommand:e,cmd:t,response:n,fallbackTransform:r,transferTransform:i=()=>void 0}){let a=xo.extend({cmd:oa(t),data:n});return async n=>{try{let r=await e({cmd:t,args:n,transfer:i(n)});return a.parse(r).data}catch(o){if(o.code===Ua.INVALID_PAYLOAD){let o=r(n),s=await e({cmd:t,args:o,transfer:i(o)});return a.parse(s).data}else throw o}}}var gc=e=>({lock_state:e.lock_state,picture_in_picture_lock_state:e.picture_in_picture_lock_state}),_c=e=>hc({sendCommand:e,cmd:bo.SET_ORIENTATION_LOCK_STATE,response:ks,fallbackTransform:gc}),vc=e=>tc(e,bo.START_PURCHASE,Hs),yc=e=>tc(e,bo.USER_SETTINGS_GET_LOCALE,Ws),bc=nc(mo.AUTHENTICATE),xc=nc(mo.GET_ACTIVITY_INSTANCE_CONNECTED_PARTICIPANTS),Sc=nc(mo.GET_QUEST),Cc=nc(mo.GET_QUEST_ENROLLMENT_STATUS),wc=nc(mo.GET_RELATIONSHIPS),Tc=nc(mo.GET_USER),Ec=nc(mo.INITIATE_IMAGE_UPLOAD),Dc=nc(mo.INVITE_USER_EMBEDDED),Oc=nc(mo.OPEN_SHARE_MOMENT_DIALOG),kc=nc(mo.QUEST_START_TIMER),Ac=nc(mo.REQUEST_PROXY_TICKET_REFRESH),jc=nc(mo.SHARE_INTERACTION),Mc=nc(mo.SHARE_LINK);function Nc(e){return{authorize:rc(e),captureLog:ic(e),encourageHardwareAcceleration:ac(e),getChannel:oc(e),getChannelPermissions:lc(e),getEntitlements:sc(e),getPlatformBehaviors:uc(e),getSkus:cc(e),openExternalLink:dc(e),openInviteDialog:fc(e),setActivity:pc(e),setConfig:mc(e),setOrientationLockState:_c(e),startPurchase:vc(e),userSettingsGetLocale:yc(e),getInstanceConnectedParticipants:xc(e),authenticate:bc(e),getActivityInstanceConnectedParticipants:xc(e),getQuest:Sc(e),getQuestEnrollmentStatus:Cc(e),getRelationships:wc(e),getUser:Tc(e),initiateImageUpload:Ec(e),inviteUserEmbedded:Dc(e),openShareMomentDialog:Oc(e),questStartTimer:kc(e),requestProxyTicketRefresh:Ac(e),shareInteraction:jc(e),shareLink:Mc(e)}}var Pc=class extends Error{constructor(e,t=``){super(t),this.code=e,this.message=t,this.name=`Discord SDK Error`}};function Fc(){return{disableConsoleLogOverride:!1}}var Ic=[`log`,`warn`,`debug`,`info`,`error`];function Lc(e,t,n){let r=e[t],i=e;r&&(e[t]=function(){let e=[].slice.call(arguments);n(t,``+e.join(` `)),r.apply(i,e)})}var Rc=`2.5.0`,zc={randomUUID:typeof crypto<`u`&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)},Bc,Vc=new Uint8Array(16);function Hc(){if(!Bc){if(typeof crypto>`u`||!crypto.getRandomValues)throw Error(`crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported`);Bc=crypto.getRandomValues.bind(crypto)}return Bc(Vc)}var Uc=[];for(let e=0;e<256;++e)Uc.push((e+256).toString(16).slice(1));function Wc(e,t=0){return(Uc[e[t+0]]+Uc[e[t+1]]+Uc[e[t+2]]+Uc[e[t+3]]+`-`+Uc[e[t+4]]+Uc[e[t+5]]+`-`+Uc[e[t+6]]+Uc[e[t+7]]+`-`+Uc[e[t+8]]+Uc[e[t+9]]+`-`+Uc[e[t+10]]+Uc[e[t+11]]+Uc[e[t+12]]+Uc[e[t+13]]+Uc[e[t+14]]+Uc[e[t+15]]).toLowerCase()}function Gc(e,t,n){if(zc.randomUUID&&!t&&!e)return zc.randomUUID();e||={};let r=e.random??e.rng?.()??Hc();if(r.length<16)throw Error(`Random bytes length must be >= 16`);return r[6]=r[6]&15|64,r[8]=r[8]&63|128,Wc(r)}var Kc;(function(e){e[e.HANDSHAKE=0]=`HANDSHAKE`,e[e.FRAME=1]=`FRAME`,e[e.CLOSE=2]=`CLOSE`,e[e.HELLO=3]=`HELLO`})(Kc||={});var qc=new Set(Jc());function Jc(){return typeof window>`u`?[]:[window.location.origin,`https://discord.com`,`https://discordapp.com`,`https://ptb.discord.com`,`https://ptb.discordapp.com`,`https://canary.discord.com`,`https://canary.discordapp.com`,`https://staging.discord.co`,`http://localhost:3333`,`https://pax.discord.com`,`null`]}function Yc(){return[window.parent.opener??window.parent,document.referrer?document.referrer:`*`]}var Xc=class{getTransfer(e){switch(e.cmd){case bo.SUBSCRIBE:case bo.UNSUBSCRIBE:return;default:return e.transfer??void 0}}constructor(e,t){if(this.sdkVersion=Rc,this.mobileAppVersion=null,this.source=null,this.sourceOrigin=``,this.eventBus=new Qn,this.pendingCommands=new Map,this.sendCommand=e=>{var t;if(this.source==null)throw Error(`Attempting to send message before initialization`);let n=Gc();return(t=this.source)==null||t.postMessage([Kc.FRAME,Object.assign(Object.assign({},e),{nonce:n})],this.sourceOrigin,this.getTransfer(e)),new Promise((e,t)=>{this.pendingCommands.set(n,{resolve:e,reject:t})})},this.commands=Nc(this.sendCommand),this.handleMessage=e=>{if(!qc.has(e.origin))return;let t=e.data;if(!Array.isArray(t))return;let[n,r]=t;switch(n){case Kc.HELLO:return;case Kc.CLOSE:return this.handleClose(r);case Kc.HANDSHAKE:return this.handleHandshake();case Kc.FRAME:return this.handleFrame(r);default:throw Error(`Invalid message format`)}},this.isReady=!1,this.clientId=e,this.configuration=t??Fc(),typeof window<`u`&&window.addEventListener(`message`,this.handleMessage),typeof window>`u`){this.frameId=``,this.instanceId=``,this.customId=null,this.referrerId=null,this.platform=Ga.DESKTOP,this.guildId=null,this.channelId=null,this.locationId=null;return}let n=new URLSearchParams(this._getSearch()),r=n.get(`frame_id`);if(!r)throw Error(`frame_id query param is not defined`);this.frameId=r;let i=n.get(`instance_id`);if(!i)throw Error(`instance_id query param is not defined`);this.instanceId=i;let a=n.get(`platform`);if(!a)throw Error(`platform query param is not defined`);if(a!==Ga.DESKTOP&&a!==Ga.MOBILE)throw Error(`Invalid query param "platform" of "${a}". Valid values are "${Ga.DESKTOP}" or "${Ga.MOBILE}"`);this.platform=a,this.customId=n.get(`custom_id`),this.referrerId=n.get(`referrer_id`),this.guildId=n.get(`guild_id`),this.channelId=n.get(`channel_id`),this.locationId=n.get(`location_id`),this.mobileAppVersion=n.get(`mobile_app_version`),[this.source,this.sourceOrigin]=Yc(),this.addOnReadyListener(),this.handshake()}close(e,t){var n;window.removeEventListener(`message`,this.handleMessage);let r=Gc();(n=this.source)==null||n.postMessage([Kc.CLOSE,{code:e,message:t,nonce:r}],this.sourceOrigin)}async subscribe(e,t,...n){let[r]=n,i=this.eventBus.listenerCount(e),a=this.eventBus.on(e,t);return Object.values(Ss).includes(e)&&e!==Ss.READY&&i===0&&await this.sendCommand({cmd:bo.SUBSCRIBE,args:r,evt:e}),a}async unsubscribe(e,t,...n){let[r]=n;return e!==Ss.READY&&this.eventBus.listenerCount(e)===1&&await this.sendCommand({cmd:bo.UNSUBSCRIBE,evt:e,args:r}),this.eventBus.off(e,t)}async ready(){this.isReady||await new Promise(e=>{this.eventBus.once(Ss.READY,e)})}parseMajorMobileVersion(){if(this.mobileAppVersion&&this.mobileAppVersion.includes(`.`))try{return parseInt(this.mobileAppVersion.split(`.`)[0])}catch{return-1}return-1}handshake(){var e;let t={v:1,encoding:`json`,client_id:this.clientId,frame_id:this.frameId},n=this.parseMajorMobileVersion();(this.platform===Ga.DESKTOP||n>=250)&&(t.sdk_version=this.sdkVersion),(e=this.source)==null||e.postMessage([Kc.HANDSHAKE,t],this.sourceOrigin)}addOnReadyListener(){this.eventBus.once(Ss.READY,()=>{this.overrideConsoleLogging(),this.isReady=!0})}overrideConsoleLogging(){if(this.configuration.disableConsoleLogOverride)return;let e=(e,t)=>{this.commands.captureLog({level:e,message:t})};Ic.forEach(t=>{Lc(console,t,e)})}handleClose(e){Qs.parse(e)}handleHandshake(){}handleFrame(e){var t,n;let r;try{r=ec(e)}catch(t){console.error(`Failed to parse`,e),console.error(t);return}if(r.cmd===`DISPATCH`)this.eventBus.emit(r.evt,r.data);else{if(r.evt===`ERROR`){if(r.nonce!=null){(t=this.pendingCommands.get(r.nonce))==null||t.reject(r.data),this.pendingCommands.delete(r.nonce);return}this.eventBus.emit(`error`,new Pc(r.data.code,r.data.message))}if(r.nonce==null){console.error(`Missing nonce`,e);return}(n=this.pendingCommands.get(r.nonce))==null||n.resolve(r),this.pendingCommands.delete(r.nonce)}}_getSearch(){return typeof window>`u`?``:window.location.search}},Zc=1e9,Qc={precision:20,rounding:4,toExpNeg:-7,toExpPos:21,LN10:`2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286`},$c=!0,el=`[DecimalError] `,tl=el+`Invalid argument: `,nl=el+`Exponent out of range: `,rl=Math.floor,il=Math.pow,al=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,ol,sl=1e7,cl=7,ll=9007199254740991,ul=rl(ll/cl),W={};W.absoluteValue=W.abs=function(){var e=new this.constructor(this);return e.s&&=1,e},W.comparedTo=W.cmp=function(e){var t,n,r,i,a=this;if(e=new a.constructor(e),a.s!==e.s)return a.s||-e.s;if(a.e!==e.e)return a.e>e.e^a.s<0?1:-1;for(r=a.d.length,i=e.d.length,t=0,n=re.d[t]^a.s<0?1:-1;return r===i?0:r>i^a.s<0?1:-1},W.decimalPlaces=W.dp=function(){var e=this,t=e.d.length-1,n=(t-e.e)*cl;if(t=e.d[t],t)for(;t%10==0;t/=10)n--;return n<0?0:n},W.dividedBy=W.div=function(e){return ml(this,new this.constructor(e))},W.dividedToIntegerBy=W.idiv=function(e){var t=this,n=t.constructor;return xl(ml(t,new n(e),0,1),n.precision)},W.equals=W.eq=function(e){return!this.cmp(e)},W.exponent=function(){return gl(this)},W.greaterThan=W.gt=function(e){return this.cmp(e)>0},W.greaterThanOrEqualTo=W.gte=function(e){return this.cmp(e)>=0},W.isInteger=W.isint=function(){return this.e>this.d.length-2},W.isNegative=W.isneg=function(){return this.s<0},W.isPositive=W.ispos=function(){return this.s>0},W.isZero=function(){return this.s===0},W.lessThan=W.lt=function(e){return this.cmp(e)<0},W.lessThanOrEqualTo=W.lte=function(e){return this.cmp(e)<1},W.logarithm=W.log=function(e){var t,n=this,r=n.constructor,i=r.precision,a=i+5;if(e===void 0)e=new r(10);else if(e=new r(e),e.s<1||e.eq(ol))throw Error(el+`NaN`);if(n.s<1)throw Error(el+(n.s?`NaN`:`-Infinity`));return n.eq(ol)?new r(0):($c=!1,t=ml(yl(n,a),yl(e,a),a),$c=!0,xl(t,i))},W.minus=W.sub=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?Sl(t,e):dl(t,(e.s=-e.s,e))},W.modulo=W.mod=function(e){var t,n=this,r=n.constructor,i=r.precision;if(e=new r(e),!e.s)throw Error(el+`NaN`);return n.s?($c=!1,t=ml(n,e,0,1).times(e),$c=!0,n.minus(t)):xl(new r(n),i)},W.naturalExponential=W.exp=function(){return hl(this)},W.naturalLogarithm=W.ln=function(){return yl(this)},W.negated=W.neg=function(){var e=new this.constructor(this);return e.s=-e.s||0,e},W.plus=W.add=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?dl(t,e):Sl(t,(e.s=-e.s,e))},W.precision=W.sd=function(e){var t,n,r,i=this;if(e!==void 0&&e!==!!e&&e!==1&&e!==0)throw Error(tl+e);if(t=gl(i)+1,r=i.d.length-1,n=r*cl+1,r=i.d[r],r){for(;r%10==0;r/=10)n--;for(r=i.d[0];r>=10;r/=10)n++}return e&&t>n?t:n},W.squareRoot=W.sqrt=function(){var e,t,n,r,i,a,o,s=this,c=s.constructor;if(s.s<1){if(!s.s)return new c(0);throw Error(el+`NaN`)}for(e=gl(s),$c=!1,i=Math.sqrt(+s),i==0||i==1/0?(t=pl(s.d),(t.length+e)%2==0&&(t+=`0`),i=Math.sqrt(t),e=rl((e+1)/2)-(e<0||e%2),i==1/0?t=`5e`+e:(t=i.toExponential(),t=t.slice(0,t.indexOf(`e`)+1)+e),r=new c(t)):r=new c(i.toString()),n=c.precision,i=o=n+3;;)if(a=r,r=a.plus(ml(s,a,o+2)).times(.5),pl(a.d).slice(0,o)===(t=pl(r.d)).slice(0,o)){if(t=t.slice(o-3,o+1),i==o&&t==`4999`){if(xl(a,n+1,0),a.times(a).eq(s)){r=a;break}}else if(t!=`9999`)break;o+=4}return $c=!0,xl(r,n)},W.times=W.mul=function(e){var t,n,r,i,a,o,s,c,l,u=this,d=u.constructor,f=u.d,p=(e=new d(e)).d;if(!u.s||!e.s)return new d(0);for(e.s*=u.s,n=u.e+e.e,c=f.length,l=p.length,c=0;){for(t=0,i=c+r;i>r;)s=a[i]+p[r]*f[i-r-1]+t,a[i--]=s%sl|0,t=s/sl|0;a[i]=(a[i]+t)%sl|0}for(;!a[--o];)a.pop();return t?++n:a.shift(),e.d=a,e.e=n,$c?xl(e,d.precision):e},W.toDecimalPlaces=W.todp=function(e,t){var n=this,r=n.constructor;return n=new r(n),e===void 0?n:(fl(e,0,Zc),t===void 0?t=r.rounding:fl(t,0,8),xl(n,e+gl(n)+1,t))},W.toExponential=function(e,t){var n,r=this,i=r.constructor;return e===void 0?n=Cl(r,!0):(fl(e,0,Zc),t===void 0?t=i.rounding:fl(t,0,8),r=xl(new i(r),e+1,t),n=Cl(r,!0,e+1)),n},W.toFixed=function(e,t){var n,r,i=this,a=i.constructor;return e===void 0?Cl(i):(fl(e,0,Zc),t===void 0?t=a.rounding:fl(t,0,8),r=xl(new a(i),e+gl(i)+1,t),n=Cl(r.abs(),!1,e+gl(r)+1),i.isneg()&&!i.isZero()?`-`+n:n)},W.toInteger=W.toint=function(){var e=this,t=e.constructor;return xl(new t(e),gl(e)+1,t.rounding)},W.toNumber=function(){return+this},W.toPower=W.pow=function(e){var t,n,r,i,a,o,s=this,c=s.constructor,l=12,u=+(e=new c(e));if(!e.s)return new c(ol);if(s=new c(s),!s.s){if(e.s<1)throw Error(el+`Infinity`);return s}if(s.eq(ol))return s;if(r=c.precision,e.eq(ol))return xl(s,r);if(t=e.e,n=e.d.length-1,o=t>=n,a=s.s,!o){if(a<0)throw Error(el+`NaN`)}else if((n=u<0?-u:u)<=ll){for(i=new c(ol),t=Math.ceil(r/cl+4),$c=!1;n%2&&(i=i.times(s),wl(i.d,t)),n=rl(n/2),n!==0;)s=s.times(s),wl(s.d,t);return $c=!0,e.s<0?new c(ol).div(i):xl(i,r)}return a=a<0&&e.d[Math.max(t,n)]&1?-1:1,s.s=1,$c=!1,i=e.times(yl(s,r+l)),$c=!0,i=hl(i),i.s=a,i},W.toPrecision=function(e,t){var n,r,i=this,a=i.constructor;return e===void 0?(n=gl(i),r=Cl(i,n<=a.toExpNeg||n>=a.toExpPos)):(fl(e,1,Zc),t===void 0?t=a.rounding:fl(t,0,8),i=xl(new a(i),e,t),n=gl(i),r=Cl(i,e<=n||n<=a.toExpNeg,e)),r},W.toSignificantDigits=W.tosd=function(e,t){var n=this,r=n.constructor;return e===void 0?(e=r.precision,t=r.rounding):(fl(e,1,Zc),t===void 0?t=r.rounding:fl(t,0,8)),xl(new r(n),e,t)},W.toString=W.valueOf=W.val=W.toJSON=W[Symbol.for(`nodejs.util.inspect.custom`)]=function(){var e=this,t=gl(e),n=e.constructor;return Cl(e,t<=n.toExpNeg||t>=n.toExpPos)};function dl(e,t){var n,r,i,a,o,s,c,l,u=e.constructor,d=u.precision;if(!e.s||!t.s)return t.s||(t=new u(e)),$c?xl(t,d):t;if(c=e.d,l=t.d,o=e.e,i=t.e,c=c.slice(),a=o-i,a){for(a<0?(r=c,a=-a,s=l.length):(r=l,i=o,s=c.length),o=Math.ceil(d/cl),s=o>s?o+1:s+1,a>s&&(a=s,r.length=1),r.reverse();a--;)r.push(0);r.reverse()}for(s=c.length,a=l.length,s-a<0&&(a=s,r=l,l=c,c=r),n=0;a;)n=(c[--a]=c[a]+l[a]+n)/sl|0,c[a]%=sl;for(n&&(c.unshift(n),++i),s=c.length;c[--s]==0;)c.pop();return t.d=c,t.e=i,$c?xl(t,d):t}function fl(e,t,n){if(e!==~~e||en)throw Error(tl+e)}function pl(e){var t,n,r,i=e.length-1,a=``,o=e[0];if(i>0){for(a+=o,t=1;tr?1:-1;else for(i=a=0;it[i]?1:-1;break}return a}function n(e,t,n){for(var r=0;n--;)e[n]-=r,r=+(e[n]1;)e.shift()}return function(r,i,a,o){var s,c,l,u,d,f,p,m,h,g,_,v,y,b,x,S,C,w,T=r.constructor,E=r.s==i.s?1:-1,D=r.d,O=i.d;if(!r.s)return new T(r);if(!i.s)throw Error(el+`Division by zero`);for(c=r.e-i.e,C=O.length,x=D.length,p=new T(E),m=p.d=[],l=0;O[l]==(D[l]||0);)++l;if(O[l]>(D[l]||0)&&--c,v=a==null?a=T.precision:o?a+(gl(r)-gl(i))+1:a,v<0)return new T(0);if(v=v/cl+2|0,l=0,C==1)for(u=0,O=O[0],v++;(l1&&(O=e(O,u),D=e(D,u),C=O.length,x=D.length),b=C,h=D.slice(0,C),g=h.length;g=sl/2&&++S;do u=0,s=t(O,h,C,g),s<0?(_=h[0],C!=g&&(_=_*sl+(h[1]||0)),u=_/S|0,u>1?(u>=sl&&(u=sl-1),d=e(O,u),f=d.length,g=h.length,s=t(d,h,f,g),s==1&&(u--,n(d,C16)throw Error(nl+gl(e));if(!e.s)return new u(ol);for(t==null?($c=!1,s=d):s=t,o=new u(.03125);e.abs().gte(.1);)e=e.times(o),l+=5;for(r=Math.log(il(2,l))/Math.LN10*2+5|0,s+=r,n=i=a=new u(ol),u.precision=s;;){if(i=xl(i.times(e),s),n=n.times(++c),o=a.plus(ml(i,n,s)),pl(o.d).slice(0,s)===pl(a.d).slice(0,s)){for(;l--;)a=xl(a.times(a),s);return u.precision=d,t==null?($c=!0,xl(a,d)):a}a=o}}function gl(e){for(var t=e.e*cl,n=e.d[0];n>=10;n/=10)t++;return t}function _l(e,t,n){if(t>e.LN10.sd())throw $c=!0,n&&(e.precision=n),Error(el+`LN10 precision limit exceeded`);return xl(new e(e.LN10),t)}function vl(e){for(var t=``;e--;)t+=`0`;return t}function yl(e,t){var n,r,i,a,o,s,c,l,u,d=1,f=10,p=e,m=p.d,h=p.constructor,g=h.precision;if(p.s<1)throw Error(el+(p.s?`NaN`:`-Infinity`));if(p.eq(ol))return new h(0);if(t==null?($c=!1,l=g):l=t,p.eq(10))return t??($c=!0),_l(h,l);if(l+=f,h.precision=l,n=pl(m),r=n.charAt(0),a=gl(p),Math.abs(a)<0x5543df729c000){for(;r<7&&r!=1||r==1&&n.charAt(1)>3;)p=p.times(e),n=pl(p.d),r=n.charAt(0),d++;a=gl(p),r>1?(p=new h(`0.`+n),a++):p=new h(r+`.`+n.slice(1))}else return c=_l(h,l+2,g).times(a+``),p=yl(new h(r+`.`+n.slice(1)),l-f).plus(c),h.precision=g,t==null?($c=!0,xl(p,g)):p;for(s=o=p=ml(p.minus(ol),p.plus(ol),l),u=xl(p.times(p),l),i=3;;){if(o=xl(o.times(u),l),c=s.plus(ml(o,new h(i),l)),pl(c.d).slice(0,l)===pl(s.d).slice(0,l))return s=s.times(2),a!==0&&(s=s.plus(_l(h,l+2,g).times(a+``))),s=ml(s,new h(d),l),h.precision=g,t==null?($c=!0,xl(s,g)):s;s=c,i+=2}}function bl(e,t){var n,r,i;for((n=t.indexOf(`.`))>-1&&(t=t.replace(`.`,``)),(r=t.search(/e/i))>0?(n<0&&(n=r),n+=+t.slice(r+1),t=t.substring(0,r)):n<0&&(n=t.length),r=0;t.charCodeAt(r)===48;)++r;for(i=t.length;t.charCodeAt(i-1)===48;)--i;if(t=t.slice(r,i),t){if(i-=r,n=n-r-1,e.e=rl(n/cl),e.d=[],r=(n+1)%cl,n<0&&(r+=cl),rul||e.e<-ul))throw Error(nl+n)}else e.s=0,e.e=0,e.d=[0];return e}function xl(e,t,n){var r,i,a,o,s,c,l,u,d=e.d;for(o=1,a=d[0];a>=10;a/=10)o++;if(r=t-o,r<0)r+=cl,i=t,l=d[u=0];else{if(u=Math.ceil((r+1)/cl),a=d.length,u>=a)return e;for(l=a=d[u],o=1;a>=10;a/=10)o++;r%=cl,i=r-cl+o}if(n!==void 0&&(a=il(10,o-i-1),s=l/a%10|0,c=t<0||d[u+1]!==void 0||l%a,c=n<4?(s||c)&&(n==0||n==(e.s<0?3:2)):s>5||s==5&&(n==4||c||n==6&&(r>0?i>0?l/il(10,o-i):0:d[u-1])%10&1||n==(e.s<0?8:7))),t<1||!d[0])return c?(a=gl(e),d.length=1,t=t-a-1,d[0]=il(10,(cl-t%cl)%cl),e.e=rl(-t/cl)||0):(d.length=1,d[0]=e.e=e.s=0),e;if(r==0?(d.length=u,a=1,u--):(d.length=u+1,a=il(10,cl-r),d[u]=i>0?(l/il(10,o-i)%il(10,i)|0)*a:0),c)for(;;)if(u==0){(d[0]+=a)==sl&&(d[0]=1,++e.e);break}else{if(d[u]+=a,d[u]!=sl)break;d[u--]=0,a=1}for(r=d.length;d[--r]===0;)d.pop();if($c&&(e.e>ul||e.e<-ul))throw Error(nl+gl(e));return e}function Sl(e,t){var n,r,i,a,o,s,c,l,u,d,f=e.constructor,p=f.precision;if(!e.s||!t.s)return t.s?t.s=-t.s:t=new f(e),$c?xl(t,p):t;if(c=e.d,d=t.d,r=t.e,l=e.e,c=c.slice(),o=l-r,o){for(u=o<0,u?(n=c,o=-o,s=d.length):(n=d,r=l,s=c.length),i=Math.max(Math.ceil(p/cl),s)+2,o>i&&(o=i,n.length=1),n.reverse(),i=o;i--;)n.push(0);n.reverse()}else{for(i=c.length,s=d.length,u=i0;--i)c[s++]=0;for(i=d.length;i>o;){if(c[--i]0?a=a.charAt(0)+`.`+a.slice(1)+vl(r):o>1&&(a=a.charAt(0)+`.`+a.slice(1)),a=a+(i<0?`e`:`e+`)+i):i<0?(a=`0.`+vl(-i-1)+a,n&&(r=n-o)>0&&(a+=vl(r))):i>=o?(a+=vl(i+1-o),n&&(r=n-i-1)>0&&(a=a+`.`+vl(r))):((r=i+1)0&&(i+1===o&&(a+=`.`),a+=vl(r))),e.s<0?`-`+a:a}function wl(e,t){if(e.length>t)return e.length=t,!0}function Tl(e){var t,n,r;function i(e){var t=this;if(!(t instanceof i))return new i(e);if(t.constructor=i,e instanceof i){t.s=e.s,t.e=e.e,t.d=(e=e.d)?e.slice():e;return}if(typeof e==`number`){if(e*0!=0)throw Error(tl+e);if(e>0)t.s=1;else if(e<0)e=-e,t.s=-1;else{t.s=0,t.e=0,t.d=[0];return}if(e===~~e&&e<1e7){t.e=0,t.d=[e];return}return bl(t,e.toString())}else if(typeof e!=`string`)throw Error(tl+e);if(e.charCodeAt(0)===45?(e=e.slice(1),t.s=-1):t.s=1,al.test(e))bl(t,e);else throw Error(tl+e)}if(i.prototype=W,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.clone=Tl,i.config=i.set=El,e===void 0&&(e={}),e)for(r=[`precision`,`rounding`,`toExpNeg`,`toExpPos`,`LN10`],t=0;t=i[t+1]&&r<=i[t+2])this[n]=r;else throw Error(tl+n+`: `+r);if((r=e[n=`LN10`])!==void 0)if(r==Math.LN10)this[n]=new this(r);else throw Error(tl+n+`: `+r);return this}ol=new(Tl(Qc))(1);var G;(function(e){e.AED=`aed`,e.AFN=`afn`,e.ALL=`all`,e.AMD=`amd`,e.ANG=`ang`,e.AOA=`aoa`,e.ARS=`ars`,e.AUD=`aud`,e.AWG=`awg`,e.AZN=`azn`,e.BAM=`bam`,e.BBD=`bbd`,e.BDT=`bdt`,e.BGN=`bgn`,e.BHD=`bhd`,e.BIF=`bif`,e.BMD=`bmd`,e.BND=`bnd`,e.BOB=`bob`,e.BOV=`bov`,e.BRL=`brl`,e.BSD=`bsd`,e.BTN=`btn`,e.BWP=`bwp`,e.BYN=`byn`,e.BYR=`byr`,e.BZD=`bzd`,e.CAD=`cad`,e.CDF=`cdf`,e.CHE=`che`,e.CHF=`chf`,e.CHW=`chw`,e.CLF=`clf`,e.CLP=`clp`,e.CNY=`cny`,e.COP=`cop`,e.COU=`cou`,e.CRC=`crc`,e.CUC=`cuc`,e.CUP=`cup`,e.CVE=`cve`,e.CZK=`czk`,e.DJF=`djf`,e.DKK=`dkk`,e.DOP=`dop`,e.DZD=`dzd`,e.EGP=`egp`,e.ERN=`ern`,e.ETB=`etb`,e.EUR=`eur`,e.FJD=`fjd`,e.FKP=`fkp`,e.GBP=`gbp`,e.GEL=`gel`,e.GHS=`ghs`,e.GIP=`gip`,e.GMD=`gmd`,e.GNF=`gnf`,e.GTQ=`gtq`,e.GYD=`gyd`,e.HKD=`hkd`,e.HNL=`hnl`,e.HRK=`hrk`,e.HTG=`htg`,e.HUF=`huf`,e.IDR=`idr`,e.ILS=`ils`,e.INR=`inr`,e.IQD=`iqd`,e.IRR=`irr`,e.ISK=`isk`,e.JMD=`jmd`,e.JOD=`jod`,e.JPY=`jpy`,e.KES=`kes`,e.KGS=`kgs`,e.KHR=`khr`,e.KMF=`kmf`,e.KPW=`kpw`,e.KRW=`krw`,e.KWD=`kwd`,e.KYD=`kyd`,e.KZT=`kzt`,e.LAK=`lak`,e.LBP=`lbp`,e.LKR=`lkr`,e.LRD=`lrd`,e.LSL=`lsl`,e.LTL=`ltl`,e.LVL=`lvl`,e.LYD=`lyd`,e.MAD=`mad`,e.MDL=`mdl`,e.MGA=`mga`,e.MKD=`mkd`,e.MMK=`mmk`,e.MNT=`mnt`,e.MOP=`mop`,e.MRO=`mro`,e.MUR=`mur`,e.MVR=`mvr`,e.MWK=`mwk`,e.MXN=`mxn`,e.MXV=`mxv`,e.MYR=`myr`,e.MZN=`mzn`,e.NAD=`nad`,e.NGN=`ngn`,e.NIO=`nio`,e.NOK=`nok`,e.NPR=`npr`,e.NZD=`nzd`,e.OMR=`omr`,e.PAB=`pab`,e.PEN=`pen`,e.PGK=`pgk`,e.PHP=`php`,e.PKR=`pkr`,e.PLN=`pln`,e.PYG=`pyg`,e.QAR=`qar`,e.RON=`ron`,e.RSD=`rsd`,e.RUB=`rub`,e.RWF=`rwf`,e.SAR=`sar`,e.SBD=`sbd`,e.SCR=`scr`,e.SDG=`sdg`,e.SEK=`sek`,e.SGD=`sgd`,e.SHP=`shp`,e.SLL=`sll`,e.SOS=`sos`,e.SRD=`srd`,e.SSP=`ssp`,e.STD=`std`,e.SVC=`svc`,e.SYP=`syp`,e.SZL=`szl`,e.THB=`thb`,e.TJS=`tjs`,e.TMT=`tmt`,e.TND=`tnd`,e.TOP=`top`,e.TRY=`try`,e.TTD=`ttd`,e.TWD=`twd`,e.TZS=`tzs`,e.UAH=`uah`,e.UGX=`ugx`,e.USD=`usd`,e.USN=`usn`,e.USS=`uss`,e.UYI=`uyi`,e.UYU=`uyu`,e.UZS=`uzs`,e.VEF=`vef`,e.VND=`vnd`,e.VUV=`vuv`,e.WST=`wst`,e.XAF=`xaf`,e.XAG=`xag`,e.XAU=`xau`,e.XBA=`xba`,e.XBB=`xbb`,e.XBC=`xbc`,e.XBD=`xbd`,e.XCD=`xcd`,e.XDR=`xdr`,e.XFU=`xfu`,e.XOF=`xof`,e.XPD=`xpd`,e.XPF=`xpf`,e.XPT=`xpt`,e.XSU=`xsu`,e.XTS=`xts`,e.XUA=`xua`,e.YER=`yer`,e.ZAR=`zar`,e.ZMW=`zmw`,e.ZWL=`zwl`})(G||={}),G.AED,G.AFN,G.ALL,G.AMD,G.ANG,G.AOA,G.ARS,G.AUD,G.AWG,G.AZN,G.BAM,G.BBD,G.BDT,G.BGN,G.BHD,G.BIF,G.BMD,G.BND,G.BOB,G.BOV,G.BRL,G.BSD,G.BTN,G.BWP,G.BYR,G.BYN,G.BZD,G.CAD,G.CDF,G.CHE,G.CHF,G.CHW,G.CLF,G.CLP,G.CNY,G.COP,G.COU,G.CRC,G.CUC,G.CUP,G.CVE,G.CZK,G.DJF,G.DKK,G.DOP,G.DZD,G.EGP,G.ERN,G.ETB,G.EUR,G.FJD,G.FKP,G.GBP,G.GEL,G.GHS,G.GIP,G.GMD,G.GNF,G.GTQ,G.GYD,G.HKD,G.HNL,G.HRK,G.HTG,G.HUF,G.IDR,G.ILS,G.INR,G.IQD,G.IRR,G.ISK,G.JMD,G.JOD,G.JPY,G.KES,G.KGS,G.KHR,G.KMF,G.KPW,G.KRW,G.KWD,G.KYD,G.KZT,G.LAK,G.LBP,G.LKR,G.LRD,G.LSL,G.LTL,G.LVL,G.LYD,G.MAD,G.MDL,G.MGA,G.MKD,G.MMK,G.MNT,G.MOP,G.MRO,G.MUR,G.MVR,G.MWK,G.MXN,G.MXV,G.MYR,G.MZN,G.NAD,G.NGN,G.NIO,G.NOK,G.NPR,G.NZD,G.OMR,G.PAB,G.PEN,G.PGK,G.PHP,G.PKR,G.PLN,G.PYG,G.QAR,G.RON,G.RSD,G.RUB,G.RWF,G.SAR,G.SBD,G.SCR,G.SDG,G.SEK,G.SGD,G.SHP,G.SLL,G.SOS,G.SRD,G.SSP,G.STD,G.SVC,G.SYP,G.SZL,G.THB,G.TJS,G.TMT,G.TND,G.TOP,G.TRY,G.TTD,G.TWD,G.TZS,G.UAH,G.UGX,G.USD,G.USN,G.USS,G.UYI,G.UYU,G.UZS,G.VEF,G.VND,G.VUV,G.WST,G.XAF,G.XAG,G.XAU,G.XBA,G.XBB,G.XBC,G.XBD,G.XCD,G.XDR,G.XFU,G.XOF,G.XPD,G.XPF,G.XPT,G.XSU,G.XTS,G.XUA,G.YER,G.ZAR,G.ZMW,G.ZWL;var Dl={exports:{}};Dl.exports;var Ol;function kl(){return Ol?Dl.exports:(Ol=1,(function(e,t){var n=`__lodash_hash_undefined__`,r=9007199254740991,i=`[object Arguments]`,a=`[object Array]`,o=`[object Boolean]`,s=`[object Date]`,c=`[object Error]`,l=`[object Function]`,u=`[object Map]`,d=`[object Number]`,f=`[object Object]`,p=`[object Promise]`,m=`[object RegExp]`,h=`[object Set]`,g=`[object String]`,_=`[object Symbol]`,v=`[object WeakMap]`,y=`[object ArrayBuffer]`,b=`[object DataView]`,x=`[object Float32Array]`,S=`[object Float64Array]`,C=`[object Int8Array]`,w=`[object Int16Array]`,T=`[object Int32Array]`,E=`[object Uint8Array]`,D=`[object Uint8ClampedArray]`,O=`[object Uint16Array]`,ee=`[object Uint32Array]`,te=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,k=/^\w*$/,ne=/^\./,A=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,re=/[\\^$.*+?()[\]{}|]/g,ie=/\\(\\)?/g,ae=/^\[object .+?Constructor\]$/,oe=/^(?:0|[1-9]\d*)$/,j={};j[x]=j[S]=j[C]=j[w]=j[T]=j[E]=j[D]=j[O]=j[ee]=!0,j[i]=j[a]=j[y]=j[o]=j[b]=j[s]=j[c]=j[l]=j[u]=j[d]=j[f]=j[m]=j[h]=j[g]=j[v]=!1;var se=typeof qn==`object`&&qn&&qn.Object===Object&&qn,ce=typeof self==`object`&&self&&self.Object===Object&&self,le=se||ce||globalThis,ue=t&&!t.nodeType&&t,M=ue&&e&&!e.nodeType&&e,N=M&&M.exports===ue&&se.process,de=function(){try{return N&&N.binding(`util`)}catch{}}(),fe=de&&de.isTypedArray;function pe(e,t){for(var n=-1,r=e?e.length:0;++n-1}function ot(e,t){var n=this.__data__,r=Ct(n,e);return r<0?n.push([e,t]):n[r][1]=t,this}tt.prototype.clear=nt,tt.prototype.delete=rt,tt.prototype.get=it,tt.prototype.has=at,tt.prototype.set=ot;function st(e){var t=-1,n=e?e.length:0;for(this.clear();++ts))return!1;var l=a.get(e);if(l&&a.get(t))return l==t;var u=-1,d=!0,f=i&1?new pt:void 0;for(a.set(e,t),a.set(t,e);++u-1&&e%1==0&&e-1&&e%1==0&&e<=r}function gn(e){var t=typeof e;return!!e&&(t==`object`||t==`function`)}function _n(e){return!!e&&typeof e==`object`}function vn(e){return typeof e==`symbol`||_n(e)&&Ee.call(e)==_}var yn=fe?he(fe):Pt;function bn(e){return e==null?``:Bt(e)}function xn(e,t,n){var r=e==null?void 0:Dt(e,t);return r===void 0?n:r}function Sn(e,t){return e!=null&&Xt(e,t,kt)}function Cn(e){return fn(e)?St(e):It(e)}function wn(e,t,n){var r=dn(e)||yn(e);if(t=Ft(t),n==null)if(r||gn(e)){var i=e.constructor;n=r?dn(e)?new i:[]:mn(i)?wt(Ae(e)):{}}else n={};return(r?pe:Et)(e,function(e,r,i){return t(n,e,r,i)}),n}function Tn(e){return e}function En(e){return Qt(e)?P(on(e)):zt(e)}e.exports=wn})(Dl,Dl.exports),Dl.exports)}kl();var{Commands:Al}=vo,jl=[`identify`,`guilds.members.read`];function Ml(e,t){if(e instanceof Bn)return e;if(typeof e==`object`&&e&&`code`in e){let n=e.code,r=Object.values(Ua).filter(e=>typeof e==`number`);if(typeof n==`number`&&r.includes(n))return new Bn(`${t}_${n}`)}return new Bn(t)}var Nl=15e3,Pl=12e4,Fl=15e3;function Il(e=window.location.search){let t=new URLSearchParams(e),n=t.getAll(`frame_id`),r=t.getAll(`platform`);if(n.length!==1||n[0]===void 0||n[0].length===0||n[0].length>255||r.length!==1||![`desktop`,`mobile`].includes(r[0]??``))throw new Bn(`invalid_launch`)}async function Ll(e,t,n,r,i){let a=null,o=new Promise((e,n)=>{t!==void 0&&(a=()=>n(new Bn(`cancelled`)),t.addEventListener(`abort`,a,{once:!0}),t.aborted&&a())}),s=null,c=new Promise((e,t)=>{s=setTimeout(()=>t(new Bn(r)),i)}),l=Promise.resolve().then(()=>{if(t?.aborted)throw new Bn(`cancelled`);return e()}).catch(e=>{throw Ml(e,n)});try{return await Promise.race([l,o,c])}finally{s!==null&&clearTimeout(s),t!==void 0&&a!==null&&t.removeEventListener(`abort`,a)}}var Rl=class{makeSDK;sdk=null;authenticated=!1;closed=!1;constructor(e=e=>new Xc(e)){this.makeSDK=e}async authorize(e){let t=Hn();Il();let n=await Wn(t,e),r=this.open(n.client_id),i=()=>{if(e?.aborted)throw new Bn(`cancelled`)};try{if(i(),await Ll(()=>r.ready(),e,`sdk_ready_failed`,`sdk_ready_timeout`,Nl),i(),r.instanceId!==t)throw new Bn(`instance_mismatch`);let a=await Ll(()=>r.commands.authorize({client_id:n.client_id,response_type:`code`,state:n.state,prompt:`none`,scope:[...jl]}),e,`authorize_failed`,`authorize_timeout`,Pl);i();let o=await Gn(a.code,n.state,e);if(i(),!this.authenticated){if(await Ll(()=>r.commands.authenticate({access_token:o.access_token}),e,`sdk_authenticate_failed`,`sdk_authenticate_timeout`,Fl)==null)throw new Bn(`sdk_authenticate_failed`);this.authenticated=!0,i()}let s=o.ticket;return{sdk:r,bootstrap:n,player:o.player,takeTicket:()=>{let e=s;return s=null,e},destroy:()=>{s=null}}}catch(t){throw e?.aborted?new Bn(`cancelled`):new Bn(Ml(t,`authorization_failed`).code,!0)}}close(){if(!this.closed&&(this.closed=!0,this.sdk!==null))try{this.sdk.close(Ha.CLOSE_NORMAL,`Hands session closed`)}catch{}}open(e){if(this.closed)throw new Bn(`cancelled`);if(this.sdk!==null)return this.sdk;try{this.sdk=this.makeSDK(e)}catch(e){throw new Bn(Ml(e,`sdk_initialization_failed`).code,!0)}return this.sdk}},zl={Digit1:`corner_cut`,Numpad1:`corner_cut`,Digit2:`corner_swelling`,Numpad2:`corner_swelling`,Digit3:`corner_breath`,Numpad3:`corner_breath`},Bl={2:`corner_cut`,3:`corner_swelling`,1:`corner_breath`},Vl=[{kind:`corner_cut`,choice:`cut`,key:`1`,title:`Close the cut`},{kind:`corner_swelling`,choice:`swelling`,key:`2`,title:`Bring down the swelling`},{kind:`corner_breath`,choice:`breath`,key:`3`,title:`Catch your breath`}],Hl={cut:`Your corner is closing the cut.`,swelling:`Your corner is bringing the swelling down.`,breath:`Your corner is getting your breath back.`,balanced:`Your corner did a little of everything.`},Ul=1500,Wl=1e3;function Gl(e){return e<150?`small`:e<350?`nasty`:e<550?`deep`:`dangerous`}var Kl=(e,t)=>Math.round(Math.max(0,Math.min(1,e/t))*100);function ql(e){let{trauma:t}=e,n=Math.max(t.left_cut,t.right_cut),r=Math.max(0,n-p.cut.worse_cut),i=Math.max(t.left_eye,t.right_eye),a=Math.max(0,i-p.swelling.eyes),o=i>=d?a0,swelling:Math.max(t.left_eye,t.right_eye)>0||t.swelling>0,breath:!0,balanced:!1}}function Yl(){try{return[...navigator.getGamepads?.()??[]].find(e=>e!==null&&e.connected&&e.mapping===`standard`)??null}catch{return null}}var Xl=class{pick;now;element;buttons=new Map;details=new Map;status;visible=!1;choice=null;pending=null;shown=null;frozen=null;available=null;padFrame=0;padPrevious=new Set;measuredTop=null;resize=()=>{this.measuredTop=null};keydown=e=>{let t=zl[e.code];t===void 0||!this.visible||e.repeat||(e.preventDefault(),this.choose(t))};constructor(e,t,n=()=>performance.now()){this.pick=t,this.now=n;let r=document.createElement(`section`);r.className=`corner`,r.dataset.corner=``,r.hidden=!0,r.setAttribute(`aria-label`,`Instructions for your corner`);let i=document.createElement(`p`);i.className=`corner-title`,i.textContent=`YOUR CORNER`;let a=document.createElement(`div`);a.className=`corner-choices`;for(let{kind:e,key:t,title:n}of Vl){let r=document.createElement(`button`);r.type=`button`,r.dataset.cornerPick=e;let i=document.createElement(`kbd`);i.textContent=t;let o=document.createElement(`strong`);o.textContent=n;let s=document.createElement(`span`);r.append(i,o,s),r.addEventListener(`click`,()=>this.choose(e)),a.append(r),this.buttons.set(e,r),this.details.set(e,s)}this.status=document.createElement(`p`),this.status.className=`corner-status`,this.status.setAttribute(`role`,`status`),r.append(i,a,this.status),e.append(r),this.element=r,window.addEventListener(`keydown`,this.keydown),window.addEventListener(`resize`,this.resize)}update(e,t,n){let r=e?.fighters.find(e=>e.player_id===t);if(!(n&&e!==null&&e.phase===`rest`&&r!==void 0)||r===void 0){this.setVisible(!1),this.choice=null,this.pending=null,this.shown=null,this.frozen=null;return}this.setVisible(!0),this.choice=r.corner_choice,(this.choice!==null||this.pending!==null&&this.now()-this.pending.at>Ul)&&(this.pending=null);let i=this.choice!==null||this.pending!==null;i||(this.frozen=null);let a=i&&this.frozen!==null?this.frozen:ql(r);this.shown=a;let o=Jl(r);this.available=o;for(let{kind:e,choice:t}of Vl){let n=this.buttons.get(e),r=this.details.get(e);r.textContent!==a[t]&&(r.textContent=a[t]),n.disabled=i||!o[t],n.toggleAttribute(`data-picked`,this.choice===t||this.pending?.kind===e)}let s=this.choice===null?this.pending===null?`Tell your corner what to work on before the bell.`:`Calling it to your corner…`:Hl[this.choice];this.status.textContent!==s&&(this.status.textContent=s)}choose(e){if(!this.visible||this.choice!==null||this.pending!==null)return;let t=Vl.find(t=>t.kind===e)?.choice;if(!(t===void 0||this.available?.[t]===!1)&&this.pick(e)){this.frozen=this.shown,this.pending={kind:e,at:this.now()};for(let[t,n]of this.buttons)n.disabled=!0,n.toggleAttribute(`data-picked`,t===e);this.status.textContent=`Calling it to your corner…`}}setVisible(e){if(e!==this.visible)if(this.visible=e,this.element.hidden=!e,this.measuredTop=null,this.padPrevious.clear(),e){let e=Yl();for(let t of Object.keys(Bl))e?.buttons[Number(t)]?.pressed===!0&&this.padPrevious.add(Number(t));this.padFrame=requestAnimationFrame(()=>this.pollPad())}else cancelAnimationFrame(this.padFrame)}top(){if(!this.visible)return null;if(this.measuredTop===null){let e=this.element.getBoundingClientRect();if(e.height<=0)return null;this.measuredTop=e.top-(this.element.parentElement?.getBoundingClientRect().top??0)}return this.measuredTop}pollPad(){if(!this.visible)return;let e=Yl();if(e!==null)for(let[t,n]of Object.entries(Bl)){let r=Number(t),i=e.buttons[r]?.pressed===!0;i&&!this.padPrevious.has(r)&&this.choose(n),i?this.padPrevious.add(r):this.padPrevious.delete(r)}this.padFrame=requestAnimationFrame(()=>this.pollPad())}destroy(){this.setVisible(!1),window.removeEventListener(`keydown`,this.keydown),window.removeEventListener(`resize`,this.resize),this.element.remove()}},Zl={invalid_launch:`open Hands from a Discord voice channel with Play now`,cancelled:`the session was cancelled`,authorization_failed:`Discord did not authorize the session`,authorize_failed:`Discord did not authorize the session`,authorize_timeout:`Discord took too long to authorize the session`,sdk_ready_failed:`the Discord client did not respond`,sdk_ready_timeout:`the Discord client took too long to respond`,sdk_authenticate_failed:`Discord did not confirm your identity`,sdk_authenticate_timeout:`Discord took too long to confirm your identity`,sdk_initialization_failed:`the Discord client could not start the activity`,instance_mismatch:`this window belongs to a different activity instance`,bootstrap_failed:`the Hands server could not be reached`,token_failed:`the Hands server rejected the sign-in`,invalid_bootstrap:`the Hands server sent an unexpected reply`,invalid_token_response:`the Hands server sent an unexpected reply`,ticket_unavailable:`the session ticket was already used`,protocol_error:`the server and client disagree on the protocol`,unexpected_error:`something unexpected went wrong`,authentication_timeout:`the connection took too long to authenticate`,authentication_required:`the connection was not authenticated`,invalid_ticket:`the session ticket was rejected`,invalid_request:`the server rejected the request`,invalid_input:`the server rejected an input frame`,input_queue_full:`the server could not keep up with the inputs`,rate_limited:`too many requests were sent; wait a moment`,service_busy:`the server is busy right now`,service_unavailable:`the server is unavailable right now`,upstream_unavailable:`Discord is unavailable right now`,room_closed:`the bout has already ended; use Play now to start another`,room_full:`both seats in this bout are taken`,already_in_room:`you are already in a bout in another channel`,match_not_started:`the bout has not started yet`,connection_replaced:`this seat was taken over by a newer connection`,spectator_read_only:`spectators cannot send input`,server_shutting_down:`the server is restarting`,internal_error:`the server hit an internal error`,not_in_activity:`you are not a participant of this activity`,invalid_activity:`this activity instance is not valid`,invalid_state:`the sign-in state expired; retry`,invalid_guild:`this activity belongs to another server`,persistence_failed:`the result could not be saved`,rematch_unavailable:`the ring could not be cleared for a rematch; use Play now to start another bout`,network_unavailable:`the connection to the Hands server could not be opened`,match_abandoned:`both fighters lost their connection and the bout was called off`};function Ql(e){if(e===`client_outdated`)return`Hands was updated. Reload to continue (client_outdated).`;let t=Zl[e]??Zl[e.replace(/_\d+$/u,``)];return t===void 0?`Unable to continue (${e}).`:`Unable to continue: ${t} (${e}).`}function $l(){try{if(window.matchMedia?.(`(pointer: coarse)`).matches)return!0}catch{}return(navigator.maxTouchPoints??0)>0&&new URLSearchParams(window.location.search).get(`platform`)===`mobile`}var eu=[{label:`JAB`,punchClass:`jab`},{label:`STRAIGHT`,punchClass:`straight`},{label:`HOOK`,punchClass:`hook`},{label:`UPPER`,punchClass:`uppercut`}],tu=[{label:`◀ SLIP`,name:`Slip left`,kind:`slip_left`},{label:`WEAVE`,name:`Weave`,kind:`weave`},{label:`SLIP ▶`,name:`Slip right`,kind:`slip_right`},{label:`PULL`,name:`Pull`,kind:`pull`},{label:`CLINCH`,name:`Clinch`,kind:`clinch`}],nu=class{sharedActions;root;stickZone;stickBase;stickKnob;pads=[];moves=[];stickPointer=null;stickOrigin={x:0,y:0};moveX=0;moveY=0;body=!1;power=!1;guard=`none`;knockdown=!1;enabled=!0;heldPointers=new Map;constructor(e,t){this.sharedActions=t,this.root=document.createElement(`div`),this.root.className=`touch-controls`,this.root.setAttribute(`aria-label`,`Touch controls`),this.root.innerHTML=`
+var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r};(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var n={format:2,tick_rate:30,ring:{half_width:500,half_height:500,fighter_radius:38},limits:{max_stamina:1e3,max_conditioning:1e3,max_guard:700,max_poise:600},action_buffer_ticks:8,facing:{scale:1e3,turn_degrees_per_second:110},movement:{max_speed:10,blend_percent:75,recovery_speed_percent:60},evasion:{ticks:7,stamina:15},combos:{recovery_cancel_percent:50,chains:[[`jab`,`straight`],[`jab`,`hook`],[`straight`,`hook`],[`hook`,`uppercut`],[`uppercut`,`hook`]]},knockdown:{referee_walk_speed:9,count_ticks:20,mandatory_count:5,box_pause_ticks:20,get_up_stun_ticks:12,get_up_stamina:600,get_up_base:30,get_up_per_knockdown:16,get_up_trauma_divisor:28},countdown:{opening_ticks:90},tired:{startup_ticks:1,recovery_ticks:2,impact_percent:70},foul:{separation:45},hitstop_ms:{hit:78,block:45,power:140},fatigue_scaling:{startup_formula:`max(2, startup * 100 // fatigue - lead_jab_bonus)`,recovery_formula:`max(3, recovery * 100 // fatigue)`,lead_jab_bonus:1,rear_straight_impact_bonus:8},punches:{jab:{startup:3,active:2,recovery:4,reach:150,lateral_arc:42,impact:34,stamina_cost:25,whiff_cost:9,guard_damage:44,poise_damage:35,combo_window:7,startup_vulnerability:1,recovery_vulnerability:2},straight:{startup:4,active:2,recovery:6,reach:168,lateral_arc:38,impact:52,stamina_cost:39,whiff_cost:14,guard_damage:66,poise_damage:58,combo_window:8,startup_vulnerability:2,recovery_vulnerability:3},hook:{startup:5,active:2,recovery:7,reach:126,lateral_arc:92,impact:64,stamina_cost:47,whiff_cost:18,guard_damage:82,poise_damage:72,combo_window:9,startup_vulnerability:3,recovery_vulnerability:4},uppercut:{startup:5,active:2,recovery:8,reach:108,lateral_arc:54,impact:72,stamina_cost:53,whiff_cost:22,guard_damage:88,poise_damage:84,combo_window:10,startup_vulnerability:3,recovery_vulnerability:5}},variants:{body:{startup_add:1,reach_min:80,reach_sub:14,lateral_arc_add:8,impact_mul_num:92,impact_mul_den:100,stamina_cost_add:2,whiff_cost_add:2,poise_damage_mul_num:72,poise_damage_mul_den:100},power:{startup_add:3,active_add:1,recovery_add:3,reach_add:5,impact_mul_num:185,impact_mul_den:100,stamina_cost_mul_num:140,stamina_cost_mul_den:100,whiff_cost_mul_num:150,whiff_cost_mul_den:100,guard_damage_mul_num:220,guard_damage_mul_den:100,poise_damage_mul_num:175,poise_damage_mul_den:100,startup_vulnerability_add:1,recovery_vulnerability_add:1}},hurtboxes:{head:{radius:.13,length:.16,joint:`head`,offset_y:.12},torso:{radius:.21,length:.34,joint:`chest`,offset_y:.16}},corners:{reach:733},rest:{corner_offset:365,walk_speed:10},clinch:{hold_distance:60,draw_speed:6},referee:{radius:34,health:450,walk_speed:6,standoff:62,count_standoff:90,stagger_base_ticks:6,stagger_damage_divisor:8,stagger_max_ticks:30,down_ticks:150,bleed_health_divisor:60},corner:{cut:{worse_cut:250,other_cut:100,bleeding_kept_percent:30},swelling:{swelling:250,eyes:200},breath:{conditioning:180,body:150},balanced:{worse_cut:80,bleeding_kept_percent:75,swelling:80,eyes:60}},blind_side:{eye_threshold:700,impact_percent:120},parry:{stagger_ticks:16},body:{wind_percent:90,collapse_body_trauma:650,collapse_stamina:350,collapse_minimum_damage:40,collapse_delay_ticks:10,collapse_cooldown_ticks:300},styles:{balanced:{},boxer:{recovery_ticks:{jab:-1},reach_percent:102,impact_percent:98,poise_damage_percent:98},slugger:{impact_percent:108,poise_damage_percent:108,poise_taken_percent:95,stamina_cost_percent:115,recovery_ticks:{hook:1,uppercut:1},move_speed_percent:96},swarmer:{move_speed_percent:103,startup_ticks:{hook:-1,uppercut:-1},body_damage_percent:110,conditioning_loss_percent:85,impact_percent:96,poise_damage_percent:96,evasion_ticks:1},counter_puncher:{counter_bonus_percent:38,counter_window_ticks:3,evasion_ticks:1,perfect_block_ticks:1,impact_percent:96,poise_damage_percent:96}},stun:{flinch_minimum_damage:36,flinch_base_ticks:4,flinch_damage_divisor:16,rocked_counter_damage:50,rocked_power_damage:70,rocked_hurt_poise:180,rocked_base_ticks:12,rocked_damage_divisor:6,rocked_max_ticks:28,chain_max_ticks:36,immunity_ticks:18,rocked_immunity_ticks:8,moving_speed_percent:75},guard:{block_poise_percent:35,perfect_block_poise_percent:0,leak_base_percent:80,leak_minimum_percent:25,block_minimum:60,perfect_rearm_ticks:6,damage_percent:100,stamina_regen_percent:50,held_drain:3,break_stun_ticks:24,rearm:250},trauma:{head_per_damage_percent:60,eye_per_damage_percent:70,cut_per_damage_percent:80,jab_cut_percent:40,jab_swelling_percent:50,swelling_per_damage_percent:33,poise_ceiling_per_head_percent:30,poise_ceiling_floor:220,body_per_damage_percent:100,poise_regen_every_ticks:2,poise_damage_percent:85,cut_opens_eye:120,bleeding_cut_divisor:30},hitbox:{glove_radius:.11}},r=n.punches,i=n.variants,a=n.tick_rate;n.action_buffer_ticks;var o=n.hitstop_ms,s=n.hurtboxes,c=n.hitbox.glove_radius;n.fatigue_scaling;var l=n.rest.corner_offset,u=n.ring.half_width,d=n.ring.half_height,f=n.ring.fighter_radius,p=n.blind_side.eye_threshold,m=n.guard.block_minimum,h=n.guard.rearm,g=n.movement.max_speed,_=n.movement.blend_percent,v=n.movement.recovery_speed_percent,y=n.evasion.ticks,b=n.evasion.stamina,x=n.corner,S=n.corners.reach,C=n.combos.recovery_cancel_percent,w=new Set(n.combos.chains.map(([e,t])=>`${e}:${t}`));function T(e,t){return w.has(`${e}:${t}`)}function E(e){return e.startup+e.active+Math.floor(e.recovery*C/100)}function D(e,t,n,r,i,a=`balanced`){return t&&!i&&T(e,n.class)&&r>=de(a,n.class,n.target,n.power)}function O(e){return r[e].combo_window}var k=n.stun.rocked_base_ticks,A=n.stun.rocked_max_ticks,j=n.knockdown,ee=j.count_ticks,te=1400,ne=3,re=j.get_up_base,ie=j.get_up_base+ne*j.get_up_per_knockdown+Math.floor(te/j.get_up_trauma_divisor),ae=n.stun.moving_speed_percent,M=n.tired.startup_ticks,oe=n.tired.recovery_ticks;function se(e,t,n){let a=r[e],o=a.startup,s=a.active,c=a.recovery,l=a.reach,u=a.lateral_arc;if(t===`body`){let e=i.body;o+=e.startup_add??0,c+=e.recovery_add??0,l=Math.max(e.reach_min??0,l-(e.reach_sub??0)),u+=e.lateral_arc_add??0}if(n===`power`){let e=i.power;o+=e.startup_add??0,s+=e.active_add??0,c+=e.recovery_add??0,l+=e.reach_add??0}return{startup:o,active:s,recovery:c,reach:l,lateralArc:u}}function ce(e,t,n){let a=r[e].stamina_cost;return t===`body`&&(a+=i.body.stamina_cost_add??0),n===`power`&&(a=Math.floor(a*(i.power.stamina_cost_mul_num??1)/(i.power.stamina_cost_mul_den??1))),a}var le=n.styles,ue=new Map;function N(e){let t=ue.get(e);if(t!==void 0)return t;let n=le[e]??{},r={startupTicks:n.startup_ticks??{},recoveryTicks:n.recovery_ticks??{},staminaCostPercent:n.stamina_cost_percent??100,conditioningLossPercent:n.conditioning_loss_percent??100,moveSpeedPercent:n.move_speed_percent??100,evasionTicks:n.evasion_ticks??0};return ue.set(e,r),r}function de(e,t,n,r){return Math.floor(ce(t,n,r)*N(e).staminaCostPercent/100)}function fe(e){return e.startup+e.active+e.recovery}function pe(e){return`${e.wins}-${e.losses}${e.draws>0?`-${e.draws}`:``}`}var me=e=>e.wins+e.losses+e.draws===0;function he(e){return me(e)?`PRO DEBUT`:`${pe(e)} (${e.knockouts} KO)`}var P=class extends Error{name=`ProtocolError`},ge=2147483647,_e=new TextEncoder;function ve(e){let t=0,n=()=>{for(;/\s/u.test(e[t]??``);)t+=1},r=()=>{let n=t;if(e[t++]!==`"`)throw new P(`invalid JSON`);for(;t{n();let a=e[t];if(a===`{`){t+=1,n();let a=new Set;if(e[t]===`}`){t+=1;return}for(;;){n();let o=r();if(a.has(o))throw new P(`duplicate field ${o}`);if(a.add(o),n(),e[t++]!==`:`)throw new P(`invalid JSON`);i(),n();let s=e[t++];if(s===`}`)return;if(s!==`,`)throw new P(`invalid JSON`)}}if(a===`[`){if(t+=1,n(),e[t]===`]`){t+=1;return}for(;;){i(),n();let r=e[t++];if(r===`]`)return;if(r!==`,`)throw new P(`invalid JSON`)}}if(a===`"`){r();return}let o=e.slice(t),s=/^(?:-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?|true|false|null)/u.exec(o);if(!s)throw new P(`invalid JSON`);t+=s[0].length};if(i(),n(),t!==e.length)throw new P(`invalid JSON`)}function ye(e){let t,n;if(typeof e==`string`?(t=_e.encode(e),n=e):(t=e instanceof Uint8Array?e:new Uint8Array(e),n=new TextDecoder(`utf-8`,{fatal:!0}).decode(t)),t.byteLength>65536)throw new P(`server frame too large`);try{return ve(n),JSON.parse(n)}catch(e){throw e instanceof P?e:new P(`invalid JSON`)}}function be(e,t){if(typeof e!=`object`||!e||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype)throw new P(`${t} must be an object`);return e}function xe(e,t,n=[]){let r=new Set([...t,...n]),i=Object.keys(e);if(t.some(t=>!Object.hasOwn(e,t))||i.some(e=>!r.has(e)))throw new P(`schema mismatch`)}function F(e,t,n=0,r=ge){if(!Number.isSafeInteger(e)||er)throw new P(`${t} must be a bounded integer`);return e}function I(e,t){if(typeof e!=`boolean`)throw new P(`${t} must be boolean`);return e}function L(e,t,n=255,r=1){if(typeof e!=`string`||e.lengthn||/[\u0000-\u001f\u007f]/u.test(e))throw new P(`${t} must be a bounded string`);return e}function Se(e,t,n=255){return e===null?null:L(e,t,n)}function Ce(e,t,n){if(typeof e!=`string`||!t.includes(e))throw new P(`invalid ${n}`);return e}function R(e,t,n){if(!Array.isArray(e)||e.length>n)throw new P(`${t} must be a bounded array`);return e}var we=[`left`,`right`],Te=[`jab`,`straight`,`hook`,`uppercut`],Ee=[`head`,`body`],De=[`normal`,`power`],Oe=[`orthodox`,`southpaw`],ke=[`balanced`,`boxer`,`slugger`,`swarmer`,`counter_puncher`],Ae=[`none`,`guard_high`,`guard_low`,`slip_left`,`slip_right`,`weave`,`pull`],je=[`none`,`guard_high`,`guard_low`],Me=[`slip_left`,`slip_right`,`weave`,`pull`,`clinch`,`switch_stance`,`get_up_left`,`get_up_right`,`taunt`,`corner_cut`,`corner_swelling`,`corner_breath`],Ne=[`cut`,`swelling`,`breath`,`balanced`],Pe=[`low_blow`,`headbutt`],Fe=[`countdown`,`fight`,`knockdown`,`foul_recovery`,`referee_down`,`rest`,`complete`],Ie=[`ko`,`flash_ko`,`tko`,`disqualification`,`decision`,`draw`,`forfeit`];function Le(e){let t=be(e,`record`);return xe(t,[`wins`,`losses`,`draws`,`knockouts`]),{wins:F(t.wins,`record.wins`),losses:F(t.losses,`record.losses`),draws:F(t.draws,`record.draws`),knockouts:F(t.knockouts,`record.knockouts`)}}function Re(e){let t=be(e,`player`);xe(t,[`id`,`name`,`avatar`,`rating`,`connected`],[`cpu`,`record`,`style`]);let n=t.style===void 0?{}:{style:Ce(t.style,ke,`player style`)},r=t.cpu===void 0?{}:{cpu:I(t.cpu,`cpu`)},i=t.record===void 0?{}:{record:Le(t.record)};return{id:L(t.id,`player.id`),name:L(t.name,`player.name`,80),avatar:Se(t.avatar,`player.avatar`,128),rating:F(t.rating,`rating`),connected:I(t.connected,`connected`),...r,...i,...n}}function ze(e,t,n=1){let r=R(e,`players`,2).map(Re);if(r.lengthe.id)).size!==r.length)throw new P(`players must be present and distinct`);return r}function Be(e){let t=be(e,`trauma`);return xe(t,[`head`,`body`,`left_eye`,`right_eye`,`left_cut`,`right_cut`,`swelling`,`bleeding`]),{head:F(t.head,`head`,0,1400),body:F(t.body,`body`,0,1200),left_eye:F(t.left_eye,`left_eye`,0,1e3),right_eye:F(t.right_eye,`right_eye`,0,1e3),left_cut:F(t.left_cut,`left_cut`,0,1e3),right_cut:F(t.right_cut,`right_cut`,0,1e3),swelling:F(t.swelling,`swelling`,0,1e3),bleeding:F(t.bleeding,`bleeding`,0,1e3)}}var Ve=g;function He(e,t){return Math.max(-Ve,Math.min(Ve,F(e,t,-2147483647,ge)))}function Ue(e){let t=be(e,`fighter`);xe(t,`player_id.x.y.facing.facing_x.facing_y.velocity_x.velocity_y.stance.style.defense.stamina.maximum_stamina.conditioning.guard.guard_broken.poise.trauma.knockdowns.warnings.deductions.stunned_ticks.is_downed.action.action_hand.action_target.action_power.action_id.action_key.action_start_tick.action_startup_ticks.action_active_ticks.action_recovery_ticks.action_contact_tick.queued_actions.clinch_startup_ticks.clinch_ticks.is_foul_recovery_target.taunt_ticks.corner_choice.get_up_prompt.get_up_meter.get_up_required.get_up_count.get_up_window_start_tick.get_up_window_end_tick.last_input_sequence`.split(`.`));let n=t.action===null?null:Ce(t.action,Te,`action`),r=t.action_hand===null?null:Ce(t.action_hand,we,`action hand`),i=t.action_target===null?null:Ce(t.action_target,Ee,`action target`),a=t.action_power===null?null:Ce(t.action_power,De,`action power`);if([n,r,i,a].some(e=>e===null)&&[n,r,i,a].some(e=>e!==null))throw new P(`partial punch action`);let o=t.action_id===null?null:L(t.action_id,`action_id`,32),s=t.action_key===null?null:L(t.action_key,`action_key`,64);if([o,s].some(e=>e===null)!==[o,s].every(e=>e===null))throw new P(`partial action instance`);if(o!==null&&n===null)throw new P(`action instance without class`);let c=t.get_up_prompt===null?null:Ce(t.get_up_prompt,[`get_up_left`,`get_up_right`],`get-up prompt`),l=F(t.maximum_stamina,`maximum_stamina`,330,1e3),u=F(t.stamina,`stamina`,0,l),d=F(t.get_up_required,`get_up_required`,0,ie),f=F(t.facing,`facing`,-1,1);if(f===0)throw new P(`invalid facing`);let p=F(t.facing_x,`facing_x`,-1e3,1e3),m=F(t.facing_y,`facing_y`,-1e3,1e3);if(p===0&&m===0)throw new P(`invalid facing vector`);if(d!==0&&dR(e,`round scores`,15).map(e=>F(e,`score`,6,10)),r=n(t.player_one),i=n(t.player_two);if(r.length!==i.length)throw new P(`scorecard round mismatch`);return{judge:L(t.judge,`judge`,80),player_one:r,player_two:i}}function Ke(e){let t=R(e,`scorecards`,3).map(Ge);if(t.length!==3)throw new P(`exactly three scorecards required`);return t}function qe(e,t){if(t===`draw`!=(e===null))throw new P(`incoherent finish result`)}function Je(e){let t=be(e,`result`);xe(t,[`match_id`,`activity_instance_id`,`guild_id`,`player_one_id`,`player_two_id`,`winner_id`,`finish_method`,`round_number`,`tick`,`scorecards`,`player_one_knockdowns`,`player_two_knockdowns`,`player_one_damage`,`player_two_damage`]);let n=L(t.player_one_id,`player_one_id`),r=L(t.player_two_id,`player_two_id`);if(n===r)throw new P(`result players must be distinct`);let i=Se(t.winner_id,`winner_id`);if(i!==null&&i!==n&&i!==r)throw new P(`invalid winner`);let a=Ce(t.finish_method,Ie,`finish method`);return qe(i,a),{match_id:L(t.match_id,`match_id`),activity_instance_id:L(t.activity_instance_id,`activity_instance_id`),guild_id:L(t.guild_id,`guild_id`),player_one_id:n,player_two_id:r,winner_id:i,finish_method:a,round_number:F(t.round_number,`round`,1,15),tick:F(t.tick,`tick`),scorecards:Ke(t.scorecards),player_one_knockdowns:F(t.player_one_knockdowns,`knockdowns`,0,3),player_two_knockdowns:F(t.player_two_knockdowns,`knockdowns`,0,3),player_one_damage:F(t.player_one_damage,`damage`),player_two_damage:F(t.player_two_damage,`damage`)}}function Ye(e){let t=be(e,`referee`);return xe(t,[`x`,`y`,`facing_x`,`facing_y`,`velocity_x`,`velocity_y`,`stunned_ticks`,`alive`,`trauma`]),{x:F(t.x,`referee.x`,-462,462),y:F(t.y,`referee.y`,-462,462),facing_x:F(t.facing_x,`referee.facing_x`,-1e3,1e3),facing_y:F(t.facing_y,`referee.facing_y`,-1e3,1e3),velocity_x:He(t.velocity_x,`referee.velocity_x`),velocity_y:He(t.velocity_y,`referee.velocity_y`),stunned_ticks:F(t.stunned_ticks,`referee.stunned_ticks`,0,90),alive:I(t.alive,`referee.alive`),trauma:Be(t.trauma)}}function Xe(e){let t=be(e,`snapshot`);xe(t,[`tick`,`phase`,`round_number`,`phase_ticks_remaining`,`fighters`,`referee`,`events`,`result`,`checksum`]);let n=R(t.fighters,`fighters`,2).map(Ue);if(n.length!==2||n[0]?.player_id===n[1]?.player_id)throw new P(`snapshot requires two distinct fighters`);let r=L(t.checksum,`checksum`,64);if(!/^[a-f0-9]{64}$/u.test(r))throw new P(`invalid checksum`);return{tick:F(t.tick,`tick`),phase:Ce(t.phase,Fe,`phase`),round_number:F(t.round_number,`round`,1,15),phase_ticks_remaining:F(t.phase_ticks_remaining,`phase ticks`),fighters:[n[0],n[1]],referee:Ye(t.referee),events:R(t.events,`events`,256).map(We),result:t.result===null?null:Je(t.result),checksum:r}}function Ze(e){let t=be(ye(e),`envelope`);if(t.version!==5)throw new P(`unsupported protocol version`);let n=L(t.type,`type`,32);if(n===`welcome`){let e=Ce(t.role,[`fighter`,`spectator`],`connection role`),r=L(t.player_id,`player_id`),i=t.reconnect_ticket===void 0?{}:{reconnect_ticket:L(t.reconnect_ticket,`reconnect_ticket`,4096)};if(e===`fighter`){xe(t,[`version`,`type`,`role`,`player_id`,`seat`,`rating`,`players`,`server_tick`,`next_sequence`],[`reconnect_ticket`]);let a=ze(t.players);if(!a.some(e=>e.id===r))throw new P(`welcome fighter is absent`);return{version:5,type:n,role:e,player_id:r,seat:F(t.seat,`seat`,1,2),rating:F(t.rating,`rating`),players:a,server_tick:F(t.server_tick,`server_tick`),next_sequence:F(t.next_sequence,`next_sequence`),...i}}xe(t,[`version`,`type`,`role`,`player_id`,`players`,`server_tick`],[`reconnect_ticket`]);let a=ze(t.players,void 0,0);if(a.some(e=>e.id===r))throw new P(`spectator cannot be a fighter`);return{version:5,type:n,role:e,player_id:r,players:a,server_tick:F(t.server_tick,`server_tick`),...i}}if(n===`ticket`)return xe(t,[`version`,`type`,`reconnect_ticket`,`refresh_id`]),{version:5,type:n,reconnect_ticket:L(t.reconnect_ticket,`reconnect_ticket`,4096),refresh_id:L(t.refresh_id,`refresh_id`,128,16)};if(n===`waiting`){if(xe(t,[`version`,`type`,`open_seats`]),t.open_seats!==1&&t.open_seats!==2)throw new P(`invalid open seats`);return{version:5,type:n,open_seats:t.open_seats}}if(n===`select`){xe(t,[`version`,`type`,`deadline_ms`,`players`,`ready`]);let e=ze(t.players,2),r=R(t.ready,`ready`,2).map(e=>L(e,`ready player id`));if(new Set(r).size!==r.length||r.some(t=>!e.some(e=>e.id===t)))throw new P(`invalid ready fighters`);return{version:5,type:n,deadline_ms:F(t.deadline_ms,`deadline_ms`,0,6e4),players:[e[0],e[1]],ready:r}}if(n===`ready`){xe(t,[`version`,`type`,`players`]);let e=ze(t.players,2);return{version:5,type:n,players:[e[0],e[1]]}}if(n===`paused`)return xe(t,[`version`,`type`,`player_id`,`grace_ms`]),{version:5,type:n,player_id:L(t.player_id,`player_id`),grace_ms:F(t.grace_ms,`grace_ms`,0,6e4)};if(n===`resumed`)return xe(t,[`version`,`type`,`player_id`]),{version:5,type:n,player_id:L(t.player_id,`player_id`)};if(n===`snapshot`)return xe(t,[`version`,`type`,`payload`]),{version:5,type:n,payload:Xe(t.payload)};if(n===`error`)return xe(t,[`version`,`type`,`code`]),{version:5,type:n,code:L(t.code,`error code`,80)};if(n===`final`)return $e(t,n);throw new P(`unsupported server message type`)}function Qe(e,t){let n=Object.entries(be(e,`punches`));if(n.length!==2||n.some(([e])=>!t.includes(e)))throw new P(`punches must count both fighters`);let r=Object.create(null);for(let[e,t]of n){let n=be(t,`punch totals`);xe(n,[`thrown`,`landed`,`jabs_thrown`,`jabs_landed`]);let i=F(n.thrown,`thrown`),a=F(n.landed,`landed`,0,i),o=F(n.jabs_thrown,`jabs_thrown`,0,i);r[e]={thrown:i,landed:a,jabs_thrown:o,jabs_landed:F(n.jabs_landed,`jabs_landed`,0,Math.min(a,o))}}return r}function $e(e,t){xe(e,[`version`,`type`,`match_id`,`winner_id`,`method`,`round`,`scorecards`,`ratings`],[`punches`]);let n=be(e.ratings,`ratings`),r=Object.entries(n);if(r.length!==2)throw new P(`final requires two ratings`);let i=Object.create(null);for(let[e,t]of r){L(e,`rating player id`);let n=be(t,`rating`);xe(n,[`before`,`after`]),i[e]={before:F(n.before,`before`),after:F(n.after,`after`)}}let a=Se(e.winner_id,`winner_id`);if(a!==null&&!Object.hasOwn(i,a))throw new P(`winner absent from ratings`);let o=Ce(e.method,Ie,`finish method`);qe(a,o);let s=e.punches===void 0?{}:{punches:Qe(e.punches,Object.keys(i))};return{version:5,type:t,match_id:L(e.match_id,`match_id`),winner_id:a,method:o,round:F(e.round,`round`,1,15),scorecards:Ke(e.scorecards),ratings:i,...s}}function et(e,t,n){return JSON.stringify({version:5,type:`input`,sequence:F(e,`sequence`),client_tick:F(t,`client tick`),move:{x:Math.max(-1e3,Math.min(1e3,Math.round(Number.isFinite(n.moveX)?n.moveX:0))),y:Math.max(-1e3,Math.min(1e3,Math.round(Number.isFinite(n.moveY)?n.moveY:0)))},defense:Ce(n.defense,je,`held defense`),actions:n.actions.slice(0,4).map(e=>{let t=e.id===void 0?{}:{id:e.id.slice(0,32)};return e.kind===`punch`?{kind:`punch`,hand:Ce(e.hand,we,`hand`),class:Ce(e.class,Te,`class`),target:Ce(e.target,Ee,`target`),power:Ce(e.power,De,`power`),...t}:e.kind===`foul`?{kind:`foul`,foul:Ce(e.foul,Pe,`foul`),...t}:{kind:Ce(e.kind,Me,`action`),...t}})})}function tt(e,t){return JSON.stringify({version:5,type:`style`,style:Ce(e,ke,`fighter style`),ready:t===!0})}var nt=[`rookie`,`contender`,`champion`];function rt(e){return JSON.stringify({version:5,type:`cpu`,level:Ce(e,nt,`computer level`)})}function it(e){let t=be(e,`bootstrap`);if(xe(t,[`client_id`,`state`,`protocol`,`simulation`]),t.protocol!==5)throw new P(`unsupported protocol version`);let n=be(t.simulation,`simulation`);return xe(n,[`tick_rate`,`ring_half_width`,`ring_half_height`]),{client_id:L(t.client_id,`client_id`,36),state:L(t.state,`state`,128),protocol:5,simulation:{tick_rate:F(n.tick_rate,`tick rate`,1,120),ring_half_width:F(n.ring_half_width,`ring width`,1),ring_half_height:F(n.ring_half_height,`ring height`,1)}}}function at(e){let t=be(e,`token response`);xe(t,[`access_token`,`ticket`,`player`]);let n=be(t.player,`player`);return xe(n,[`id`,`name`,`avatar`,`rating`]),{access_token:L(t.access_token,`access token`,4096),ticket:L(t.ticket,`ticket`,4096),player:{id:L(n.id,`id`),name:L(n.name,`name`,80),avatar:Se(n.avatar,`avatar`,128),rating:F(n.rating,`rating`)}}}var ot=[`Power`,`Hand speed`,`Footwork`,`Reach`,`Stamina`,`Defence`],st=[{style:`balanced`,name:`Balanced`,tag:`BALANCED`,detail:`Even at everything, no holes to exploit.`,stats:[3,3,3,3,3,3]},{style:`boxer`,name:`Boxer`,tag:`BOXER`,detail:`Snappy jab and long reach, lighter hands.`,stats:[2,4,3,4,3,3]},{style:`slugger`,name:`Slugger`,tag:`SLUGGER`,detail:`Heavy hands, hard chin, slow feet, tires sooner.`,stats:[5,2,2,3,2,4]},{style:`swarmer`,name:`Swarmer`,tag:`SWARMER`,detail:`Quick feet and head, digs to the body, never stops.`,stats:[2,4,4,3,4,3]},{style:`counter_puncher`,name:`Counter-puncher`,tag:`COUNTER`,detail:`Slips and parries, makes every miss cost.`,stats:[2,3,3,3,3,5]}],ct=e=>st.find(t=>t.style===e)??st[0];function lt(e){return e===void 0||e===`balanced`?null:ct(e).tag}function ut(e){return e===void 0||e===`balanced`?null:`the ${ct(e).name.toLowerCase()}`}var dt=`hands.style.v1`;function ft(e=mt()){try{let t=e?.getItem(dt);return ke.find(e=>e===t)??`balanced`}catch{return`balanced`}}function pt(e,t=mt()){try{t?.setItem(dt,e)}catch{}}function mt(){try{return window.localStorage}catch{return null}}var ht=400,gt={Digit1:0,Digit2:1,Digit3:2,Digit4:3,Digit5:4,Numpad1:0,Numpad2:1,Numpad3:2,Numpad4:3,Numpad5:4},_t=.6;function vt(){try{return[...navigator.getGamepads?.()??[]].find(e=>e!==null&&e.connected&&e.mapping===`standard`)??null}catch{return null}}function yt(e){let t=new Set;if(e===null)return t;let n=t=>e.buttons[t]?.pressed===!0,r=e.axes[0]??0,i=e.axes[1]??0;return(n(12)||n(14)||r<-.6||i<-.6)&&t.add(`previous`),(n(13)||n(15)||r>_t||i>_t)&&t.add(`next`),n(0)&&t.add(`settle`),t}var bt=class{send;now;element;buttons=new Map;clock;status;visible=!1;choosing=!1;highlighted;settled=!1;deadlineAt=0;timer=null;padFrame=0;padHeld=new Set;context=null;keydown=e=>{if(!this.visible||!this.choosing||e.repeat||e.ctrlKey||e.metaKey||e.altKey)return;let t=e.target;if(t instanceof HTMLElement&&t!==document.body&&!this.element.contains(t))return;let n=gt[e.code];n===void 0?e.code===`ArrowRight`||e.code===`ArrowDown`?(e.preventDefault(),this.move(this.neighbour(1))):e.code===`ArrowLeft`||e.code===`ArrowUp`?(e.preventDefault(),this.move(this.neighbour(-1))):(e.code===`Enter`||e.code===`Space`)&&!(t instanceof HTMLButtonElement)&&(e.preventDefault(),this.pick(this.highlighted,!0)):(e.preventDefault(),this.pick(st[n].style,!0))};constructor(e,t,n=()=>performance.now(),r=ft()){this.send=t,this.now=n,this.highlighted=r;let i=document.createElement(`section`);i.className=`style-picker`,i.dataset.stylePicker=``,i.hidden=!0,i.setAttribute(`aria-label`,`Pick how your fighter boxes`);let a=document.createElement(`header`),o=document.createElement(`p`);o.className=`style-title`,o.textContent=`CHOOSE YOUR STYLE`,this.clock=document.createElement(`p`),this.clock.className=`style-clock`,a.append(o,this.clock);let s=document.createElement(`div`);s.className=`style-cards`;for(let[e,t]of st.entries()){let n=document.createElement(`button`);n.type=`button`,n.dataset.style=t.style,n.setAttribute(`aria-pressed`,`false`);let r=document.createElement(`kbd`);r.textContent=String(e+1);let i=document.createElement(`strong`);i.textContent=t.name;let a=document.createElement(`span`);a.textContent=t.detail;let o=document.createElement(`ul`);o.className=`style-stats`;for(let[e,n]of t.stats.entries()){let t=document.createElement(`li`);t.setAttribute(`aria-label`,`${ot[e]} ${n} of 5`);let r=document.createElement(`small`);r.textContent=ot[e];let i=document.createElement(`i`);i.dataset.value=String(n),t.append(r,i),o.append(t)}n.append(r,i,a,o),n.addEventListener(`click`,()=>this.pick(t.style,!0)),s.append(n),this.buttons.set(t.style,n)}this.status=document.createElement(`p`),this.status.className=`style-status`,this.status.setAttribute(`role`,`status`),i.append(a,s,this.status),e.append(i),this.element=i,window.addEventListener(`keydown`,this.keydown)}update(e,t,n){if(e===null){this.setVisible(!1),this.context=null,this.settled=!1;return}let r=this.context===null||!this.choosing&&n===`fighter`;this.context?.select!==e&&(this.deadlineAt=this.now()+e.deadline_ms-ht),this.context={select:e,viewerId:t},this.choosing=n===`fighter`&&t!==null,this.settled=this.choosing&&(this.settled||e.ready.includes(t));let i=e.players.find(e=>e.id===t)?.style;this.settled&&i!==void 0&&(this.highlighted=i),r&&this.choosing&&!this.settled&&this.send(this.highlighted,!1),this.setVisible(!0),this.render()}pick(e,t){!this.choosing||this.settled||this.closed||(this.highlighted=e,this.send(e,t)&&(t&&(this.settled=!0),this.render()))}get closed(){return this.now()>=this.deadlineAt}neighbour(e){return st[(st.findIndex(e=>e.style===this.highlighted)+e+st.length)%st.length].style}move(e){this.pick(e,!1),this.settled||this.buttons.get(this.highlighted)?.focus()}render(){let e=this.context;if(e===null)return;let{select:t,viewerId:n}=e;for(let e of st){let t=this.buttons.get(e.style),n=this.choosing&&e.style===this.highlighted;t.disabled=!this.choosing||this.settled||this.closed,t.setAttribute(`aria-pressed`,String(n)),t.toggleAttribute(`data-chosen`,n),t.tabIndex=e.style===this.highlighted?0:-1}let r=`${Math.max(0,Math.ceil((this.deadlineAt-this.now())/1e3))}s`;this.clock.textContent!==r&&(this.clock.textContent=r);let i=t.players.filter(e=>e.id!==n&&(!e.connected||t.ready.includes(e.id))).map(e=>e.connected?`${e.name} is ready.`:`Waiting for ${e.name} to reconnect.`).join(` `),a=this.choosing?this.settled?i.length>0?`Ready as ${ct(this.highlighted).name}. ${i}`:`Ready as ${ct(this.highlighted).name}. Waiting for your opponent.`:i.length>0?`${i} Tap a style or press Enter to settle on yours.`:`Tap a style, or use the arrow keys and Enter.`:i.length>0?`The fighters are choosing. ${i}`:`The fighters are choosing their styles.`;this.status.textContent!==a&&(this.status.textContent=a)}setVisible(e){this.visible!==e&&(this.visible=e,this.element.hidden=!e,e?(this.timer=window.setInterval(()=>this.render(),250),this.padHeld=yt(vt()),this.padFrame=requestAnimationFrame(()=>this.pollPad())):(this.timer!==null&&window.clearInterval(this.timer),this.timer=null,cancelAnimationFrame(this.padFrame)))}pollPad(){if(!this.visible)return;let e=yt(vt());for(let t of e)this.padHeld.has(t)||(t===`settle`?this.pick(this.highlighted,!0):this.move(this.neighbour(t===`next`?1:-1)));this.padHeld=e,this.padFrame=requestAnimationFrame(()=>this.pollPad())}destroy(){this.setVisible(!1),window.removeEventListener(`keydown`,this.keydown),this.element.remove()}},xt=/^[0-9]{17,20}$/u,St=/^[A-Za-z0-9_]{1,128}$/u,Ct=`https://cdn.discordapp.com/avatars/`,wt=128,Tt=8;function Et(e){return e.avatar===null||!xt.test(e.id)||!St.test(e.avatar)?null:new URL(`${e.id}/${e.avatar}.png?size=${wt}`,Ct).href}function Dt(e){let t=Array.from(e).find(e=>/[\p{L}\p{N}]/u.test(e));return t===void 0?`?`:t.toUpperCase()}var Ot=class{create;pictures=new Map;addresses=new Map;constructor(e=()=>new Image){this.create=e}get(e){if(e===void 0)return null;let t=this.addresses.get(e.id);(t===void 0||t.avatar!==e.avatar)&&(this.addresses.size>=Tt&&this.addresses.clear(),t={avatar:e.avatar,url:Et(e)},this.addresses.set(e.id,t));let n=t.url;if(n===null)return null;let r=this.pictures.get(n);if(r!==void 0)return r.ready?r.image:null;if(this.pictures.size>=Tt){let e=this.pictures.entries().next().value;e!==void 0&&this.drop(e[0],e[1])}let i={image:this.create(),ready:!1};return this.pictures.set(n,i),i.image.crossOrigin=`anonymous`,i.image.referrerPolicy=`no-referrer`,i.image.decoding=`async`,i.image.onload=()=>{i.ready=i.image.naturalWidth>0},i.image.onerror=()=>{i.ready=!1},i.image.src=n,null}dispose(){for(let[e,t]of[...this.pictures])this.drop(e,t);this.addresses.clear()}drop(e,t){t.image.onload=null,t.image.onerror=null,t.ready=!1,this.pictures.delete(e)}},kt=`POWER ARMED`,At=1e3,jt=e=>e.reduce((e,t)=>e+t,0),Mt=(e,t,n)=>{if(e.measureText(t).width<=n)return t;let r=t;for(;r.length>1&&e.measureText(`${r}…`).width>n;)r=r.slice(0,-1);return`${r}…`},Nt=(e,t,n,r)=>{for(let i=n;i>r;--i)if(e(i)<=t)return i;return r},Pt=`#ff7066`;function Ft(e,t,n,r,i,a){let o=i.spentBelow!==void 0&&i.value{e.beginPath(),e.arc(t,n,r,0,Math.PI*2),e.closePath()};e.save(),s(),e.fillStyle=`#0b1220`,e.fill(),i===null?(e.globalAlpha=.4,e.fillStyle=o,e.fill(),e.globalAlpha=1,e.fillStyle=`#f5f8ff`,e.textAlign=`center`,e.font=`800 ${Math.round(r*1.1)}px Inter, system-ui, sans-serif`,e.fillText(Dt(a),t,n+r*.39)):(e.save(),e.clip(),e.drawImage(i,t-r,n-r,r*2,r*2),e.restore()),s(),e.lineWidth=Math.max(1.5,r/9),e.strokeStyle=o,e.stroke(),e.restore()}function Lt(e){let t=e.left_eye>=p,n=e.right_eye>=p;return t&&n?`BOTH EYES SHUT`:t?`LEFT EYE SHUT`:n?`RIGHT EYE SHUT`:null}var Rt={cut:`closing the cut`,swelling:`icing the swelling`,breath:`catching breath`,balanced:`a little of everything`};function zt(e){let t=e.flatMap((e,t)=>e.corner_choice===null?[]:[`${t===0?`Blue`:`Red`}: ${Rt[e.corner_choice]}`]);return t.length===0?null:t.join(` · `)}function Bt(e,t,n,r){e.save(),e.font=`900 12px Inter, system-ui, sans-serif`;let i=e.measureText(kt).width+16,a=r?t-i:t;e.shadowColor=`rgba(255,120,30,0.9)`,e.shadowBlur=12;let o=e.createLinearGradient(0,n,0,n+18);o.addColorStop(0,`#ffd36b`),o.addColorStop(1,`#ff6a1a`),e.fillStyle=o,e.fillRect(a,n,i,18),e.shadowBlur=0,e.fillStyle=`#2a0c00`,e.textAlign=`left`,e.fillText(kt,a+8,n+13),e.restore()}function Vt(e,t,n,r,i){e.save(),e.font=`800 9px Inter, system-ui, sans-serif`;let a=e.measureText(r).width+12,o=i?t-a:t;e.fillStyle=`rgba(150,22,18,0.92)`,e.fillRect(o,n,a,14),e.fillStyle=`#ffe8e3`,e.textAlign=`left`,e.fillText(r,o+6,n+10),e.restore()}function Ht(e,t){return Math.max(1,Math.min(1.6,e/1280,t/720))}function Ut(e,t,n){let r=lt(t.style),i=e?.record===void 0?null:me(e.record)?`DEBUT`:pe(e.record),a=e?.cpu===!0?`CPU`:`ELO ${e?.rating??`—`}`,o=t.knockdowns>0?`${t.knockdowns} KD`:null,s=[o,t.warnings>0?`${t.warnings} WARNING${t.warnings===1?``:`S`}`:null,t.deductions>0?`−${t.deductions} PT${t.deductions===1?``:`S`}`:null],c=[o,t.warnings>0?`W${t.warnings}`:null,t.deductions>0?`−${t.deductions}`:null],l=(...e)=>e.filter(e=>e!==null).join(` · `),u=n?[l(r,...c),l(...c)]:[l(r,i,a,...s),l(r,a,...s),l(r,...s),l(r,...c),l(...c)];return u.filter((e,t)=>e!==``&&u.indexOf(e)===t)}var Wt=168;function Gt(e,t,n,r,i,a,o,s,c,l){e.save(),e.beginPath(),s?(e.moveTo(t+14,n),e.lineTo(t+r,n),e.lineTo(t+r-14,n+62),e.lineTo(t,n+62)):(e.moveTo(t,n),e.lineTo(t+r-14,n),e.lineTo(t+r,n+62),e.lineTo(t+14,n+62)),e.closePath(),e.fillStyle=`rgba(3,6,12,0.82)`,e.fill(),e.strokeStyle=`rgba(190,200,220,0.22)`,e.lineWidth=1,e.stroke(),e.fillStyle=c,e.fillRect(s?t+r-5:t,n+4,5,54);let u=l===void 0?20:51;l!==void 0&&It(e,s?t+r-11-16:t+11+16,n+4+16,16,l,i,c);let d=s?t+r-u:t+u;e.textAlign=s?`right`:`left`,e.fillStyle=`#f5f8ff`;let f=i.toUpperCase(),p=r-u-24;e.font=`800 ${Nt(t=>(e.font=`800 ${t}px Inter, system-ui, sans-serif`,e.measureText(f).width),p,16,11)}px Inter, system-ui, sans-serif`,e.fillText(Mt(e,f,p),d,n+21),e.fillStyle=`#93a3bd`;let m=r-u-14,h=(t,n)=>(e.font=`600 ${n}px Inter, system-ui, sans-serif`,e.measureText(t).width),g=a.find(e=>h(e,8)<=m)??a.at(-1)??``;e.font=`600 ${Nt(e=>h(g,e),m,10,8)}px Inter, system-ui, sans-serif`,e.fillText(Mt(e,g,m),d,n+35);let _=(r-52)/o.length,v=o.length*_+(o.length-1)*12,y=s?t+r-20-v:t+20;o.forEach((t,r)=>{Ft(e,y+(_+12)*r,n+48,_,t,s)}),e.restore()}function Kt(e,t,n,r,i,a){let o=Wt;e.save(),e.beginPath(),e.moveTo(t-o/2+12,n),e.lineTo(t+o/2-12,n),e.lineTo(t+o/2,n+58/2),e.lineTo(t+o/2-12,n+58),e.lineTo(t-o/2+12,n+58),e.lineTo(t-o/2,n+58/2),e.closePath(),e.fillStyle=`rgba(4,6,12,0.88)`,e.fill();let s=e.createLinearGradient(t-o/2,n,t+o/2,n+58);s.addColorStop(0,`#8a6a26`),s.addColorStop(.5,`#f6d57a`),s.addColorStop(1,`#8a6a26`),e.strokeStyle=s,e.lineWidth=2,e.stroke(),e.textAlign=`center`,e.fillStyle=`#ffffff`,e.font=`800 22px ui-monospace, monospace`,e.fillText(r,t,n+27),e.fillStyle=`#f6d57a`,e.font=`800 12px Inter, system-ui, sans-serif`,e.fillText(i,t,n+44),a!==`FIGHT`&&(e.fillStyle=`#93a3bd`,e.font=`700 9px Inter, system-ui, sans-serif`,e.fillText(a,t,n+55)),e.restore()}var qt=78,Jt=50,Yt=.22,Xt=e=>e<480?Jt:qt,Zt=(e,t)=>Math.max(e<640?112:56,t*.1)+Xt(t)/2-t/2,Qt={upright:{bottom:118,height:274,moves:0,grid:118},landscape:{bottom:118,height:196,moves:102,grid:118},short:{bottom:112,height:154,moves:86,grid:92},shortHeight:350,reach:216,movesReach:134},$t=(e,t)=>e<=t?Qt.upright:t<=Qt.shortHeight?Qt.short:Qt.landscape;function en(e,t,n){let r=$t(e,t);return n<=t-r.bottom-r.height?0:Qt.reach+(r.moves>0&&n>t-r.bottom-r.moves?Qt.movesReach:0)}var tn=160;function nn(e,t,n=!1){let r=Xt(t),i=t/2+Zt(e,t)-r/2,a=Math.min(320,e-24),o=e/2+a/2;if(n&&e<=t)en(e,t,i+r+8)>0&&(r=Jt);else if(n){let n=e<640?Math.min(e/2-Wt/2-8,e-en(e,t,56+r)):0,s=n-12>=tn;s&&(i=56);let c=s?n:e-en(e,t,i+r);o>c&&(a=Math.min(a,c-12),o=c)}return{x:o-a,y:i,width:a,height:r}}var rn={width:380,height:150},an=112;function on(e,t,n=!1){let r=$t(e,t),i=t-r.bottom-r.grid,a=e<=t,o=n&&a?Math.min(t-an,i-8):t-an,s=Math.max(56,Math.min(Math.max(t*.24,_n(t,e<640)+34),o-rn.height)),c=Math.min(rn.width,e-24),l=e/2+c/2;if(n&&!a&&s+rn.height>i){let t=e-Qt.reach;l>t&&(c=Math.min(c,t-12),l=t)}return{x:l-c,y:s,width:c,height:rn.height}}function sn(e,t,n,r){let i=t.height===Jt,a=t.x+t.width/2;e.fillStyle=`rgba(3,6,12,0.88)`,e.fillRect(t.x,t.y,t.width,t.height),e.strokeStyle=`rgba(246,213,122,0.45)`,e.lineWidth=1.5,e.strokeRect(t.x+2,t.y+2,t.width-4,t.height-4),e.textAlign=`center`,e.fillStyle=`#ffd77a`,bn(e,n,a,t.y+(i?22:34),t.width-24,800,i?17:22,12),e.fillStyle=`#c8d3e6`,e.font=`600 ${i?11:12}px Inter, system-ui, sans-serif`,e.fillText(Mt(e,r,t.width-24),a,t.y+(i?39:58))}var cn=class{fightTicks=null;round=0;ticks(e){return e.round_number!==this.round&&(this.round=e.round_number,this.fightTicks=null),e.phase===`fight`&&(this.fightTicks=e.phase_ticks_remaining),(e.phase===`knockdown`||e.phase===`foul_recovery`||e.phase===`referee_down`||e.phase===`complete`)&&this.fightTicks!==null?this.fightTicks:e.phase_ticks_remaining}},ln=()=>({thrown:0,landed:0,jabsThrown:0,jabsLanded:0});function un(e,t){return e.action_id!==null&&t.some(t=>(t.kind===`block`||t.kind===`perfect_block`)&&t.tick===e.tick&&t.action_id===e.action_id&&t.actor_id===e.target_id)}var dn=class{stats=new Map;totals=new Map;record(e,t=[]){if(e.kind===`bell`){e.detail===`round_start`&&this.stats.clear();return}if(e.actor_id!==null){if(e.kind===`punch_start`){let t=+(e.detail.split(`:`)[1]===`jab`);for(let n of[this.entry(this.stats,e.actor_id),this.entry(this.totals,e.actor_id)])n.thrown+=1,n.jabsThrown+=t}else if((e.kind===`hit`||e.kind===`counter_hit`)&&!un(e,t)){let t=+(e.detail.split(`:`)[0]===`jab`);for(let n of[this.entry(this.stats,e.actor_id),this.entry(this.totals,e.actor_id)])n.landed+=1,n.jabsLanded+=t}}}get(e){return this.stats.get(e)??ln()}total(e){return this.totals.get(e)??ln()}entry(e,t){let n=e.get(t);return n===void 0&&(n=ln(),e.set(t,n)),n}};function fn(e){let t=e.method.replaceAll(`_`,` `).toUpperCase();if(e.method!==`decision`&&e.method!==`draw`)return t;let n=0,r=0,i=0;for(let t of e.scorecards){let e=jt(t.player_one),a=jt(t.player_two);e>a?n+=1:a>e?r+=1:i+=1}let a=e.scorecards.length;return a===0?t:e.method===`draw`?i===a?`UNANIMOUS DRAW`:n===r?`SPLIT DRAW`:`MAJORITY DRAW`:Math.max(n,r)===a?`UNANIMOUS DECISION`:i>0?`MAJORITY DECISION`:`SPLIT DECISION`}var pn=new Set([`ko`,`flash_ko`,`tko`]),mn=3.6,hn=2.4;function gn(e){return e===null?0:pn.has(e.method)?mn:e.method===`disqualification`?hn:0}var _n=(e,t)=>Math.max(e*.16,(t?112:56)+40),vn=(e,t)=>e!==null&&e>=(t?100:120);function yn(e,t,n,r,i,a,o,s,c=30,l=null,u=null,d=null,f=null,p=null,g=null,_=null,v=!1,y=!1){e.save();let b=Ht(t,n);e.scale(b,b),t/=b,n/=b,e.textBaseline=`alphabetic`;let x=e=>{let t=i[e.player_id];return t===void 0||g===null?null:g(t)},S=t<640,C=S?(t-56)/2:Math.min(300,t*.38,t/2-Wt/2-8-24),w=n-84;o===null&&r.fighters.forEach((o,s)=>{let c=s===1,l=c?t-24-C:24,u=i[o.player_id],d=[{label:`${S?`STA`:`STAMINA`} ${Math.round(o.stamina)}`,value:o.stamina,maximum:o.maximum_stamina,from:`#ffe08a`,to:`#d9a53a`},{label:`${S?`HP`:`HEALTH`} ${Math.round(o.conditioning)}`,value:o.conditioning,maximum:At,from:`#ff8a7a`,to:`#b02a20`},{label:o.guard_broken?`GUARD BROKEN`:`GUARD`,value:o.guard,maximum:700,from:`#9ec7ff`,to:`#3d6fb8`,spentBelow:o.guard_broken?h:m},{label:`POISE ${Math.round(o.poise)}`,value:o.poise,maximum:600,from:`#e8c890`,to:`#8a6a34`}],f=s===0?`#3d6fb8`:`#b02a20`;Gt(e,l,w,C,u?.name??`Fighter`,Ut(u,o,S),d.slice(0,2),c,f,S?void 0:x(o)),S&&!(v&&t>n)&&It(e,t/2+(c?1:-1)*112,83,20,x(o),u?.name??`Fighter`,f);let p=w-12,g=Math.min(64,(C-52)/2);Ft(e,c?l+C-20-2*g:l+20,p,g,d[2],c),Ft(e,c?l+C-8-g:l+32+g,p,g,d[3],c);let _=Lt(o.trauma);_!==null&&Vt(e,c?l+C-20:l+20,p-34,_,c),y&&o.player_id===a&&(r.phase===`fight`||r.phase===`countdown`)&&Bt(e,c?l+C-20:l+20,p-(_===null?38:60),c)});let T=Math.floor((p??r.phase_ticks_remaining)/c),E=`${Math.floor(T/60)}:${String(T%60).padStart(2,`0`)}`,D=r.phase===`knockdown`&&u===null&&r.fighters.some(e=>e.player_id===a&&e.is_downed)?on(t,n,v):null,O=D!==null&&S&&D.y<112;o===null&&!O&&Kt(e,t/2,S?54:n-84,E,`ROUND ${r.round_number}`,r.phase===`complete`?`FINAL`:r.phase.replace(`_`,` `).toUpperCase());let k=d===null?0:Math.round(d);if(k>=100&&!S&&o===null&&!(v&&u!==null)&&r.fighters.some(e=>e.player_id===a)&&(e.save(),e.textAlign=v?`left`:`right`,e.font=`700 11px ui-monospace, monospace`,e.fillStyle=k<200?`rgba(240,200,110,0.9)`:`rgba(255,110,100,0.95)`,e.fillText(`SLOW CONNECTION ${k} ms`,v?24:t-24,76),e.restore()),u!==null){let t=S?120:64;e.save(),e.fillStyle=`rgba(3,6,12,0.82)`,e.fillRect(24,t,196,34),e.fillStyle=`#ff3b3b`,e.beginPath(),e.arc(42,t+17,6,0,Math.PI*2),e.fill(),e.fillStyle=`#f6f7fb`,e.font=`800 14px Inter, system-ui, sans-serif`,e.textAlign=`left`,e.fillText(u,56,t+22),e.restore()}f!==null&&r.phase===`fight`&&(e.save(),e.textAlign=`center`,e.font=`900 46px Inter, system-ui, sans-serif`,e.lineWidth=6,e.strokeStyle=`rgba(0,0,0,0.75)`,e.strokeText(f,t/2,n*Yt),e.fillStyle=`#f6d57a`,e.fillText(f,t/2,n*Yt),e.restore()),r.phase===`countdown`&&sn(e,nn(t,n,v),`ROUND ${r.round_number}`,`Touch gloves. Protect yourself at all times.`);let A=_n(n,S);if(r.phase===`knockdown`&&u===null){let n=r.fighters.find(e=>e.is_downed),a=n??r.fighters.find(e=>e.player_id===_),o=a===void 0?null:(i[a.player_id]?.name??`Fighter`).toUpperCase();e.save(),e.textAlign=`center`,e.font=`900 44px Inter, system-ui, sans-serif`,e.lineWidth=6,e.strokeStyle=`rgba(0,0,0,0.75)`,(D===null||D.y>=A+6)&&(e.strokeText(`KNOCKDOWN`,t/2,A),e.fillStyle=`#ff4d4d`,e.fillText(`KNOCKDOWN`,t/2,A)),e.font=`700 15px Inter, system-ui, sans-serif`,e.fillStyle=`#e6ecf7`;let s=n===void 0?` BEAT THE COUNT`:` IS DOWN`,c=o===null?`STANDING EIGHT`:`${Mt(e,o,Math.min(t*.5,t-32-e.measureText(s).width))}${s}`;(D===null||D.y>=A+30)&&e.fillText(c,t/2,A+24),e.restore()}if(r.phase===`knockdown`&&u===null){let i=r.fighters.find(e=>e.player_id===a),o=Math.max(...r.fighters.map(e=>e.get_up_count));if(i?.is_downed!==!0)o>=1&&(e.save(),e.textAlign=`center`,e.font=`900 36px Inter, system-ui, sans-serif`,e.lineWidth=5,e.strokeStyle=`rgba(0,0,0,0.75)`,e.strokeText(`COUNT ${o}`,t/2,A+64),e.fillStyle=`#ffd77a`,e.fillText(`COUNT ${o}`,t/2,A+64),e.restore());else{let{x:a,y:s,width:c,height:l}=D??on(t,n,v),u=a+c/2;e.fillStyle=`rgba(3,6,12,0.88)`,e.fillRect(a,s,c,l),e.strokeStyle=`rgba(246,213,122,0.5)`,e.lineWidth=2,e.strokeRect(a+2,s+2,c-4,l-4),e.textAlign=`center`,e.fillStyle=`#ffd77a`,e.font=`800 30px Inter, system-ui, sans-serif`,e.fillText(o>=1?`COUNT ${o}`:`GET UP!`,u,s+40);let d=i?.is_downed===!0?i.get_up_prompt:null;if(d!=null&&i!==void 0){let t=r.tick>=i.get_up_window_start_tick&&r.tick<=i.get_up_window_end_tick,n=d===`get_up_left`?`←`:`→`;t?(e.fillStyle=`#ffe9a8`,e.font=`900 64px Inter, system-ui, sans-serif`,e.fillText(n,u-90,s+106),e.fillStyle=`#7dffa8`,e.font=`900 34px Inter, system-ui, sans-serif`,e.fillText(`NOW!`,u+62,s+100)):(e.fillStyle=`#8fa3c8`,e.font=`800 30px Inter, system-ui, sans-serif`,e.fillText(`GET READY ${n}`,u,s+98));let o=c-60,l=Math.max(0,Math.min(1,i.get_up_meter/Math.max(1,i.get_up_required)));e.fillStyle=`rgba(2,4,9,0.9)`,e.fillRect(a+30,s+120,o,16);let f=e.createLinearGradient(a+30,0,a+30+o,0);f.addColorStop(0,`#7dffa8`),f.addColorStop(1,`#2ea860`),e.fillStyle=f,e.fillRect(a+30,s+120,o*l,16),e.strokeStyle=`rgba(210,220,235,0.5)`,e.lineWidth=1,e.strokeRect(a+29.5,s+119.5,o+1,17)}else e.fillStyle=`#c8d3e6`,e.font=`600 14px Inter, system-ui, sans-serif`,e.fillText(Mt(e,`Waiting for your rhythm instruction…`,c-24),u,s+100)}}if(r.phase===`foul_recovery`){let a=r.fighters.find(e=>e.is_foul_recovery_target);sn(e,nn(t,n,v),`FOUL RECOVERY`,`${i[a?.player_id??``]?.name??`Fighter`} is recovering`)}if(r.phase===`rest`){let i=r.fighters.map((e,t)=>({corner:t===0?`Blue`:`Red`,stats:l?.get(e.player_id)??ln()})).filter(({stats:e})=>e.thrown>0||e.landed>0).map(({corner:e,stats:t})=>`${e} ${t.landed} of ${t.thrown}`).join(` · `),a=zt(r.fighters);sn(e,nn(t,n,v),`CORNERS · RECOVER`,a??(i.length>0?`Landed this round: ${i}`:`Conditioning governs recovery`))}if(s>0){let r=Math.min(320,t-24),i=Xt(n);sn(e,v?nn(t,n,!0):{x:t/2-r/2,y:n/2-i/2,width:r,height:i},`OPPONENT RECONNECTING · ${Math.ceil(s/1e3)}s`,`The bout is paused`)}if(o!==null){let a=r.fighters.map(e=>l?.total(e.player_id)??ln());An(e,t,n,Cn(o,r.fighters,i,a),!0,[x(r.fighters[0]),x(r.fighters[1])])}e.restore()}function bn(e,t,n,r,i,a,o,s,c=`Inter, system-ui, sans-serif`){e.font=`${a} ${Nt(n=>(e.font=`${a} ${n}px ${c}`,e.measureText(t).width),i,o,s)}px ${c}`,e.fillText(Mt(e,t,i),n,r)}var xn={ko:`KNOCKOUT`,flash_ko:`FLASH KNOCKOUT`,tko:`TECHNICAL KNOCKOUT`,disqualification:`DISQUALIFICATION`,forfeit:`FORFEIT`},Sn=(e,t)=>e>t?0:t>e?1:null;function Cn(e,t,n,r){let i=t.map(e=>n[e.player_id]?.name??`Fighter`),a=e.winner_id===null?null:t[0].player_id===e.winner_id?0:t[1].player_id===e.winner_id?1:null,o=[],s=[];if(e.method===`decision`||e.method===`draw`)for(let t of e.scorecards){let e=jt(t.player_one),n=jt(t.player_two);s.push({label:t.judge.toUpperCase(),values:[String(e),String(n)],lead:Sn(e,n)})}let c=[t[1].knockdowns,t[0].knockdowns];(c[0]>0||c[1]>0)&&o.push({label:`KNOCKDOWNS`,values:[String(c[0]),String(c[1])],lead:Sn(c[0],c[1])});let[l,u]=t.map(t=>e.punches?.[t.player_id]),d=e=>({thrown:e.thrown,landed:e.landed,jabsThrown:e.jabs_thrown,jabsLanded:e.jabs_landed}),f=l!==void 0&&u!==void 0?[d(l),d(u)]:r;if(f[0].thrown>0||f[1].thrown>0){let e=(e,t)=>t>0?`${Math.min(e,t)}/${t} (${Math.round(Math.min(e,t)/t*100)}%)`:`0/0`,t=f.map(e=>({landed:e.landed-e.jabsLanded,thrown:e.thrown-e.jabsThrown}));o.push({label:`TOTAL PUNCHES`,values:[e(f[0].landed,f[0].thrown),e(f[1].landed,f[1].thrown)],lead:Sn(f[0].landed,f[1].landed)}),o.push({label:`JABS`,values:[e(f[0].jabsLanded,f[0].jabsThrown),e(f[1].jabsLanded,f[1].jabsThrown)],lead:Sn(f[0].jabsLanded,f[1].jabsLanded)}),o.push({label:`POWER PUNCHES`,values:[e(t[0].landed,t[0].thrown),e(t[1].landed,t[1].thrown)],lead:Sn(t[0].landed,t[1].landed)})}let[p,m]=t.map(t=>e.ratings[t.player_id]);if(t.some(e=>n[e.player_id]?.cpu===!0))o.push({label:`RATING`,values:[`Unrated`,`Unrated`],lead:null});else if(p!==void 0&&m!==void 0){let e=e=>`${e.after} (${e.after>=e.before?`+`:`−`}${Math.abs(e.after-e.before)})`;o.push({label:`RATING`,values:[e(p),e(m)],lead:null,news:[p.after>=p.before,m.after>=m.before]})}return{headline:xn[e.method]??fn(e),detail:`ROUND ${e.round}`,verdict:a===null?e.winner_id===null?`DRAW`:`${(n[e.winner_id]?.name??`Winner`).toUpperCase()} WINS`:`${i[a].toUpperCase()} WINS`,winnerSeat:a,names:i,judges:s,rows:o}}var wn=[`#4f86d9`,`#d9483c`],Tn=14;function En(e,t,n,r){let i=Ht(e,t),a=kn(e/i,t/i,n,r);return i===1?a:{...a,x:a.x*i,y:a.y*i,width:a.width*i,height:a.height*i,rowHeight:a.rowHeight*i,verdictHeight:a.verdictHeight*i,judgesHeight:a.judgesHeight*i}}var Dn=new Set([`KNOCKDOWNS`,`TOTAL PUNCHES`,`RATING`]),On=(e,t)=>t?e.rows.filter(e=>Dn.has(e.label)):e.rows;function kn(e,t,n,r){let i=t<480,a=e>=900||e>=640&&i,o=Math.min(e-24,a?980:720),s=r?62:Tn,c=i?72:112,l=n.judges.length===0?0:i?36:52,u=c+l,d=On(n,i).length+1,f=t-(e<640?118:70)-14-Tn-s-(a?0:u),p=Math.max(16,Math.min(i?20:28,f/d)),m=Tn+(a?Math.max(u,d*p):u+d*p)+s;return{x:(e-o)/2,y:t-14-m,width:o,height:m,wide:a,dense:i,rowHeight:p,verdictHeight:c,judgesHeight:l}}function An(e,t,n,r,i,a){let o=kn(t,n,r,i),{x:s,y:c}=o;e.fillStyle=`rgba(3,6,12,0.9)`,e.fillRect(s,c,o.width,o.height),e.strokeStyle=`rgba(246,213,122,0.55)`,e.lineWidth=2,e.strokeRect(s+1,c+1,o.width-2,o.height-2),e.textAlign=`center`;let l=(o.wide?o.width*.42:o.width)-32,u=o.wide?s+o.width*.21+4:t/2,d=c+Tn,f=o.verdictHeight/112;e.fillStyle=`#f6d57a`,bn(e,r.headline,u,d+34*f,l,800,(o.wide||t>=640?32:28)*f,14),e.fillStyle=`#aebbd0`,bn(e,r.detail,u,d+56*f,l,700,13*f,9),e.fillStyle=r.winnerSeat===null?`#f6f7fb`:wn[r.winnerSeat],bn(e,r.verdict,u,d+92*f,l,800,25*f,12);let p=l/Math.max(1,r.judges.length),m=d+o.verdictHeight;r.judges.forEach((t,n)=>{let r=u-l/2+p*(n+.5);e.fillStyle=`rgba(255,255,255,0.06)`,e.fillRect(r-p/2+3,m,p-6,o.judgesHeight-8),e.fillStyle=`#8fa3c8`,bn(e,t.label,r,m+o.judgesHeight*.3,p-14,700,10,7),e.fillStyle=`#f6f7fb`,bn(e,`${t.values[0]} – ${t.values[1]}`,r,m+o.judgesHeight*.7,p-14,800,o.dense?14:17,10)});let h=o.wide?s+o.width*.42:s+12,g=s+o.width-12-h,_=o.wide?d:m+o.judgesHeight,v=g*.36,y=(g-v)/2,b=[h+y/2,h+g-y/2],x=o.rowHeight,S=Math.min(16,x*.6),C=_+x*.7;e.fillStyle=`rgba(255,255,255,0.06)`,e.fillRect(h,_,g,x);let w=Math.max(6,x/2-2);for(let t of[0,1]){let n=t===0?-1:1;e.fillStyle=wn[t],e.fillRect(t===0?h:h+g-4,_,4,x),It(e,b[t]+n*(y/2-10-w),_+x/2,w,a[t],r.names[t],wn[t]),e.textAlign=`center`,e.fillStyle=`#f6f7fb`,bn(e,r.names[t],b[t]-n*(w+3+v/4),C,y+v/2-22-w*2,800,S,9)}for(let t of On(r,o.dense)){C+=x,e.fillStyle=`#8fa3c8`,bn(e,t.label,h+g/2,C,v,700,Math.min(12,S),8);for(let n of[0,1])e.fillStyle=t.news===void 0?t.lead===n?`#f6f7fb`:`#aebbd0`:t.news[n]?`#55df9b`:`#ff7b74`,bn(e,t.values[n],b[n],C,y-16,t.lead===n?800:600,S,9)}}var jn=6;function Mn(){return typeof window<`u`&&typeof window.speechSynthesis==`object`&&window.speechSynthesis!==null&&typeof window.SpeechSynthesisUtterance==`function`}function Nn(e){let t=e.filter(e=>e.localService&&e.lang.toLowerCase().startsWith(`en`));return t.find(e=>e.default)??t[0]??null}var Pn=class{settings;synthesis;Utterance;queue=[];speaking=null;destroyed=!1;voice=null;voicesListed=!1;onVoicesChanged=null;cutoff=null;voicesChanged=()=>{this.listVoices(),this.voice===null&&this.cancel(),this.onVoicesChanged?.()};visibility=()=>{document.hidden&&this.cancel()};constructor(e,t=Mn()?window.speechSynthesis:null,n=Mn()?window.SpeechSynthesisUtterance:null){this.settings=e,this.synthesis=t,this.Utterance=n,this.listVoices(),t?.addEventListener?.(`voiceschanged`,this.voicesChanged),document.addEventListener(`visibilitychange`,this.visibility)}get supported(){return this.synthesis!==null&&this.Utterance!==null}get hasVoice(){return this.supported&&(this.voice!==null||!this.voicesListed)}speak(e){if(!this.supported||this.destroyed||document.hidden)return;let t=this.settings();!t.announcer||t.volume<=0||(this.voice===null&&this.listVoices(),this.voice!==null&&(this.queue.push(...e),this.queue.length>jn&&this.queue.splice(0,this.queue.length-jn),this.speaking===null&&this.next()))}settingsChanged(){let e=this.settings();(!e.announcer||e.volume<=0)&&this.cancel()}finishLine(e){this.queue.length=0,this.clearCutoff();let t=this.speaking;t!==null&&(this.cutoff=window.setTimeout(()=>{this.cutoff=null,this.speaking===t&&this.cancel()},e))}cancel(){this.queue.length=0,this.clearCutoff();let e=this.speaking;this.speaking=null,e!==null&&(e.onend=null,e.onerror=null,this.synthesis?.cancel())}destroy(){this.destroyed=!0,this.synthesis?.removeEventListener?.(`voiceschanged`,this.voicesChanged),document.removeEventListener(`visibilitychange`,this.visibility),this.onVoicesChanged=null,this.cancel()}clearCutoff(){this.cutoff!==null&&window.clearTimeout(this.cutoff),this.cutoff=null}listVoices(){let e=this.synthesis?.getVoices()??[];e.length>0&&(this.voicesListed=!0),this.voice=Nn(e)}next(){let e=this.synthesis,t=this.Utterance,n=this.voice,r=this.queue.shift();if(e===null||t===null||r===void 0)return;let i=this.settings();if(!i.announcer||i.volume<=0||n===null||document.hidden){this.queue.length=0;return}let a=new t(r);a.volume=Math.min(1,i.volume),a.rate=.96,a.pitch=.82,a.voice=n,a.lang=n.lang;let o=()=>{this.speaking===a&&(this.speaking=null,this.clearCutoff(),this.next())};a.onend=o,a.onerror=o,this.speaking=a,e.speak(a)}},Fn=[{name:`decapitation`,sampleRate:12e3,frames:7920,wav:`UklGRgQ+AABXQVZFZm10IBAAAAABAAEA4C4AAMBdAAACABAAZGF0YeA9AAAGAGAAd/9r/1b/Dv+d/kH+Of69/vL/gAGaAhUD9wKOAmICHwPSBLYGQ/pC+4r72/rQ+Sr5sPle+7X+MQM2BmQHHwfgBSEFpAU+CKkLYA649Q331faL9fnzlfMw9ST5+/5iBV4JDAtaCuYIVgdWB0kKSw/iE2HuFvGL8lnxVO/g7TXt4+6L8wT7agMsCvAN0g4gDb0K4QjzCOEMBhO+GHQdcuis667sVOsZ6dTmDeaH54Hr4fE9+0wECgylELYRuBDhDU0LfAnWCb8OABXvG6QiDyiLKwjk3uUl5fziMuAc3v/cvtx23kbj2Op98xH8EQYQD/ETiBVzFgkUHxCYDc0MWAtYC4sPrhWTHE4kpitIMV41DDlm11XZV9pG2ZPXOtVN0yrRjc/wzkXPstA51HDae+DX6I/xjfq1BBYNYRMgGAYaSRwnHU8dkxoAFz0USRJLECwP5A0ZDyUSzha7HdclaS2nNJw6o0JgRw9LVE6kUMZROMnOyWDLQMlWxRzEScGKv0u+eLx5uq+5xbnxuii8ub7nwOLDMMrT0IXWnt1r54DwWPp2A/YLiRBdF9wbex6gIAkibyGNH3IdGBpMFdESOA45C08JEQoUC1gMIBImGl0fFiogM7A6FEMZS1ZThlfAXGhgxGHyY1S6Cbszuki4dLensvmwaq+crAesQqy5rfiv1bR/un/B2swO2f3mdfQbAw8OrRS+HC0duyDeHmwZUhXJDocJfAmGC0ATOBemJCoytT+YTKJX0V1qYl9lbWeztN+z4K8JrOeo/ahZq6SvurVXwVLQGOOf94YKuBgvHU4f5B3rFjkS1gyMCgcQKhoGKkw9PEzkWhhiZ2aZZ2St4ai1pG6h6qIKphixgsTW3e/4/guGGmweeRq0FCwHEwP2BwwZyTACRwBZg2M7Z4ZoVaiRpKCgDKHkqFq4iNHe7h8LXxibGUARPArNA8UFWhWgMIBLOl9CZ9JqEKzepjah0KBBqfS3VdGH9OwNIxVxDgUG8v/C/lETLjDrS1Fe62gLa6anjKD8nTmgU61jxsDlmwFlD4gNHQJ38/TykQOGJq9GQFxCZn1oE2URnQiaVqC3rDrKK+k9AtkKPADV9k30rfo5Fk44x1WZY4pnGWf1nCqZO5vhplO9seDF/1MQsQykA9r3VfRl/yUePTy3VaNiJWZzYtCYSZc1nHGr+MZo5q4ADwxeCLj9DPOK82X9UBr9PRdWqWTKaS5oh2PYmZmZfp5xq4rEPd5T9a3+yfzA8/npoOdf8XsFYiXlQutYMmIYZphjS1/pmPGY7pw1pvm30NKu6Jf7GgCr+5vuDufK5Czm6va+C6IlfT29T4laJF5mXdFajlE4kjyUlZdxnamq9by30VXmivRW/Y35QfJO7hjsuuZh6ub2DAioGBssJUFPTD9T0Fg8WEVVFFU5VENTzJXSl82Z8J9Eqv+3CMZq09Ph3/AL9TH5QfVM7vDnROO44VnfyN3X5C7t7/xeERwiSC+qPM1HlFIkWFxaWVsAXFVaUllVVjpRD0phRoBIppSulcqXy5v0oDypUbV0wNvHk9Bu2cLcTuC946rjsd4L3UTdGt1X2SnYlNTn1MLaMuDm5drwK/dnAJUMvRmgKM8utTgwPzpE/0oNT81TOVazVPlWPlZMVRtSqU0CTMtIA0qLS3NKZprGnROgl6SRqvGwf7W7u2/G9dA92Ink4+uZ8CfzkfFT7TzmEOHK3RnZ99TczxHQjNO02d7gfupp9hMAbg8yHIoqEzWlO6RD1ElkSplNHkxOSS1GA0PjQEtAEz/mmiudmKBhqHGv7Lqyx3PV0OB57Fruqe827T3l8dwe27HWIdgS2nflQ/O5ATEXQSq5NpE/X0CJQNY96TpyNpwyAy6SM9mbyKJurdS6kclG2vPl0+8R7BHpjuDh2lbYYN936sL+ehW3KuY7UUU6SB1Hj0HyOzU4iDsXo5WpKLZgxHjV9N/q4jne2dYx0TjU89x38boMsCYwOtlE8kQWP3M2pzKRNm+k3q9qwDHShd/E4bza0NLp0J/YoulEBQwlgTlAQUI/bDdrLhAt+Tcoq/C4WMoh2cXal9M3zQPN69os+C4c2DXWPJw7GTO1LsQ0aUPusxDHwNnS4U/brNGqynPQMev1D2MtjzboNdwvFSgVMOtBe7ZCy0Tbgt1Z1DXKN80a3rX/ACD2Mv03IzIpKe8qMznGsPbDQdZe3QTXyc6PzDPZO/XVF8MukzVYMZMmfySgMh9HpcCG05HcBNcmzK7JCNMH7cYNyycmNP4ywC1lKPcxIkLFUQzOKt183gbUvsxDzyXd5PwxHL4u2jKTLTMloCBLKcQ75U2txafSxdQ2zT7Gt8cy1dnuSgx9KKIzTTKbKukiICSDL25BH1CSxi7QotBDy2PE+8F9yXHZ5PZmEPkjZiywJzEiPxrOGOQlvDinSVa+xMhR0LbMcsbMwj7BUcaZ19fu9guHH+IpXixGJ6UgQxrAF/AePS2VPvlMxFS+xxfM9MmaxRPCvr+WwenIK9nK7IYBDRZ5I1koZijvI3scyBc0FVQcniZyMylCyEySVDrE4si6ytjHxcM3v0u8WLu6vD/Et89q4HbzlAjIFwEhySaGKagmECLGHJIXgRJqFB0dYijKMzY/30hlUBVWQ1m8xg3HCcZAw4HAHb0du6e4/rnpvfHCF8sq1+vjMPQqAc0OahivG7Yfmh+8HFwYEBWuETsQCBFnFAwZgyEqLFs4vkGTSnhRV1fpWinElsepyPLFS8IJvw68D7fKtSi0sLXyuD7Aoshc1dXi8/KcAP8OSxiZHgEfZx+4HE8ZwRV7EN0OcgxRDoYX2CLnLYw6OUVKT41WC1wSX4LBrsGewKa8Dbm+tsGzzLKVs/K35L5jymTZH+3Z/DgMFBnZIPYiVCHAG3EUpAwQCvIKEhE8HNArBDxQSo1V+VyDYAa/bb04ug22OLNusZey27cBwxPSxOi7/zoT9RxHIXogNRlmEawLBAzUE88imjbnSN1VQ16ZYsS6jbdKslKuKK3Zr9i6IM0m5UQAoBNKHU0bLRR6DHUI9wseHMkyGEhgV0Bh1GN+tHyteahVplCqz7ix0G3tXgn7FzsYGxGPCUoHdg/BKUVDJFdqYYFlxLDnqZ2lfai+s7TKfO3aBxoWJBVWDFgCZQF2EGIwW0xsXsxkP2XlqGGjnaQ4sGbLwO7kCp0UIQsR/Bf4RgVEIxtE61nmYvRiy6RqoEuhm63pyZnwOQv4EoYJy/xG/NIS3TXHUjlhQGaAY8CiVaGDqH6+gOH+AWYRxAsh/I/16gDNIudGDl3RZLhibZ7hmzmgkLF50tz1DQcEBaf4iu8Q+qsbNEMkXa1mPGexYXqc255qrf/JaO5aBrcHufyL8MnyQwpgLiRQ+F9bZEBiG5vOmDGf5a8BzlvuLQMRAcD0Z+ko7BX+UCPGRb1aHWN1Y9NbmJaLmHujRbow3Ij3jAWQAkT5qu2h7yb/fx5JP9NWc2FzY7xf0liBlYWZYaQ7uoDW/PBa//X+RvRT5lDh9Ohx/V0dpTxkUcNdPGEXXm1Xa0+okEiUB51ZrYXEzd8n8yT8cvyw9VDoNuNI5jvzTgiFJLw9nFAgWUBfLl4+WjlVclJNkxWXp532qWK5ps7M5Dvy8vl3+sD1FekA43veDd+O5mX1ZggoHNMssUOJTxJX8VmgWKFWqFRiUudOVk08keySxZbknZmnObLfvR7O9tu15XzuafEY9CPs++hp47jeWdqV4W7lEOwr98EIKhjxKsA6qka0TA9UB1oyWiBa5FfGVVZSl0/vTHZMpEsdk8eU35fcmzChOKkXsTS6ZsL5yvTVHN9w4kbnAOgX6WbknuKk3afax9ng2ZzXLNmE3lrj/+4rAdkPSR3BLLE8WkWGSzJUB1dRV2RVuFQmU1NPH01vTCxIXEbjRI5Ip5QTl86aYZ8npPyucrr3xsrS5d1O5oLsCe+F7gPnFuA/3UzXstEOz6/P5dZx4GrwkwNBFSArzT+TTCFTlFYwWQ1aT1gdVS5Pa0ngRnVI0ZlJnkKjDq1yukTKVNlQ5TnuC/Ff7RXoet6W07XO0M9y1Frg2vS3DYgjBjixRStPclAwUCpOaEZmQotBckX4nSml0bLxw5rSK+MA6W3rrubD3CHZCNvQ4gr4LBJLKo87pkZDUOlO0UfEQQ47rDrDmxKji7H0wrPUFeEn5NfcxNIDzPXS3eGE+dYZ4zRZQhhHBUX3QBI6gzq2RFSni7YvyaDeqOW+3I/UmNC71d/pzAkcK5s8kUMuQJE4vTA9M0A+S6hSu1bOPdir2xPRisqQzmrfzvxCH9o5T0ORQbg7wjWaN01Jw7Xsy1PhaOcP3gnSctCp4C78LhxnNrc7QjgzLiop2DFsQlSyvMi92jnhGtmB0zjW+OUeCLom3TiBOuAxOCmGJ2g2fap9vnXU8t3K2FrNtcej0D7rVxNOLQY4gTYrLYInlTFNRGe3F8wM3E7cKtIpzRXQU+P9Bp0objZ8OXYyACdeI0AwyUMltf3DRdAv0O7GRsCowDnOQO1rFBMrOzRGMb0rnikGMCdAUE56wHLRS9PuzDvEEMLTyWXcz/oOGLIslTUqMwUt/CTUIgUuz0EnUfnFktTK1hbPq8crxCnI3NNB7N0FiRp3Ky8uOin1IR0bkhtiJYM2pUceubDGPc9izyzL/sWcwljDEc0K3eP1eg57IFMoZizsJ2okzRz8HX0gAS0YPqRL3lNSy5vTUtY30xXRz8mpxobH8M422E/rdwKyFFkhwyoELHsqlySEHcEWJxQzF4Md6Cl6OKJGKE+fVTnI98xTzZbL78gQxFPAbMEExJzGhs8r3Z3uQfwDD+AZmCLdJ+MuKywNJtIhZSCWG1EeQyBpIwEp7jMjQLBI8k5RVEDDZMf2yv7KSMkxxLfAi70XvEW62rxfwRLHEtEU3w7wcgHrDUMboSEnJ4EqlSnxJT4gux3wG8wZ/hoxHCMjuSrBNglA6EZnThNTulbrwvzGRModyRrItMVWwkLBQMCzw0DGn8um1k3ia+91/jUM4BccHTwikyToHtYaTBj3Eq4SWRdrIAEr1zOzQBZL9FLRWMFbx8bGxUjCBr0Vu623s7UvuPG8ose71qrpNgJ5Er4dZSSPIzkf5RhhE9QNChFTGvQnqjlzSSVVhlr1wf7EysDNulW3NbWNtWK7iczl4o/8IRMgISslySI5HJwVzBDMFYQjcDUGSItWOl1Qw0DCHbtJtROyObcZwS7TBO75CgsbkiEXHewTfAgTDqIe9jYkS6FYv13qvIi4IrM7rwuzh8Bp3PL9uxYKHfwXRQwMBmcMmyIXPbFRA10CYFy21rA0rp6yz8Jz3xsDhhOSFUANZwMCCLgeIz8rWNdgbmMht+uun66+usPW4fn3EHgX/A5VBEwFPRxFPUNWzmALYiOv3qeOq0i8aN0fABYRLA2d/JP4rwtTLb1OOF6qYeytOqiYqnO7595FBTwVEQ4L/yr6FwzRM7xRsV5BYDCn4aJFp/O4C96A/5IJmACQ8pL01xCROaNWwF+VXlSjNqGQqW3DyepmBUIKNv3K8tL7hB79RDhaLGE3XvWeTZ9dq/rI6fAtC1YNtf3r82r9ch8oQ0latWCiXSCdHp3UpSO/FuQvAW8Ebvfm69HwzQlhMxhSN19MYBtatZnNmrCkortZ3Sb1nPq/8OnkJOXI+Y4gE0SVVrtcG1m5UAWV35lgqGLEoeVa+hD8c/LA57zntvhrFnE5gVEvXjhgslrtVMWVpJkWp5C++dxq8Sr3OfI15Rvd5OHv86ERIzH0SblYZl1AW7pV+U4Yk9uWYqLitj/Rc+hs9Ub20ux84e7cE9+Q6jYAix8XPFxQAlvEXPxaRVYVUQdOy5Lhl2Whca/DxVjXiOTG7EjrW+Fe2JfTO9cQ3Xvw6QgsIpA7WU1KWJdcrl3zW0VVE08JTJ1MV5JRl5qf9KqLulHPy+Gz7HfvrO4g6Njg3dk21qbVBdwu6QX+3hTVK4Q9sUpLU7pYIFk7VvBRg03aSH5G+Ef0j0mTY5mRo2exwcFP0sHgeuqy72TxoerX4zrZZNKL0F7RVdXY4SrycQllH6cz30PXTl9W5FoSW9NYYVQFUDFNXErySnRPPZYKnI2lTrKLwBjO3Nlu4rDlUOTq4NHZfNMaz4/PTdTk3Jrr1/51FAYqRD6pSSBRN1OGUwhQfUuvR1NFWkP8SWiVOp6BqSW67ssg2ozk6ucL5HHc9dPozTfM8tCf3TPvqwo7JRQ6yUbUTJtOR0usReFAVj5yQWBNQZxEqke72c372YbeLt1d1YzM3crEzgzd3fM/EwwxKEJlTdpN7UglQNw5IjsfRduZNanQun/Pz9sL3ubUQs0EyqzQC+IbAu8jIDz+SDpMDkVVOUU0fjmOSkWjlLdMyxDX9tYdz4fGjsfY02/vmBXVM2ZB2UP3POQ00DItPgeeQ7GPyaPZmNhuzszDLMTT1jT65B4aOb1CD0CeNv4yZD43UjqykszV2pPYC8slxATKY+G2CGUrvzs0Pc4xUivSLrNEEKr0wAfS+tDRxne+s8JV24cDoyfzOMw31y2tJYI0rEypsxnKqNNazlnEEMMH0RrxERv6Nb49mjXLKf8pPjviUz67ycwizpfC6r3jw8/c8wT1Jk82SjKzJ2Ikiy98SPxby8iB1OLPZ8VwwkrOlOsoE/ssRzKXK30hISFRM0JM+12ezL7T48wew/LCEtHB7toW1C7dMvgrRCRVIa0tskJDVgDCXsy9zF/Epr1Ow5LULveEGTwsQy96KC8esxqvJLE6a1BGXBTK88wVxS6+JLzjwijXl/VSFHomQSwlKC8gUhwCI8QzyUTNUzFchsrgyaLDurwOumm/lM0d5ccAThcVJDcmbSBUFqMOjhC3HIkvAEIZUKpX08OkxSzBobuJtzu2uLsIxyHcxvR3Cxsc+ySRI4UdkBcGEy8N6hJ5IWMw5kCJTD1VnFhDxIjFWsGfvHG5Kbm0vEXE7M873/TyOwZTFvUhbCPOI98e8xceEUwNkgxMDt4WSCUYM7o++khHUclU8lZFxWHEt8CLu8y5ebd0tmS4vLtRwhbM8trC7Yv7tQrqEzAcGCGhHbIcfBcUEtoNKAxRC6kOJRT4Hj0o1DNqPpZHkk3cUVVTwVVZwRy/Pb6Jul24yrYSt3q5qblVvQbFT8xx2Gbkv/Dl/okHuhGjFhkYHBe+FC4Q0wxaCgsI4AdWCr8UZxyoJ2k17j4ERuJMsVC8Uy1Uf77svAS6vriCtSS11rWOtti53sF6zMfXrud1+X4Fzw70FiQYDxb6EKwNAwYrAT4EkAppFZwkejF2P71Hm0+mUyVV3FU4uwS3cbW/szC2F7iSvz/M6N1D8a0BgAsyECoPVAuNA7H/gPxhBq4SniUXNzBEnU4CVfBUrbm9s1WxyK8+sgK7usaG2p3zogTnDVsLBgW3+7P17fjHBEAZgDEYRe5QDlVfVKCzbrAsr4qyOb/+01HtRwJrDk4L8f/b9xb4CwEJGukzoka1UARU0FKFrvmqmq5tuSXSuO9oBq0NFgk+/c75wQLrG7I4w06aVlxW4VCWqi2rjLLGxKvj9voGBIUAyPag8EwBeyFAPt9Ns1P1UdenOqVBq065J9ZZ9T4C0/kD7qbog/rVHXA/M1CUUxxOMqXbpTazCM7r7RUETABm8YnqofYBGxE8glBJU+JMqKGro82uPciP53n+RPnC8YHtHfskHPw+xE+tUghL3kY3ooqufcy878kAXfuY7rTu4wJJJ/tGsFXWVntQ9UqIpP60ntN69f8CEfmS6BbnIf5rIw5FKFF0URpJQUAQnU2o18El5EPvMu1g3g7dEe2cET05/U+YUj9NDkS1Q62gAray02nuSvBA5wDdT9xf8eMWrjU/Sv5NA0jRPhc9L5tJp/y/Q9wM62/nANzY1JfgDfzCJBRBQlIgVbxQtUkCRn2ZCKTru27W3Ol67UvnKNyS2PndK/bHFcE3r0ieUSVNcEZ0QTxG5JnopJG2VdAJ3+Hmc9/l1HLM7c5M22b1rheRM+dEo0wFSi1CHTquNztAREkAnc2rur2I0mTcwts208PI2sZ1zRDavvJvDYIr2T7BTH5P6k2tRs8++DhkPPpBn07Xnr6sPbwCy53YcNqu0tbMPMi0xGTGB9Eh5pL3FxS8LQ4/BkhISN9JJUTxOnE54TPENg1BRE8gnr6rGLwgzRLY3t4j3Q/aV9H5yVPCvMJmxkHRSufT/t8SLSrGOYhEE0mkSHlEKjtoNwU1ATUtOvlFO1PInRqpTbhxxMfMBtFL0h3Ld8PqvEK96sCCy4Lau+wOBB8dyzH4QRhIN0rxQsQ+WzkIMwMxmDZUPr9N71qspfaz+MTW0MvWWNOkzQLE/8DnwNDDyszf3V/48hTuLJE8eUPfQ2hA3zmBMkwtDy+/Ot1Nnl3qqJy5E8aVz57Pess+xJm8Pru/w8vV0vC4DDAlCTM6NzA3PDBbJ3skcixXP9xUCGV/tBPAE8hJxA++pLjgt3rBlNeX9dcYpTFhO344vDBcJ90knjDXR2pe2635wK3JycQIvLy1wLrtzaruTxScMEg81jtmMUMnWCkfPJVUO2iQvAHGbr4/tGmvArZRy3jzUBr0Lv0v+yRtGjEhvTntVTFp3r7pwcS5pbEjtLjFM+xfF68t8C39In0ZjyIrP6lcY2uHvQ66PbAwrbm5UN2/CG8lpSwgIz8Y3R/VPZtbDGqtuy219avCrE3B5OypGCEqeCTQFRwamDIhVLtner5wutmwza+kwVLmuRO+KaghMBN1EMcoDU5IY1q3trPSqb6rHb/96C4UoiOGHnMPrw5pLMdQI2NSt96wv6hzq+LBj/D6F/Ej9xrbC98RkDJaUgFjPLTIrHWmiKq0wXXtkhCnHFERqAY6DiwsrU57YA9kqq9SqBer37zZ4xwMEhvME4oGEAcbHuVCAlvVY8+1qK6cq7y039DY+oQYHh3zDgMDWgQEHco+mlNLXWldpao+pwarorvg2jD7sA0nDDj9ffIZ/UEavzwPUtFaW1rGp6yku6e/s4fNz+xJBb8LoAUN+TH1WgKWHWg7JlDHWN5YzFNjpRalSaqEuVjSFe0sAZwGDwHG+Dfz6vnYC/YmnED6TnpWFFdOVL+pV6fUqRCzVcTf3ObyFAWeCFoAqPUR8J/vDvknDFgmPjq8R0FReFQKUldNxqYGp1OpOK/2vJ/N1+Ky9fYB0wWD/zL2J+/66jDsUPbrBz4eRzIwQeNKxE/KUAtPwEqeRu2lQaaEqQuwtbp5yFnac+vJ92sAUgKz/Uv0Au0+6Tbp6u/4/DoNPB6xMbs/ZUjdTaNPa099TARJnkVDqDKoDKqRrbWzNL57y1XaV+nN8an4mPkX9sjyS+z/5rHjKuXJ7Hf51wfpF1ApjzbLQd5H3EpaS2RIbUYGRRxCjKlYqoKtB7JLucjFbNKE4ObrYvMX9EbzPu9v66Lk/uIJ42vp7fYDCkcbJy7MORZEoEceSQFIy0MhPus56jchqA+rmbGpuufH19ZL5VjwcfOR8CbqDuMU4I3gT+Zt9CgGvhmpK5s4sUCUQihBuD49Oj053qgarTK1z8Fy0nvijuy28DLu/+X93WPbq+L88dYIxyIZNSZAX0S3REtAATkmNk+oqa0NuezKbt+/6hvuVuqS4qXdRuGV8ZQHwySfOMlBg0IqPdI1mDKmOBauX7tkz9zj4+vm6ubhZ9qw20vscgp2K4Q8fkImQNI5hDVoPCOw1cC01fDoqu/15fDaNtrR430BOSExNzA/sTzQNeoxDznGr0zBQ9si6gbjB9aJ0f7dIPiNG+M2SD3qOHAy9DCBOmWvecSA2wbiFttg0fbS4+RqCl4saz1XPLwyHyzKNKurU8GN2MHhHdqt0DDRHuTmCAAt2TmsOOUuoCqxNn6sXMI81zDa4dHdyG/NK+Y6C1grqTgLNVgtBCneOd+tMMIz1QvYEMxMxz3NDe5NFswwhjkQMUMmuid0OoGvIMXF08DUi8lIxWPPke61FZswTzluMpcngyfoOAdRRMC50QDQKcTSvqvE1txgBT0lwDV/NcwteyhyLw1Ew1erxhfRksxRwLe7KcG41e/2hxl2JmUqGiP0Gasb9y8ySbiyosFiyTLDGLh/toe9htEh9FkY9S2zMOUoOB9MGzon7TzhUoVfhsJVyHvEJrxWuH+49sYN4Lz/WBzMKNIp4iVvHzkggSfHOblQwl1Av5HKwsxJxD+/vbvCv5zI89/9+4QY1SniMwwzjSvZIFYaoxuCKdE3hkvsW+Vii7wAwT68fLXZrmSv+LAQt37HqN4p9SsN/R2oJNQh4R1OFRESUBIzF5Qk0zisS2RZjmOPaFG//L6UvyK7vbSAsmq0GrZcv6nKJ9y27yUGRBiuIMIlbCaJI30eqxiqGAEZsB/9K3k5/EhkVcpfwWf7ab24xrhwtYuw8qoiqI2o96kcsfK7ncnu2qHs1wPIEH4bayFSHnIWtwqNB4QFcwY+D+oZ0ihYOjVNm1sAZHNpuWsst3Ozfa19qWKleqPao0anKLDuuxPNdeaXADgUdiDHJ7oo/yIZGP0V0g5UDQMTViK8L3JBMk9aXotjDmcxqp+oUKRAo9ihJaRop5ivPsNY2hf5FA0WGi8gryJVHGIaShGvC4QMpx92OXROVVv1ZR1ry20OsNKsLaaooqSmzrNFxoLh9/xjERUajB2yFlQOawadDzQfZDZwUINhO2tibwewo6rzorKjNKwvu67bVPs7D6IZAhWyDPH8wPivCiAnwkjRXd5mwWfRnoCZoZpHo4+0xtO5+l4SvBg5ENEEJf7mC1Ex61CxY+dqgWq/oGacMKC8scHRnviSD4MUaAcn+WkDVSLlRWlgNWqXagqf/pplobG1gd0TBL8SCQ2n+1n2EAv+MyFWemOPZiydOZqJnle3QN/IA0QPHAf2+P76YhWKQxpcUmWFY6iZP5p4qNrNvvlrCiQEe/ES8P8P4jy7WX5iql83l/GXYai8zUX1awbt9j3oFezpFcdFOFt7Xy1XPpPjmP2tkdWS9afyfuV531H3eCkfUGpeKVyNVKWYiaWDxrHuE/7Z9efnXe3mDZ488VeZXcBX+VAWnJauJtgB+4D++O6M4b/vIRYWQBdVt1aCTAWUrpgZrZXQV/HK9gfsKOJF8m4ajkSUV49avFIxSsyYKqhBytvrSPin7ZPfC+MiAH0sq0oQVZBS/UY4RBqbFKx2y4HozvG551namN/I9S4bOUC2ToRRVkpJQ19I86BvtxbYDe4/9ebo491q4G/0zBrsPOBOJFMGTdJDqUD0mBOjG7d20FfhkOOC3W7RYc9V4C/7Hx8UOYFIWE0pRbs+wzzvQnKjQ7Nuy8vdLuPu4YXZXtGe0Sjd2fY0F+szb0NfSEFFYj5UONE4JkGPotOuEcFO0+7fy98m2/PR9MvBzFbZhu+7CSAjEDcDQFJBnD4rOGoxfzGEOc5FZamvtrHG/dQo3T3cdNYX0IfLocod0rThzfgxEW0p1Dc/Pl9Amz2hOVo1pTE2NcE8NEgCrhC6Vsp11rzchd7n3A7Xc9OC0GfUUt577O4DNhqkKlU3hjzPPu881zatMgUuOTAcNnBCZ6sjtWPCMs501izYdNQJ0VTKYsdWyVrQnd248TsIBh6wLO80TDczNggv4Ck6JVor7TTmQdqulLvKyPDWNd/b4fDapNI5zxfO79Ml4Xf2ZA7IIpUyrDnSOIo04iwqKScq1jATPhpL+LoCyUvU+9mw1fbO98lnyVrRpuAp+OkSvSalMx414zBMKtshHyPWLqw/QE6bwCbOsNVA0YnKvsSqxbHOsuVxAuseziyrMa0vEycnIXsmhTdHSpe+o87x1XzRcsqhxlzL2dnl9YAWUCuSMV4sDSPQHUQmODoXTZDEINBD0LjI+8Gcxg7YUvnrHOgtuy9pJ1EfNSTaMxJKksIE0BvQtcdAwrXFetoc/wIdqCmuJMwbwhv8KkJD/lPGzWHQ5Menw8vJa+HQBuwjSSu/I10ZBR4iMyJL98MTzGXGAr9TwSbUFvkkGzgm0CG6F/AbEDItS/BXocwexrm+jsHB2CoA8B2eIoMVpA2aGM02VE4pxIbE270ZvEjJHuqTET0kfh/jEfUVHi3rSLlXLsuAwyG7TMEq2kgB8hoJHS8PFQdfF2E4Hk8bV/K967cjuAfIl+x6EVsgphn/DswUci3XSMVVz8EmvCu2CLu+0QH4WBVRG/0RgQrlFTQz/0sUVy3A7rh/s3e4Fs0S8VwNqRNVCjcAdgqzJwJFzlSuWEG5LbN7sr/AXN4cAEgTng8PAkf/Kg1ZLspH2FSCWGa36bHbsVK8XNdw+k4RthUEDUcBngQSGn03D03bVypaOrc5sY2wkrgRzkfsUQeQEDEJ0fvo8+T7fxPdMEdJvVN8Vj5UZKsiqQGt5rc5zaHp8gLuC4AKCwI7+lH4XQhvI3k7qEyqVbJXnVSxqcWnPKhyrky8ptK567P9wQVWA3T5tfG+7rj2iQlSIZc5GEvDVA1ZiFj9VaeoBqYxqA+wJL0yzijmaPwMCQ8LVwmh/9PzW+5089T79w2jIgs5B0lqUlBXZ1gXVmxSdqI2oT6izaYQr169AND345b2BARmCi4I/ACX+lXzu+4Y83z95wsvIPs1u0V1UMxXjVvVWjlYbFTRn4CejZ/VodKmrq/ZvXjOw+Fl9WMAFQMqAvL8tfjz8TXxE/PB+PMDbhXLKo48hkmIVPFY3Vl7WHpWp1L2mmWaD5wunyCnrLKmwmrVtuiW+Cf+z/up+NruJulQ6DPotfDWAL8Xfyy1PlpN5lbKWf9ZkVeXU7NP7ZkqnKmhaqsSvKXSGuiE+Dn/pP2Z9AHrcORQ4krpGvmhDxortUPVUtlZAFvZV8FRykt0lNCXs54nrR/Efdps7WP0HfLn6Vzhfd895rT5JBlaNnNNJljlWktWBk0IR8WRzZe/pbm7e9Y06s/wi+044nLbkt2l8ywUhDa9TrFX9Ff4UbVNKJNymPKnmMNe4JnyXfO05S7WGddb6goSBDleUNhXklV6UOtP6ZXupM2+Nd538zP1VuSY1iHYlPQ7Hbw/y1HYUeRJhEG4jneYarEU14Lq6+Xo2uTT9OXKD/09MlZRV71S7EiNSU6WeKlLyPLb/Ns5zr/Jz9mpB6Y1jlGZU5FHMjyPSNSbxblB1IbgQdPCyUjUXfjPKLlIhFG+R5g9f0Eul2CyetKB2ozRIsTvy6HuBST2Q9ZK5z8ZOWo+xJYarzXLUdQuyyHAnctd8PAhC0J5S61D2Tb5PQiZ97OezwDW5csnwt3N3fX6KN1CekbxOGgx2jjplD+qJMXhzcHFGb8EyY7sfh+mP3RHXz74Mdk3Mk75p0bBZ9CQzzLEssFR1C0BczAVQ01FVjb2KRQ4SFFpq/DCvM7Gx3q9EMIo1jr9vyspQtREtTn8L+cxkEEnWtSvpcTPxr299bQiuPnNYvgbJFI77z9/OYMv9yuIOkJQz6WYuqHGG8XjvYq3zrvyynfsLRpANs8/MDpQLtYltioOPwlVwqg+u27IwMi8v/G4n7gIwVLYkf1/Gl4y+DdvM5AqcCSMJt4wfUTUV2WrcbxCxlfDuLrJtHm1oboVz37r0QuzJe41+jsnOZ40cS43KS4uzzkzTDVbjmSPvbnErsFwvqy4Y7TXs0S7ec9w5mQC8Ry2LUo29zboMUErYR7KHI4exy3/PvRPY13Hts++n8MiwRu96LYus/qxy7ScwObRmedB/4UTzyDrJYsoACPZHGoYnBkiHbApYzs3Sl9Ur10CtzW8GL/Qvdu5Z7NXsue2E7/pzKXe8vGhCAMXjSIrKDojVh1+F9AUABcgH6AwykLZUZZdqWJrxpTMDstbxvC9+bqquMK81spT3rzyHQkCHMImryd6I6sdLBilF5ofrCswOZZLwFYHXhq/Er90ulS1ubIEs/O3b8U42tDzhgo2G+odcxzXFm0PKAwDFPInED1nTARY81xFv7+4RLN/sbezk8GC2ob2LhJwIPYkfyIzFywRnhVcJL09C0+RWetdkcL6vVu4cLhzwCvUN/ITENweuBroDvYGNAcRHZA48027V8bBYL7kt6K2Sr4g00v14xLpISUd+hWgDZITcivlRaxThFllvTu2lLKPuyXREvVcEPIZDBIbBooH1RtJONhOEVe3vIS1wrLNu6vT+vnHFL0WYgaPAMwOPSyRR+1TUFSls3KvtrdGzg7zuw5mDr8ASf4tEtQ1I01GVIy4BbGEshnB8uCwAU8J0P0h9tkD7ij0RsBRyVATsfywsr1W3QP/YQUI+fTyxAMFKmZH71HUUOOxWbVHyTLsWAnCCxD9qfeXDIkzR0qxTxZM5a/3tJvN5fOzCiYEzfaQ+Y8aXzw4TVFO169ZrQy34tMc957/Y/RF6hX4wBuqPyNMdEqZrHSu/L1b3xj8vgK98nXtYP0MJLJBnEovRweriKzhul3YmfZ/+cfuvOjr9lsbhjrwRSNEFz0sqQSxRcfK55j3JfKR6HnsywQGKQpC5UjmRNs9SKpYtVrNW+tW+WfweeSq5Ov7uyEMP0VJD0hGQa0/LK8swJ/cR/T09ELqOd/E44H8MR5CO5dGxEVuPp86k6h5s4/IP+OF72/sz+Gz267hMPo8G/I130J+REI9yTYPON+ptbejzPviSe716wLk9Nsx4wP0PRBuL60/KUWCQSs6LzaZNyKoRLShxhbcBOit6ivkyNsW2ZPfx/MYEmEspD9HRphFSUGjO+U4AT5DqTq2XciF3e/sN+1F5mDeM9YL1gff5/ImDuYmpjd+QC5C6EBYOrg1xTRMOVuln7AWwA7Sy90X5iLhXdlt1DrQKNTh4Qr2vA+RJO83XkINRaZB3TwINsIzzDaZQU+nRbMCxN7V6N0U45/e99hN0a/NFM4O1vzpUwbkHoozMz+FQ7lBsz7aOOUyDTMmOvJFZKh6tQnHH9TA3ezdE9jH0E3Npc1V1oHoEAFUGq4vYTx/QlRBDTvtMjAtHi4iN/xG36emt17JsdcG3pHXydBGyiXKaNGf4rn98BpkMV9AbESjQao4yDKAMqQ5dkk+qBS6m8xn2ELbQNQyyUHEjsj81tXznRV1MLg+PUFCPMMzli6aNc1F6FjdtnbLL9aa1F7MxcRbw3PQQO1lE0cuajzGPNwzNyojLJ46M1AurfTBnc/hznrE0bzZwDbWu/vkISs6Qz6XMyEnxybHN09S561zwjDK6MKluiO6iMnh7RAYvzRyOSowySVdKTJBUl2PuVHL/8jmu3m2acGJ4zEQsC5ONoYrcyBAKKRCDV/ruY7Gx70Zstixkcgx98Egsi9UKOYXoB2LPFxeILjew2K+o7XCt8PUDQMlKfIyBCYAGl4lb0cbZQ69isBqtHOvgr9+6y4cnjKOLCcdoR2hPHZdmG4XvXGz5quTtvbc3hQyMbUyqyCNHCA4rVk5bf+6x7HFp6Os+M0EA/QjKCabFN0MjiS5UEdp0bTlrQamgqtaxwD78CJpKKYZdQ7aI3xKMGZBcOiyRqkkqO28mu0XGs4p8R45DlcVEzezWx9sv7HfqPehiKlCxvj52RwRIdAUgAiEFok8JV5QbPetWKbAoKqnnsNS8j4WhhvRENL+bwNGIytK+GA4aCmkjZ19nSerV8sO+FAUVRpLDlT//gVnIQVH5V/zaOJpEaHJm2ygu7MX2B7+dxS3FI0EpPosAuod9ECWWsFmzGiSocma7Zi7oKG1/Nju+dwMfw0XAtf3BfgoChso5kVmXO9ltmYgYiGbtJpmoE+wRs2T7fUGbhJCEVIGkfmi94kCNhv1Oy5TRWAWZaNjSl/bmU6YEJoNoRmx9ceg4tX4owTJAtf7m/J28UD3UAsRKJNC8VQbYeJk0WbBY9tf5pyOm8+eY6fJtajK/OKu9pICIAUK/4X0G+766EHu7fnRDUIlez3gTtZZiF26XbRaGVfvmJGYXZrinwWqC7oc0hbnIvfQBeEExv7x9qvrkeaA5UvyGQQrGvQ0kkf2VKxckl5UXr9Zc1bwU4+c9p3WoR6rq7n5y87jXPKF+u38v/lx8VLoCOaF5pLtu/0oE58qKUBtTPlUgVaiVQpR6kqMRleaepwvo1GtwL090a/l2vUE+zr6t/KA6xnlM+cQ9LIGrB63NtpGMVE9VOVTWlDVSgVL9KHjppCxCsIQ1f/pfvRn94jrR+dv4LzgjOyGA7EdrjcERrtNY0pIREo8bTp2oO+nZ7QlylXfTvBf9LHvk+Cc3BvgUPNBD3csNz89R6pG70OUPY0/RamQth/OdudY8/3whuYX3xbjXvWtFRQ1GkXySh1JekFyP4Cqerd6zlTmmfdw9c3nPuGx5t/4ShkrNKZBKkEWO5M2nTwdskDJCuV98OnrU95X2mLqkAvNKnY8SDsBNXwsYzaFsZ3F4NvF5KrcS9Zz3Cj0DRkuM8o7RzgGMnc1f7F8xaniZ+qR40HaK95J+LcdHjaJOqQw1SpFNJO2ys6P5LbmM94u2E/qMxC6L8o6MDbMKycwjkJoysDjIeor4K3ZP+eSC+QqrjcjNfcraysWPfjCe9cQ2wrT4c3G2Wr7UCB3LhQvCSf9K+o9Vsja3gvle9jD0xzh+wNdJRUyvCtnI3UlSTyHybTfN+Hc1WvR2d1a/g8gTi7GKTQd8SCIMwvArNIg1hnO8saSzsXo4gmxHi8jixrLGGYmZD2syg7W1dTbzqXLNNlr97UWTCbbII4Z+BhUKRQ/LMv31fvRT8iEx5XSBO4fDjkgmyJVGlEXvyRxOCtHUNeA2zPUEcyrzUjeqfpoF10iKiLiGYITZx6NMfZBadBt1iPUw8qEx5TRR+OT/rQWPx9EHwkXmhX1HLEpjzsoR9rT4NOTzRbLCct/04jnJAQlFxoe7BuIEnUHrgcFFX8p6jmqQ73LMstGyKTEIMQSy+rYR+0/BKoTjBeVEXUMqQnpC2QZVS2QO4lEp0i/0aTNE8jgxZjIzM5O3yL0zAjjFmsaKRqcFaoO8A25EsIg9DDGPYFFbkhl0WLORMmjx7jGo8nt02fk4PipCZ4U2xnZFy0ToQ46DOYQSBtRKXI3nj8/RPtFzcp2xm3CpMCHwnnG6dBo3rjxHgM9D1oSUw9DB58C1f24BGAPeR41LnY6ZkHuRN3Jb8jUxPjBHcNJx/XPF+AJ9PMCNg/zENEPrQb+AL8BiAY0EXUj1zJvPWVCkkRaxnPCOsA4wLHCmsn41wbtogIZEY8UFRCICTAEpgZaDWwcdy3VOg5D1kUqRTfG98BpwBLFns5J3x3zMQN3CrAH7gEe/ML5OQWaGlEuNDzpQp9Du0FFv629ZsDcyqzdcvWlBNcKFAT/+xT6XgJwFNAs/TuMQkxCgsBXvdi98sR41Svs/gAoB5wDe/gT9lkE5h06NKw/UEGvPLe6brslw5zVRe/MAZMEWvxg+Ar+kxbMMEo/OUPyQLO8P7w7xKTY0PGs/+/8c/Qm9IUHdibvO39Cc0F7POy8McWM2Un0TwFO+1TxuvTCCswp6zo2Pjo5ebibu/rKceW2+dP2QOxz7QUFkSM4OaE9Vze9t968kM4a68P4IfQo6cTtPQ3ILNk6rTonNJO4ncM43ej1EPnm7ivrLv9hI6w4HzziNnY0U79O1NDwGPo170Lp6fkHHNY1PDqJNO8vNLvJzEjniPEp6QriB/J5FqYx4jgyM3guX7q9y6nlCPJ26O/g2e0aEUEuhTekMZwr1rfKxsvgje495gTdzuPQA48m3zR+ML4oJy6pwTzaRe/g7YLie+Sj+0gfNDNLNXQtVinjNbXJxt7Z6Ovgndgi4B79mR4yLlgvGCgWJ+U1L8sU4aPpn+MA3DrhYfpKHYQvFDH/KDklbi2NweTUOOWH5BPc4tj25PH++B4iLhouDyVOIZYo7TnTz4zhhOQR3fvVhduA7k8OxCU7LssqSiKqIEcrvzo40Ajf7+JI3IvUtNR64Gb4DRPaJF0osCSBHQAetChZN1/Ma9tn4WPfbNe0097XruV+/b0VGSODJSghVxq+Fscc5itSOg7P8dnP3aLZQdT+0VrW1t+E8iMKBBvtIxkkOx9EGq4XZx5PK8o3v81F13bdOdzh1nnSzNEW1anev+/JBVsUoBzzHl0b7BULEVEStRmKJfUyfjxQ1KfaRNvU2J7UZNE/0ZjWdOHz8bsDSBOFHIceLxy8FgMSYxCyE4QdHCkbNL87W9U72j/a5Nbj04fR0NHa1eHdr+zV/aEN4RjhG8QbsBctEqQQRxIhGYojOy7vNtM77dif2r7YhdR80bXQINO62ZvmifX5BoMTUxlCGu4VRhEbDvMNYhQ8H2orGzUnOo/a2Npu2DnUl9FM0a/UU9wm6Uj7dwpEErETkxHcDPUIhguWFR0hLi2MNb45V9z62j7WJNN+0vPVH+CT8MkCBhBAFKQStAzeB50JtBK/Hxks4zMiNz/bctjG1JvTctY74IzwNgPiDxESrQ7DCKQGgAysGhspxDFGNf3ak9Zt04zTBdr35/r6dgl8DncLCQaeAz0NORyXKTkxjDOH2ADU79Iq2C7lx/nQCaoNEghZAlcDkw8UIfcsXjHB2fnVRNSh167ktfh8CEILIAU1AOQDYRLQI6UsAS/e1jHUi9XX3gzxyQNjCj4G/P/uA6QSCSQ8LEMurtcl1YHXUOJ29SIENAX3/cH5ZwUqGGcmZytRKonVv9XV3Q7wrgG2Bq8AKPtcAkIVlSTvKY0pq9bU1qjeHvDlAIkEgP68+vcBthRoI6snWyYn1pzXzOAG8oQA9ALn+5j55ARwGKAjLCaeIyzWI9hA4QHy9P3P/Bz3fPdWBZsYwCOxJWYjytfe2pLmw/fxAJz9sfbs94AFkBjUIfkiVCDT17La3uP68rb8dvvt9hb2mAA2EwQfBSJPIBwdcNnP3rbrTfdj+pX16/Fd9UwFKBYkHp4fhB3QGvTayOH77ib5yvvW+BH08fcyBeITch3MH/sdBRr82cLdiuVt8On41/ca89zwovfvA5oS7xvYHsocyxksGVHdgeOC7tD3LPsp9+LxkPER+J4E+hBKGSIcpBoKGOYW99vg3lblN+7x9T32jPI38O3vVfWWAZIO0RcPGzsbVhnnFfMVp91L4bPn0+/s9H/3SvV/8ifwIPL8960BGQxmFYAZIhq7F58VQRM1FHLeWuIA6C3uRPOU9Mjy6vC87u7uyvFr+EEBnQppEnEWuRYHFr8U1hF1EdAVYOHp5aTrW/IU9pD3x/en9erxU/DU8CH1avySBCsM1BJ9FdcVZBXxEw8R4Q+oEu4VQOKZ5vDrFvEp9LT1jvXG8hrx2O/p8FH1sfvKA4gL+REXFgYX3RYJFPYQUhBXEW0UShdz5NPoQ+7N8/L2R/a18wvxNO8679/xqvWU/awF1AuUEC4S1RLmEYYPPw/eDkQRrxVd5VXqfe888+v0SvPK8d7vBvAZ8iD2XfybBDcMdBAEEjgRzg2NC9sKUg5aE/AXf+nO7SbxAvOz8Ufvc+0X7S7xRviYAekKsA9UEaQPzwygCwQNIBLTF1nqNvCD8/b0F/J173LuVvAp+B0CygrWD1wQFA52C1oKSw7XEw7ohO1w8ALwQu6q7OfuH/Su/WUIVA4dELgNowo2CjsOkRXw6u7v8vHL7kXsRe1e8wn+zgiJDggOhwoZCW0NWxPSGVHwpfLK78vt3+6v9asAVAu/DUQM6gcJCW0P0BYe7SnwGO4R7FnsXvOr/mMISQucCCoF2gf7D5YXkO2J7uXrOevg7n35CAa9Cj0JCwYsB0EQpRdB757vVO067Xny2P7BCU4Mggk7B+cLYhTJGW/x3u7D7P3txvZjA8EKnQg9BB8GVQ/ZFpHuCe5964brEPLj/VIGnwWRAUEDzAubFCgY4+z96ufqofAH/bQGAAd8Az8EDQx/FJQYZu+A7AzsX/EP/S0GNQc+A0cCzwjhEhAX9O3663nrOfBv+2AFTgdXA1sCqgc8EXgWahd/7Cvrg+0X9RMAbwRmAV3+SADBCdQRSxV+7JrqJOv079D5zALnBMMCEAEbBk8PpBQfFmntq+v663PwxPnUACAC+P66/BsBtArZEUAU3hNL6/PqVe0d9Cj9vwCRAJ/9Tf3bA8IMihJrFMgTo+w47MTuevXX/bACTgJC/7P8jgC1CNUPDxNXE/8R6etL7C3v2/Rl+1b/4/4m/Cz79P03BAQMihBYEvMRsxAK7RbuwvEz+Gr+JAL0ASv/E/1T/RcCCwlRDvAQdxGfELntp+3o7h3ym/Z3/AUANQD//XX7Hvtv/d4BnwhADa8PHRAkDy0O3u2u7sDwuvSD+ZP9Qf8g/9D8tPu/+/j+AQTYCHsMLw61DmwOSw2hDALv5+9l8jz2xvq7/aT+y/28+3H63fqd/coBhgb2Ck0N9w3tDUMNaAz575DwDvKK9PL3IPyD/rv+lv1f/Fz7B/zZ/dMBGAa1CbwLjAxMDB4L3An3CTzxkPL89E34kfvb/V3+Rf3m+1H7Ivs7/XcBvQXeCLUKQAvKCvYJKgnrCIfyzvMm9pD5iPzC/UD9Wfxl+7z7df2mAL4E3QdpCQYKbwmBCL0HPQhL9P/13fgo/LD9rP2a/Ij7b/um/GcAmQRVB8sIDQljCHcHWQf59CD2svjH+3/9E/3/+/b6W/ud/YUBIQVEB6oHZwdCBjIG0vU59/r5kvy3/UD96/uT++r8OgBUBIYGPAe8Bu8FmAXn9l/4x/qP/NH8vPsV+9X7wv7BAlIF/gV4BZIE6gTc94L53/sw/dv8z/vb++/9WwF8BHQF+AQHBD4E0/io+un8p/3Y/PP7nvxM/6ICagR0BHsDOAODBI/6h/yN/Qv9dfwK/ZH/lwIEBPUDNAMzA4QEtft2/dD9//y6/AX+yADnAlwDpAIkAgsDfvsc/dP9X/0O/c/9NQBuAhADigL/Aa8C/gNS/Qr+nf1R/Rj+JgD/AXACCwKzAXICiQPo/Un+6v3G/aH+dADOAfQBcgFXAScCAgNS/nn+G/4j/gT/jgB4AVwB+wAFAcwBEP6s/qL+XP6D/l3/hAASAe0AlAC8AGUB2wHz/uf+xP7q/oT/WQC2AKEAbwCEAO8AOwFN/1H/O/9P/6T/IgBoAGQAPwA9AGwAmACh/7D/q/+w/8v/+P8dACIAGAAOAA8ADgA=`},{name:`dismember_left`,sampleRate:12e3,frames:6480,wav:`UklGRsQyAABXQVZFZm10IBAAAAABAAEA4C4AAMBdAAACABAAZGF0YaAyAACXAFEABgCR/wz/nP5g/jQDyQMSBAAEtQPdA8cETPyA/NX7jPqQ+R/5UvmGCGMJcwm4CIIHkwcoCcP30fj999n1OvSP89PzFvXRDlYPrw7uDGALHQx4DvkQrfS/8/bwju5z7Zrt8O5v8ZcVvhVnFO4RjBBMEfgT3xY98Kjv1Oxg6UPnL+aF5hroqur2G5UczxvWGQoXLhWWFYYYKhwAH9nqYuqY52vjaOCu3vzdvd5N4CTjDeYoJXolgCQfIiEfmxvEGV4aix2kIWEljChXKoPkm+Ny4NvcCdlI1jPUL9Mf09vTdtVE2N/ajd0f38IxvzE9MfIvbC1+KlAnBCWWI8gjNiXxJnMq0S25McU0ODfEOLw5y9lb2arX09Ry0SbOlcsLySXHw8Raw+XBRcGnwJ/AgMBEwQvCpsOrxH7Gk8i2yQ3Mdc00zhDPlM9kR3xHd0euR4lG6kXlRExCOkCGPXE8sDoSOIc22TTOMws2HzcHOY86QDvUPrpCoUVxSPNKLE7LUFtSUFUmVjxX/VcAWYzEI8KHv+m7WraUs1iwN62zqTenuqT0okyiy6EGoluiv6JTpauooqtwrhmzqLhBu5i74L4YvFpg3l/rXp5by1ayUpJNvUgURhNFfEOTRtpLq1KeWP5dnmADYrti9LhJszytIKZgoOCc8Jrgm7edW6BFpaqrqrLyuEq60WPKXoxXeU71RD0+yj7VQ2ZOH1kAYdBkV2aktmyvqKYWn+2bk5thneujk6xXtIi1TLCFXKpRBUhXRDFJb1NzX3Zm42j9ZketiaH/mnOYdZqQokOwPrxQvtVlhlyxUIpJ806eWWpj3Wh7aBOsQZ+emBqWv5lWo1SvDLcqsaNeZFC1RfJM4VksZIhpEmjnpq6aeJX0liOf6qyHuuS29GCcUfNImk4NXRRoDm1QahqmN5t9mNSamaeot1i/RrReX0FRLkzEU+Vinmrpa49mfZ2dlQqUcpidpOKwaLOmpp9TJUc2RoVUmmS0a01sj2XJnUyVvpO0mNql/LJmuO2uFaLjUu5PQlcaYnJqDW7ba3plopsJlFqTHJhuogWw/Lf3s7ekPZkpTBpE/0zhW9JlOmuMa0NnGF2RlhKTDpMil3GfxanrsAOy0qvEoGKYIk66SDpNqVbAYb9qfm7kb/NukmfZYPxW55aflQKWnZmpnoyleK21r6+vO6goo2abdZankkND9EEtRgpPWFdFXU1lymkxbHxtZ2yCahlmW2BLWeZT9ZRvlaqUwJZomMWbd6GNp++rwbHwspu3EbnzuVO337G+rCGn1KEsngyaBJYYlNtGqESrRWhIRUhGSfdNQlPzVVla8V/VYpJlrGl4a5FsEG1bbdds/2saawlpB2aKZWRj+mD8XXxapVYgVA9Q6U9MTDpI65Pdk9OU9pSVlByX35e/mTid058no7Cm4Kr0rxaxDLSHtMm0a7Q/tYuzp7G0sPqvnK/AraKpTahIpD+iM587nLKZy5bSlHNBz0AZRFFF9kiDTgxUhFplYCtkqWfQaQtr9WvqasNp3GbUY+5fEVrsUgVOrkgCRkeXr5gQm92di6LXphqrlrDEt6u6oLc8tA2tw6Zcon6eqJvzmoZIsE3HUjRb5F+3ZNVml2X7YKNcd1VBS3FEnEN0m5ufYqaFsWm5c75IwP62LKugoxKfBEubTRZYw16iYThjCWEEWkZPsEO/QKacKqMWrz25Mb0etyStO6QinwtHn08lWjFhZWNtYP9W2krdQv2fXKa8sDa9br50spCmEqE+oUNQvVxlYuhhF1zrT9xExUOHp3qz4rzxvcmwTqQDobtHIlX1XU5g+FxRUKpEtEWcq3+6hcSxv7+wr6RdohBK/lZsXX9d+lVWRp0/TkbIrrW7l7y+sVyl1aCmpEpRpltcXppYKkz2QfZEcq/7vNfCPLqUrs2lfqbnTsVZ5FyAWc1O5D9RObtF4bEvve67FrFnp6GjYKXwTExW6FnuVLVKLEBuPe9G07Y6wprGf7yVr+moH6jErQlVB1v3WqpVN0wKQ8k9qkREUGO/kcWgv+yzNau6p3upaLC4U9xY0VlzVu9P40XbPZo+y0WPTii+OsOVxIy7vLG4qsynG6dRqiCx71A1Va1WVVQXT15Fhz3oODU5BUCZR/BOf78UxgnGZsLTuvuy0K3fqvCpeKqzrBOys7flvt9W7FdGV8FUVFEdS35FFD+jO707lzwyQVJHLkwjUW1UEchHygbHvcQGwCO827cRtLqwZa2Rqz6rAKsNrEet7a9Usuy0hrnUvXRUF1arVmFWoVXBVJJTY1HGTtxJREfUQ0NApjwgO1U6djkaOQ89jT9DRI9HlkwnUF9S/1TpVq/LfswLy6TK5MUawpW+wboruHq0CbKor3KtlKybqzCrharZqY2q06vtrVOxwLRPuKu898A7xrxXAFncWN1X9FYcVYlSrU+JS9xHqEJwPp08/DlLOww9H0CURD5Ijkw8UB1TX1XrxcLGD8M8v1W6RrXKsXCuEatIqQipMqtori6y6LcYvO3AuFdqWOBWOFMzTkFIHkLmPbw7wj4ZQwZLYVEeVnRY58WhwSm6FrJ1rFGp36gQqqCumbY5v+jHulrqWJhTrEy6Q749ND1/RH5NEFVgWPrCTbuzsrGrXKhxqJSrcrJfvdHCM1loVD9KPz7NOTg/AUqeU3hZy8L7uQ2w76hzpkGpu7FuvDDCgljeUIpE1DoRPdlI41MXWrK/pbWjqrSkJqU3qzW2GsB2WwNVDkk+QJNCRk4OWMtcO774sBqniKOzpp+xc775w9RaW1CjRP9BykxGWddeEV5Fs+ym3KEspDmtXLmgvKhYvEztPi89Y0mTVtpdzF0asjimXaFho5Sr37gSwDC52lNlRfY/4kZQVNddW2DqXNSqHaKooOaj662Qunm/nbiLVQFJTkNZRzNVPV+YYglhsq51o4eeL56DoyatlrfFvCK2Z1fMTMJEcUSGTQNZJGD3YvlhT1sopLydMpxxnZuisqu9tfy6sbmGsVpW4kstRKNCakmWUndbn2FJZIpkJWF8XAGkyZ4unL+bZJ6Mo7CqerQ/uqK92LoftPuseqWTUHdJJkRMRF9GTEz5UzlbxWC6ZOJmFmgTZ/5laWIIX0daCqDzm/uYCpcCl3KX85hcmmKcOqDrpC+qYa8Is4q0Lre2t6C37bP9sECtoamSpl2jlZ/aUyVPeEyaScdHvkZrRZdGDElGS9pNo1FjVCBXill2W6ldr1/eYH5jJmQ0ZVdmVmcbabZpiWrRapVqemt6a8BrjWuvamhqxmjWZwFngmWnY1Bi6GCUXk5ci1vlWDBWoZnQmC+XCZZClaGUdZQGlLeThJNCk72T4ZPXlL2UQpVCl3aYjprdnOaeSKKnpJOo5apSrDSvXbDfscGzCbSHs6G077EzsMmtr6vJqF6kyaALnqtYVFUOURhON0ypS2BNvU+eUwtYLV2EY1xnUWonbJdtX21Hbd5qc2ipYzJepFjilmuUGpMrkiyTB5bumqOh3KdPruez27ZEs3OuaaRnnVtVtE8JTfpLVFDAWtpiQWoBbThtWmuMZ2pg6FeGlICSXJNOmF2ggaphsjO19682pyOdXZcoSy5LRFTPXlxonW2Hbo9rCGO8WGiV65Jel8effqxntWS38q58oIKY1U13To5ZCWVma45r2mYVXSxPoJKZlAyc6acStIO36KvfnU+VJEgwUhtfrGgFbP1nVl26T0iUTJalnYKr0rSOszOobpydlfhLYVVZYsxosWkjYaFSu0Q4lFOZwKdntdy3nqqYn3SXFUfiURpg0WfbaCFltluSTViXSJvLpQyyRLt+tbGlSJrNlSNHjlZcYitp/Gc3YtxXAk6DmUydsqdCtAa7tbXZp8OckJfAQ29OrVoTZSBoKGfxYVtWj0s4SLibFaPirGe2nbmUtWKrc6BBmg6Zu0fLUaFcA2N5ZeVkf2GxWGNO8EbZQ7Gb46DfqEexcbZNufmzGKw1pKWezJummribn0uuUsla42DtYyFlTWPBX25aBVQUTq5Ji0XLRryfgaPAqHivPbMvueK9575KvqK54bJLrFCo46Wvom2gDp/Fntmf8UqUUX5VSVpmXgtgJWNIY6BjiGMRYRNg1F1CWq1Xe1JtT7RMR0ixRxZFxkP/RBVEgUMKRiakxKVRqCSrra0YsX20U7kpvlHBFsMfxDXF8cbbxNjFdsKzvZG76rjatayw1K0hq9+oC6cppWqk5KMXo9ejTaOeok6ikqMLpW6l8ETWR1BKBUyYT1lSglRSVnJX3Fj1Wahae1s/W51bIVplWcpXXlbDVI5QkE1uS65GJkUiQZ4/YzysOxk/F0H6QkWsP7A7tAO4Fb1ewZTFf8byxa7DQ7/su1y4QbO1rp6qwKi1qNSnzKe3qWysr0tgT1tTaVb6V1JYLVgBVWNQWEsgRu1AcD0TPbM/k0R8sTq3mb0iwj7B471ytlCwd6vnqBWo4qdOq3pJUk9JU+tVoVQwUDtJ40GhOIo4K0Bns3m8AcfBybvEk7x5tBOuDqw2rj6zMFFFVoZX3FNISxlAUTYdNylCVrbQwDHE+r4ktgyu+qrnqzWyNVEJVSBVr0+XRRA9WTtZRCS5XcJMxYW8hLLBrDusoLItUQhVnVS5TtJCujZoOARFgbkmwUa9lLM2q8iqpa/fuvtUWFb+Tz1GUD0tQEtJ7L9ywzO9i7Fgqwqr3bBvUddVblQTTTdBWDuTQr5O7cT6wqu4wK0BqhesurPqUlxVdlGVR9g8Hj2+Rr1REcsTyFC8DbE4rP6tX7XHvv1VL1HRRx85YzQjPVdLKlSCxQS99rNfrDWrGK47t/fB51YwVQNOsUEPOg08F0cFUjPF/Mj8voqzJK0oqtmr27KdvJ7DFVcYVGFN4kEPPNE740EkSfRRRFVuwGS7X7MerFioM6fWqWOup7awvWLEBlmQVulRpkqFQjk+Xj/vRFdJUVCrVbdYocT3weC71LPyrFmpFacfpuKm3KherZSykrjVvjTCh8L0WBFXI1RMTp1I+kM9P709MDyFPTpBIEaKTI1RhVWzWGNah1w/XYrEI8P9vlO5FbW+sViuzan8pwan2qROo56jwaNbpL+lMag+qtKrmq+JtOq3qLtMvqm/csJowkDC4MEtXWJcb1tLWkRYOFWuUhhQMU2RSkpI8USuQQZA+T4zPSU9iD2rP5o/iELPRV9HoUrhTshPylLbVTpZtVqlW8ldBF9QYKxhp2GmYcq8WrtsuWC1kbILrsKrtqnopfWjtKF3n12fUJ6bnq+dwJ1fn6igK6MYphup7au2rzy2qbnfu92/Tr7JY49iCWFhXlRaDVeJUk1O+0pWSs9L7U8uUnZWCVtPX8NixmWUZuBl1be3sx2uUKe3o8SeI5wdnCud9aCYphStcbRGubm9/byQZOFfHVhfTwNJ8EYzSnRRQFpUYQlmqWg6aJmzrKktojObUZmImnufBqdLsLe6/7syZXJgdFbaTLZIOExRV5hfrmXKaApne6rCn5qZaJdemJyfiazatqO6VrPjXjxSJ0shTuBX5mHuaNlpS2Y0pKeacpZbl8+ec6uut5G7s7LAXeZQXUpgUQxdMWfPakto7qKRmQiVPZUAnKWpLrffuNGrAFqxTTlLxVZCZOBr7GzUZ8ihPpgLlYOZIKQNsjW3vrDwXvdQeEkeT55bsmdDbM5q/2LUmpuUBZRYmXKkArGLtVisDl2rTm1FBUwRWzxnkWzbawJmCZz5kz2Sq5TcnNunnrIss4iq9560UoZKO00eWJxkLGtabsRtE2hOXkSY4JR0lXWaraS9sJm2qLa7roGjUViCTdtJJUzHVA9gnWdBbA9trGq+ZWhc/FImkhyQwJDDkwOZR6GRqge0Q7fCtvuwsKiYn5eZGFDISvFJeUwaUgRZ1WD2ZqlrGm5+bxRv0G2LayRotmIiXaNWSpfelMKTipMnlE6VqZcLm1qekKHAprWqqa7SsHuz4LW2tfO0irOisByu2qqKp56ju5/5nA2b+JjoloJNvUr3SCdIMkcgR0NGMkaxSGdIPEqkTKpPpFKdVNlWBlmIWo5ci11LX/xfFmEHY1FkHmYbZlNn9mjCaWZq5WrcaihraGqOashq2GqeagBrMGuoaqtqSGvKa3ZrK2tEamNpxmj5aCZormZdZXhk5mOgY2Zi7GANX2xeWV3QW6lZKlZFU3BRuU4vmr+YSphPmBaYQ5gPmImYaZnCmXuaEptRnDGezaCAo16ntKncrJmwC7Spt5W5KLq1vKK7f7qpuCi1l7FYrfqpwaZAo9GfsE0VS1lJxUp1SjhN7lCOVItZsV1lYbZjl2Q7ZURkP2G1XTVYEVLRSnWc8poEm3icF6FApvOrVbJMt1e5qbcVsuuqmqNNn+9D1kI+SBNPz1ZmXcphaGNvYsheyld+TnRGFZ9noYqn6bCYuVW/bb9otsesnKRaoOFB50dsUo9bJmBhYaBe6FYDTA5BFZ+qokGqp7QPvOi6rrK0qHqjOUOISfFTgFzpYAVgp1nITmlEJaIVp02xQb6Rwyu9b7HNp7ei+kTRT1JaAV+hXSJXx0sTQdKk8aqatfHA68GguPes8qVBpctJplXcXL9dR1nUT/pDtT++qAGzs722wI+5f66RpmOksENeT+dXtltiWa5QVkSbPFSmkKygti/Bwr5Otdasv6bApcVFy1HvWe1adVh+ULFEmzxhPvqrgbVCv8XDp704tNyrsKdJqdRIb1IvWFZa1Vj7U9ZKAUJOOUQ+xq3JtMy+KcZaxPu8oLRyroqpCaljrIpMkVJiVkxYdFfkU21OSUU4P944VjxPQyeyn7ctvSDCysE4vbm3mrGrrNypUanMqsyrl68PTD9SzVR7V6xXCFb7Ua1OpkrxRJ88uDjlNvA4Dz3UQ8ZH0LQXu/TBScZ/xxbFTcTOvsi6qLdds46vLa0zq+mqNallqgmrGKz+q7quGrHcSlBNV1FrUoZUDFZEV1JX61eUV55XglYFVSpUgFGGUL5NK0puRohDhUBcP/k71DtVOu86ojrwO+s8pj+qQZ9DKkbkR+G0SLajuF67fLz9vmDBi8P9xV3FYccIxWnDfsMNwkPAt7z9uQi4/LV3tYWzqbEOr3Ctj6yFrKisAq2VrH6tFa3jrqavKLKss5W22k4KUSlS0lSBVl5YCViHVydWtVQkU+RQxE3yR4ZEFkFmP789hzwNPao/XkKCRyVMq1DEvLzB7MRWyN7G5sXGwZ+68rOHr3GrUKkMqPCpJav6rt6zZFL+VsBZLVtLWulWc1K3S5hGC0A8PYdAHkbZTXO6xMPuyWHHs8Xpu8Sw8ar+p/inKKrerja14FXrV/hYZVQSTalDeD8SQHtJDVIkwILDDcKvusCyOas+qLWom65at5NbuF3iWixTE0iEP84/VUaiUTi8z8AYu8+wsqhWpIalF6weuN1bJFt6VmdLBj+bPgBJIlUovpG/5LWUqeSjd6MxqTqz0lvUXJJXs00rQwdCV00AWe2/EL+zsJ+mKqLXpeWw1L3mYF5eUFVJS79FKU28ViVeVr9htbOplaJ+ogOpqbbUwl9g61ibSro/lkNzUPNbOV91tXKo+J/jnUyhXKvEtwS+rl4DVXFKcUXRSFRU211aYXm3BKtdoTScjJzaoiuuRbfFYNRa7VDbRDpBe0ZrU8ddq2JfY1Sx56Z1n3ec+Z3cot2r+7UJuAdh9FkUTyxFTkB0RxRR+FuwZLBmsWWms9Go4aFlnNebep0voXiqVrXJvVXD2L5mZeBeK1czTh5KNUpuTUdStlmyX7li42RSZkRkyaxLp5qhdJ19mk6Zfpn8mnWdPaItp5askrBvs7m3iLbhssuukl9XWqhVuFEgTnhIykVfRRJHMUrvTyVUc1boWU9feWOiZnFpPWr3alhsbW3sbZps12pMatVo+7Hir6Wt3ayxphalYKQon6qbwpncmD6XM5YnlzyXZ5fTmCWayZoImF+Y6JYrl++XW5gRmJaZSptvn1Ch/6QEpv6mIKiaqsKr2KsUreqsp64AtJq0zLXft9W4u7kStxy4GbaVseawCK+6rVGrbamnqdBkRmMYY4RhQV9FXmJcrVtcWGVW51UaVFJSPFHpTTpNokrZS5xLuEpZTKBNElIVVyZa0128YUpl4miDad1rX21vbYpuPm+6bZ9s5GltqimlYJ/4mv6WbpRAlCaT2ZPElVmXr5tZoD6lAKulsIyzRbNHsP6tPqeHYFtZ1lL+SQtGXEczSwZTkFvzYyhqN218bgduXGvLZh+hmZnEk+iRrpHrlCSaK6E1quKwIrQhs5mp0V7lVDlOzUv1TupWkGA4Z2Jsnm0kawBjrJvVlNySPpRimjOjBKzvseiyjKlLn7tQu0VmRZRNHVzaZrFrdWzJaFxdCpl1lfOXtp+Iq9C4l71EtbGpoFgtT9ZOxFYnYhpqX2zdaqpjlJ7/lyiYK55qqjy27LzYtJymI5uDSZVIS1PWYLNoI2u2Zv5dnZv5l0+adqEerp+73bvcsdKkoJpDRwBMrlnvYxhpT2pYZ6ZdD1J5mSeaY6E2rd+4R7sqsqmmTZ1HRoNGWE42WWxiv2WyZUtfslVwS3uY0pl/n+SoZ7V2vLe7KLKlpk2eM5lHQoJIclJfXT1kzmblZt9iN1wSVLBL6psmnAqgqKd2r7q3bbwZvEW3sq4ipw2h4529R65KTE/pVfBbOmGoZClmVmWEYzFfUVsIVQJOHEkaRpiehaBNowWoKKxWsmG5O70ywHK/SL78uty2MLJ8rQGpcqW3ohmh+58Mn1hCoEUgR3lKEU6HUTJW21dCW8Ndvl7nX1pgZGGvYYpgw2CfX6Bfsl4hXVRcfFqrWFxXMlW3U15Pw02/Ta1L70lgR45FvEPtQZ5C+kEiQA1BA0FvQJVAqaNepNykVaQopYyk56TIpomnqqeHqJiokKk2quKqHavNqyesR61Pro2vd7BhsaGyObWItsC38bgiuXq6CLwovAq+/7zvvFm+dL4qwK/APcE2wiDC4cOMw8bBHMCBvhu9Q7yXuhS55Lfptfe1h7WxtLCz6rEAsZuvJK1QrPiq9qnnqAqo3KeLp2ynMz62QFJD8kbcSfVMZk9JUmlViVepWDZZQVnpWHpYjldPVTtSf00uSXVE4z9KPW876DoqqtCsYbE6tii84ML0xrvIScmbxfu+J7lksletDapaqfipwj+kRatMlVG+VQBYrleWVS5RCEv1QyI+JzsvPqOvjrYkvoHFc8fZw4a7YbTLrTaqBKp7P+9Hyk/KVK1WFFQ8T3RG6D1JOf48l7G+ul7Eucm2xAK7oLHqrDus+0PCTMpTW1asVEVPfUWOPOM7L0OmuBTC6sawwn24sa+Dq0GsZUZ7UJxVOla/Uc5IVj/qPB1EXrmHwqzGor46tFmtVas7r5FNnVTxVhhUkksKQJE5WT84tfC/XMZbwPWzqKxoqiGt4ksWVDNWjlNnStI+XjiAPP9H7Lw+wlvAg7bVrumqtKt+shdTJlf4VmFRHkdcPXQ8+kRaT2XC2MbBwHW2f61Tqdapc64+tyBV8laCVGJNIETJPNo9SEV8TnLAcsZhxKO747LurASq2avdsFq401WfWJtYdVR1THxEujxOPJlCJUwcU3HBa8UHxWq/Vbc5r9mqEanjqNirYbFpuH9WgFl2WttYclRpUA5JIEOnPy5AWkKKRxxNlFMaV3jCJ8TEw/m/Ubv9tG2vM6rUpy6mpKVFpWmmqqjVq7uvibSLuNG8mVn+Wg9bQFrNWMxWwFTgUZdNoUuLR6RDB0LKQZVDaEOORCxIS0qUTVZRt1NHVpFXC1kLW8dbdb4qv1W/1b/uv6e+AL5xuhO4sLVgszWwMa26qauo/6Z7pYykHaNIorSiz6KSolShOKHDojijg6R1paCm8adUqVyrlayFrA6uF68SsZayjLSxt3G6+V95Yd1iRmN6Y+Ri0WA1YNBeGl0kWipXEVXWUA9NREuaR9dDWkMlQrs+xz6oQZhDzEcMTfRP31M7WHZcv14RYupjxWTXvNa/77t6t0SznK+ZqUqmc6JPn3Scops9m5Cb2px1n7eh0qWQqxixcraiuvJl7mOtYX9dh1lUUzFN90aOREBGQkycUnRbIWGEZDtm/LsOuJixZan7oRSdfJnXmQWdfaLGqZqyJrngZ7tlrGAJWbVOT0b1Q3VHZVGfXBlkJmjctRmuYKTmnLqZsZoun0Sn2rLCvHi/Wmh6YDdWikuAR7VQWl3GZkFqSbqdsTykaputmX2bAaNarme5trZFZMdYxkyxREtNpVnwZflqerTIp5iaKJWMlNuYCKbFsU61gmU4Wc9MjESuTxdfVmetaoKtwKFtmCuT45SRnHSovbVss7ljsFMBR6ZJXldMZChr02n8pWSbYJRxkkKXp6CtrvixPK3IXepKckLxSeZXd2VZafhqi6Q0mX6ThZUTmy+o1bdHv9e17GSDWkJTkFC/WpBkL21IcctvOrBooaWX7pV/mLCheqxsszW1kqzvX8BTQ0eORFtLUVRoYd1ni2qxatNlcZ2llXyRuZGMkxqaEqISqxWzxrVesWOoP17eU5NLg0j0SQFP/VU7YLlncGsibkBtf2vuZuJglJ2cl8iVpZRMlEyWiJmRnjGmCaugrwSwfrJetFCv96rPpuGfFlv9VstShU2FS/NNYU5nTg5RjVL5VjFb3V0LYSdksmdwadFrMWyJbaNtT2+ebt1tXGyparpp5We5ZWpkHGCvXHlZyJuPm8WZHZkdmHKYEpjWmK+XwJYNl1CXrJjKmOyWWZdIlraXp5jUmCiYWJcNl4CXspcRmeSYnplfmRuZ05hhmb2aSJv8mWea9pmimsacap6Znped3J1hnx6gjqBCoKCgqqENo8WjjaQ4p9KmwqcNqq6poKmNq4yuMK7FraSvwa8OsaqyG7TwssqzxLftuP28NcARv8bAbMFZwwG/S77Ovra7v7ioucK3NLfctDS0+q6nquqnD1h4UuBPkErOSOJGIUiKRyVIvkpbTP9NxlHqUylYOVzTXmRhvmKfZLdkYWQdY4Nh8F40XNBXT1Lsob2fNJ58nrmePqBHozSnC63Ysp+5pL6ewFG+J7dgr4CoIKPTReNCOEHTQq9J3VEhWddeRmJUYrFfdFy9VixPzqJZoZKhvKQnq22zVbu6vme+1bZ9rbWmEEWwQhVHtE0LV7FcF2D3YNldKleYTZGiQKJPpIqrhbXIvYLDpb7/tAKrYURBQlNGOlC6WThe2F8oXUNXeU7apbml6ajwscO8kcMWwZ+2iKxzpac8zkL5TTJX5VurW5lXtk7OQ2ukbaYfrM62JMLKxZW+dbLoqiBC00NnTCxVSVoWXLhZUlOwSDVA5qZkqsmyVL2+xErCKLkury2p+D1rQoFLOVUCWvdaYlj6Uf5Hcz3+pYen56s8s3q8BMHzvVS3PK95qTOnQz1sRbVNb1PiV5pYj1byUa5LNENQPIGopqvCsDK2cL46w/XBNr2at5Sx+aynqjeq6D4oRCxLflANVdpWIlfyVRVT606WScBEjD+FOhs61aqorO6wZ7U3ug6/+MJoxvDFJsNpvo+5G7YIsuSu26xdq5uq3qq4PppAhURKSIFKKU7vUI1TJlVnVmxXU1ctVxlXrlYGVWVTgVF3TilMbkkJRwFEwEC9P4A9VTzFPMg7hjrjOUU7Fz0JrDOt0q3zrQGviLCYsWazAbRUteu1/7eGug+8Vb2Zv96/0MHVwgvFU8XtxKfElsXyxAXFmMRgxlHFcMSOxc7EHcUtxSfFtMSXw4jBiMDevbu9/btQu926G7r4uLS5zbhSuZO4s7cEtwW1hLP+sUywEK8arv2sQKx4q/WqWar1qeKpOaqxqaqp8KkKqoWqXz5nQVVDrET5RxNKakv8TeRPv1H3UjpUvFXZVfJW9leDV3tXtFbsVY1UmFGUTlZLBEfcQ0o/HzwFOA44CjuzqYmrNa7CsT+2nLouwAfC48ODwjC+Obp4tPWvrKv6qPinsKZHqJ1DbkmjT5BUklgCWgNa31gcVXFPYEhEQZk8KDyMQNurv7KEuaLAusIAwU+6JLK+q8mnC6ZfqBNL61JfWJVazlnTVcJOaEWyPJI6skGXrNa19r/AwcC7mrFNqRal0KSgp0lRvliMXGtbglXiSn5AzjwARbut2LeVvue9PrUnq/ak1KN3pzBUmlwZXxhcmFMHR4U/2UMRrJ+4B8DzvZGyYadDorui/Kj/WHNez17hWOZNRUNEQo9MtrOhvYC/arShqB6iqKFIp0hXOV7dXrhYYE4IQ/M+e0ibr1q7EsB3uV+tbaQDonqlGq54XbBgKF75VURJG0DwQdhOZLQYvo697bTBqKyi8KAoo1iqjVsTYPFfC1rRUDBFM0AlSO5RIltXvbq92reIrbukaKCbnxWkyauFtdtgtGCdXTVXpU6hRptCs0UkT3lYzrhav7S+4re7rienTqLIn0if7KKFp/CvULlXYm9i/2AQXXVYzlDBSmlF00MeR/hO0VVjXEtgZcFiw4HCKb4DuKauq6e2orSfyJ2AnUKeYaBVo4Wo/66StCS5f77jY2RkS2NEYjBh6F4rXOBYSlRWUBZM9UmlRqBD40JkQ9JFhEjPSQdMkE+ZU+hW1lkTXIJd+14XYCe+ksD1vzrAI74Rvjm+wLzOvOe5GreKtgGzBbKNr/Ktfqz/qeOoLKjWpf2kfaMqozShQaCrn+CeCp7inYadj569noifFqCCoLOg+KAJos+jZ6T/pPCl56f1qcirpq3Nr/Gw5bENswi2s7hvuDW6zLwLYLVgeGBQYMBfJV/0X7VgFV8gXh9dKl0dXDRb+FfFVUdRBk9kTClJTUWSQ/k/FkGvP4pAUUKoQvJEgUh+TKVQY1SLV2Fa1FwxwEnE6MOywkXAJbuztrey3a7JqiqnaqWopKukVKZBqbSsCrBmtVK7ncD2xHNfk17xW8ZXBVR1TYFIikJTP9BAkUTqSo9RUlZ3W0BdxseTxMG9n7Wtrhur5aiHqLaqUK+nuI7A5cSGXDJabVUSTv1GwUCKPLBCtEvSUzpZ3sKTwvG4krCHqRumJ6b3qMCtn7iiv3lYflSHTrxDbD1IPShEJUt5UhBY8sTwvuu1aq0wqWapIK4at4G/EMZmVZtP00VZPQA61kBbS5JTTFacwzW5Ka94qc+oDKyosje7uMJSU49NQ0Z+O8M5SUAPSqdRb1THxG29uLKWri2tkLCduBjE6MzqyQhQiUfTPWo7Qz77RkxOC1K3UnTCK7o9tI+wT7J6t27AMss7z4fLYE4qRt4+DDq8PApFikwHUbZSFFEfxCO7WLQhsUOxZ7MfuWjAu8h7zNjHn0opRjY+kDdENk85xj4LRddKKE7ATgpOeEvuvzm6u7WDs3yzuLMitlG5uL1uwqbFzcdgx2LDKERmP5Q6ezWJMq4x5zLkM904iD1mQvRFiUh8SrZKBUtWSyFKj0jyxuzE+cFPvgC9DLteuRW5Orn0uSm6frv0vPK+mcDgwu3EgMYAyCXKo8tRzfLN+s7t0M3SN9OE0jbST9OF0mnSJ9KCz0jNp8zcQnxCkT+RPrM8FztUOoI5xjhOOMA2eTeDNtI1lzYrNmg16DTaNAU0WzSwNeY2CDZWNb40oDNLMwQ0rTM6Mw80DzO5NFA1iTURNRQ0+TSnNKAzijOqM/Uz5jSRNBY1+zOUM7MymjPVMvoxzjGCMWMwCi8fLSouDC9FLkwu2yx8Ldot8C1nL/QsLiv6K2MszSwwLCstYS2NK+srGSrjKOUnjyiUKcsnyCf1KZ4p9ypiLGUsQizFLaou8jDtMEAyljR6NSY3LTi9OIU6WTpkO308bDy4PIE8wDxNPD070TpNOtDSvdCUzZvL8MmKyKTHSceixsbHesiAygzNm88g0srV9dix24Tbi9rd1/nUTTSmMM8sEyk2JuMkciZrKeEsQDFwNH82WzewN5M2OzSZzsXKJcl7yK3IKcqVzPrQxdTu2CDbw9da1BAw5SuBKHwnyiptLhE0zzcZOTY56TaZMzjP+MsYy3LL5M3A0gfY69s+23XXVy+/Ka4lKyZzK/YvnjRiNSU0VzEIzsTKa8l+ygzOUtJI2APa19dT0tso9iMnIt8nOC+iMzQ1HTQdMIPOqssTy0fNg9GR2Dfdydtm1pLQ2Cb7I38lZitpMG0zWTO7MAorEczDyo7Lz86a1I7ZZNtq2D/S4c2dImwiLCeVLMAxADRxM1wxeSyUzjvN9c3D0JDVqdvO3wTeydeu0SrOPSOWJOgoni28Md0zpjTcMycxEC1tKM7N983nz+DThdkV3jPgpt9m28/WPdJ8z1wl1SSFJqAqEC7/MAAzADQPM7MxMC9BLKgoAM7azefNB8/B0fPUZthN2zneq98M3gjbN9ih1NrRwc81ztwiSSJrIsgkRSepKlstwi8FMgkz7DOTNEY09DNCMy0yLzEyL+wtXSw2KvQo5iasJJnN/Mw3zfDME80lzvnO/c8q0RPS29Nk1UXXbtjY2HrZzNrU28zdm93s3CHchdzB2yzcT9vB2iPZ/Njs2G7ZVNgE2OLWRda71ZXVwtQX1HHTLtOi0vnRPdHL0CvQic8az37OEc7nzcTNx81+IrMityL3IkMjTCMDI18jWCSpJHUlIyZCJkcnRCjxKAsqOCpUKzssHC3fLawuyi+8MNMwXDHOMb8xEzJwMm8ypTLEMlMzXzMiMyIz4TLAMmEyYjGcMO0ubS2ZK94pjSg6JhkkZiKxIHTNvs1+zkDPFdC40WrTXNUH2GLaV9y73ajecN6T3Sjc+NmU1wjV/NLv0NDPaM+LIxMk0yUCKOoqky3xL3ox7jEeMrcxmTDALhks7SiSJXIjgM+30O3SYdbX2SrcQt1d3fba1tZC03nQBc/iIEck2SgOLQEwqzGWMd0v1ivMJ80i+B88z2/RcNV92k3eHd8E21PWWtI20C3Q2yanK6ovxDH4McAvtCv/JZMiotDK0w/Zbt4Q4BbdRNep0pDQNdEnKEwtdTAcMZUvUiuBJb4hV9H41CnbqN/y31TaztQ+0e/QeCUwKzsvVzC2LgIqHiTcIfcjxNYm3Rzhp99z2WjUmtG20VwmMiwmL0QvpCyaJx4i9yBIJQPZB9/44P3dINjI00DS3NJWJqQrNi6bLv4rPidcIekeVCLB14Ldx+Cm30bbPdZY04HS29OSJvAqfi1uLTsrlCcTI9gfTCBIJO7amd894qHhyN1B2VLWtNS61HfWJie5KmMspiyRK8MoSyXeIRQf2R6VIQkm2d3c4bvkb+XZ4nDfwdum2JjWJdbL1iDYV9pcJxwpeSomKyIrCSoAKPclSyLtH0cezhyeHCAeqR89IhwkM95T4Bziq+NE5EvjWeJ64A7fFt2L21ra4tho2BfYO9id2P3Y0dl12lPb+Nzu3Uff3iWAJvUmMyebJ7YnwSfWJ8YndycXJ3wmEiaSJQklbiTDI/siNSLoIdAhmCHqIDsgrh/gHvodzR3CHHQbpBo7GjEazxkKGZgZZhl4GRMaQRphGjsaaRqnGlkaOxp+Glka8Bl7GY8Znxn7GVYatBq4GswaJBuSHLwc5xxRHQwdJx0GHWgdmB0THYsdzB3YHWUegB4YHzkfcR+RH6IfyR8W5dPkkOWk5UDmduZ25yfoJ+l36ZTq4epe6y7s2uyH7C7s5evE6/rqPOp+6VDohueY5s7lheS444jjxuIi4rDhd+Fc4ULhb+GR4anhLeLy4nHjCuTQ5MflCecVHZUdFR5LHm8eWR4JHr0d5xzAG34auxjtFsoVxBShFPYUCBbAF9gZWhtp62btyu4u77rtp+vT6cLnW+Y05fDkKeXU5QHnLun46qMbQRxjHGgbshmJF1AVGhMnEm0SwBP3FZMYgOyX7RLuh+yC6pboQufL5uHmIOgT6jrs6hkYGnYZ3heuFRITVxH2EfkTnxaOGM7vjvD67oTsE+rW6J/oaOlS6/rtwxjsGCEYXha3E4IRUxFqEukU7RZL8Jbwr+5x7DvqEukf6fTpzusk7hcXOxcUFhUUpxFkEN0QBBPTFCkWBvEd8J/uAuyC6v/pf+op7C/uRvD/FU8VWRRZEjQQig6YDgQRKhOKFAIV0fCV76ztl+wJ7Lnrbuzj7TvwF/I88kIUzBLyEBoPFw2nDH0NFQ9zES0TEhQ7FPvyzPHt78nuQu4D7iXu7u7z71LxAfNq9A30RhOREncR4Q9fDkENsQyxDP4N7A4lEHgRTRLTEgETzxLT9Knz6vL18fTwavCm7z3vDe/m7iLveO/g73HwCfEc8ufy1vN99AL1DPUj9SMRghAiENQPRg+sDgwOjg0eDf0M9gylDK0M6AyyDJcMvAyZDKwMDw0uDRsN+wwrDUANVQ17DZkN4A3lDRkONA5/DrsO3g7fDuAOuQ7UDnwOmg5vDlsOFQ4xDjgOcw6BDrMOtA6jDrAO2Q7BDrIORg4zDkIOBQ4rDu4N6Q2xDaEN0w2eDWcNdw1SDUgN/AwXDQINyQztDPEM6QzoDMgMrQzWDJkMgwxtDFMMMAw/DDcMZAwADAIMAgzwCyoMNgwODDYMGQwrDEMMWAxKDPUL4Au2C80LqwvRC98L9gsrDEgMZgyMDF8MlgybDKcMngyFDHoMbQxMDHQMOQwmDPYLR/gZ+NT3i/cb96f2ofZI9g/20fV+9WD1VPWL9Zb1k/Wx9e71VPbS9lr32fdC+L/4FvlJ+Xj5avmK+UD5VgrWCSEJnghQCNYHsQdjB5cHNwjcCIsJBApOCm4KWgpCCpD5xfgg+KP3RfcR9w/3Pfem9x341/ho+Zn5dfkg+WEIjgfQBsIGwQYwB/QHswgRCS4JDwmkCPf4cvgv+DD4WfjZ+Kf5lPr4+tP6IwhqB5gGRAZyBhMHywdNCGgIPgjCB6X5MPka+VX50fmv+pj7/vt++zsHZgaXBXoFOQb+BnYHmwdlB+AGSPoE+hP6dPou+w/8Zfwc/E77vQUTBdIEXAX6BXQGmQZgBuAFvfp1+oL6xvpe+wP8ePxS/Ln7+gRyBHYE7ASBBeoFCAbrBaEFFPy3+6n72Ps8/Nb8Pv1W/f78ZvwjBJgDmgPyA18EwQT1BPIEywRfBKX8ePx9/KP88fxe/c/9CP72/a/9Q/1QAwYDBQMeA0wDowPVA+ED4QO9A4IDMwPiAp/9nf22/d39F/5a/qL+xP7J/rj+kP53/l7+S/4UAgQCDQInAj8CWwJiAmkCbQJkAlUCQgIuAg4C7QHOAbEBQP9J/1X/ZP91/4r/nv+0/8r/4f/3/wcAFgAjACsANQA8AEMASgBRAFwAZQBwAHwAiQA=`},{name:`dismember_right`,sampleRate:12e3,frames:6960,wav:`UklGRoQ2AABXQVZFZm10IBAAAAABAAEA4C4AAMBdAAACABAAZGF0YWA2AADs/0MAogD3ADoBXQFHAcAA1/+x/pL9uPwN/I77GvvQ+rH78fwh/vL+Uv9i/5H/tf+FADUCUQTzBoMJ6QoTC9MKzQkICJsELAC9+/v3Q/WI84vyRfL18Wvzz/bn+dT7x/xV/Wf9rv1//hIBwAQDCn0PwxOvFVEVZxTrEYAN5wdRAAv4QPIl7qzrb+rt6czp/OhA7U/y5PVX98T4gfgs+V/6aP1jAeIHxg9RGOYdNSIbIs4gSR6IGfsRhwiq/Zr0He3F54bkjOJW4kHizOGd4Xbnlexd8czzJvXG8yL0BPVh+Gv82wQZDpIXoSAZKfQu6DDlL8wtRSn2IYwZgQ7xAlz2Luy34/HfMN2l2yXattkl2KzWH9rA4XPlrOeD6D7oF+gk6c7qYu2Z8CL4QQGiDVYbtiaZMK04wz5FQ8RBrT8kPG02by+sI+QXuglZ+xrwBeeC37TZEtYr1WvT09MS02fTEtKC0C7OGtOY2BjdUt5G4K3eBt9q3Kndp94i4OTiSOgc8F774QV+FLMihzABPQRHrE4sVetY5VzoW21Z5FWTUIhKGkM5OB8uLCAcEu8BzvSs52vd7dQ80OvM2ccExmPF58M1xtzFO8WXw4fBKsLnvt2897qSun6+gcPdxbjJEcv5y7jK4MmGzRjOos6X0ODPR9S413HdouJ55j3snPbp/vkIJg+/GVckxi+lOc1Ef0tOUotYLl5TYn9lJWj5acVqIGnmZ+9kfmG8XaBZ51G0SxxGnDx1My8rCiHbF04K8wJz/GvxHe585aDgvtyF1aHTGNJUzFvKjsc9xq7CqMFFxV3FNMZWybLKIshSxgHHHscUxIvCtL3FuDS1wbgXuzy7Jruouq25Ybsguym/pcBmwVjEjcVzxtPJ6shxxo/F88Xcy6vNANCg2JPbNuSa82376gWyDXEaTiXtLcY5J0XfSthQ4FfIXO5gd2X8aN5qtWtabIJta2shaJJjsF1LV0FRAkgfQwo7fi+PJGodNxV2CVb+/vZg76fniuIG4Njb7NlA2PPUSNX/1LHV1tTq0orPmMvGywbM88Ypvze5ILQetAW2trrKu129QL/Ewt3DVMOOwrrH68g0zkrPxNYQ4BnqA/flCCMX0CWmMRBEXFDgWNJgZWbtahRt7m7+bnVovV83VuBK8zqcKpgYyQvE+djsBOWX3DfVHdPx0EXTRtKi1sTWvdKrzu3LF8ZjvVOzkrV0tjG3+bgHu66577q+vQDI0tdI5db4QQirHfszkETuU/5aLmDGZTZoimp3YsRU80MVMAUecAjn9nTsHuLi3PvdWOPA5BrlKear4tjZW8riuia3nrfztUu2bre9vJXExNMY5nb9pxVyL6lEUla0XjplDGkba09hR1E5PREnlw2l+7ztOOjd5jjpsOqK6QThGta0xx6496xUqmirnK7/sU+86svj4/z8sh7IOqtO0VllYQFlGmfHW7JKpDCUFu0CtfaQ8MnwKu2z7Rztr+Wv1Fu6rqbEppGlR6hTrqC10cXi5IEMBS44Q71TH1zUYK9kQVt9RFMr/BTLB8n/1fuW91X0AO/56YLYI8OwrSCpiavUrtq1hsab3WsADCBGOfNJoVN9WmNbZFnuRWYswRQiB9MB1PyB/TgA1/cQ6njZwsSArV2q561YskG5Ns0U6B4GjyNuPfJKXFGyVE9YGUxpOQglABXODT4KOw3dCacBK/Kf2QjD0q70pOKmJqsMtFDDE9/d/2Qc2TNdQilKOE7dUPJO3TsiKV4Z2hDyCigKQgdPAvf0xN/Iyf20KKabp5qs3bbHxR/g+ABGHp84CEhOTwtSpE+pTglH4TS1JM8VnA6mD0sQihBoB6v6IOYPz8K7xKmjpWeoHK/BvQHQ8+fgBPgdmTNNPXFBxkMKQ71C7zwjL4sdThSsFTUXhBb3EYEN4wFw7drbS8UGs+mmXaWiqUKvJLy2zt3lyQBqFsUpCTcsPcZA7UAzPwRBaT35MP4oBSBBHdsZLhniFsgQ1Ahy+7/poteIxYW3sazepuGoBa4lt6LC8NJ56ZP/iRMlI08v1TXVOZY6UzojOD45wjqhM08siSYhIUkeNR1wH9wfxByaFtkLlf6F7bbcxs1OvsayPKvspQSo1qqIsMK5lsUR1JTljvsZD6oeKSvBMYI2tzfAOfc4MTdkN3g44jm6Njct2ClvJ+8m8CiZKkcsmyz+KFAofiEoFn4KgvlM6jTYUsyiwgq3cq+/qtOmjKc4qhyuNLLeuBrEQdI84MzxMv+vDIwX5yHpJogpjStELj0t7C2/LegurS3CL/oxsjUSOSE4GzJzLscsIiwMLIkryyj1KA4qCCwLKYQl+SDSGy8VAg4KA8b5re3L4mvW2ctswwS7xrSCsJyslKnXpyWpZawKrwe1MLutwgXJQdOX2x7kn+59+F0BPAl2EYYZBh3uIo8oxSmeLAUvMzH+L4gvETHVL/AsEi5MLlcwujKfNRU3oDN3MYExmjDAMOouwy6+MCYzNjGZM1IzATM2MHstsymmI6wcnhdjC4MBlfZA7cDh5dYVzR/DtLoztgmxuawAqRqnzKVeppqpTq3XsSS4X77qx4fQodkW5QvvJ/ozA3MLaRP0GuEfPSN0JeIolysFLB4tuSyyKrYq2ysgLtstjzJ+Ncs5y0CgPuU8QTkuN/A4yjWsNWkzLTOwMZouoy3TKdQhRRqEEacIe/vn7CXfLtLCxYe7GLRCrSeoTaRXoUehOaXXqvSyMLs0xd/Rl97V7hT8GwcqEboZ7CC6JkcppSr3KVEqKivPLIgtvi94NNM7tEAbP688OjucO6k8FTwXPMg4rDLoKDseUxAT/JXnHNU/xDu2E6uYpDugup34oBmo4bI7wEvSneQy9hQF5Q5iFvodACEeIyMkJifpKVouCDjfQbNJCEg8RttF9UUORE5AfzhkLSIbiwJJ69fSXbw4rdWjZZ0emuydu6k1uK3M9eZ5/AkOlxpeIEQi9SC/IbAkeipANzpFnk74TDxMikzGSvZDDDYeIfwD7+SiyFy0laZKnnOa/Jpkp528ndY98tsG9BMyGk4Z+xlUHuwiZi8XPrxQv1BCUAJPlUnAPT8sDg6c7fXMorQlpiaey5qAoB60Rc7s6boCYw6iEqMVEBf5GiIlMDcTTSlWDleLVaROWUGEKaoHguFuwAKsAqDDmgiZ4aoTxYngl/c3BS4Lgw3aEAwc5S71RahcP18LXtRYZExcNuQQpuY3xKau16F7na6dObVE0j7uR/7/BO8EqgdKD7od+zdcUrNdBV3mWJlLQTCsCNXesLvQqLWfmpzVnXy1WNZJ7YT5L//PACoIRxbVLMpKrGEfZEVhrVY6Q7cdEvAky5GxdaW9obGgOrKgzdXkCPIn84zz9/lqBeEdzz+3XD5lamEPWLlDbB9K9IfOcrVBqbCmjqdlsnbQh+XR79XzVPJk9akCWBrRPORZkWgTZiZb30aYJP353tQdvdyw+6pUqkWuqsho327qxev868Tuu/wtE2ozk1S7aUNqX2R5Vjs7bBNa7l3OabrfsAGv7K9ctJ7KINr13pLhS+G76Kf3ORB2MrNSYmcja5ZkfFb6PKMZvPIw0u+9ObXHseywQ7EQvabN89Yy2MLZhtpK4wnzrg0vLyBPtGK6a3hlWFktRDclrf9o3XDG57vptSa0ObTZsYy8bMt21vfYvNdX2u3gw/BmCUAlykJAWmFoDWziZc9a1UaSKW4Fkul4z5jBL7zGuYm41Ldksja8c8NDyb/MYMwNzvzV9eCN9BUP/S/cSb5b5Wamap1kZFpWSiky7BEW9t7fotFZyMTCYsI7w4TB6L+QumDG3cpmzC3PR8wPzBPRs9fW4ov03xA4LS1DCVUpYUFo32XeXgtUbkFqK2sSoPlj5HHXA84KzLbI/sgmx+bFS8V+v6a+L8Omxt/Ip8ckx+jH0sjd0GzbjOpc/BUVPCz1Qd1QWFwTYvZlvmMDXqtU/UheOvcmqBFO/bfubeLD2gDWGtO4zkTQHc/ezUPMNMghvpi9G8Nxx4HG8MjvyAjIRsmN0K7YluIL7r8ADw9CIsQ14kPZT/9WBFwAYBhi7V56WetQf0dtOYor9Bx5C0D6PfHn6Vni3NwK2UjVStTA07vWYtKCzsbM5ch+wrXF/MakyaTJUcxeyzzKhMkCy9nNmtdA4fvsAvpgCbEaJSzyPO9IdU9MVQhZWFuIXRRcOVfzTm1FIDn6KwcdJg2/AHvzLudW4P/Ykteg1bHWLtdd123XN9iP17/UFM54xd2/BsX/xw/F+sKYwdDABsOcxyTLa89v00zgf+0H/84OqB6CLlw7uEVtTTBTXVf5WUdZ9lRjTSZEZznOLWsh1xPZB9oAM/Zf9Dnyae8e7gftvenR4//bTtjxz73HzcD8wSHAzMHTwq7Et8fpyWjOQdMu4JPxUgFUFCMkMDHSP1hJUVHwVGFXelb5UKhIKj6CLYAckwgM+HTwqeyV5Y3kPeTi4pXkIuOk3jDQ58WwvVPA9b5YwHy//sLJypTZaOYQ92cKuyIRNUtD5UwbUdtTKFY4VJtKDj0OKtkW7wKy9vvrFeRe47Tiw+AB3QnaBtPXxjC7NbrZuQi6Y7tBwqLHWdVg6gUDGR0lMxdBDEsLUBZTXVHqRvo2uyLXD2wFDvye9uTzMfTb72rnPdvjzdi9wrcguNW6Tr2NwynSQeZGAAEbrzF0QWhKOU+wUb1HXDhTIk0RFQWV/Db3FvZ38orsZd6Gz2C8qLRhtjq4Rr0eyLbdOPgeFLsu1EHwSqZOj1DDRYAwYRrLCoT8sfSn9YH3pu6R3evKZ7jTsECyg7Z2vSDM/eXCB60kNToaRZ1KfkwOQBMr+BmzDLUGYAcQCCkE6vYW4srFELDQsAyza7ouy9nmhgmOKRc990bXSSlNOEHdKNgUlQysC6gOMgzDAF3pe83otOGs76zYsqPCI9/PCIAoRD2ySCtL90wqQoErOxavCHsK7A2qCnv7jeKPxaKsn6cMrRO3Bcpb6RIPpi8UP4RHPUhbRkYw6RtED5AQ3QyMC/0Aqe2A0Fm0IaSRp4quKsEe48MIFCkUPRlJwkknSVNDES+IHyka2BpxGDQOZv1332e9YaY0okmo+LSazwHzFxYSLdE8lUEFQktF3TfZKLogohrRGz4RTwH45pzFNatnmyOdEKcvuGHZEv/GHqoylz0GQpRCUkXtOZAtjSq7KbAptCMlDxnzaM8ms76ffZxjpHW1ttHZ+x8bADLXP9hEU0U3SKpJojtDMYouajD5J1UbdgeY6MjJSa1SnIWXAJ/Hr/DLEe8AEO4oeDViPk1AOkBoQp1DcTnPM+cx3DIELCgi3wvd7oXPi7DYn0qWTZjwo8y3Ydho+BUXuyz5Nqg6gjwhPb8+AkMUPwQ3IjURNcMzkC82IoEOO/Wk1eS5KKaHmWGU+JvHqonAnt0E/nYabyv8NjM8uD32PQRBo0ayTpxI5ERJQ9tDRELPPV01/yKNClnuZdBItvOk85kDk1OWpaArsX3GE+Fg/awQ7h8hKhErNC+DL88wTTNVOfJE2khSRn5DH0BXP6g7DDcKLXwe4wrs8cnbCMe2szinfZ0nl6SSfplcpHqxEsTg2KruygG/ELUcoCFUJH8oPiaoKO0pvS7bNf9Ay05pS8NIt0oES9dKkEk3Rt8+ITSjJWgXFwGP59bRzLzPrk2kLJzpljeSApOSmrGlA7WGxerVkuu+/sEOuRlDIo0kaijUKfIpIiezIyom9CruMq09F0X9T69Su1LtU/9Tk1NqUuJO00uYRXI8DDA4IvwQ5v316fLXe8dhuJStAKbsnpWZ9JUmk+qTDprNo9qtArplyebY++ms+O4EcQ4vFWIbwx18HaofTR++H4QgWSPIJu8qnTKFPT1GTU8RU7lSSFLGUVxQgk5BTIxK+kQCPOszCimMG/8OOf6P6//YkctvvRayJ6h4oQ+e4ppNmYCXipsxpKKtDbyrzMrZp+rE9qMEWg7eFvcaYxwAHfIceButG3AbNB5BIt0ocDHYOqBEXVCUVEpUcVKyUHdPVU3PSHlEATz/MCch6xMDAmvvrNsoy+i8vLEtqkCliKFanpCc951Xp8uytr+pz9/dyurr+GsD7gndDOsNrg+6DEQQuxF3FhkcQCU6MtBA4U34UwxTcFF3UDNOpkj8Qog3fyfGEdj73uZR0k7CqLWbq5Om3aNmoiCiW62eunjKStzR66T2mQCDBCcEGgSBA+wE5wqNEnEfZi+qQcdRuFMgVDlTDE+TSp1ADy83GN/9DOL4y9q8oLH8qTyn9KYXqNO3H8uZ4PnvjPwyBAsG9gO7B+8I7BGGHLIrSj5BT6dVE1ZxUp1MKkCyLrUXI/li3s7IqrrDsfWtQ62MrHq7RdBa4ojvUvaS+VL4sPkpAIsMGiB0NC1JnlYNVhNUEk0hQAQpbQlx6rPOB74ttr+xQrCar0TBgtOC41PvYvO+8UTxbvdFBYsYIjRYSrBW4FTeTsRD+C4kD5HrRc/avmi1PrKqs5G0zcft2pjqa/As8lr08/sLBnEcbjUATHRXNVVQTOw8wyEcAJbegcrpvnq6nLkxu3bIANmD5JPrC+vU7Wv0LwVMH4g77VAEV1lRKUUkL3oP6e1+1G7Fe8C7vre8DMSH0wPdzeHj4d7l6/HnBmwmc0KmVGlY6VDMQqgoHAPj5OPPpsblw0PB+79jy+jV+9cn2lnereZS+SoXBjYrTFdW/1ARQTkkwgFs4S7QK8goxRvFP8JpyabUy9c92nPeheg5ANAc8Dr5TVhY8lENREUpvQZi6DjZV9CGz43Q88t+zN3VYtrm2xLcqegFAOcejzykT8VYLlMQRDgqZAsZ7n3bM9KKzmXN38nJwsvLTM7+zWTPP9r17lQNAS7dRO9RNVPbRc8xUxVl9cngftiG2JHaa9UOzbrFxcj+yaDLadBf3fDxOxXcNNpIpVOTVRJKxzPYF/3/juub4gDhFd7l3HvT0cRbxn3GhMf5yXXVNenqBXUmr0DgTcpUg1RHRxIwKRa4/M7qGuMF5dvijuMw2znNRcL7wqXBgMNkyTzZG+21DH8oD0A3TTNVn1aJSEI0ahuUBLPzqOtP7Fvq4Oh65oLaB8qVvfW9h74gviTD787N4VD+Zh2jOD1IslCgVHRWP0q/NvUdBwXj72zp0Ogo6d3qAedv3tLTv8XSuja6KLrHvNjAx8tI3WLxQwn4Ivg4yENUTLxRDFJoSho7iSkmE+QB4fbo89/tDPGI7kTr2OAl2MjJm7tAskWzGLRut0a+vcj71orqqwQKHKAyM0L+SxJRp1X0VWxWlEgfN8gjpRF8Ajf5CPbx+Yb5Q/lz957zYu2g4m3R6bxHr/KrE617rwa19rnNw6LUn+z4AzkftzHAPS1Gck3cUx9VJ1bRVEpKIz48MfggHxZWCLID9P7PAvAEuwKbAi/+2PQa6Ffbxsz6uYytNabtpROmpqc+rTi18b1+y+PZKPbpDK4kJzqrRgtLc1GfVERZ41bWVs1P5j5TLyUkjBcgDtwCKgCM/JL9Af7A/XL6kPlv8YPkVdl0ycG5Sa27oe+hQaKJpTSqba5muC/DO9HC41D77RCfIowyZT4eRd9Lb1BzUx9UDlO7Sx0/WjQtK/4iYBziGzkZHRyuIsEhCB0OFh8KQf3/55bTRL5ZrAWh1Jj7md+bHZ4hpVKvGb6Z1WvtzweYHzY1g0R4T4FUyleJVVZSE1JdUgNKCjtUKCIewhVJF+cazRq1GJEUQRG0CQX64+s71by9ZKq0nD2VAJaAmZahH6w3vOjRx+zFC7Yk2jjiRi9Og06eTjBQjlI0U1xJ0TkxLZAlOyEBIygg3x3qGWQTvQjQ9JrZo8G3rAKeuZMelR2boKast1fR6fEaCVwgkTcSR6ZIbUlTST9L7kweRhQ4hS0bKTEqpCikJAEeeRIk+BrfK8M2qZCZ55A5lVKdqq3wyhTuxQ++LXw/6ElrUeFTqFKTU/tO6kDYN9sxuzC5LLAk+BSnAurl7sGkpnWYJpLYmZOoYsKF4IcBliKgMUo4DTzPOuU6+UQMP/w2DzLWNWg0lSnLFlb7ytH6reuYuI5hkUicw7QF2aP8uBn4LSs4CTj8Ol1DlklPPf83qjgcNWAp/BGH75jIxaoCmQKSCJ4KtnfbRQIHHYkwxDEQMn8ypz08SA1Aqj+3P+A3MShaB3fbA7Qdnh2TIZlqsMDRH/tsHIgsZjPxMTk37EQrTX5Jq0Y1QdYxuxH26DK/IKSXl/CY3LFD1nH9mxdNJZUnAymbL6tBtUqYSXpIiUAsKYwBFdc0s8KfOpjKotTDjPBXD6setR8zINgihzgGUmxQokzeRiczAgnd2N+1mqH8mWujxsKJ6UcEKhBXE6oW/iPZPCtVRlXyUN9FLyxP/YvO8K0LoR2c+a0l0jL0qgYZDUgMRBbrKlpIoFZ6VXlPnz3lFa7i4rqBplCgfqJkv5Xg5voLBvgJyQ04HvQ5+1Y/W45Xk0p+MD4D6NWcuBmrbqe0s8XVUPLr/UT/WwMNDLcjk0JDWnJYfFGxQHIdS+xSxw+0jqx6q8O72teR6h7zDfJb9BoCOx2NP95YL1ecTps6yhav6Y3GJ7bWrvitnbj/1T/o2u408Azyof2/GIQ5WVS9WVFTdESfI5L7JNcAwDS3trSbtOXFjNwz7MLu5e0E86kACBuNPONUvlqlVHFFJCf0/rnbBsgRvWG6YrsfvWrR0OIl6o/pBerx84MJfygcRAZYJ1zlVfNHBy37BYzi68uGwcq9zL22vNPEUNRy3ULfZuAx5jX0SQ3OKi9GDFd8XJhWPkk3MZ4QPu1k1FjHfMIrwhzCvsBxyaTTXtgW2VzZ2tsx5vz4ZBMjMdVI+lUHV1JOtT4/J4EKTu6m2QfN4cnjyD/KAMngwn/NPNMp1HnUv9Sx2iLlxPedEU8sMELWUKZYeFU/TFw8FSg/DR71weSZ2YXUKtJV0brQwMumxH/MLNAF0aHQidJY1k3gze9DBisfpzXrRRpRCVeSVk1OwkDXLcoW+gBu7xPiDt0c2R3Zitli1+XSgsuAx+bKP8s6yZjKossT0R7aJ+gr/ZoTZigkPCNH5U+2VANU+EsMPjcurxtrBij2gei+4DPcxdqW3cXc59nj1iDOcMTrxMLH2MYSxlXGS8nUzTHYL+ed+DAM0CEtM8ZBl0tKUXZVFVWcTWdCaDPtIVYQHwDE8+rpeOQs49njouPN41Pgsdrn0wbJrsGFwgrBYsJuwlTEasjqzmvaresAAAQWoyk1OrdE/UxZUatUg1ZUT2pEkjRhI1sVlQQo++TyC+zk6OPqQOpk6B/lDOGe1v7KvL6dvJa7Lr3IvkjAyMMMzHjYJumP/HkTpibPNxxEMUyEUQdVKldIUndH+TgUJ6QVEAf4+sPxvOzF6zPqQOmB5pjivNkGz33CN7avtuO3+Li3uy3Avcd81H/nH/26FEArXTy3SKFOy1O3VTNWH0xfPdEpyhTkBNr9pfcX9aD0TfRK83rwKOkp2R3I6bj1tNq0GbVht068mcah2XjxFAznJPo3hkRwTIVRjVVPUlJCAy90G5EMYANO/8j9Q/rD+C/13+lC2hfGubTSrMisn6/UtcrAfNF/7HMM1ykFP0BMbVILVepUR05KOwslJhG/BhECYgI0Bc8BGvk86BnULL0QqsKp96o3see99dRB9coWJDApQ8NM1FFjUzBRIzv1IgUSfAs0B1sFnAIM9y/mvM5at3ikg6KJphOy9cS84z0JTCptP/5IuU/cUKxPcTbyII4ROwuQDHAKrgJG8OjZeLwrpKucW6EFqwLCqeMjEXYtUESfT7BRm1BcSfkyNSEkF88Z0RdgDn38X91avO+jLZ81phC13dNp/TwkGz4YShJM3kpxTDY17CH9GN4ZGRhAChb2iNGUsU2ccJkbo/a2rt27DJYsoD9+Q95DEEX4PDIqiyCjH00epBUB/hDZCLa0nsiaX6bVvWvohBaoNL9D8kZSRbxHKT20L78q2SZUIXMKtuHruJydpY++lbelEMW+8uUZHzG4N1Y5SkENRX46nTlDN7kwKh2m+UnJc6UGlLOWoapf0D/8ICLrMbo1djYgPctH4ju0Om88RTNAH/z3jMkLp4WVmpcfrOrQaf4qHfwqKCv6K+00gkcBP/NAdkDSNr0fiPbCxrSlRpYWmsmwZNkwB0QhxizzKy8ubTb0SypH6kZ2QoY3Zx288d3A1aOelCaVk62j1I//JRmXJPgo/ihEMhRFw0lBR8JHUkEsLqME6NTMrvaaZJMZoM2/4ukgBSgYtBx9H9cjnzHKSKpNsksRTktD/ih//g7TKbGAn8mX1J/Tuvrda/8XEdMUNRRbGSUlsT7IV69ZC1k2VJhDfCQt9bzKLK8Zn2aYk6CgtyfbZPlyBawMdgsVDF0ZxDKQUSxYklUbU3dGtS6MDGHh+r/UqM6cl5t8pTjCpuGr+cQGVwk5C0IQgBaxKhtE0l3UXnVdEVgvSw8uYgl73xi+GqkcoKidypwvsc3Rpuxl/FMDAQQpB7YI6BQgKfs/VlU8X+Jg6VxtUZY+rSHx+zzXdb7xrsqkTqPZpS+z7MoK47H1JQKHCFAKCwmeClkTwSSrO/lSMmPqYqpfkVlgTnM8IyNOAezjVst+uIyvXqo9py2m07FvxNvU3OFR7vPxqfWK+pT8dwKVEIMi7DmiTDNdZ2BpXBVYNU58PzcoZgsB76zS2b/rsRKqk6cwps2nbac6si/Cfs5O3KDlJedv6qnopept8Ub8JgxMICY0ikc9Vx9gLF9ZXMNWR0y+PpYulRgK/DfoFtRQxOK8zLqUtCixgrAfszm5c8UG0RDZVNt445jkNuYI5Xzp5PMBAdQNzCEENGhFHlJFXJtho16CV4RRqkmfOx0qjxUq/fvpMdl70F/H8L5vu1G6C7v+u5+7Rb7Rx0zPgNec2t7cPdqF2S/YCNkd4Brrq/d+CHAa+C8WQWpOPFh1XalaXVYOUlpJczvmKjYY2AUI9Q7k1doazjPIA8XmwXe//7/Svqi+ZcWZ0FHVcNre4J/kKeTS44jm5u3586gEHRT7JAM2hUOjT2FYAVloVrVPmEVlOLckaBDM+jTostk+zvvHXMX7w7PElcMjw4S/WcSZzFjSYNak2MLYCdw73jTnuPO2Ao0VSiqpO81L01NjWqZZt1T3S4U/Kis7FQf7w+kM2ljRM8tJyxvLY87Ty2zIaMfbzmnU/9ay1ZfVb9dr2z7p+f2LFaYqY0D2TcxWelrKVQ1Mzz1aKIkP2fWT40PWktDuznHP8s6mzW3In8lj0HHSBtMe1GPYTt8k7SoBgBwLNftGpFLKWGVTb0jPNIIaDv9y5l3aINBAzQLQiM/JzIDG1sdfzdDMZM430pPZLOr6A5kgjTqySr5TnFZBTVU7aSAHBEbuP+Fq2pvbqtkx1oHNUcaryi3KpcpXzxDZ0+4RC7crp0KAT41VFFDAP8YmIgr286fnl+H24KDeuNYkyHHB9cL+wrrFbNCh5QcGASk4QulONlSQSiozhBNo+A3pcOIL4DHetdfYyR++3L8cwVfGRNMk7WUTITWcSVVSI1VTQpIllAZE8/zr/OeS5ufee86Qu3m7ab0ixHrSoPPoGZs3eEi8T7ZLoDLjD9T3n+t87DjuRuqg2IrBXblrup/A9dIy9JoeDzzATFRTtVBxOdMaZgFJ9mf0zfQ56enR1LcHt1+7O8fZ4HsKni/4RUxQq1IVQvsh8Ani/qz8Gf7z9Cnc7bxrsqm0hb1a1Of8Sye+QshMlk9bRLwlAQxLAlkBA/8U8rbYs7vUrEWwwbzb2D8DsipkQ7JNv074Qh8lMQ7NBm0HkgX09EDWQ7fPqzewUMAY3hwM7TFTRoxOIlDjQ2wocRWtD80OhQeh8wvQTrAjpsmsdrzA3tkKUDEURXlL2EutQVclihXlEmgUZg3/927VmrSUpFyqz7tv2ycJky3/P1dGuUYCR9YulBq/FuQVuRAd/pjdxbkyovahIa4ZyKbxah5TOdBEHUd4R2Y/FCkMHRQclRlHEIj4jNXYsq2e+aCeriHMNvh/H/I3VkJtRTNG6kfvNXkq+ye6Jzse/wVk4qy8waMXmWeh97NE1nMCBCZ9OJs/hz9vQU1FKzViLt0sNCuNIqUMj+r1xE6p45mqnFqr1cZa77sWOi67OHI7tTo2QFdFXDkwNLAzSjJ2KjATb/ESyfaqHZtWl4GhnrZe2PT/vB7NLyk4rzcHN+o9A0ihPCo5VTlcN9Atdxnn+AvT2bNnn2WUzZXNo1a7ht4LAH4aximDMdAyojLPNXhCqUMIQWpBGUB/O0kxHhwe/NbWB7jeo+2X3pSnoE609dAx80sPUyHYKBosMiwjLt80CkEqS41H4UcVSHhDlTu/KgUQbO8lyb+vWJ5ElVySw5w2rmrIeeZ7APYRTx/9I+wjaCTLKTc0MULaTNhLikluSj1HmEAMMjkZI/vt2yXAuayBnoGYepVVonW2NtLb8H0JrRpfJFglNiY0JuMpnisPN0hF3E3kS95MYUydRmY86i8dFsv4BttdwB+qApx8lROSNZOJoYm1PdH36EIA2xCSGpEapxscGokfRiQrM8ZCclSjUdtSrFHuTdZFeTn1JmkLGepV0JK4sqiQn3yYnZUKmkyr+8Gx2Xrx1wNXESsWZRaVFVUYARwjKXE6Y0i5WMpZHlqQV6lS2UpHO/witQdZ6Z7NI7mUq8+iPJ4km4CjjLhUzPbi9vLVAGgGKge1Bl4JPw8MHBkqPEC2UkdYR1hnWDhUu0lKOZQgqgEy44nHDrOrpYeeb5vumhyrIMCZ1rXrb/pHBBQHaAehB4YNcRhAKflCllfsW/FaSFjIT+5CES2IDcXpJcr+s26pIKI8oZ6fgrECzaPivPbXAlEEIAMjAcwKXxzLLLdFKFx0X4de5FmjT486tRjK9WzS8rc+qj6j5aFZoWm2Qsyj3x3sZPRx9J32cvs7CusfrT9dWXRd31oUVVFFxSvUBxXhHcWrtSCvW6wxrF7AnduJ7+P7b/yv+FT9uAq9HxVAbVcaX/BaiVHjPqwdDPOUzye52q7zrKqrmbYS0PDhgezW857z6PkiC3Io0EdHXY9fPFijRsIo0P4O2KbCZ7aCs8S0Xb+t2GznwO5L7F7tU/oGFJ02B1TzXr1aOUznMiAJD+UFzrbAh7x8ulnDqdkJ5Mnn0eRs60QGUSiMSRVd+1dxS08rQgJE3onEI71XvaC//chT1rjget5l4BLz2BOWOTNUy11NVHM5phDL5MHJFb+wvJy+/sAe0rvZ8dr/3rvvoRIXOvhSBFm0TOItBARk3wXNr8m7yInHF9Gh2MTaCtub5UUGuC2gT0JdjlQvPVAU2OyY10POk87HyvjIMdVA1qzYBuVABT0vlk5wXBdV9zqjEzLvKtw/1yzWRM78x2LMKs6E0hPnaQxrNTxRT1ziTmUxJgkN6ojZG9m52CLLBcm9y/XMRtcN9doiwEWcVsBYQkT/IGT+5ubK3kzePtVfwRfCzMT2ydLcVQIAL/hJV1VPTRA0fAsF70fgb+JQ3TvSmcJHxd3ELdEq60cWuDi2Ta1TxkIyIooCde3f6SXph+XL0QTDZcPlwz7Rd+4lGRM9H0pjT3s6FhdI/vjuuey/7FDg5cv+vG++WMKkzgHvghj4N6lHZUx4OwsZWP0A8bHsPO+P52TT/7xHvhXC9c0z6PoPODDXQxVLaEmuL+0S2/xY98XzcPIw53LQLLx4vJq9EMx850ITdjUARHdKMEolNc4cKQp8A2YDF//D83fciMRuvNW/J8iT2fb3DiDPOaFEKkjGR1sxTRo6Cm4ECQA+/LbxO951xNq2ZbhnwffSaPPaFBYxRj9yRvJGU0G3KsMYEQzcBg4FdwAw8nne9sYFtY20V7kexbLbZPoWGiUuGjosPqNAzzliKUcZJBNHEUoThg4B/0PpXs8Quo6yGLW1u3rKvOR5B6gjJjP5OiU+lz3kPCcqExuAETUPQg9dDmEIpvof4fDJ0LfRsAOzV7p8yHbf9PnhFoMrezZ0PcY+5T/KO8wrOCATGdkTfRNxEU8KIvu/667TLsHhtOuyrLZ+vEPLnuJo+2cUICXEL/wzGjasOKo6JTbXKV4guBw4G58c6RpcFJIHiPXp3m7L47rbsIixKLfAwS7S6uhnAeUWxicaMiw25Dh9OCg36Tj9M/AqoyUwIy8h+R7qHTcZCg4P/H7nCtLkv3q0T603sAy2XME206Ho1gAYFhgmYC8mNLI1gzUCNkI4mDxvMSsqFyjFJ+Ym9STAIA4XKwfn9nreWMqMuk+xFavgq/KxLLuMyafds/IvBrMXqSIqKAkqYSqKKhQtqjCGNJYr8Ca/JB8iJyRxIjAd+hNPAzPwV9nax+m61rBxq8atXrX3wXHRJOe5/tcQER9IJvArxCwMLZ0uwzEAN9Q4gjHQMNwvtC3dK3ooQyA/Ek0AeuqM0iDBnLYXr6CtWrSiv4jOWOVr/jISvB0BI7AlNiipJ9kqoi2tM8wypi6NL2Uwwi4JKvIgbRIt/QLm3M4rvjiyXqwZqwSzMcBV1J7pXgCSD4QYlxtTHbMcdR4/I7QuFTVzMzA11DXfNNEuLiOqD6X1f9phxZO3BLBirdG2lMd73vL2MQobF2sdjB5lHuohsijhNLg+CT3sO0o7nTaCLMYZiP/44EXIfbhesWOtdbcFyXniyvlzDOsVABt/G9AcwiRAMVFBij+4PlA98TanKDwRAfJw1AfA6bVEsem14skA4rL6swqgE34U0hT6GMIkITR/QUtC8UCbO9YtahVP8z3UEMD+tUWxTLg3zSnqAADfDFgRXhN9FSohBTMtRTREz0EKO7Qrzg+s7MPO9731ta2ytsHT2XzvjPy1AQECZAasEjYqOkCXQ9xBTjkRKCMKVuWNyve9ZrkLutDPzusC/KgBQAEUBe4NUSMJPEZFe0J0OnInXAeq4VzKRr9ZvF6/a9jM8L/8Y/4WAOYGKhlcMXlGMkQiPXAt3BAH7EfQxMIVwJDAidcU7zn6YvsB/cMEjxg1MmZGvEVbPm0s2QrM5d/OCcWMwg3E1tq87c30HPW69qsDJh7LOSxGrUG/M2AXiPKS1vfIIcUlxVvPaeGO68nsNe9t+8QVozMhRkBFPTvXI70A1OCs0O7LMMpdzWveCedV6IHpqPY/DuUr20AqQ7w5ZCSKAQrkuNLozkDPS8253RvlYuUv6G7x9QmaJ2U8TULQONAiMAA54/vU69Dz0dzQPtwM5SfnAunj8ccImSXHOm9EhzyZKkIMdO6R3HPWbtUw1IDTmNy33Z3eP+aQ+fMWSDHMPmU/azPwHND+AOjw3NPautm01GPXJNt42yTerulxAlwfyjRLPxg8/i0aFTD7uemr4srhpOHW2ljaNN1K3bjgc+vaAgAfPzJuPHs9rTL6HusElPKT6LTldOUq32jVqNjX2HrayuD37/8INiK0MiY6QznlK5sWXf9c8RbqSOmy6ILj49kE2H3YlNmo3ZnoMfzEFgUr3jT6OEY18SYsE/T/mvSO7oTtFe6U6WfeG9jV2HPaTd1/5kD4pw4AI8EuSDTQNfIs/B3oCzn7fPMi8EDwNu/F6ojgldUW1qzW+diS37Ps4f70FM4kFi1jMd8ySSmsGu4KXv9X96T1VPbJ9PXxquhj3OrVF9bB1kHa/+J18UYC3RXWI5wqmi64L/krgh9zEWQFKP7b+o/74Pra+iD2R+3e4LbXH9et1wHaKeF87PD6/gvpGjAkUCnMKzwt+SlhHyMU0wfsAFD+ev87ALb8tPdp8CbmM9yB1LTU5dRR183cMuYy9CMD4BEWHbIiDyekKBMplSXzGhQQ/we1AiwCNgFhAcUAR/yy9SPu0+Op2tjV8tUf137aAeE86oH20AQIEaIaOyHUIz0lUiWSJRQfNhb6DQwGRAJjAqoAvADo/wr7FPcW78flRN2W1srX99ix29DgEufP8tcA+w2xF/8dBSKGI5Ak+CMOIwYbXxM7DbkHXgX6BCcEgATjAaP8jfQ36s7iSdub1VrWGtjn2/3hsukj9oUBQQ5OGNAdwSDAILYgcSGYIQQbZRODDZQJfgYWCH4IqwX1AHP6ZvFc6MHfWNlj1arW9dhS3Qvk9+0c+o8F2xBaGI8bQB3dHQMeCR8vG7gVERHLDQAMyAy7DNoK1Aba/ePyqedb3x/ZP9di2YncpeLi7U37dwdJELIWLRpnG8EciBuSG1IWVxEsDQ0NZQ0cDLIIGAVo+3vv5OTM3ufYrdiB3DLjeu3C/P8I/xLfFvkarhsHGzcbNhwmF38TpxGTEcUQCg5lB7/99PKO5Qjes9gc2RrdjuQ+8pwAuAv5EhcW9BbgF9wXrxt8FlkSeRGxEk0RmgyUAeX1M+fo3S3Z09iA3b7mivOJAtkNthNpFfYVsBZAGrca4BgWGPMVYBVMD2oCDfIz5FfcZNip2+7kiPI7AqoNfRToFCgUxxVIGUca0xdxGI4XZxEIB8j3Yefz3SDZ19kr4a3sGvs1B04MRg1aDakQHhj6GNIZuxnDFI0Kjfsh627gwttE29fjffEIAgILhAzoDE4O7RGVGjsaYxpoFhcOvgDV7XbgH9tX2fvgrO/d/0QIXAqsCVQMSRPZHP8bQRu3FQ0Livkr6Qrfx9vy3QXrVfm0BCkIwwjMCzkUgB0LH/UdsRoAEcv/M+yi4ALdT98v7fr7owWhBxkIWwyjF20hBiKKIHgaIwuK9r7mhuAt3ujlEvTe/xwDhgLlBAgOohtlIJ0frRlsCs71xecY4bjf9uRD8yj8j/6e/4UCfgurGXAgOR4NGG0IsPR95jHhSeAa5ufycvsH/VX+eQN/D7AcdyFgHkAVHgP17lDk6ODb4I/nz/Lr9+v4IfqMAwESUx80IYgcYRDw/ebsGOWs41bj2er78j/2rfeD+ggHPBZbIAUgzBm8C7f4uurh5RrkIOSp7Nfy6/Ms9Xf7SwhcGLkhyh+IGL0IKvdn7EvoFelk59vuM/PF81P2Yv2KDIca1iHGH2wYMgl69+PtAOsD6qjoC+148LLx1/In+sQHxxaIH40fJhnYCi/6HPAR7Qjt+es07A/wn/HR8yz5RgUNFKgdryH5HckUwQT99q7wUu+U7v/rZ+we7nvuyfD29wcEbxK+G4QfBxuOEUwDzfgg8xrzZvMU8K/siO6T7oDwJ/Tf/scMvBdLHRAdHBbuCfb8oPaj9Lv04/JZ7mvrWeys7Eru4/Ov/rULQBYkGx8cdRb0C38BYflH9Sn1E/RL8Tjsxurw6sHr1u/598sDzA+bF6AadhvCFYAMcgJ//L/5c/kS+AD2VvBm7Bfs6OvA7Xzz2f03Cm8S1hYEGfUYohP+CngCWPwo+jn6W/q393ryqOsQ6xfrHewu77j1sv+SCpkR0hUkF04WsRBBCE4BQ/3J+l/7Gvu5+aL1we+C7JTsJe0m8Kn03fsOBXIMjhEbFDoVIRWcD94I7wJa/6D+fv4O/vX8lPkP9NTuz+zx7PbtiPB79fj8jgWmDLQQ3hKeE7ETWRAnC7AFZALRAIcABwCs/+H9ivnY8ybvwu3Q7eLubfGj9dX7ugM7CukN5Q/hEAMRShBaDOkHGAQcAogBQQECAYj/3Pst93Pyq+7u7WXulu898qD2SP0+BIQJ8gyGDh8Pfw94D+0LIggABZ4DDwOoAsYCBwHo/R76WPVH8dzuTe9x8DPy1fUU+yMBSgYKCkEMBg1MDWIN2QylCVYGMAQjA5ECjQKrAZD/Gfzo9zf0ffF+8CfxbfLO9Jz44v38Ak0HgAlyCvwKEws3C8YJHQeMBaEEsgSnBLADGgLp/jv7Offj8+XxPfJP81/1s/iH/WEC6gUaCB8JaAlZCaAJyAjFBisFnASKBD0EPAP0AFz9Qvng9eHzK/Mc9J31ovjs/GYB7ATKBpMHyQewBzsIqAc9Bo8FKgUKBVgEugKq/8n7FPiY9WH06fRh9uL4q/zJALYDLQXKBcsFAgafBhkGDAWaBJMELgS7AjsAm/wI+dT2rPX89Vf3CPrk/WgBrwMEBSEFFgV1BW0GQQXNBLAEhgQ1A9AAcP0G+gX4+vZf9wr5yfsm/+EBTwPrA8QDAwT2BEEF+gTXBJ8EiwNCAfP9tvrE+Oz3gPh/+oX9jABhAh8DPQNUAx4EWgUBBecEtQS9A58Ba/5o+6j5+vir+bv7jv4HAUMCbQKNAgoDMgS9BLMEoATnAwkCJv87/Ir61vlP+kD8zv6+ALMB3gHsAY0C8gNTBDYE3wPCAoMApv3C++r6sfov/GH+LgAgASYBRwHhATQD7QPRA3MDPgLo/4D9F/yI+477Dv0C/z4AxwCoAOwA4AFRA3MDOAN6AuoAg/4E/Vr8OfwL/bL+2/9GAD8AkABuAawCCAPWAi4C5QDy/p39Ff0A/ar96f7U/xMAEABzAFQBYgKNAk0CpQFCANP++P23/br9cf5N/8D/zv/r/2cASwH8AeEBiQHKAKT/yf5y/mX+kv43/6P/vP/H/woAoQAxAVMBJwG+AAYAWf8J//v+/v5N/5z/sf+z/9L/JACAAK4AlwBlAAwAuf+R/4r/kf+l/8n/1//a/+L/8v8AAAIA+P8=`},{name:`jaw_dislocation`,sampleRate:12e3,frames:8640,wav:`UklGRqRDAABXQVZFZm10IBAAAAABAAEA4C4AAMBdAAACABAAZGF0YYBDAAAGADQATwBaAFMASQA2ABQA4v+y/0j/7P49/qP90Pzt+wP7M/p++en4Xvj196b3iffH90L4XPkW+1z9MQBuA0YGrwhGCqgLmQxHDdEN5A3GDU8NkQzJC9EK9QmXCD0HWAZIBWgEiwOlAhABPf8u/cT6+/c69WTyge/a7PXqDukB6Bznheay5i/nX+gS68XusvT4+qMCwQnxDrgTmBfxGQscshxfHTYd5Bz2G3IaiBgEFjETMRFUD9cNVwy5C8YKCAnlBowDIQDo+kH1X++z6C7jIN642uXXsdVa1KfTitO51KPWPtpn32zmF/Fb/FAIURRpHekj/ig/LAAvly/3L+8vhS6wLAArOyghJdYggB4UHQQayBgOF3EUQRIODz4L5wQ5/HT0ierr35bXrM+FyUjF88GfvzC+bL3rvT2/18L7x33QjNtU53D2YQi+F/YjdCxiNNs4TTyiPylBsUBHP18+/jwMOpc37jSYMMcuTS2mLEEqcij9JBgh/hvfFwcNygDC9QDqd9xg0NPD0Lo6tBaurqq4pqWkKqRipBGmW6mTrpq3d8MU1NDogvzlEYQlszNoPxNJlk1AUS9RSVHXUElPXU3qSTlGPUI4P1w/Pz9/Pb09FjyJOmI28jU3M+YtpyY1Hk8RFwbe9rromteLyW280bJpqvKkrp9PnfWbW5wfnZeecqEKp4Kt+7eQw47WzeZv+g0MsBp7KFo0fD78RJJH6UsPTJlOpk5sTs1NVU1HTLBKLUkdSK5GeEZIRXpFJ0TXRuxGTkWBQxw/pjpOMQEpUhvzB3v1d+RF1i/HcbqgsbOmx6CYnJyYiZYklCOUF5Q0lcqXyJsqoC6o4bGJvjjMd96y704C1Q+oIKYsyjIAPZBCokUqSAZJsEqKSpRL0UphSEBJUEmBSq1MV00RTnRNPVExU8JRRlJ1UBhP3E2tSp9GGj3WNf8tBCJkGCMHYPVm5E3TvspIvO+wEanPnhmanJa0k8qSrI91j1qQ7o9wkvCUeph2nYyjnK3Dtaq/kM0z2m7kAPQKAskQWhj2IggrqDLvOsRBAULQQA8+IUMORa9GX0bHReBExEaISitNVU63TUxOrk5fUdtSElN8U59U9FHmUF1MIUsvREA+9DbJLgcgtRToCmz7+u3s4/HUW8iiuQexz6ceoLmbkZaBksiQLY9Pj7iOa4+qkKuRqJStl3mb8598pTGtZra/vYXNZ9e75Y71/gDiDlYd0COaLTkxMjeLOSA6XT/xQE0/RkP6RAFH2EaCSspNZ0s9SilLG0wOTq1OmVHwUZNQClX2VlxYsFcCVYpT9FEtT2hNEErxRIw8KDRaLO0ipRjbC/3/afA54kXYjcvLwOm1vaybpSGgTp1CnBKayZhfmPqY7ZgcmlGb2Zv8nVOgRaRrqaeuLbU6vDvGkNEF2ozkDu5J+BcAQwrkENwVnBoZIf0gTyggKF4t+TCNM5Q1Azh3NyA8FDxFP74+oUEqRYFERUX8SelOD1ENUftT/VQYVolYsVh4V8hUJ1PwUrNRsExGR8E+Nzm9L+cksxPcA47ym+ds2svR7sW8vFuzTK6LqFCkvZ+AnT+bPpoPmQ+bHJzLn0ujnKULqkiwSLSYvGTB6srfzm3VX+HU6MTvtPrD/5oHyQhbEkAXVxtrIEkimyicKt0sBTO4NK82XzYcOCc5yzi0PB5BeEOBRJxG3UlZSyZQpFDhUcxP20+zT9ZNz0sySf1E3kH1OtsyNybHGj4RDQRH92DmmNbAzFLCI7zEtGuugasTp0elUaOmoSGibKJ1o3mloqYcqW2tXbQzurTA28rY1LbegelW9Tf8nwN6C4ARfhPjFSIZ2hkqICoieCPeJ1Aq7CyJMHgvFDQoNFU5bD7qQXFH0UvFTl5SUFSyVJdUTVTMUkROzUg+Q688gDMKJ6oXpwXF8vDkQ9coyl2/M7c7s76vC6w/qziqFqpqqsyqsqyKriWxYreXuwzCz8l707LbaeJZ7Lr0JPXQ+wABdwWUBzUNCxKUFHoY9SBrJX4oqy1mM6850juwQDhF60cQSwFNok4ZTzhOmk/GTctKvUXZPms4sCw8HPUNX/xR65DaHc2GwZa49LKMsF2t9apgqrSqfK2/r7azgrjXvKnEZc3k1FTdpeO67UbxxPbm/Cf/YwN8CNoNURMDFkMgqSahLBMyoThRPjdEjkiSTeVOZFAVUW9Ru1AuTlpJA0IjN9wqlBnkBTnzU97zzn7DV7vps8Sw/q5tr5uw0rEZtKe32bw1xJDJfdGk1vTbbeVy7ADzAfd5+rz+3AGUBx0N7hIDG4UiuCpVNCY8lEIXSTNMFk/4TzJQB1DGTaRK+0MBOW0snBqFB1jy0t3RzonBn7nus3GwFa5vrXCufq9EsgS2d7olwKXH+8/t1/ffNupk7bTzyfgl/eYBygmWEdMYXSKqLuE3d0J/SpRPVlKUVL5VJFVLU3NPJUfnPJ4uKRurA9bsH9hryGa82rbnsI2uAK/osJWyRrZTu5HCB8fF0CnWLdur3h/k1ufj60PvJff4/sUK2xbOJPgwZDzLRUNOVlTRV2NZWFmDV4JTME68REw0Oh7PBhvvIdr+ydO+VrUJsNOuXq7ZriOyKLaau7jBycdQ0IXW8NyJ4KXhJef16Ynx1/urBagTYSLaL1k/N0jzUVZXcVqiW4NaslfeUx5L9T5aLEIVXv6T5sTSk8OXuCeyLq9Urp+vKbHxtJi5qL6swijHLsuU0GDSTNZ72jzg9ulZ+HoGrhUfJRU23kTLT0RYoVxwX2Bg41/iW7dUdkcrNQgdigFN6PrRcsEct8ywBa/arkqwxLINtXK5jb7cwTbHtcrLzHLOR9T62QXjtO3U/qwP3R8ONONEhVF2WrJgx2P/ZLBkeWKoXDtT/EIkL1ASN/Vo29jHHLufsvGthatMq4Cu17F4tHG4jruiu4e947+RwKrDock30iTcl+xvAokZ/C+aREdSD1yFY6ZnZGlBaZdmUWFnWHBJejX5GyYA5uQR0YzC87lLs/Wve7A3sFKzELbuuvO9ir+9wT7DqcOxxnPJZM7a0w7i7PRoCgokszniS4VZ+2IGadlqY2owaEdjZVrATBA4ECCXBE7sftcJyP297LdQtLOy5rK/s3e1rLdYugq6ILlLuYG6AbxCvibCicrS1ALkOPx2Fhku70ExU9te1Gbxao5td2y9aKlivFhsSsA3dB7ZBNno7NbAx6K/6buZt6W1urUbtci2AbY/t2+2wrONsw+y0LCSs2e4zL6UynvYQewMBNkdejiOTDVbW2Vpan1tqG7ibVBrUGU8XBlPcjtBJU4PKPeF4WHSLMdhwLm6G7pduwW7RrpeuRK3v7XUsaKw+a+Trs+tI7HPtmy/8s2Y4C/1Og3cJVc/sFJDX9tmfmutblJwl24Ba5JlF13iUYlDnjBWGev/ju5o4KvTs8oQwuq+Frwluv6567ijtyS0VLBFrt+rWKnEqJWpQqv6rWa2dcJa07jlg/8tGaMufEOTVUpfMmbaamZtNW0rbDhqFmWeXIJSbkNJMVUeyAqK+K3oCN1K0wvLGccJxOXBkr93vtG8irk9t7i0AbGTrYGq86dHpwenQao2r8626MEn0b7l1/5EFkcvJkQHUgddnmPBZ9RpV2rbaWBnSmHsWpdRu0a3ONsmFxbWBIP0NepK4ZfXwdDyzZvLkcigxk7FPcNKvQ27D7iCtJix1q5PrPSqF6rjq+quLLNZuBzA3s3B233wWwbDHToylEFKT3pZJWDQZDdm1meAZ5Bl5mLrXs5Y+E+jRVw6Eyw0HfYOyQKe97/w1uhk4tjdJ9dN1MrRtc+wzHjJdsbfwlO/qL0guJ6zVbDSq7KoVqmwqcyrIa6Vtd++iMuq2oDubP/LFrkpIjv2RnhQD1dfXAxfuGB+YDZgCF40XOJYbVJ7SktCtzfNLcMhGRiTCuT+YvrC9L7wzO+i6vLlauSF4Abe7tk41WbP1MguxPbA5bqhuVq2HbIGsfCuEK+OsFGwI7M6tgK8WMST0JXhIe+NAs4TdSUYM8g+UUmZTr1SDFiMWTRctVyKWxxbI1n4VrZS2EvpQ1Y6fjDCKIkcFA8jBJf75vXi8HvrN+cY45XfbODp3Uja69Zn1EzREsvvx53DR76DuiG4FbVHs2uxa7EusfGxh7S8t6O8JsImynvV1OHK788AXw7yHDIreThLQvRHrU1oUOFTS1U/VrNWMlZVU9VSIVDGTLRGfkLAPA4xiyl+ICQVBw9KCtQDuPwJ+BD56fFY8arthOdw4Nbcetrp1KvPist1xzvD475PvMe4lbUksxWxmq9Irm6vnbFhtaK5dL8HyrDTnuLS9R4IeRj1JWsxnzuCQo9JSE7oULpRR1KyUjdTM1OhUNxOLkuGR5hEYkCCOegxTynOI2EbLBRNDEMDAP/b/Kj6GvRU8KzrNegJ40HeI9oa1G3MfsjpxTHCI72nuc+2M7N1sJGvRa+HrSuuurCNtBi6hMCKyy/ZHOnv+/YLzhwmK/81F0AcSEdMyk6MUIxSQ1NYUkNS80+gTIZJ8kZ+Qi8+BzeWL+slwh9fGxkV3Q0SDZ8G8gHq/nH55PV38FjrDeRl263Umc5UyaXEPL4muRK09LBprkqshaxdq7ysVa9OshK5A8GryjPb+OjS+zULhxm5KP01uD9RR61Kkk7FUaBTHVVFUy9Rnk1bSu9GoEHAO1w07SoIJxofrhx6FTYQSAujBPv/g/0F94ryuelW47DYGc9byZfC/bp0tb+vG60qqlqp4KmmqQ2rZ66zs/O9DMeg1nTqzfx5EWEjWjKsPhFHZ04gU8xU11QfVftSsFC8TDFGBUCHN5YwRCtkJG0gzBvJFiEUFRByC5cHvAIr93vtgeXW2n/TdMnmwFC3TLAZreuq2Kc4p82lVKeQqt6woLlNxdLU1uUs+rMQlSXxNI4/3kicTnZSyFSkVP1S0lBbTmBKBEWWPSA3rjHWLEUokyE8GpkUvgtTCe79RvNh6VnettLjxZu6TbLSqPykCqHsnqOetZ/somKpe7N/wRTTnO3qB0QeBzHhQsxLTVJaVmZYblgnVsZSDlCzSCFEYjuqOEYw2ygZJHggaRkqFloQwgu6/tPzdOL20jrDxba7qhGiiJw+mq2ZRpusnYSjOKw3u+rQ0OzJCP8gnDVER5dQ21bGWUBaZFnGVQxTRk+GSPZCpTxDOQg2Sy/IK4YiVxotE9IEmvWp4NrMxbvorX+jmpyNlzmWD5cYma2dO6aStPzL/eV+BXEhdzalR8xRh1fhV1hXD1e6Uj9NBkfeQRJA+jucOsA2ojCDLHAlvBcGCUj08eB/yrq3taoon6KYVJWylCqV45jwoJyueMD23cb87x1fMSNDcU6vU45Wo1atUkxP/Ed/RIU++jpFOxM6ujbkMvUtOCYiFxoBE+cDz3C4dqi4nXCXUZQ4kxiWTJyzpki3S9DP62oHCSKgOJBF302WT4NPu06KTDNJiEQoQf5AZj7GPNk6WjLgKssflA1W9qzam8FQrtCga5k0lNmRc5Lflrifn664w+DgTwGVH0I2BUUWTQlRIVBkUDhNEEpSR6JEG0a6RBREfkQhPokzYyPzDGrwtdHauX+nzJuolR+TMpMnls+eF6zEwBjeXfxjFiwstjt0RxxLQk3WS8lJ0khuShJL8Uy+S1hLo0h1Q4I4GSSPCVzrm8qwsjCi0JdDkmaQ0JFclkefRq+txn/koALOHpgwVT5KRcRI9kjgR0RGu0fFSEZMLE0+Tg1O7ko0Q+411CANBGjjHsVTr1Gg65h+lZ6VfJh5nxetkMGy2/D40xDVJgQ0RzxYQYlBS0UERfhGjUl7TFJQQFPGU+BQaUfhOkckJAj55LDE0q0XoDuZdZamlUaZpqDmrQvBr9qJ9KgJEh3/LUA2ITpJPj1CLUOaR6FN01GpU+JUXFUSUoxJdjwaJBQEWuLsxHSx+KMnnECZcJknnR+k16+9wD3Xie5OAtMTziCdKHwv1TJFOBc7HUHcR6dNrFBqVK1UaVLoSu09jCf9CaPn98pmsx+m854DnD2cWZ/3pWSxM8IM11Dr/P1KDeYYBB6bJRApqy4gNUE9LERHTFdR9VbwVtxV1k9tRdgzmhqA+a7Zjb8lr8Skv6Bnn5SgC6VSrG+3PcdA2PjrcvvHBskPKhi6IDUn9C3/NUY/BkfXTrRUGlflVgpV7k6qRCowFxW39bLXpsDfsOSncaPsoSykJaiArvG3OsVU1eDkffRlAY4JUA9eFbkbhiGdK+E2+kCzSKFPIFXCVzZXXlVZT5RD6jHqGLH6Lt5Sxhi4e67iqRSo1ah+rO+yB7sAx2zUwuG87Nj3dv9DB0IMxxOkGyYkIC6CN9xAWUnCThxT3VOlUiBOK0cGOpQmpwtF8fjWscQquD6y1a36rJ2uM7KQtgq+u8dl0ZDbwedW8Xv2Uf0/BKYLOxQcHzUqMjKMPHFGMk21UQ1UyVNSUZNMEkZpOdgkdgrc73TXK8ctvam18rASsKCx7bSWuSXAyMbRzj3W394s5vbsxvCh9ej6vAPKC0cY0COdL4E5mEPQSipQ51EAU/FQrE2+Rbk6bSvjFvn7Eucp0oDE/rovtpmza7JCs562wLnwvrfEP8u10jLZi95D40jn0+wi9Af8fQauETkdtipvNkVBVUlmT0tT3lQ6VX1U7lEMTD1D6jOFH6oGWu0Q2FzH/7vgtNqxE7Dkr6KyP7X8uRLAkMX/zO/QhNiN3kDih+Up6Sru9vNb/rgK/hc8JLYwoz6dRs9MzlHKVNZVPFVNU9RO70f4PkEyOR/GBkDvhNvgy0LDEbzLtoKyKbPVtFm3QruQvxrDl8aSy6rRe9Kl03jX7tpj3wfj9unM8nj8agwMGwoncjN2QAhJPE+dUrpVXlY0VoNU2VDMSSFAVjLpIAILvPYm4h7TFcjnvoO6NLhhtoW3PLcgupW7jbzUv7bDJsjRznLR9tUB2YDeCuRP6TPvCPZW/b4HdxQhJ9QzkUECTPVS5lbSWsBcC12bWn1Yt1SMTPxAfzPNH34JVfQY4gfUPMZgv9i6tLd8tna2Abh4uZe73r5GwYLEH8YoyMnJbMrAyonKu8tZzVLRM9ol48fwtgHgE3YlSTbjRDRPLFUEWn5dtl78X/9faVwQWnRS8UtdPiUq+xS5/sfnYNriy13D8bruuL222LWdtU23Z7nGt2C5ibrIuq6+478Qv1G+tb0Wv5fEvcczzBTSsN5Y7rX/aRULK7k4s0aNUola0l41YgZjIGOIYbxeI1rVUydJnjsKKskW7gB18Gjfd9P/xZC9QLrztou4lLjyttS5brpzvCS+vrv1vF+8w7v9u6S8Wrx6vRvFb86N15vkefhVDe0fATOGRL1NKVfZXdVic2ViZqpl+2R4YdJeG1k9ThhACy9WG2UI+fSl6GLZJs0MyAXDl77Kvvm+pb+vvWC8nbsduAe2RLb1s+qybbIhsq+zG7jUvszJtNTJ5Yv51A9pJ2w4UEn+Vb5dAWNSZvtmc2WlY9th4FumUnlGTjigJUEToQZ38angNNKzysbJusIbwGS+WLmCu5O6qLviu2e0lLS9sIevPrD/rfqv7rI0uDTDX9JJ5yYAShvGM05H/lQ0YD1oa2qQbGRso2s0aR9lxV2OUzlCQzOnH+0MKvbv54Lbq9dRzo/NxspvyYHHTMXgwsi/rrl8tq2u56v9qiuqNqujrEGyt7xAyYPfQPZpEuYrrD+QUnxfJ2YTa15ti27Ha+ZnN2MRWVdIBjhFJUoSg/3o73fiXNmP0gHR+Mtey0TFIL10t7uyxqv3pwqlRqLBnjmhaKePrQ64ycoS4O/3FhVsM+lJm1hdZFJp6WsHbIlrXWmRYdlVhkj4Ms4hKw1g/x/uwN4X2LTSW81JyvvHtsLVuzK2xq9Oq4GmHKNwoH+fJKN7qlS0f8W42fjzFBX2M0JLsFrfYkloy2mUadBnk2IhW15OSj2hLW0dzhBlBXv8O/Ly61rneOFd1trMUsMyucKtwqSXntKcp5tQnsmjK66jvcvXO/t5G8k2f0zgWghjOWbQZlhlKWHvWidR6UTfNG0k4BZDDh0CBPl+8ZvnZ9wD0UfHarlyrJejO50imv6YjpoUn4am4rUzzO/uvROzL4pGe1ZcX9hil2OzY0teFVdfTmtBhDTIJ34eHhe/DewG3f3C9BrptNhnyvS5+qxgpZagsJ7Inv+jBK06u8bU3PREFwY0EkdCVRRcE2CFXw5cL1XhSzdBEzYSK8AefBMHDAYESf6A8pDkVdSawd6zQqmzoYidppsvnIefTqjsuQ/UJ/X+Fxw0cEgjU1RasltUWYlUr06xR3A+JzaBL60krh66F6wP3APS9Bji7szhuw2wBqY/oZCfWKFZpdavWML93RIBGiX6OxhLc1L5VX9X31REUB9I/j5KNvMvgyjrI64bThP2Bur5Eeat0YC9x7BJqLGijaDToUylqq5xv8TaPvcAFFEsUD1sRu1KVUxOSqNEVkDfOzg4pjWEMXEsXSPsGiULZPl8477MkrkUrs2nGKWxpIeoI6/3uu7SLPJ3D5Ep/DlnQ7xHvkqOSUtEjT+NPEg40DSFMrovcSjjIvIWEATc6ifSnL+rssSqe6f8ptWoHq+/vEfSZvDwDZ4nPDZgPxpFikbQROlBmD3QOV83CzjFNvUzby9uJu4X4AOU7DXTNL++saGrqaeip9CqgLGcvd/T8+4KCtoeli8ROdg8Qz8qP5A9ITzzOxg8yTxOPPw6WTVjLCgaDAGf5QHOabv9r0mqLqhZqCys+rQPxIjYOvWEEL8jfjChNxU83Tw5PGs7sDrxOic8jj0IPiw7tjS/KS8XoPy14KjImbekrt6p9qhyqpSvjLj6yOPg/vp0EQ4jFS0DM202zDelNx84zTj2Oso8Nj7XPkU72DYaKvgUV/tD35PIJ7mor8KrLaroq0mxq7qlyfHdFvaZClUaoyTwKysv0jH+NPY3PzooP8lCLkUtRqJFckDCNOsgCwnx6SrPR7zrsKiqM6lZqnyurbQZwdbRKOgt/UQPqhnCIaEmHizFLf4xXDcoPLVB70Z8SUxKsUekQm82DCIQCDDovc0AvLKxA6zRqVKra64qtUrAQM9G4S3y8wKbEOYYniDpJoAtJDIVOPE+skSKSMFLikyLSlpEWjrZJikNfu7D0lC+WrGqqsunhqfYqk2wyrkIyCnY8evn+8gJtBO7GLUeASPVKBIwdjcWP49G60yCUa9SUFFsTUpFOzVYH9gBt+FxyKa3oK5gqaandqlVrGaxwbsOyCjY4+fr9u3/1wgiEekZkSG0KuExbjqJQ75LLVE8VfNWZVVmUfJJtjs5JScIVOjJzV+69a9yqcmmvabwqEuuXrYOwJ3NNdjI4sfssvSx++4CEAjJEOAZFSZ3NBZA4ErhUWNWZFlzWeZWfVFURT0zHxtq/eLgcMl/uCmvPqlIp+CnK6q9r4q1dr/3yL7RYNwi5YztzfK9+C8D2gkyFjUkhjG6PLFH4FEMWTpcQl5xXY5Zx1E/SHg2nx2z/Z/iUsqRuiyvyKh7pQ+mmqhFrJKxG7mcw9bNMdgc4brmiOlN8+v30QCJBzoT6SB3Loc7KknyUb9aOV6JYEhhl18dW2VRTkICLQ4S9/hr3fPFx7V/q62m9qP8o5SkmabUqwOzBboYwPvDCcpqz+PWjt7J5N3tY/d3BXIbgysVOt1ITFQQXJRiZWYIaNJnlmb5Yr9b8E9JPfUjrQk67ubT6MC2s2aqIaVCpFOkP6UnqXStL7Jbtpu7Y8HMxQXLz8+f0kzZ/uAd6bf2fQUaGGgkmzGNQIxOe1ntYZ1lJWYiZhxllmJKWxBP4zuvJGUJHfCV1RfCtbOyqxKnnKRUo8qkkKZKq86w8bOOuLa5k7xNvwHBG8QayHPNdNUr3n3qqvuWDO8f9DN4QiRROF3kY5ppSmzzbA1sWGkQZfZbp04lPAgkFAZ+7aHXMMhYvAuyKqy6q9OqT63Jroyxg7P+tmi96r+FwnjDKMQeyRTLgc5D1L3cn+lq8xUFHBcyKIg7F0u7Vt1ei2XBaTBsSW19bSxrx2a2Xt1TTkJgMekYKf9Y57rSXcMauBOymaxHqruqh6wfrOOsBLHftPu1OriXuaO7u7xmvEG+1bvDwJfIlda14mzwLwVrHDo2u0vpWXViaWjsbARv/G5wbh5qFmXqWmNMUjsxJWYOGvdC4rnShMROvBy287IVsjOxh7BDskyyhrPqtKW4/Lv6ueS1+LaAtd24i7zZwrHJCdIE4cH7dw+oJRs5qEq8VUNfWGXaaZBqVWw7a3Jo3GMvXLpO3z8oKboV9/qz63jbe89+yF3EDMB+vpu82r5avZK7uLj+tuG0s7PysVGxy6+jr0KvhrNquc/GhNBs5qn9DhRZK0hEA1FYWg5gw2VvZ3VnMGZwYvFcJFZhTiBBoi59GVwFRfdE6KDa69GCygXIesXjxwzHKMTSw0DErcKCv8S5MLbAsu2yELSrt3G7LMTA0xzpkQLOGqYymES6USJby19VY/hkSmRPY2de4FhCTwVFezi2Jc8Sogb/74/kNNsb16zQHM1Hy73JssPJxSfDrL/bvU+8drf4tUu2sLmhvA7HHtOt4Sb0UxA1JaA6Y0nXVEdaWV/1YUxinmDxXYtWKU0AQBYxLBxfBsD1rOm23y/ZfdWf0PrOx807y9zEO7+lun22drOasMeueK8XsV+3b7+7zZ7hCPkAFTst9D6VTP1Uf1rqW5BbNln/VIxM10ONOBgnchRkAzv5Qe5258jhBNrz1AzWfNIZ0PXJt8WTwJu7RLnvtvazdrezvO7EYtSc588CixszNONF4VDDVmdajVqGWXdWuFGxSAQ/Py5JIIASMAcx/vX2wu5M53zgFdx5073K6sGjujC0GrDRryWwdbKNt67BDdW+66oI5SVaOA5FxE7vU/lV41SJUpFMHUWrO08x+iInFuMJi/0x9ovwkuda4A/Ysc/ixqu9N7gss1CwI68fsZi0LL21yg7i3PynGzI0gkSGTLFSNFQmUxxPZUidP041tygSHjURFQcpAd/8zPei7vHjuNd+ypbBQrnnsreuS63QrduxjLpQygzhsP40Gp0zm0JgS6dPA1LRUIdMvEUfPjgx0yeJHZMTaQe7/0X2Le8z6G7cxs1sw1W5CLQCr1iun68zs068EsvZ4Q4AixxmNvBC3klYTeNOvE2BSTBCGjl+LTkmMh4HFioO1QYm/PrxtuOi1U7HNrtts5+tuasLrVqy4LwXz7boZwuMKFM9/Uh7TuhOyUzWRxNCjDgwMLco4iCgG4MW6BA/CYj/uO8s3tPLFr9etUKwkK6Jr9SyD777z+XusA4wKoE9v0dsTTVQrE4oSgxDajxyNHIs4yeOIEIZGRGoBZf1e+IO0PC/JbTWrcep+am/rXi2RMb54GIBTCDCNiRFpEqUTWpMqUgtQnU72jJiLpUqPygiIjYaNQ79/GjoKNXVv5uxs6mdptWmxanCsnbEsN0jAQki7TdHRWdLgk1lTJxGDENUO3c1LjDiK9ooRSLxFnQHb+25103DD7R9qRCkBKP1pBys5rrN0uXyshQ6LyY/z0jXSyVMWUpMRq9BSD8SPRA9+ziMMxwqXBpCBL7n2MvXti2p0KJUoOeg3qWjsMDE3+FhBqol+jlqRiZMC02SSsNJ/0bKQ0FBTD8DPDY4IjBdJMINNPBx0Wy55qo/o/6e/57RomirPL6b2Y77rhgIMP89wUUlSQNJYEe/RtpEQEXJRQVGFkP4OSYrGBVm9pbVdLqTp3ydi5kFmUqdTaT6ssbMm+0LD7soCDYQQbVCB0UJRkpGBEUDRi5H2EjoRe1BBjZlH8EAid+hwbGsvKBlm+mYUJvTomGw9MZI5EcEEB+1LrY6NT9OQNZBokK3QzdHSUmiTV5N9knRQdsvBRjn9kTSXLdEpGCbrZe5l4Cch6XwtejND+usCTUe1C5wOE48yD0TPqJBPEVYSU9QR1KcU2dPGkdVNkca6fec0zu0UqO3mVaWLJaxmrqkVbS3y47oWgVaG24pbjIoOWM89D1HQpNIjkzyUORVP1dJU65JITvnIeD9BNe5uGKkVpmulC2Uf5eDneGoqLxs1mnwMgpTHBQq6y+DNfY62z9RRfNMsFIEWatbCV30WelRnUK7J8AFn99dvjmoY5t+lqmVJJg5nx2pjLrfzyro5f5REfccEyanKysyozkCQhFLPFRFWslf22J+Y1teZFNpP/Qh9PpZ1HC3l6MMmFeUYpN6lsicoaemtr/IIN7O8voADQ+OGKQfgiUZL405lkLnTJxXhF0eYfph+19XV1JHKy+bDTDl9cGJqlmdmJYalGOVKJmkoKGsfL1u0SXkNvXLBW4PtBgUICgpiTOOPD1I31MHW5phUmXeZuxkyl6VVPE/ex8M+oDWCLp7p2acEJiTlouYX51rpvqwor/Yz6zfqu0N+iYEnAy5E9EdcCjiNMdCvE+uWGdgeGQGZ/hmyWMmW/VLHjFXD6jq08o5tKukDZ11mfCYsZxxoqiqcraiw/vP/dxy6FXxtPj0/yEJ9xOUHt0tRDmuRlxUZFy9YoBlgGV0YwBeU1PKQM8jqgLN3qvD76+ApXafyp5qoLeitKcDsUC7mMda0KDZX+Ah56DvPfZF/ecGEhJiId4xoz/jSyJVTlx7YC9iwWFwXWFVxkfDMrAXh/rw3VfDLrOFqjClaaMepBCnjqoQsKa4gMKnyinVx9045WbtwPQE/VIGJg+YG0IpXTfQREhPwVYwXIJfSWARX25ZH1HaQrQtZBUs91rdVsl/ueKvIqpsqKqoQ6rfrhq0S7v6wYXKQdGc2Gjeo+M654TtQPUcAgUQACG2LZY8sUh2UqRZkF1rX/Ne/lwvWMRPRUPPLlMTJPRZ3mvKAbwotUmv0axqreaw8bVSubi/Bsh0zRLU9tdc3kzfw+Ql6lry7fjkBIQTCiXmNeRERE8rV2hahV2iXfxcWllNUoVEUDG+F90Aj+Rszg6+g7Rcr6itSq5jr0WxqLXivDPDu8g4zLnRKtTL1gjbcd815e/taPjjBmEXlyfON3pE+054VXVYYloQWoFXkVL9SdI8QCnvEpn8A+Xm0n3Hk8DhvBa5orhUuOe6e75Kw+XF4sm5y2zSWNLT09vXi97E5dbw1/2AD34eGTLyQjZMklNxV4dZeVl9V89TzkwaQSkvnhmW/wzqadj6y9TCCb7vuI+6prplvp/AbMKwxETGmMckzCzKtsz/zkXTkNxN5xb3ngilGaotPDobRk5Pt1NgViFXTVXuUZ1LbkIqMscapQLg69/WtMsAxFK+GroVuvW5TrxXvdnBQsVPxyTJcsvGzKjQftLb1oLek+li+Y8MCyFSMzxCLUpiUjBVpFVUVFBQ/kqZPoYtiRknAYjqDtp1zu/I3sLdwsTC98RPxSzKj8gmyvnIdsh/xr/G+cpE0AvYruZT9T0KCSBfNSlDoUuYUUxU+lWLVI9RREsRQHov+hv4BF3tPNww0jbJ98UNxU3G9sZcx8/Itchqx4zGD8VsxevFMsuA1u3hr/GMCF4iQTj9RnxRgVaKWB1auli1VO5MJUHsLbkWLQDv7HbekNb2z+3Ke8Z0xUbFZ8aXxITA7L2xvPS+lcKIyKLSzd+d82gMLSZbOTFGAFAPVqZY9VcLVatOzkKaNc8iAg0M9mnkxNa+zbLLKsv4ybDHYcWBw0i+LL1qu6u69rxXwUXOfN7l9RMWPjBFRKJSFll4XB5co1lVVFdJpDhoJHcJEPIk42DZzNLCzlbLrcnIx4fDWMAZu4+3ybXitkm7VMJj0YXo7wUZJmc9/E4fVwRbe1wYW2ZUA0r2ODglfQut+MDq5uKR2UvW49DQy4LDBrwwtT2xIq1jrEixK7pxyovmhgq7LT5FeVMaXOJdOF5QWqVR0ELhLMIWKgPj8WXke9xb12TTz896zEvD67sxs3awc675rnC0y8A51nr4Xx3RPFJPFlokX3BgCl+MVpRLTTmNJE0P//2E7zDoOd+f2RjPn8cgvXq0lazUp2+mW6lxslXFK+KwC4Yx0UiOWAhfxmH5YM1abk+bPhMo+xSjA7H5Ou555sHdxNHBw463DK95qaKjIKTTptO06s8l9nQk/UHiVVliumVoZgJgHVSRRWctnRwDC3L41u1g5M3aD83Tv1W0hqiNoJ6dyp3aokWv9cvC89wiJUUvWMphs2SbY8NdWFNhQjwuhBvmDvsBrvuv7+/mF9WRwzaxOqWXnhWdoZ6vp924ANgTBtQylUy4WvZg92CSW+ZQ9UTpMVkgIhd2DIr/gfc866DZmcW+s5WlZZwlmaKbY6OZtYDWkgX5Mt5OjV4aY8BidV1OVtxLxTnhK4QgXhPwCpD+vOzG05+6aqiRmqqUIZNilUCeSLMk2a0J0DTcTNtY+F1BXIFVuEgeOCUqVR/eGrES+AfM+sXke81KtYujkpjrlA2XTJ5ArwLTlv67LStNOlzvYWRgKFxAVKZI5j5KMzkq9yNUGD8HJvGC1Fy5S6TumCCTp5JUmBCnb8HE7XscBkAYUxZcX106WTlTEErrQOk3bzBVKhghWRIH+9fbw7zrpWyZFJTTki+Xp6NXvFjkpRVZOpVOGlfQWXtY31JgTaRGZEL6PFo2LTC2IcMIOeswyEeus5uolFWTfJbkocO43NnyBeosFUiMVSBZtFhQU/hOWUycSiVHYkSpOSUu9xWY9qrPzrGfnliV3ZEClcOclq8fzif5MyJqPOZMdVLKUVpPQkwFSlZILEbYRaVA5TdYJEgHxN9ev0GpmJzGlueWHZ1Zq57EpeghD/Ar3z4VSaVL40lGSVVHQUmrSrBKw0cLQtIz/Bve9/bUurQ3oqeZxJbUmEmhaLJqzjvwlxG8Ksc67kNpRrJGqUUNRwdKO08hURBO0EboNu8bOPcJ0BuzrqE9mpOYQZsKpOOzds1W7w4Omye4NKY7Tj35PQ1AlkOjRnFLRE0iTQFI3jwGJpwDB9wBvHOoCJ8Fm4Gc1qFkrWHBwd0g/IYVhCc9M5A4ZjzgPupC+kcZTpVRbVK1UKdJ3Dg1Huj40NLTtqWopaFDn6GgpadDtTjKbuciAiwVPSJ6K5sxmjWKOP09g0MAShBPYlFjUJ5L6T6IKMEGhOH7wn+vHKZColGi1KZTsLG/ftRM6vj+tRBjHKoksSkBLww1VTxkRC5LB1CHUsxPcEjZOXggd/1M2gXBpa5fpmejWKT7p9WwLr9X0hbkyfnqBoYSzBmYIZEnhS1YNT4/DUeTTThQIlBTTOpCDTAlFBbyvdAiuyKvAqm2ptanCq2ntnXEtdU/5ir2XgXoDroYJx+jJa0tqjcCQxVLzE8JU9BS3E/ASJo5aCIGAXjffMYttqKtTKrpqbOsc7IVvMfJ/Ncn59v0ev7EBswP0RbqHtsn0DSnP0tHdE7eUQpSJVCCSfA8qCbMCJLqm88Zvt2yAK6grJyu3LIeuuDCqc2v2Djll+/e+Oj9PAXBDp8ZiSXJMvc+XUhoThpSZ1I6UFdLk0BzLo8TEfLJ1kzC3bflscSuEa80smu3Dr8oyBPUOt2q5mvxyffH/ecFPRFaHQosrzh+QhFKw0/AUsFTFVEfTCBBSjAjGEf8/N+cylK9gbe/sxm0F7bYu0jBTMnMz4HWYdye4pvmluwS8B38xwpaHcMt5TrNRrpOQVPRVZpUy1GMSwI/1yzOEJDzldlPxwm9n7bTs0K0s7YNvHvBnMmy0L7X2d104Bbl6en48IL5PQSyE9QixTA0QWVKtVDjUzhV7lTnUHNJHj2IJ7MOcvOJ2dvHNbxitgi0MrWkt4y76L/ixQPMnNDB01fXa9qm3gLly+8t/FwNRh+wMplAakuVUVhVKVdKV5xUTE5+Ql4x5hZx+y3jt86FwS64i7RAs66zEbdDvKXA/8UvygfPW9F+1SvaseCu6MP1vgUoFwwsLj/hSxBVCFqKXBNdwFtHWLdPeD/aK1wSCvj44f/O9cICvE63yrdLuD65fLwovW6/2sDLwLvCO8WYyUrQYdii5oD77RB5KGo8k0vLU7ZZQlwsXb9ZCFUxS0I+Gyf+DRHx29njyLy/m7lKt8G2gLldvNu/r8E+w1zEjcLWwB7CrsToy1LUrOOy+O8ROSsjQ+JQWFnYXlNiWWPvYONcIlO/Q68tTxYe+u3fP8xCxD682bnTuai8Er2IvQbAkb8SvZ69Pb/ywMrCK8qK1rvp/QZcId077EwdWP1f8WNZZX9krGCIWONHNTVHHR4FIusJ16rJJr+nvMy9m759vhy8R77tvCO6c7iUunq4ib2bxw/a8O8YDEApVUP4UcherGR1Z+dmXmPpXmhTLkQFMUMXufzt53LWmMyUxLvCyb/Fvui89LpEts2yx69drsau77A5tt/DsdhV+X8eMT0QUdVetmf1a7FsWmtGZu9d4lEOP6AmEgmD8njiRdj9zvXFu79/vWW7L7d/scmqRqWIowKnMa2MudbIHOi0ChAwvEu8XddkHmnDaMVnjWGlVspFUDCxFbUEqvJV5cTZg9O8zknM9Mbxwai4/rGrrD6qmqgOq0SymsDz1ob54CA2QiRXnGSxanpsp2qOZhheZkyXNXkZpv4P7f/i6dqO2DLPz8jKwgi/aLZVrO2lbqJXoNakGbE3wsfflwerMGlKllzSZXNqv2pQZ1pdYE+yPaQpWhZnBQ359+yz5nniG9krzz/BdbQ1qtiixZ+en4ilL7KaxrDqIxRmOXZSFmEWaFlpkWdBYH5V20KELn0ZsAbu+BnsN+Ug3IHSpcRhuNasj6GmmjGYpZcYnyqrHcW96gIWSzyJVTZgK2aTZupgC1rGSlg3zSO0EdgJuv6U9L/snd6K0PK+27DDpOWb6JdpmByeo6wPxx7vYRv3PupWkGJyZu5lTWDkVmlJsjkGK14bChK4BGv3AOv51nbDLbHpomWZ05PxkpuWIp+8slXXlQJPKQpGKVgbYD5gm1rLUhdENDcJL6AlHhlwEZMFe/yI5/DTk73HqQyg+Zw4nSilRbPX0Afy8Bv7PgJTM1ttXCNZrFFRR5hAvTdfLYolmBsuEYMDAe0H0hG6hKexnLaWxZaBm/Kk6Lvt4t8MTTFNSDRVy1c3VZhSSEk3P2c4uzIWL5ckURmECaTszNG0upGnoZ2ymH6Zgp5Uq9rEr+tCFAM1cEdjUetTe1N6UNhKvkTMQIM88jnEMbgg7gjB5yzJQbKlojScNZrMnUWofLwW3r0HmiigPv1KR0/oTMlIK0OfP0E8KT6AO+MzTCKgDQTwI9AbtrGmiZ6KnFmfG6kIuszZqv46IKk3WEGZRYNEjEOMQfxAREDeP7M7gjdOK2wWvfMB0tK1aagbocyfJ6Ibq7q9xdvM/sgcCTAoO24/tEIZQjJDdUP3QsRCYkJUO+MrjQ2+6TvG2rGmp9OikKHEpjKyycdC6AcJfSDKLQ02bTp7OXs6vjx3QDdDI0W/Qn86HiihCrLkrcUysEWnLKRjpiytkrrR0unx0wziIcoskDF3NLs2/zprP+JDSUnTSQpHYztIIykCetqPvLOtmqZVpTeoc7BiwLTXD/SaDMMdfCcVLFUvYDT5OVlBskYaSiFJQkOANcMZTPUz0965iK1iqAeo86s6tejGq92E9U0I3xW8Hy0nzCocMzI6AEM1SZBMNky5RP4zGhpj9OHRP7qVruWquqqrr0q6JcrO3unzOgRCDv4TixywJeouoDlAQ9RJmUwbTLVFlzU+GZfzvdBuuq6vmKz5rPmxX7vnyaTbDvEi/0UKuxFiHP8l/zCzPNtGPUzZT7RPS0q4PFIkOADH2lrBiLMgrmysr6/rtsTBwc+n4B3wSv2BCNkTlxxGJrAzDEGjSetOaFAGTi9FADOjFSTwCs/xu+SxGa4+reywd7mDxrTUhuTF7zT4LwHnDN0YcyUNM55BLkvlUBhTGVGXSd45ox5W+jfXDsF3tEOwpK+yshW6bsRY0FHcquR47EfzFfzoCPQYhyn+OcVG504XU5lSO04bRNUvzhE67vXQQ7+atkGzgLRQuFW+7sYR0JLXN97A41fsUvUYA1EVpSk+PLhJm1FbVf9UnFGiSBg3JBqu9yTYbcQOuby0VrRPt1i8D8MVylHQFdc13THjmuxB+KAK4R/VMo5DXE0RU2lVR1RRT41DUC0sDynuh9Ikwsm5NbZUtm24pb3Cw33Jq85K047X3t3r5APxHwQiGRAvpEEKTVBTq1XbVQRT6EoiO1IiRQMe5nzRO8RmvbS6droUvnDCnsY4yrjMrc5+0qHW4t4O653+AhSdK3A/Ek3UU8tXaVjyVbxObkLBLBEQsvBu2K7HVb9xu8O69rs9v8jB3cQRx+jIp8ljy1rQEdrS6Gj/cRfsL8JCHU9mVpBZqlkZV+dPoERAL3EUNvhb4CfQ4sbswWbAf8FVw4nE8MTExLbDvMKGwkTF5Mlm1UXmsv56GJUya0XLUS1XHFqGWWdXNVCuRPcwihlV/GnoatfxzWHHrMXAxVXGtMWzxQvDdsCnvkm+tcCxxH/O3Nsd8toNLSnpPxJOHFZPWvJbNVuNV+VP10PMMDwYJwAM7QvcytFqzHLJGcfwxavEC8FCvnK7u7i9t9+4n7zqxDbSheeeACQcMDbARupRNFjEWp9a/VeOUm1IzDkKJ5sSYfxs64Hgv9c20SXP28whym3EGcIFvla6D7kMujO7ib/EyCLZKe8TCu0lNj3ETDlVyFriXIxc4FmNU69JAzykKP4VPwIW8ADlWNvd2KzVf9G5zB/JMcTxwPy6DLhRtZy0Mrbiu6rFTdUq7I8J0yWmO+RLrVPfWKJa61iVVXpPBEWLNssidhKDAcfzbuon4j/aBdbk0jLNX8f0v4e5wLTAsVyxcLFYtK+6/MUd1ynxnBJ0LK8/Mk3WU+lXq1ioV89T50uaQIQzMyG9E0QDGPkr8D7qXOOQ4LnbwNW1yifFB7wjtpGxrK9RroWvNbViwX3R8Oq2Cn8oRz1jSn9S+FVxVolVzlHTS2RAljI1JpIVqgeC+n7yEe285PzerNf/zTfH3MC1u/yzga9hr2Kw+rTAvVnMT98s+W4ZPDNDQmxMyVF3U3xSF1CoS3RELDrILFcdiA7qBBX+l/f77pbmG97j1U3OJsdZv/u3trNssbKwtLMPuj3FA9V669YJoiMSORVFFksgTf5MoEtjSU1BhTi/LbUkIRumEVcKDga3+hX0ZOsV4JHVqsp2wgi7mLTzsjG06LbxvKXIE9qU8mESLCv4OnJDbEmbS4pKWEiERDE9djShK2Qj+xY+DjAKnwSN/FbyCOu03+jRscluw5C837q5u6W+KMRB0MvkRf3tFfUq2DfHPlJC9kNNQ8xAYzv8NIAuPifgIh0efhh7EX4KQwLp9PLl89cxynzCS7yQuaC4pbqLwNvMleCv+T4S0Sc9NdM9aUH/QIU+pji9NGMuFSd1IbkaTxZKEmMKZAV/9sXnI9nXzBjEOL5fu+C7J7wnwWXKMdz08uALmh8OLJwzhzcdOUE4cjMAMAYrBCZaJfEfrht3Eu8KwwGM8JbgJNIRxmPAfb3ovHe+ycLty/XbTPXjDmsjNjA8NzI5zDhgNm4yDi0BKBEktCBBHhEa9BOxC7D/pfAJ4jDTI8nDwqjAKsEDxPnJgtTW5Mn8IxMMJNAtrTDNMakxljAWL/gr9yodKgAnMSacIREXWgg79dHhs9JqyJfEp8JDw5XHLM8O3ZLzwwh1HLcm5iwTMCwv/i2mKwMp8CeaJ/AmRCQ+H0kYOwrM+VvmYtfLzFPHVMYPx7fJ4dEx3o/wagRVFpYgziRPJZcmgiUdJvklICaYJp8mvyPLHRkQe//c6ZfZt8/KydTHTMhby5nTdOG/9JsHaRbCHnMjlSWrJgUmnSSXJQ8nVybSJfIiWhs9Dkf63eWN12/PS8wby7HMHdIj3GHs6v9RDyYaER7yITkiVyP/JC8nICqmKxQrYyl0I0wYEAMo7bvb49DHzHvL/swF0Y/ZGOn++csJjxS5GPUcRB70H1AiYCQlJ7InGCdFJM4b4Qz1+O3kvdaszzHNa82K0MzWXeG07wX+CgpGETEXQhqgHGEfiSNmJgYpgClkJ4ggcRNM/S7ontj30UvOc8570IzVu94+7u77EAnKEMIVMBjCGyYfRiPwJS4poimaJvkgphLk/L/orNrb0+TQnNCJ0yHZNOT28tf+oAfyDMMQ0RQIGHYduyLBJn8peCpZJuIdoA/x+mbn79lT1BfSwdLk14PfPOgy8078fQPVBoALZhERF7UeCiZbKtQrriolJt8aqwYl8cbfatYA09TSidX12kDjtu3998r/HgXuCLoPRxaTHgcmsiqWLCIsTyglHzcNBPdT49DYntMg0zvVktmE4Ybqw/K3+hgAugZsDIkTrhzQJOgpaiyALJApdiHbEIL6WecH23vVj9T/1QzaiuCP6MnwEPbe++UBXgiXEJsaWSLrKGQsZy3DKgYkBRa7AJjr+N7n19fVPtaS2cDepOVd66XvivRX+hEBqgw4Fw4hCig0LEQtdivCJCEXOQHB7MXe+deo1UbWl9nS3obkdOnK7s3zqfhM/0AJShRnIGIo6SzYLWMsKCcJHKEJEfVJ5Mrb3NfR18LZEd6Y4xfoGus57nfxLfjfAvIPKR2SJggsNy7QLUAroCOEFM3/V+yC4J/b+tkY2x7dUeET5TDoIOv/7fbyw/vJCAQYTyMqKrgtXS7kLFwndBsrCG7zP+Sv3GvZndn92t7dC+FP5CfmCOhW61jxYvrBCPQXyCNDKhEttC1OK7olxxk6Bwzz9eUH33zcTNyg3UffYeEn4yjlKudn6r3wEPtcCsoZ9SQNK9Et6y2gK9gldxr+CPv2XOmK4aLdttze3ZXfkeFj4oHiAeTT5o/suvbZBS8VdSETKcgswC20LOoozCA0Ep4AbvGg53Ti9d8h3xvgIOBu4F7gTOBy4djjqOra9oAGHhhKI0Yp9ys+LHIqdSWyG88MuPtL7yLoNeRN4iDiqOLo4iziGuH53yXhu+Ow6sz2vAZcFrAiLSnzK/4rmCrNJlgfNBNMBav3Re6i6YznQOcP5y3mquWq5BzjZ+Jy49XnaO/i/CINVhomI8MnzSkMKjMoIiTUG7AP5AGg9ibvEOtq6Kfm6uR549DhXeC83pfe3N+D43nsgfqKCokY7CHpJicpOCm/J/MiURvqEEkFLvsL8/jtreuL6onqAeli5qPjO+FY4FvghuIp5+Hvof1RDeoZjCHaJVwnMidaJekhmxstE4sJMwD592vzA/DS7Rfrqeim5djiROEM4M7fCOKp5rHuOfvgCTEX7h4zIwUl3SSEI7AgRxs7FKcLYQPh/GD4dvU68x3xKO5n6j7my+KG4N/fGeAM4p3mFfDs/NIL0BfMHhYilCO3IyUiXh+nGgUUZAxKBa3/Afsm99j0DPFY7pvqz+bF44HhduCD4E7iZeYG7WH4DwaVEZEZLx46IFkgMh89HZwZvhSpD/wJlwRZAD39uvoF+Bz00O8/62vnruQw44/i0OIx5DLoWu8t+q0GVhEbGBMc+R2AHqId2xt5GHEUkg9DCgkGtwK0/3D9T/pu96nyCO4s6vfm0eS7437jwuRw5/Xs0fURARQMGxTzGEgbEBwGHL8aVhgJFV4RfA3UCfUG+QMYAUf+LftE91vyk+0i6qrnQObI5VPmJOii68PxbvvaBMkNxBPcFkAYiRj9F4YWJxRcEbUNzwmVBo4ENQLM/9v8LvkU9Xjxk+2L6mXoa+dW5zvoIOrJ7XbzYfy8BW8NhBLyFOkV3BXZFBIT7xCbDrEL+ggHB+sEdwNeAsP/3vvh95Tzf++J7Mjqs+lS6QHqzuuJ7hb0MvzTBG0LUxAtEz0UexT1E6wSoxBGDk0M+wn6B7MG1AT7AmEANP0R+T71XPE+7kfsc+t66zfswe3N8Ir1Zf0rBYcLUA8gEfAR7hFFER8QPg6VDNgKIwk5CG0HHAbJA+8ACf3k+Ab0+/Dz7mDt7ewd7RLu3u8589n5GQAUBicLJw7UD9wPvw/cDoUNkwzZCpoJ+QcEB+cGOgXnAqX/TfuB98bzWPGv79ru3u6N7+/wzvMH+Bf+pAQcCYsLGw2aDYMNugzzCwwLgAknCdAI0AfpBnsFzAOhAKf8xPgG9X3y//Bk8IbwAPF/8vj0U/nP/ucDTQihCqoLVwxIDBMMZgvRCmcK2Qm9Cf0IjQc5BRQCUf67+Qf2nfMW8nXxavHe8dby4/T2+PL9xgJvBtoISQrFCtMKjAqfCYcJbAlXCQoJbgiRB9EFqQI5/9b6Kve49IHz6fLi8oXz6/RJ9wD7tP8dBBcHYQgtCTgJKgm9CKsIoAhMCFAIkgjyB9AGTwRkAYD8uPhd9rT0NvQr9Gv0pfVv9yP7JP8HA8IFEAcACHoIWghkCBEIIQg/CFsICQgIB8AFIANT/5j7bfhr9qL1UvWP9S72kfcv+sf9vwCtA2UFXgbHBvAGIgcnBxMHnwfDB3MH5QaiBSoDrf8G/F75bvei9mj2dvY095X4rvqw/VUAuAKAA1kEGQUSBY4FBAY4BpUGywa+BsUFGARWAaH9i/qZ+Lv3aPeL9zT4cPm8+5j+KwEEAx8E8wQ1BVkFcQXTBSMGjgbpBrwG1wU4BLUBWv4x+4P5xfiM+Lz4Y/mw+nj8xf6fAEcC6QIxA4oDDwSXBC4FuAUZBuMFbgVZBDwCJ/9P/I36svlo+Zn5I/oa+4z8Xv7s/yEB8wGTAuMCewMdBMcEJwVvBV8FxgSjA58ByP6S/Cr7nfqD+r76Wvtn/MP9Nv9JABkBpAEhApkCQgPjA1gEkwSeBGcEzANTAj0ACf59/Mn7ovvH+zT83Pz5/fL+wv9QAN8ARAGvATECxQInA3ADewNBA64ChgG//yn+LP3G/Lf83fw1/b79c/42/7D/JQBsAMcATQHhAU4CkgKsAqgCbwL8ARMBwv+g/gv+zP3U/f/9R/6h/gD/Xf+u//f/WwCWAPQAUQGQAaQBnQGAAT0BtgAJAFH/+f7c/uH+9/4f/0v/fP+u/9b/9f8NADEAWgB7AI0AjQCCAHEAVwAzAAsA7//n/+3/+f8=`},{name:`shoulder_left`,sampleRate:12e3,frames:7440,wav:`UklGRkQ6AABXQVZFZm10IBAAAAABAAEA4C4AAMBdAAACABAAZGF0YSA6AADg/wsAOQByAMIAMQGzATsCFP0K/Rf9Kv1O/Ur9I/3q/J/8Q/yn+xL7sPpU+gr6APor+r36efvD/HP+OADiAcoDMQVRBi0HqAfsB9sHQAfkBkAGBgYoBiwGMgdkCE4KkwzYDu4Qve4E8PfxdfPy9GL1svUY9Sr09/Ig8q/w4O8o73rvRvDo8d30kPhI/FIBbwUhCd8Lmw4JEGAQ8g+PD84NYQyeC8AKKQoWCycNaxBjFJkYnhzHHxEj3OKt5f/nbOlW6fPoOej25hvl+OOX4nPhKOKT47vluOkX70r1c/tRAjkK6Q83FO4XBhrkGY4ZHxj3FS0TuhAfEO4P3xB5FXsa8CCvJ+MtOTMWN9fYYN3S31jhouGo4Bjfddu21z7W19RB1N/V49fA2q3fV+cu89f7WwVhD8wVvxqWHwgifyIUHwQc9xh6Ff0SoBFNFMIXVBxCJVcvRTYcPrREjErWx+XL388j0nXS6tGczjzNtsi+xV7EpcTQxVvIMc4d2CDhHPHC/84L+hWqH0Il3CcRKNAmTSMzHsgbvBm3FJcUHhu9ImErQjTCQGhKDlOkWrBgaWQPwJLDmsaPxlfEE8LsvFy5Y7fvsYOxkrO3ts685sT/0oHi7fFJBKsSLBzHJeErfi7eLWMoaCJuHq0aMhYjEYYSIBbiHZ4ptjZuQklO0Fh6Ya1m/Glbvi7CI8LhwAa+hLj+sVevva3urb6t6rICuVDATczz3BzrEvuxB1oYuB9mJRQp5SZyJU0hMRyJGKMQ9g5TDWAOYBaxHmkrhjdTQu5P5VfUYLxme2ppbHO2d7hmuGK1BLXqr96rn6lyqJ+oM6pFrmW1Jrr4xMXX2uqN/SMN+RtXJvspTC3bLZAmJB/EF9gRnAp9CVYIaQ4SGY8kbjNkQqFPo1rqYOdnNWxybRxv9LHFruera6jypWGi6J9un0Gfe6GXpeiqH7PHvj7MQdu+7M38tApXEiUVpxlOG68dqRyCF1gSlgpJDLkNZA6RESsW6R9uKrw2bUSyTgpbAGJ+aM5sPG9Ice2zfrR4tFiuOKsupnSjraCjoQukwKWZq7q1ZsHB0PfehPBE/h8OPB0IIhAkdiR9JIgk0B9gGLwTEg9zDcwLOw4QEZQXbyAyMNs7+Ee7UE1btmPJZzNrqW5ZbhqusKvhq16pIKU2pvKk76Q5pSCmt6vesQS6P8bNzofcSee7+OQFZQ0wEwUbORkIGYMXTxS4Ed0N8QrWCEMIsQ3pFEEbbiPGKo85vkalUWZZbF+yZKZnb2vLbAxsTmsZqYqmyaRAol6if5+lnoqgnaN7qiuxgrrCw8bP7OG78bj8uAb7DL4MTw+2EtUP+QtnCgoF/AC0+9P8cfy2ANECdQZPDL4daCmiNtNCtUtDUPhYmV+FYgxieGJHYgNi56THpS2kEKNOoh6iRaRNpk6p3KqurVi1+739yjbYV+Dj7K75MwnIEmcUoBIgFPoUxxLJDUAHFf+69832sfvr+vT8NAFkDswb4SmXOeND9ksoVMVZwl/kYI5ijGEqYcVf8aYSo+ShyJ9rnrKdzp57oOyjIKoUtMK6ksdz1IXgie5P+80CFQkqDosRmhOkEHkNrwiAAUj9Xvgp9B/zLfOr+2//4AoWFwslGDUgQTRLmFH1Uxta11uhXV5eZV06XV1cZVs1reCqjKpXqM+pXqmzqFSsrLFttx2+yMpg2CHeG+qw+ngCfgfKD6QUfw9SC48M0wfz/4P9jfk59X/zjPY9/gwBHAuZF7gg6CmvM+I6vUFpSbhPk1JSUxlU/lTJVJFU71PfUWqpMKhTqBqnJqdJqAirpa05sMi2hr35wt7L69c64ArqcvMi/Dv/8AGGBMwEXv4M/7z4oPY38y/x0PKv9r/5vACaBTsRKRq2JAkvbjdqP/FHQE0eUFBSIFNNUyBUuFOtUDdNr6xYrMCrbatkqxCsCK+1s8i48b1OxdnNgdki6DfyIfi1/j8Fzwc/CeMHKAKJ/Kb36fIt8Eftme9c8aP0ifqNAGoLMxZqIRAqJDL4OgNCwUdcTJhNtk6sTjlQSE8NTRFLUkmyq/SpralQqYupkKrhrKqwaLWwvLrIutL/3RzqA/Mb+WD/qQJlBBcCeAHc/RX4I/Qc83vvwu347ib10/f7AI8LvhhvIu4tQzhRPwtD30hMTGdOKlCcUMdPBE7jTEJLx0iHRTGrOaqXqxCtCK/FsWO22ryyxU/QU9rs4fLnwfAy9bj44frA+Ir1jvGx8Grv4+m16STpGunf7KLy/fpbAlQLzxgRItkq7DMDOx9AmEU+SJ5Jn0hLSL5GaEMnQqY/CzzNpjqnwqjHquOtebJDt1a/U8fqzFLVx90U5vvte/TX+Mj3pPes9gf13+9i7Svo6+TT5Bvn9+wG9IX7HQmTEzUj/zBQOr9BOEazSj1N202UTkBNgkqhRxREfkLxP9k+s6QdpVinvKqRrq62n74xx0/QvtzK5unsdPHA9074gPaO9LHzyu6J6cjnVeal5fHmUOyP9RICLQ3wGqQm+jE3PCJDOEjkS1dNZk45T3ROuEvUSONGhURVQv1BZ6LMo8OmbKwgsn259sPIzgzageTo7S/zHPcC+PD35fJP73bqxOQv3ovds90l4nHnVPG6/YILIRxNLHU2G0CbRv5L802mTqtOEEx5SVpH6UMpQ49BLEPunQaf1KG1pq6s1bWhvtDJKdbR4J3sf/LC9Ff1p/GF7qLqv+Qv4LfdX99Y46rqKfS4/iAMaxx8K3M4pEKYSXFNOFBsUtZRVU8pTI9IO0REQaNBD0QjmR6cip8Ups2tBLi5wofNpNdq4ezm3+zP7HHo0uTF4Cndh9g41+vXRt3X4xvwZf4vDywhgTDuO95F9Ev2T7RSelPmUXtNrklaRtdCwUFuRM9GpJbRmUSfk6f3sZC+7spt1QzfUOdb6lvpHeUp37XYqtJwzo3NXc5L1XzfCuyR++oN5yDQMYg/HEnhT4BSsVS/VKFT4k8DTNxHeUXnQ6ZHo0w8lxGc+aNor4u7KclL1gHggeaB6D/n8eEC3OjWH9LZ0PLRHtX229rm4vcZCOgahi3NOw5GgEwdUVlUqVJvUBVMKEaPQT8+zD/rQd5If5OPmZ2i260eu97J1tXo37LhJOCn3ILXK9FkzWLJUMhNywrU7OH78rYEwhiZKr46dUflTqZTz1TmU3xRP0zCRfpBFkDrPutBl0kCkmOYyKKEr2m81snG2A7g0OBb3ULYJ9P+zrLKX8i7xyzNlNiY6G/8ew0OHjcvnDu8RcpK6Uu8SthHdkQUQAQ8hjvuPOFBsUk+VHGZ8KNlsFK/+8oA1W7brN4o3XPXfs+tyNXDEcMBxirNpdd55vb62hEZJws3ZEJASZpLskypSuxGTUDnO2k4+jkMP0pJ9FLJmX6iba9nvGTJ8dID2cfXitPgzVrIwMCTvGW8ccB8yCDYE+2kBB0Y3CybPVBGx0kSS2tJe0VEPCU3gzOAMes2K0AATIVW7Z5Lq0S6Ocal0dzW8tYX1MzPGsv2xUrCb8OEx3TQv+GN8RoIHhv6LRk7RESVSeRKdUYmQ748YjWOMi80qjbXPeVJmVUeoo+scrs7x6LOFNVR1m3SB84dypTEeMLLwmbIedM74nv4xA4wIVI0tj85RL1G5kV6Qfo5aTPNL7QrUSxBNtdByE5EWgqryLeZwvPOydVe1N3PFMiRwZG9i7r5u0K/wsl42+jvcAZXGe4nfjLxOH85jjaxMd8tgigFJwUrUTGxOY1HkVJvXK2yDr/nyFvNjs93zkTJqMQjwMK94rxCwHXKjdWe5tz7zg9pIqww5TmrPgw+2TuAN6gxhC4tLMMsGDAQO79GE1QHsOG6YMYYz5DTitX1z6/KLMUIvxi9P7/zxBbQeN1+8RUGwxaIJ3QwWTTfMhwuqiluJrgghB76Hfsn7TI1P95KslbwtavBt8hrzJ3MwMm8xy3E8r7iv3O/w8Pj0aPeJfIABMQVQSO2Jzkuui8VK2woOCHNHrkeOSPyLWM4a0SGT45WcL4BxefL2M6Wzg/KOMeNxLrBQr4CwmfHiNEJ4NjzMATTEXEfeyh7LPsvXyzkJQwcbhrYGQkd6ykpN6o+yknPU47AHseNzwPVbs8syB7ESsEzv+u+6MIiyObRC+Ev80sHgBc3IWonHSmVKB4h/RxvGZ0WmBQFG3IkADFnPeRJvVE2V9TFUMpGyiLIXMWLwHG/7bwxv77CM80A2FzqEPqvDDcYCCT1JoMmYiKUHlEUEg+LDX4QRxhWJMsywz/lSvBSE1jfxoPJ7sc9xWfC0b3ju1S9QL4Qw1DMvdlO61j8nQwyGZwh4ihEKSElOyBVHDcXRxalGMQeWChsNotCC01OU8BXy8jey63JVciDxPnArLu1vE7AEsjJ0SPiP/abBgsXwiavKggsRyhaJVMdgxY6FaoSwBJNG38nyjQlQgBNPVKBVQDDQscax7XE1sESvfK70byJwGTHFtHw3o3um/7DDtIYgCAFIt4heyDfGSkUNBLXEN4V9hv0J4kz/kAkS91RJFYBWenDbMMewsW+0bnutzq5uLwTwW3LqtfW5fL4LAnJFTkdXCGsIdsZ8BTLD1cIXQjdC6kTGh0ALb45O0cyURNXallNWwfAyL1quUq2BrPWsrCzvri/venI+9fc6IT9mRBzGKYh7iLtI8MeVxjSEvcMngnCDO8TqyDiMDhBS03iVMZaBl6eX3nCor0LuKy0ibF0sZyyYbbSvsPIHtp97N76TwzvFeQcbyCvHAgbzxT5D20JiQXMCnwUIyCtLk8/qUtNU+5apV8dYYe75Lc1tQKxeq01rd2sUa+MtJ+/JMwi233oo/ZyBN8PPBNYE+4RzQ0YCoIKcg2NEb8XHCNsMsg9/klkVFJZdF4cYIJhnrXjsuGxcq+trC2vBbBqth+/q8p22Lvkn/k+BvkMOxVFFbkRPw0hCCgEZPxTAD0JmBOCIM0sST0uS/NTy1zbYF1iQWIUrjmtUamCpmOnpKbnqoKwtbicxCjVrudD+mYImBIaFpwZlRguFB4L4QKi/kb+swLECOkT6yDkMGdB+U9bWKldI2HhYvJiEKnIpgKk06EMoeKhDqZlrKO108P21QnkMfIIA8gLOA8KD5IJIwLz9tD2sfen9F38dAifGLgqwz1HTNdW5F2nYxdnCWb0ZKmjOKBFnwKdzZtunfGfTaehsa+/UtEF4mTzIQGSCfwQiRJOEP4MLgQu/aH6R/3sAPkJBBYDJV00o0TKVOFcsWI4aJpolmjSZjSiYZ2amdCZRJy8nYCjj6w7tqPFwNtC7d37EwMiChsLJQtLCWMB9fo/9hP0lvkSAXAQDR3jLOI+Xk1PWNtgOGXgZwdo5mf7ZpqeYZsqmo2ZuJofnBCiY6qCtN7GmtdR50n1t//uCe4IAgZWBIT7u/UW8Bnuu/AH934FnRS7JuQ3UkexVFBd42FoZeRluWTPYShfUpfBlRGWN5eymWWet6bss2HC2dL15sP3fQPkDFwQxRHLCKUAyPdn8X3pzez/8ef8uAqCIYE0OkXOUWlddGLqZdVn12ZkYyRgI1xvldWTKpMklBKXIpx0pEOw373yzMrZiOu79dz5+/oa92zzG+505x3lX+Dg443offZHBkIW9SlKPFJJO1V4W9ZgxWGLYgdhxl59W+FX+pV2lqqXWZoHngCnb7BqvbXNzN0g7ID1Mv17AIn5nvQt7sXqNed/4xnl+etQ9/QHwxhcKm87AUnUU8db7V5+YFRgcF+XXJRXJ1TJltqWUJivmxuhM6nVtIXClc8+353t8/YJ+7z+L/oc9KruaOkw5JbhIeTK6jLwdADbEQ0k7TVWRMlN8lSkWOZar1ltWBVVI1E+TiRNjZgBmhqd0aElqCi0zcAW0BLemO0G+Vb/dwHnAVz7FPYq7+Ho/+S55Ojn9fBH/DUJ4xqUK446r0UxTN9RCVVnVXFVPlKCT4BMe0r+nMGdpZ8mpMOplrKQvc7JDtZR4KTpiPJS9Aj1ke/A5izhwd7y3ijfh+BD6RL1Bwf5GkcrVzj3QUZLUlDcUEJRPFCDTWxKekYVRaxDGZ+Gol+mI6uUszW+c8qE1pviruqA7wHvYu8L7GvnKONN3wHf3+A85QHvBv2lDFIdwC79OtRDQUmITIFOS02iSt5GpUG8PoQ8/j2woQal8agjsBu6TsZw08LgtOsw8MPywvJx7mrpauLX3ZraEdoq4WvozfThBPgU9iXcMdU83UTdSOxJVEo7SJpFLUJGPzc9ijwUPfylzqlTr2e4u8JIztrXUuIp6rvrQelo5efdVNlm1onV3NV32SzijOzf+ooN2x1sK2Y2ED1EQT1DJkSVQto9cDkONnI03TX7Oeemfqszsli7esfa1HjhFuo+8EfxbO1u6EXjL9zs1+rVrtpg4FXsxvzrDdweyywkORpAQkPBRD5ESkKAP6c7pTnrN0k76j59q2KvlbXMvf/IQdUp3/jkOOqP7GHs+Onw5XDiHt4L3vnhq+jh87n/4A4CHowp1TSfPEdA0kDLPgE9wTnGNZU0FjQCNmU6capBsK+3z8AQzKjVi9+k4xjnwOZY4xbfAdqf1WLWm9lD4hjtUPsQClIZJSesMnk4YTqiOuU3WDQkMAsuwCvgKw0veTc0qs+wrbhWw/XNddpJ4/XnpeWw36fbKNdD0ljQs9B31rjgyfH7AcYRkCPhLwI4kT7SPyJARTpNN8kzgy/tMIIymjbLP2mtrrYkwmnOC9ow4KznXefx4Z3agtUHzxLOn86U1NHeFu9fBKoTJyUpMo04uDwpPto6TzW2L9IrdyihKoUwbznjQp2seLUkvl/KgtKS02fTy9FZzZjJScaMxKDEFsrU1ubnQvl4EQchNzAqOnY/8EAnPME2CjNoLDQrHSxDM1Q9nUeGrl64jMEIyz3V0tno1zjSGs72yKTG3cd0zW3Uf+KL8rQFaheWJzExOzboNs80OS5gKoMlfSUGKJUxRT+iS19WgLjqxyDV6ttd4GLeXNaCz0nM+8nSyAnNddf+5mn6UxAhJDYvwjlzPFw8jDgeME8riic3KOksvjWFRFNR3q3PuEXGec9n06nTOc9XxivCIr+Iwf/DLss72R3tHAXEHDMrvjSEPag7tDwtOC001ytiLJYxIDt1RftS2Fw4syO+m8kfy37JWsU0vnu5fbg3u96/E8oy2w7zLwv4Hi0tATJYMrIwGSo4JY8exh3YIegpIjczSKJWGGIStt7A5cWPxwPGp8JDvXS5uLl8wb/J1NkS72UIxRwDL2k1dDrfMjEuwSi1I30hISbVLn1BXU/dXJdmG7ksxSvLycuxxtTBCrviueC7zsMOzpThf/WeCu0csSwCNdQ2cS9zKGQeIhzVIispGTTlQyNTkV+4aPe0mLmMupy52bWYsh+wNLLyuenHCd+y73cGSRufJ5ktXi2/J6EgshjYGqMdfyfRNatIP1lFZJZrAbVotquzo65eqo6n96UnqLWudby71OPuNgoyH7QsvDHpM3Ix8CYVHoYagxx6Jzk5Kk6BXNpmI26ntwi8w7zatluv1KgdqsCvorp3ycbijv3ZEyAlMjMqMqwrASX0IQUb1BlLJMozUUVGVx1jB2wvcFW37rebs0iubaepo0SoQa5vvpLS8e67BcUVHCMjJvkheBgtDTMEagFoCX0dKDTbS7VbUmhJbhW1bbbTtkyw9Kmsp+Or8rNwwSHX9/KTBsgXxSERI4sgYBgKEngJ0winFNMkdTy2UjJgtWlcbXuzsLCQrIqpjaWyoxiozbEdxuXaefeZDjMduybLKCYhtRioDaQKbg2WGZAwNUSHUhJg8GbXamStvaq8pi2gCZ/1oiirHrluzsLlzADfE20fICD5HJ8PyQUw/rsDvAx1HXIzBkggVdJgo2e/aF+nE6L7npycm571pJqug7uu1GnxDgkRGFQgORtAFFcLnwfnBf0OPiDfMn1FBFZeYWdnv2n9aAyrQqZ3o/GjYqiNsCnB8tRU70kEYxFgGHsYyQ8uBxIBov9jB2IV/Cd+PbJNlFmYXrRgbWBYo12gJ54GnUufH6fMtePJQeDK9T0I6g5FEVEKLQE++Rr42wLRFOAmZj07TidcgGG4Y5Bj7V8CqMmknaSrphGscbeRyirdavQmAkAJsAUCABX6GPap9lz9oAjEHuIzBUdvU0NZxVxkXAFZ/KXtobuhCaUUq2+2WMcj2wjwugAhCx0LyQS5/uD4Mvev/dULmh70MsZDyk/RVOdWOlWSUkBPR6LboTel6qrDtuDHaN7A8GH9PgKZAbL3RvC46kbsQPEz/SQS5yi2OihH9k9VU7tRqU4mTF2kcaONppGtNbfIxh/bzO4l+3sABAB6+fvwB+vI6PXqYPgiDLshMjaERTJOMFKUUnpQTEwwR32lOKflqvWyiMCx0/PmwPToAAEBGf009ITtOunP6nv02QTSGBAvTD75SD5OQU4uTMJJ0Ea2prSmWqpksJ66d8wP3czqi/R4+RL3eO1258HkcONR63n8ixCQJcc3jEM9SrBMUUzgSOdC1D57plqoA64ttj7DZNKB5Mbxm/SS8jXsGOT430Tf1OUC8iEEVRpLLYQ7LkR5SV1JrkVFQQA9uTsoqN+rMbNBvhLMWt4L66bylfX08Pjq6+Ii3tTf9ubv9SUKzB+oMAs84UKhQ3pCHD3NNw40jDQWpoKqUrK9vpLNCt4o6tDwx++m60nls+Af3NXf4ukZ+dcKfx3nLsk5HT9rQlpA5DwaOY04EjqnqH6s2LQowGLOkdqw5cfoXuhR5FDgI9lM1hvbn+Zh9d4K8yBdMRk7XEFBRDZCQT4zOkQ2uzUyOxCrdbJTvXnL8tnQ46jqQOuN5RveEtnL1oDY4+B98vsH3hvJLUI7BUKrRO9Diz/SOJIz4jFTNi8+lqywtZbDAtRx4kPrx+0x5y/hIdp3163WWNuc5jf3Cw1nIn0wzzplPa48ejlyNLQvQy0mMI43k0ALrdW3dMXw0yLfV+Lz4KLdMdbQ0AXO6M921qfjbfcbDx0jnzEHOqE9Yz0NO7I2mzPwMFcxCTt7RVWthriNxLnQ3thf3dDdq9dJ0mbOosvUzp7WJudM+ooP5yLvMPs5RT5mPgo7MzZSMZQvQzK0OQZDEqk9skG/XcqV1cPZ6tvm2ETU6cxpzA/OpNb+44z3ZwzGIPgxLjzgQIpAFT1uN1AxtC4WL/gyTT52Sjupm7R9wdDN1dNJ1bLTy8vgxaHETcTIx9XSH+N/+GMPpSRXNLs78D11PO81RC+4K2Qpny3oNEdCEk/Tqey34MUBzm7U09O+z53Jr8P+wf/AYcVi0H/iOfg+DoohvDGVOWU9kzzROAYz7C9FLnQy8Dm4RitSg13ptdTB08s40qbQRMx6xfy/ab0JvLLBkMvS2wPzhgxnIV4xKjq2PiI9bTf2L50qkCb6JyQwXjwtSYxWgmKltZm/dMh3y1/JjsPbvde5Aretu/bDANBB42H7iRHEJWAyezlnOLE01S8pKZAlDyf/K4I3w0awVvRic7CavJvExMdnx5HC6rp6tFexabPTuU3Eq9Tk62UCxBkjKlw0GzhGNZ8uUSgXI2oheSTULbs6UkmoWIJkMmx1uYy/EcPAwAu7ZreuseOw8LMTuzPLKtz08QQJRxs4LEA0mjZbMrwrbyKjIAQiVycVMPE9p03xWwNmym2Kt9G8Fr6kupO0Wa4rq3CpO63XstS+5tAL55/9PxVVI/Ir8C6nL8kpXyLPITIiaiYGModA1E0aWtVlpW0Vtuq7Q7yntxi0E7CpqxCqdKzQsSnAcNPJ628DoBeIKcYyYjNNLxQnUh4VGXIWNxpaIjIz40U4VTtigGtBcRK7mrzVu0+z0K6Oq/aqO6tJsDq5s8ho37D3Bg0cHG0kryjpJgQjbhzkEooUoRiQIv8yN0RkVCxgTGqfby5xNLZvtWiuZafQoqqiKqMsqVS0o8Lt1lbyWQwXHMEj5CfxIXwcVBXvDYQIQArREVIjPTVZSo5YFWIyaa1sx7BEsVGu1qmRph2nxakOsCS7dc214hP5Xw3qG7ghGyXQIm4dJxXeDVMJ4g1UGB8n3jjcRwlXzmGEaQdrTGyfsSSxSKzJqLqm6aXQpwm1t8CT0ffkefvACoIWNByOG48Ucw/UDP8IWAkJFBEiVjOaRO1Qt1ySYopleGYDrLqnd6OAoc6jZaSNqRO1bMW43MD0aQyKGhEfCiQkIdYXUgx4A3gETQhlFl0nhjXlRkpW2mCxZYRmxmVDrmGquqjIpjmkG6UEq7G0i8Yk2aHuKf45CxoT1RJ7CvcEfvqu+T75GQRMD9kfIjOaRz9Tm1vXYK1iV2C/rUWpZ6dvpsmmYqsQsem86s1N3qfzcgSMCTMP1A2pB7sBtf8xA30I9xIeJVg3bEXaUlxZml4fYElhl1/8sQGsfaoqqiKvrbWJwbDOVuO78qUDNA5PENwORAYJ/qr5ufmI/iUHMRR8JZI2+kbZUOpVRVccWFxXL60ZrKepgql2rVu3IsKM02XlBPeQATUOCBEhDJMCz/tT9lT1HftOCf8XPCkqOldEyUsRUE5TuVIDUASpiqeRp6KrFbLcvAXIfdcO6ZL2wQN3COsEKv/j9k/yJvTg+Q0FpRC8IJkwaUFsS3FS61M6U+xR/k5mrRWusK7BsZG3ncZC1b/lGPcQAkQHiwX+Aq39C/O38Wv04vx4CiYbny4qPTpGXUt1TXROYkz+SeiraatorLGys7u0ygnbQO55/+kGjQfMBjP+8Pba79Lrle9M+EgKzR/2MGM/CEkcTYdOhExwShRF76luqsCsFrAludDE09SN4ffsjfWB9Jns/OZh4JbhwOQc7Z8BARNYKSc8QEd5TZxOZE5hSxRF20AgqWuqXK7utFDAZc6w4YfywPpu+pz2O+/v6dnoE+ww8zkAHBPrKBM4V0IxRl1HskY9Q+Q+oD2ip7+poK//uW7Iati36Lv0CfmN9I/uauah4lPflOQ38IwD8BlPMMs9pUbcSQdMvUisRd5Cb0GVqmmu4Lb2xH/U1Of99Bj8Xv1C+Y/1oe1z52fq4PJRBNoYHSsZO15Dwkh0Sb9FfkLvOxI5Q6WUqBWv37hyxkjZYOTU7hbvYOzl4kfbtdp239roU/w1EO4nBDZKQWBHjUZhQzk/jDlTOPM7b6i5rtO5Tsk218LhceoR6pTkT94Z28XZr9/q7rIFzhufL987CELvRdZF/UBTPTQ4HDlCo0KqArXGwvTRP+BW6gjuQ+vi4oLawdVG2lbnUvxsEoInzDabQAtFs0Q8QPE58jUeNjs8xKMarvu6Kswg3Lnm0umb5nzfetlp1ZTZAuXv+SYToShLOZZFU0kLSptHxEKJPbs9eEMRpPitAbzly/7a8+To58zip9oh1b3Q0tSZ4tj1Ug1IJZU26kG6RlVDCj7+Ni8xJjYLO+meSamjtu/IGtci4Dbh8tkc1uXNIct+01flOf9yF+kuLT1aReRHEEa9QXs6zjdPPe9HNKMisB3BUc+j1iDZr9MHzR7H+sU4ydHU1uxACX8j5DjXQWJFd0IgPLg02zH1NoJC6lEdqjS7vsog1xLdmdmD0KfI58GQxabQr+ZJAyEeBzToPydFNkTrO0AymC+BMg8/4U7Wo+azBsXY0aDYvNRbz3vFH8BrxAvOheNGAGocYzTxPyFF80QnPNo12DROOGBDIlHloWqy0cLe0LrV+s++yKbBB8A7xPDPEeY8AfYbvjK4PlhCAT45NtIw7C0eNQ9DVlM6onSwLL9xyQ/MHMa7vlO6Qbp7wPPTbu9wDtUmEDiCPxY9yjYaL7YpoSgGMcxCOVetpGe17sAgxhbGrr/+uLO1BbgZwQHTFvJbEd0nnzeFPfU3cy9BJ0QmBis5OvVLeV7zqe+78sYbyrfFrr1xtxS2B7xxy9LjRQJsHk8z7Tw8PBE00yqrIr8jBC6OPl9Sq2LGrE29NMQAwpu7ebTesoC1X8DQ1ITwRxBLKbs20DzxONAw9SryJEwp0zZiTNRfAGxVt9e/UMDPvRK3x7Kisra31scB4SUCehwaL6E5VTcGMAQpASQHJ08xa0VLWf1mJXBvu37B2LvetQWwLq5Gstm9U9QC86gOoifQMwQ3ITC8JlogrB8OKIo5IU44YORrPbdqviy++LfjsSKss61wtFzFOeHQ/WsXZyayK/YqZSNXGzMWfht0K9VBmFYHZbFsiri/uUa1nK3IqMum1Kt8tyjOrOrwBmQd0Sq8KdcjQxvuFB8WdSAENgJLNluAZ1Vtn7nAubi0rK7bqj+uobnSyybmpQEeGJAlvyiZJXEbghAbDxwUuSb5PLlROWCKaEa47rkXtS6wGqlHqGSt1LmbzifnvgRiGEshWiPmHUYUaQ93EV8cjC5YQnRTJ2DpZue1T7RCrsypNKcVqQKybsE82IH0QgvCHN8hsx3VGCwQUwwUD70bqS9QRhJXt2EqZZe0DrNerkeqJqqEqz20qsV53nf8GBCKHNofzhlDEyYNrgxTFnsmPDvZTZtad2KiZfK6SbVDsJ2rTqswsNa71NDW5pf+SQ9CF5QXWA/UBLL8EPn0A6EWoC9CRHdS81phXqSzxLEyrXWqdqqvr5G6T86r5yP/5RC9GkAa0hG3CEoD3wS9DVcdvTC3RNtRFlpnXX9dMrElrMGpqaqTrqq4cMkB32XzkgSVDpIQcwnIAEv9i/wLBbcXGjCiQvROcFfaW7hbvbYIs0qw6q5qtGO/bc4h4S733wY+D6EPRQoV/k/4qPbr+2oLxiCsNZtHO1ESVgNWhFR/ry+suquUrQWzir4j0fHnL/v/CXQNPAhXACz4N/eo+GsDxRX0KaE8xEgMUK5SKlHlTxKt0qr5qpGuWblvyODb0PEqA4cLKhCMCkcDkftg+1ECiBGiITMzkEILTSZSv1PnUC5Nr6yBq0qugrKnul/IVNoC75AASAWLAvf6j/MD72Tv3PRNAlkUViv7PF1IdkwzTi1MfUnnq/mpXKqmrgi2E8W51lnqF/rIBNcGbwJz+Crx5PG59doEaBZgKa08OUcaTzZRL09aTUxJ3K3KrkCwHrjtwR3V/uiY+R4C9QJE++f0Ku606qHsp/WHBkob8C8XQHxJQE3PTbVJzUWrqreqyqtSshi7Usrd28jwV/14A+YEc/4c8x7u1utj9TEDQBZXKUk3hERkStNMMEwMSQJGCqqmqnCtmLFcvAXLGdlz6ArvQvOK8Yjt7upM6G/oBPdCCN8ezzTdQRVKwU4VUDlQfEt8SAVGiatkr7G1HcGd0PrfrPOk+Zf8TPga8NHpI+XJ6WryKP8CFZEnkThgRO9JQ0vER29FB0DtOlilJacrrF+2TsME1ivl9/Gt+AP4u/Cm6srmQOe766L4FAscIKMuBT4TRRlJAUp7SMxF/EKFQgqnQa1Jta3BXNY55THuUvK88YPqD98i3UvcP9sh6an+YhUTKz88a0dATKNN0k2cSUVEsEIwon+lvq2fuaLHjteP5JPut/C38tznb9xU2ObWCt0J6iL/hhe0KeI7dEUWSiJL1UZiQ/s8uzo5QJSh/qjRs2nCotHR4MTq5PG86Dzh1NlL1fzYzORd9usOgCI2OXRGOkyDTZdML0lmREI+Zj2BQQmfRaketsrHqtkG4kLorei45m3fvdfH1u3V19197jUJjyADNG1Bt0ZzSG1JS0XwQXM6SDrDPouaEKOarwO9D85p23bkAemt5Z/gLtnj0vLXN+Dh8mkKZR4GLkA8QUYrTBtLa0WiPr87fT1mQrRLTKAMrHO5j87J3cTnReZB5UndV9XZzYPQztRZ46P1URAKKSY7c0UrTJNLV0gtQys8qjo/PPdD2pf/oFGtyr3ZzJXYptwG2AnRy8p0xSjGGc362hvxBgq3Ja05dEVkSxhKK0WlPoQ4ljSqNbE8UUhHmP+joLMOwRrKvM+X0MnKHsa4wDnFZslz0t7pSAD1GVc1ZUSoS5xKuUYLRF87OzhhOpk9BUrZWCWjVbHIwsrQ6NW00/nOD8Vrv9m9l8GwypPcxPh3FbguaT8HS+xLXEpbRSg7zjLfLVsz3D6bTSqaDaoeu83K9dPa123SJsyFxM7BMcLpxFrWie7nBzEiojUaQhxGUUFsPZM15i09KNIulDrYSvxZr6IyszvB9Mor01vNGsdWwNu80b0cxAzUU+u3Bacg9zPSQCRGI0YlQXA6NDXXMGk2Y0L0T81fiKgFu8rHzNI714nRtsqMwOa7Xb0dv87MY+Ej+04UhyuQO59CGkLqP4A49TF2MU42bj2WTJpZ/aBwr/K8JMSixQHDsbwwtwi26bV5u2TKW+KR/XEXay5DOok8TT1zOBownSVyI2YqYjbkRfBW4GSjrTe7UMV/yYbCZ7x8tx+2c7ZqwqXSx+fJ/QcawSovNjg50TfHL3smdiSHKH8wCkCMUB9fUGliuhrFDcolyOnCd7xRuNq2Qbs2xevYrvAzCuofEivaMJgwmCtrI1sddRpjIR0v4EGOUrFgf7Etvr7DocTsvYa2V7HusCW0i7zdynDidvwKF6cloC1BLMon+x4uGyMb7B2OKn4+VlG5XxBof758w47BaL8UuNKy0rBRspm7ostX4nv9TxXaJE8s0i0CK9EjGR1IHW8i9C/xQoZSZV4/ZuHA3cWIxdvBgLojtR215bn2xMDUD+66BQ4adSYmKzwqzyJ2Gw4WeheiITgxMEbBVBpfoGVOwtrFv8EVu0+3/bHJtC+9A8055Dj+mxe1KBAsjS7AKKAgdxlhF4kbPyYXOCFKxlX2XfhhDr95vOu4H7V2sRKyqLk4xu7ZV/C/CskbISSRJgAj/hi8EJYNgxJVHLEs+D8mTpxXPlxLvS6857fNs3OyL7OTuLTDTNZo7FoCwhL7G9IbABaCDWcI/wfmDtQeJDKeQmFP21agWv7Alb4VuwC3TrTLtkq/u83n4Qn3nQviFvwbGhsKE0MJAwYaC1YX2Sa/OJdF508/VZJXmsDVu7u3tLaat+u+xcjJ21LxSAVJFGoZ2RWVDxMGTgPQA2MM8htwLlE/cUp9ULpSUr4IvGe4/7U6tyy8vMWL11juggNeEE8V7BS1DfMFZwOqAxkMYBswLuk/AkooT2xR/cB1vYm5HrewuBe9IcgR2g3t+v92C4cQiQ7VB+oADf0p/0IMwh7VMphAA0nyTBJOkL95vFC5s7i3u4LCQdEq5QX6qQm4ELIQcgvSAqz/NgAxBsMWnyi4OqJF20rnTOlLrb12uvC33Lg3vQfH3dZe6ZH6GwSHB0YDZP2w9sr2x/3ZDIsglzObP7lGVEk2SWVGp7irtiK3fLuMxC3U5eeu+GsD1QYqBZv+V/fe+B3/5gxQIGAyQz93RQ5I1ke3RHC5dLhcurm/V8oA26ruWP5cBaYEIgAB+dj0nfXf/UcP4CPbNZxAdUVORnFDwz/Lte60xbZ9vEvIEtpF7iH/oAYCB/j+lflG+Ub8pAidGCYtgTsoQ9NGSEZgQxRADrdxuKm7F8Vy1uHo2fnlA9QEBv6k9fHw8e+z9CsGYxtgLb86UkFsQuw/8juItNa0lbfovnLLX9y47R/6AP7m+YPxweyU60rz9QPsGdIsfTroQDdEuEEAPh05E7Nttd28RMgF2o7rF/kI/TP91Pag7/nqvPFkAGsV5yklODQ/3EFPQKU9WDqAszm1dLvJx9vXzOis9k/7uPdz8U3ta+wD89MAIRYvKDU1ND0/P5I7nDXGMJavqbLEufPEK9QP5b/xCfew87rraeLg41DwlwI6FyQr3zeaPeQ9LTx7N14yMK/Asq66cseZ2OzoR/Hh8YXr9eX44V3jj/F/B2ge8jAEOwFBDUBfPEE4GTRBsMS0ML4GzX7dYuu97yfssuUM3zXdCeNX8msFmx0CMPs4mjvcOD00WTBjLySw1rU/wT3UQOVN8L3yH+185/fiDOVG8KEAsxkkLco39DyGO0425TFhLW8wBbBOtzDFydbA5gbsNOjB4kfeQ9wy44ryVAm0H5gwBjtUPPk3nzPZMFwx8TY3tRjB4tDT4Y7r0ecf4bfaqNm+2mnmKftmEsQoxjc5PKw7zzRzLyIuBDEWPIi6SsmG2MzihOU/4ubZV9Uf1vLcRertAqsb1i5dN2w5XzXYLAMpTi5uNqq24sPo0n7f1uSZ5Zvd4Ncw1iDZzuQK+0wWdSrYNCw5/jPiLhMpWiizLtk6KbubyB7W9N6Q4Pja9NR40bvTrNwY7+8IqCAKMFE4PTYbM2gsmCqeLSA3d0MVxBvSAt0W3o/amtNV0Y7QUdmd6TT9CBUIKBcwgzOLLpsoByGRIV8reznhumPHhtEi2AHWh9LOzCrM5c523LfwTAjmHJMpeSwDLGEmSyOgImYoETQeQMzECdGi14jXf9IHzFHKsM2m1XzoqAKAGYYqDi/SLzYrdyLyIfshUyo0OG1DbMvc1SPZ19gS0tLNOc1v0ILbCe9cBcsX1SIhJvEijxtDFp0Wxx3BLJM8tUYN0G/XfNq41prRqc0czTbT3d+l9ssNdhsHIpIjxR9BG50XaBsCJbsyaz/eRhDScNZ61HLQxsrFyWPLLtQD55H7/hB6Hu0g8R+iGC8Rsw9mFFoitzAaOutBMM5F0VTS6c0hygnKzc453C3uZwAgEVIX2RlJF4AQfQuYDWgVnCPfMSs+DkTU1R7XrNJnz5jOws6C1fTeTPAmBZkSzhpOGagPOg5UCqILvBbmIhgxpTqSQIrW9NMV0EvNN8t8zS3VPOEF8uUFlBOLGboZ7hK9DE0IqwtzFDkhQDCdOc8+1NUr1WrRdM5XzYvP69Vm4cHy0QSYEJsWchYIErELWAY/Cc8PmR4ILxQ4wzuJPVTVbdN/0MTQZtI11nTg4vEIA1oP2xUjFk8R7Af8ApMGYA/2G80pUTJRN1Y5NtVG03TOUs2wzqDSyts+6Jb69QkIEZETLA9KB8wCsANzCoISCR+NKwYzRjY5Nx/VNdE70EbQB9NN2X/livTBAUUKQQ0zCzgHoAL8ACUCdglFF3IjPyzvMCIzZDMs00LRws/hz0TUOd4K6nf3SQJsCO0JQAjZAzz/Vv6BAjMNpxuYJuYsujA/Mnkx69Rp05DSqtP417rgGe0D+v0CHgYJBigCcP0X+nT8egP1DC4aGyXJK8IuGy94LvXV+NNt1WzYkt0X5kDzgP86B70IOwh2AVT89vwO//oGoxKbHaAlSCr5LEUtbyvE1VbU19P81TnbOOTn7tz4OwHnA4P/LPw8+Z/4afpIAWwM1RYCIWgnGCpOKscoz9a+1WXWZNkd3h/mAPDp+ZUB1wNXA9H+t/pR+Q79nQJHDc4XxCDyJbEoOykJKPYlfNce18nYxNwS4/3rAPXl/PL/MgAY/bD40/Vc92X9eAe6EcYawCA+JJwlQSWiI20hCdbc1ozZVd6f5sPwevkh/lP/Qv1D+aL31vd9+lsBSAsGF7IeiyOLJakkESPRIFbXo9f42BjcVuFt6VPzpfiH+yz74fY081jx9PPz+s0DYxDLGcIfBiN8I/0i6SAJHoLXp9f52ebdmOSB7fL1A/vP/F76FPjw9Hb0w/a7/SQHahGAGewe8iDBIMYf6R0DHPzXBtmH27DgSehZ8dz3CPu6+zn5PvbD84zzjvc+/vEH5xEyGU8d2R5yHjMcLhrUGCbYutnp3JHi2OmA8+j57frQ+sr3TvSK8bnxePa1/X8IehMoGhQeHh/ZHtsdERyuGlIbwNoA3ofjkevS8nj44PpU+Zb2PvOm8UfynfYU/2sIiBHlF14b9Bw1HGIarBfxFRQXpNmG3Mfhnuij74/1gff+9k70gPGh8J7xUfbW/qAHPBGrFwwbFhw/G6oZFxeBFYMXqNpi3XTiQOnW74jzt/XS9B7xwe3i7VzvI/TN/LkGBRAQF8Ea6BsFG4IYBBb/FOYWfRo33fzhn+iV7j707vVy9JDxzu5U7nTvKvSB/HMFag7pFRQZ0BnpGOIW7hMVExUVVhkn3e7hGejI7SvywPSC84rwK+557Wfv7PQW/Z8GrQ+OFW8YcRk/GNQVlRPFEqQUVRit3Z7iZ+ia7kby5vJP8YXuT+xr6yDtvPE2+mMEuQ0FFSAYhhhBF5gUFxP/EfITNhjbHHrifui17rjywfLz8GHuWewC7OntjvJL+kUEbg0RE1QVIhX7E7cR6g9vEOUSaBcQHfDjBOor7/DxJPKg7y/tDuvY6mPt+fI1+6UEpwyQEakTLBQdEvMPtQ6hDjkSwBfyHKfkselp7mzwfe/j7Rjr9ul96ynv8PYKACoJMRBIFGAWOhWFEjgQDQ56D2wT2hjJHbPmKOyn79Dwlu8C7brqgOrG7CzxCvgyAqsJqw/QEisT5hD2DT8MqgxoD6QUwRnSHZfo1uzI7kPuUezR6dnoHeqT7fzzr/ysBVsMhBC9EZgQ/A1qDG4LYQ1CEQEXkxvs5zTsx+5a7pvsierC6QDqx+x48ZL5PQK5CUoOARC9DiMMhglMCC0JPw0+E8wYhBwN60jty+0J7YDrQupK6hLsoPAd91wASgc4CwoNbwxpCuAHPQbMBzYMuRF4FyUbwuss7nfuRO0c62np6OnE6/fvl/U5/poFFQrtC5sLCAmaBjEG2AeJC68QShbbGdQbTu5D7nXsBevf6YnqaezH8CH3eP5MBY8I3gg2B6QExALpAmIFxQpsEKIVFhnh7YTv+e4X7aXrUetf7MnuWPNq+hABcQYQCdEI8AZwBI0ECQaRCd4OXxPAFr0YUO/I7zjuvezR67br3u0g8rz4NQBrBWwIuwhIB0IFhwPyAyMGaAqOD8cTWBZAF/HvDu+Y7bDs/ezE7iLy7fbv/Z8DwQZUBw0GzAMTAnsCKQWKCWUOKBJZFE0VFfAr7+ztQe1Y7bnu3/FX99v9MANTBj8G2QQpAwEC7wIwBYwJRw7yEewTmxSG8mHx1u8572Hv0vAt89z3R/2MAU4ESATIAjIBWQDoAcYEOAmwDYYQ8xGDEhryG/EB8O7v5PB+8jT2jvvj/1UD9gOVA/oBEAA9AEkBywTdCRsNlQ+AEG0QCvJN8QjxdvGo8o31j/kh/s4BKAPoAmkBp/+U/lX/gQKvBm4KNg1qDqIOYQ5P8vfxDvIO8yv1RPie/EMAmQFZAUQAs/7F/bT+3wFlBQEJnwvZDDANvQwC85Xyf/KD82z1fPiC/Pr/EwK8AWMA5f7P/e3+0AElBScIbAqZC/gL2wuL9PTz//Pk9Pj2kfkD/aD/mAADAEf/1P24/dz+tQFWBXgIHQrTCsIKXgpA9QT1VvVJ9jH4/PoZ/ggA6QA3ABP/Of5U/p3/ZQK8BeIHIAleCQwJjQjG9bj1R/Zj97j5A/yY/ub/m//l/g7+2v1w/ngAjwP+BZsHRAhMCOMHQgfu9hz33/dW+WL7aP2a/vL+P/5c/QP9SP3m/pgBXwQzBhQHNwftBngG9vcm+MD4D/oO/CD+gP+2/13/lv7w/eH9+f4oAZgDfAVjBosGXgbdBaYFJ/md+Xf6w/tX/Xv+2/6T/uH9mf2W/eH+AQEAA4IEPwVtBSUFqgRoBMj5Fvrf+if8uv3//kH/Dv9g/ib+Xf6P/xkBkAKsA1AEXARHBPkDygPP+jf7G/xO/Yv+TP9T/93+WP4W/lP+9v56AO0B+wJRA1ADDQO8AqgCpfsI/NX80P3e/pb/iP8g/5P+Yv7B/ov/wQDAAVICjQJ0Aj4CAwICAoP84/yN/Tv+1f4b/wb/0f6H/pz+Ev/n/9IAkQHcAdoBnQFXAS0BQwFm/b39L/6+/h3/Tv9G/x7/Cv81/7j/YAD0AFYBVgFCAR8B9wDlAAEBcf66/gP/Y/99/3D/V/9F/1D/ev/T/zQAaACHAIYAcABUAD8ASAAt/0v/ef+b/67/sf+x/7D/t//C/9f/5//x//D/6f8=`},{name:`shoulder_right`,sampleRate:12e3,frames:8160,wav:`UklGRuQ/AABXQVZFZm10IBAAAAABAAEA4C4AAMBdAAACABAAZGF0YcA/AAAQAGkApwCgACAARv9s/tL9XP0A/a79s/5q/77/tf////wA9AJiBV8HggcYB58FfwI//qf6Z/g397f2jfaz+WL8Af4b/iL+5/5WAQgGHQvtDmUPsQ4yDAAHof+r+BL0CvIs8cbwIPJg9jX5a/qi+uf6Jf1fAiAKORKEF1wYqxYKE9ALOgEJ9xrwH+zd6hjqAure7NPx2vRn9uX1ivbe+WcAhwmDFOocVyI0IaUeDxk2D0wCIvff7WLoh+UK5YrkYOOp5n3s5e7Y8HXwkfC38vL3AwDrC4AYjCLAKbws3yoCJhYegxKHBMf2eu3i5d/h+98k4Azfid3N2vrgYOX35xjo+OfS56PqVe+I98kCiRBRHtUqqzPuORA+7TwzOZ8zmCoKHn4Q8wBZ83Lq9OLr3qLcSduP2uzXqtcy1lzQNdDi0w/X7djV2XHaPtoj2z3gVuPp6ArwoPnVBtsUXSKBLeA2fUCwR2tNsVHpU21SK0/DS+5G4D5hNdEp+x3mESEEJfuf8LHltd9M29zV4NKX0GXQ4c2IzNLLQ8z0y3DMTMrBx/7CYcO+xyLLPMu1yezJkcjsxXjFGccExuTGocdeyPzHq8v00QXXHdwf5CDti/i9BBcQwhsRJn4vcTnwQdZKglFLV8Zb7F/WYxNnuGnYatxplGcNZbtiul2kV6hRMUrORJg+zTWYLsomTxyEE8EIzAFJ+Mbx+euH5YzdGtvJ1pLV3NPa0dzOMc2Dy3bOhs4x0CDOhM4A0PrQsc9+y/fEW8DJvBi5MrO8sj+0rLZJuvm6CryFvdq83r2Bv8i+vb7/vanCIsXixErKnM2L0SDbW+T+8Az+zRDIIMwtuDmBRstPMljYXdBh02MLaP9qImzmZx1j5FwIU1JJ+D5LMDQhJBNKAxr0Puhg5WzeK9oF1RTTYNXp1rrWzdYy1CXPGsh7wLq2Sa5xsfCz7bCxsTG02rRWub7CoM1Q2PnoJP6xEAMkDTphTL1WZ19DZr1pcm0LZuRaWkqVNMMdkwj++NfxMOoq4xHiMOTc4A7f/tlpywK46Kjcq+ernKzXriixxbquzc7lhwGlHy87ulAiYSRrgG4HbIhc7UTQLBwSivg/6U/iaeE85ILk49wJz0W9KalZqBWn4KmAro66l9Oy84wb6T5wVpZjrWgjaxteKULvIXAC9uw54b/h/ON34/rWxcUGr72lbqgqqwmzYcfe4ncNfzi7VOtgymcwa6ZdAj7HIE4Mvf67++P8ifgs6MTPfLRlpoqnEqszt07TV/czIaxBH1RRXa5eGlL7MiIZWAmDBdD/ZPsW8W3ZHLaHnt2diqEhrB7IJfT7IW1DolQbW0Fbj0ntLU0YsArWBYACp/zS6JDK3KpAm+qb2qTXvHvkfRXvO2lQRVvGXbNZND38H30OoQfwBCb9SOhCyTKvWpgKmZmgmLKf00IDTSv9RWxOf1T1VQlD6iqeGwQXQhk1FpcJ+ewSyjqsaJ9qpV+0U81M9PccaTnRSHhPE1CbUEE8JyocIRAebBq3FNwEfulCxmirvJnOnDSmdLxl3gMF6yQfOihCREUXR9ZHxzWWIrsZNxwnHIsZaQ7M83zTbbhYpOacn6COrIq/IN0HA5Qg1DItPktB6UPlQ5hGZTb2KnMnyyYYJzYgkBJj/8vkY8tGsVWjAZ2ooXusKb6I1gX2IA4lJBsyxjdXOv45Ejv6PO89cDSsLo8qJyqdKLMneyBSF7gHVO721XLB2rAjp+ugkqTJq5W11cbk3mL20A5AIG4raTQmNZE2LjfENzw3KDmxPWs0Oi3ILFArvyzxK8YsCCn+I8Me+BJ3AMbufNt1y929qbKXqzylUKL8pTWs+bNjvYrIg9q56UT9sA6KG3EjlyaLK+wsRS1uLncuADDFLf8uTzMUN9w9bD3EOLE0qjD4MGkxKjG2MG8uty39K6YqRieZIroZsRF9CIP8PPAD5KPVZ8lqwOq5FrM7ri2rhqjPpTimGalirAivybTdurfCU8o31trgT+xZ+VADUg2XFCobViF/Jigs9y7LLnYy4i9BMLYwCjGmLpMuEi/0MPIvrzQcNrE3ejpMPHM3OzQeM+Q0NTPzMmk1TDbpNKQ03TMNM/IvvSz4KaohExryEfIL9gI2+EjrHOHW16PS4MqNwby5ILUzsRCu4qsTqtWobqu3r6u1bbrHv+rI+9OW3sToC/Ml+3wC0Qt3FQwaJxwGGz4ZKxspHB8cmhkmGtMawR16IiMqbjJROfg3bTmXOEE79zknPKY7qTeeNMsvUSduHSUNZP1N6gjbu83SwI62w68uq1SouKasqwyzSr0qzEbdQ+0j+YkIAxN+Gfwc3R/BH8ogSSN3KEUtHDWXP9dDTkKGQQhAET6JOpYzESowGmUElexV1F/CL7Z+rk2pO6aCrpG8R88i5jj6wwl8E8oZ5xzjG9Id2SEzLAE7tUabRNtDU0JuPik1sSStClvsUdAkvPWuIKi0pOqs8MBd28j2ygqzFDcYXhjOGD8g+SuXPcVF6kRwQyY+wC45F6r0jtQxvPOu2qd8pVG1m9Ab7vgCyAz+DswO2BKCH1o3DE9pT3xNsUScNHYS0OnNx3qyeqijpWGyZc4c6xsAOghCCRoKixZQLBtKclMDUlpKxTRODmTijMH4rx2pU6gZw+zgzvo9BGsGLwehEz0uZk6aWIJXrku5MU4GtNm2vKiuIquxtrLXyfT2/QT84fudCREoOUrVW59X00l6LSH9N8+TtLeq3ajUtKrV8u699sT3t//MF+I8sVxzY9FdB0k0II3tk8ZRtGSuE64OyUzlYvB+8SHyyQHOIc9JUWShYDVQ/i3c+TjPibenrrCuHLQE0EjiSebF6DPyEg7iNw1a1mXlXJVE7hhT5H3ACLLor+ywRbvh0h3eD+Je5vD1LhieQHxfe2oJYRhJ+RvS6U3GHrUZsUaydbA1xh/SHdTb0/ffh/zzKblPdWgkaodcMkBRFbzmx8uEvVO7rbi0swXFbc/I0FjSmtfU6y4PSzxlXLttGmpPWYM6TQ7F5B7M/r+au4e6YrcTuLzDi8icypHNPtgu79US8jlEV+hpMG65YyJNxilFA4Pi9s2nxZPDKsTWv2u3gbxQxKPFlcRKyA7Ur+lAB6EsrE0NYjxunnDnZt5TujcIGCP4/N+M0oXMsck1x+rFcb42tOm7XL96wKm/EMX/zBnd/vIFDxEuuEmvWzNo5m6Pa1RfIk/5NUUZBADy7KrdzdRz02nPEc5ozynL/sBmtZq1F7nIuc67vbqvvdLDLc/93MzzvA0LJcQ7xE4bXOBlQWtWb6doeV7kT1g+YSrdFcQBAPEt5TPdt9We1RjVQNQL0WDP7cwOxVq7lrFytPi0/7bDtli3PbjQu+DAlcgz09bi9vI1CmkcyzEqQ5ZQ2FvWY7xopmwWbvNpR2FtVotJcDhtJ78WzAXF9qrsIuQt3kzc0NuB2vnZWNog2wPZrtMNzi/EXrq9sFKyQbRatHy0LrWwtUq4frtOwHnFXM993dbq0/7iExgoxjnURzBU2VxPYtlnE2p3a6dm3F7JU0NJ7Dj8J28W6gWx+kXwmOnG5wnh1N/D4R3gGeFX3RDas9Brxx2+5bXVtoS4kbeqt2G3vLsRwLDJx9b65oD5vRHLJe84mUYYU6BZwl4hYnVk91zUUnFFKzTuIFAPDgBz9tbv6+9J7q/tZ/Dk7aToCd8E0Ma98ba+tl235LZMuN++A8la2xfyBRDTKuY7zEpCVblaf13VWF1LjjUGIFIPMgD390Tz4PH771DrQeQ61HvBu7EYrTitJK5Psjy+LM+t68QOyywuQtBPoFd6WltYtEZ6LmMYjgcr/aL61fs3+X3z0ObE0D64ha9CsQm287561qfzRBUUNeVGa1GCVcZVO0IDJtcKEv92+Fj6lQD/9zjlI85ttQK0drf0wNvUAvHyF4I4wEm1UDFUzkyrM9UXCwraBLQC+P1f9XbcI76crLevJbXsxF7lAA5FMn9Fzk5RUKRGCyygFCAHbwdCAy/4BOKbxFGvcK7AtXXJi+kEFHw2KkdWTEZKazvUIxEXzhW+FJYMhPf+2Ey5aK+ws9vBWeEYDw4yWUIURTpGWDohJe0XAhVPEuoE9+d6xw6upKqns9rKYPMnGd4zED9aP9FAVCzKHU0aNBx3GOgC+d/KvqeuLbbTyIPvoheUNb1AKURBQ7c7mSU9IcweExyeCqLoqcKHrB+rpLc90Bn5SB7kMU04SjpRPxkxMigAJvwjnxqS/rPX+LjJp5Csqbws378HHiJQMIE4gzlNPqQxPCqJKA8mcR7VBo3bAbq9qW2r9Lpl18D9jBuaLOw0xDbkOfw7+yz/KBQoeiPiFvv7adZMuRGqwqeHs6nLyexMDqkh+SxBL7IvIDWjOZ0yPDMYMD4uXB88B9Tnfsazs8WoV6ypu0bUN/bkD8cgYCixJ2gn9Sk4NUE22DGTMvQwsCvvHegGned6yae0LKpppI6qdLdGzI7pIga3GH8gFx8qHEkd+iW+M986xDYHNSk2rTb8MXEnNhH59NPZ3cEGtEqqUKWzqKqzBMXo2ufzHQg8EwMbPh7yHdEd9SC2JHcsUjmJP5U/p0DpQbhANT/GOiMwZB4MC9jw+tbWwru0Qakko+agRqWWrb27es7x4dTzxAj1F9kefyBEIqkhmR+oIhYn7CmSLk83yUFOTcVN4U0iTQ5MaEy3S3RGWUA8OCYptR22DgT8auYw1grJW7sHsaSqU6THod+fNKDgo92qjrabwkTTeuR776L7UwImD8EWWB3pHkUeWRwFGtkafh9tH0Uhth8eJ38vDTeBP4BH20ouS3FKw0twSfBH00oMSuhIskUGQTs8nDNJLQQjJBJLAoTwj+TG0jzIqb/ptGasq6Vto5qh+p2unGObTZ8ipritT7miww/OeNm05izxPfwMBDILxA8wFHsV+xW3GHsY6BQrF9oaHBx+H4slkS66M7Q/80tvT1BPLU0jTY5MpU3gS9pHIUXBPbo0DS7pHsMO4/ar6KnWVsUqtqasEqRAn3OcMpyZmQmdFKcytnXDxdfk6Ub1UfstASoH6gmCDfoOkApOCqwQZhmGJi0x/z70TKhVzFaXVyVXFVaWURdLK0ANLpcVd/vi3svCJ7Pqpi2f4Zr6mGCalKlavvDY1eoU+uAHQQ3SEB4RJhDqE6ob9SjuPL1O5V/RXh5fW1tyVNlHSjQyFnP1+dPnuWmnx5/tmvua8abwvQPbH/JxAMUHNgdHA4AEUwtMIH83olKvYR5ioF2tV5VE3CYa/2HWAbl0pjCfQJ7Pn3e45dC45qryYPbB+Gb6tQX4HpY/f131Y0VhIVcSQogfl/JIyqKx4KQIodShergZ15brTvVV9kf1ZwHfF1Y45lneZ+VkSFnmP9oVp+Rzv2CrJ6XBo82t7MxP5Ajuw+4P8OT/ORvDQ1Fiu2f5Xs1JECPS7+PFWq/LpzCn4avvyfHfzOV06DLw3wcsLeNULm6AaaBZijj/Ba/VJrtEsQawNK0QyWXhLOn66kT0fQpQMmNXk22AaAFXVjK7+37KvbVhrh6vRK2WyNHYAt3+3Yruyg6jPPRfG25kZKJLOxzr53THA7olt8CzMLjQzEHTftWN3K7wPxrCRmdjjmn8Wjw8ugc43fbGbb8ZwLK+wsMV0fPR69ad4KH98ChoUJBmn2moWkQ53gkc4SfNTsYXxtfCJ73bx+3LEcw61R3qOhKYPUJajmjgXtZFgRrI7krV68thyq3Jx8MvvTzExceByBHS1OgtENI53FQgZPti3U/MMHkHoOdf1sDP39LdzoDF1Lx3wZDCnsNAy+3iJQKFLZRLn10PZg9gLUzBK44Geeze23fX49ao1XjNR8LavxHB9cDGwkTMxd11+pEeYT31UeNdLmNZWYRFhyuHDhj3mOkA5e7ipt/Z3I/SAsNCuzG+V7wYvSDCPc9v4zICfiFxO6FMplgcXnlfX1NbQJkmVA02+Qbq4uD33sfgiuFZ4T7a884cwAC6hrpyuuO6RL76wxHRKuI8+gUWxC2rP9hLB1TTV6pZu1OPRnE2ySLED4kAtvOZ7NjpkOdY6ETnz+Z340fb+M8Lw7y4wLq/uRi5HLpTvCTBO8vX2AXpZvrfDrAjNDPDQCVJJE5bUSBTRlWuT7tE3jhvJ8gYFAqgAVr4M/N371butuzM7rTuo+0w6P7iedjVzm3DjblftVu2/bXctme4sLyowS7JX9Lj3vnutQNLFTAlKjJZPR9F0UrLTlJQHFFoUf1NbUVdOX0tMyBiFFcKhwEb/+H98/nV+Vv5VPn4+NL27PGG6G/dGNNZx9+7J7VYtaS0GrUFtzm7MsB0x5HS9OLJ8dkFBhpwKoI4EUK1SLRMIU59UGRQskvPP8ww9iOAF+IN+AVw/nv8Nvvw+3j5+vQE8dDnjN1u0erDXLe1srq0NLXrt2G9BsYq1Ozme//JFg0pPzrRQoJJgkwjTe5NdEeJN4wngxdoDaMEtQGOAroBmP8w+V/twttdyZ66/649r/6w2bSPvgDOOun1Bj8g3jErQG5Hf0yKTYxNezy6KiMbyRSSEVEQ6wqTBsL7Q+hUzzm7sKvDrEexU7tzzGbo1AsvKr86hkUCSVpKd0qiN5gm+Rj/E0ASLhDxA0HwedQmuyepqqqGsPy/ANueAGkj3jU4P4pBpkEkOlQiGRIPDZoJEQq5/iDoIcjLr66lwqvEu63bYgRnKE86+UKEQ7BFVTerIykbZxnMF2sKou0zx6aqrqMlrOnBH+qXFLkv4DnlPlRAUjZoIkYd1RthFb0C2d3It3qiz6PItIrVzAZZKI04JD3XPho/JS84KpkpFB+6BqXaP7Ldnj+nncCb8LEe3DXAN/o4wz7kNCgrPCmWIOsCF9bHsLCcOKFkuVfnRxUvK2UzVDS+PgA8wDYOOHMspwxj2mewbp42rCXNn/8rIQIylDJTNKNFhTxVOLs0hh828nG+76EXm5iw+NvjC6IkhiqRKRs2zkN8Qk9BtDOEDo3WR64lncag1sLC8IUW3CQ8JAQtqEHDRxFKmkKPK8z9ecQApAGYe6Mgyan12w/SFjsWISL9PxZJXUeMPvcgeO/gvbigP5eYoNbE0vALDQgT+xSsH4w7NFSjVD5RnkDXGvTj6rhdpK6cRLRr3qwCIBX2Gkgeciv4RFpeXFwQV4BFriGo5xS7g6T9nGKhesKT5/ECBQkSCl8Q/B8yPnVculv0VwFJdClj+cHH+6zJobWdvqz00A/zQwHdB9IMrBKRJZBAiluKY3VfcFbYPsUUvuirvoSsQKKIn+ejub/r2/bwn/S49Uv03wFzF5Q04lVlZlxmaWAaU2I3OhKR5lDHo7P3qYGk0KPLsULLhtqU5dbl1+Wq5Vjx3QG1G60+Y1sOal5pjmTZWWhAHSHH/afUDroZq8yjn58RnoueGqusvbLPCN1T5VjnEejc7az22wvsIvc/y1QlZKdtQmvbZRNe+03sNEcR0/St3FTH4Lnvshyuha2prSatk7KlwTzM59h/3/ngl9/B4V7mafDQ+wwPECB5N2ZONF+xa0hx0m/cbIJmtl3PUOY6kCU6CT3yvdv4zOvA0rgWst2y+rCTsfKwSbp3wjzOoNez3GbaOtwy3/3bqdyk58zsg/5BEdIqpEI1UTdfUmkub7Vu+2hKZENZTky7Ny4l2QpS91viQdExw3O8gLLEsuOvirE5sKuuyK41ugjFCs3V0HvQWc80z9TPjtNV2trl8vNVA2sf6jZtSK9WZGDiZ8lm9mIRXGROxzufJIoO8vmE5WPWN8anv8a7QLy/vJK7armdtqW0Yb9jxA7H68cEyK3K5NAX2cTlWvjLEe4r6kH1VC9gGWeNaWtinlbhQj8sGhQi+3DliNfZyxPKB8kjzUfKo8SyvBXES8y90PLPYdWg1PHc5uu2ArAdVTdETiNcsGOdZGNbFUrPMBAU6fkX3kPTrM+MzyjPd83SxiC9X8JJx0fIlMiO0bPhPPtGHBs68lDZXg1lFl5lS0EuOQsv7IXd3dQh0zvVadF/x0+++8GvworCQMgN1PbvFBqTPMxSCl+4YFNRgDcMF0T4luP33Rjb29lCzsq7bLo2utW9FcS61nX8MiOgRspYqV8fVgc8HBv1/z/tguwb617kJdONvYe+Yb+zxarbof4WKhBI7lbQXPxMzC7SCwH1Ke0/6c7mINQfu/a0QrX6uQLNdfYMJaNEEVXCWL5FsSLpBqv2WPNx84TpBdB5u6a7scFr1MD8oyhRRzdT+Vb2RfMkrwnO/hn+lvzX6r/MgrVDty3A8ddiA6cuzkUIUGFR/TU2FQsDLP+X+nzu5da4tuSvnLMRxXDnRxhVPN9KLk5WQwwjIRALBk4INP/d5yTGZbD0szvB3d9mDRcz6EXHS3NLqi+sFpQLdwkGCBL1QNO1s7+tVLXpym712CC3Oa5D7EPxPfUghBAAC/EIKv9H5r/D2Kx6rJy4sNJ4/LQkuToXQgBD8z5xJUwYyhNpFPwLiO91zYWyCKvcssrF7OqfF2YwYD+gQAhAxzekJjAfAR+HGd4MCO4LzECzjqg6sI7BKeLkCQwosTaiOq460T6rMgopwSWLJgwiHBWL+MnVxbnlqamsJ7nX0NHyuRLUKBYyZzKENOA2IzRNKdMlRyU3IaUWYQPQ5trI47I8pzypx7TSycnoiglzHnssTzHhMj0zkDVyOnQwECwkLGgsuSdxG54EyenUzdy4+atopY6rYLiezWTpHQTHGS8mASwMLsgsJS3+MDk7XTejM9o0MTUCMjMv2SWNFaf+tOV2zHm4vK1Np3um3a6evBTOkOQ+++gORRrWIZol7yRoI8olxSeoLjA4BjpyNyo3xDhKOJs29TGMKnEdQQs19uXe0MrEu9+vYakXpKuhWaiYsTO/5M+i49L1vAMUERsbjyA1Il0hdx8bH3kgJyZZLV81Fj8iRNVDoEVDReJE1kNgQSA8YzQdKU8beAdb9gLjdtFYwdW0zqz2p+CjRqETn6Olsa2quFjHF9b/4nTx6f6GCDwRchWlGVIbARxEHsUd1SC/JgErbDPDOpNFRkzjSqFLHUvCSQZKMkmORd4/uDQrKcEZ+wZ483Le8MvxvaWxrqq2pV2hf58gnpikLa4guxnMktt26rP5lQGLCawPyBP6FVEWDBjxFzcc+iSwLVw5uUVyUg9TzVINVLdS3k+mSxREVDgiJ00SB/vT4E7KirlzrDikzJ4jnNWam6IpslnEStgN7tn9HglMDv0QKhOCEV0TlBhRH2UtGUFWUqBWmFUgVExR3ku7QYouoRL49UDaO8EYsW+m/p80nY6hRLQry+rf2vQ9AgYKNwtOCx4M7BJYIGM3+U0EXCpbUVgpUu1E8StVCYbkT8UbsXGjop5DnL+js70w2/rwnv3AAYECGwP2DBkfOjpKVhhiYl+5WMBKJS8zBNnXrbdpptSf457ypNHBw95m9Ef+EwCuAK8LvSMqRF5gCWefYNVRaTQKClDbiLlCqMWiDKJ7tKDTh+lt7+Dw//RrCKUroVB6a1RopFyEQskSsN7ZuiyqH6a2po+979pR6wvrs+7J/U8gH0zMaG5qVF6LP6cNCNnBuj6uUqscq/jKZd4W30vgIOxfDf89U2NxbEFfcj9fCnDXq71ftTe1RbZx0Rbbftqg4DD6FCc0VodvgmY0SVgXOOBdwUS4pLhNs8PIe9UH1hzclPVnJyVXN2+hZTBG9gsD2Om+bbneudCuBMQFyn7NKN1fBCA6imGdb2ZhrTg1AFPUjcPywfi8grXSwHW+XcHf2LkNw0PxZLNp5VBqHQvqbM5GxhHFv72bvFDC/MVU1ZH6SzOjXMFtJGoKShMZVexB2TPUP9Awwsq+1r3qv5fMpPIAK7lXa2rQZQtHzhaY8A/h4OAt3KXKzrqevrvAdM2s7wYl5E60ZFxsclWyK2j+tOaw3wTd1NgAxNq0RrjHutbKW+9lJfRNX2CrZu5Way6zAmbpi+LE4+Hfe868s5awQrPNuuHQCPmTJndKgl0JZIRYojgtGH39bfR08B/x5uC2x8+swq3krZe4D89n+i0jm0UEVy5eF10hRQskOwmm97XzMfVE87PlpMwUr5yqZqtgtFLFxOEHBTgp20PYU4tZ71uMRkAsaRVFCisHAAvZCiECzO7h12684q1IrnSx7Lh5yiDorQzVKRRBk06cVOVWVVOgQHApeRbcDMMFnQCc/lL5PfD+3ffIlrNOqQ+qMq97uk3J0dou+sEZKjITQ95MqFHKT09QK0sfOFMmDRsOEsYPrw3rD50NnQbS+SLmic8NvAqtPazSrl+1Br33yunekfpjFPgr9DolQmtIr0t5TJ9NcUosPNUqhBvOE6wMBwukC1oJawZaAC/23uqV2Y7GBbaRqnGo8qxEsla6Y8Yb267y+gi8IOoyWjugQvZGU0ZhRCVDOUaeOywrOh8dE80KKwlmCHkHDwQGAbH8QvEa40vVt8hPu9+vRq5RsGW2nL7+ysHcYvIoCDweVi+LOQ0/GETDRSNGEkXpRsY6RCx0JfMgFh3sHDUaSRdOEXsF3fjY49rNcLzwsE+peKs/sMC3ksTM2FTzhQofIGAw9jiQPbBB0kFQQpBDejlTLQ4ihB89IOwd5B1dEo8Fiu9z2NHF8LPQqLGqubAPvAnOveaFAdIUnSPSLI4tkS44Mi01TTJDJzklIiclI/khzxUGA1DrZc0GubCrSKeMr767AtRL8ckNYySDMHozijBXL181zS+8KNglYyUuH8EUMwGV5YLHFrSxp3mpTLS4yrLrFAsSII8qQiyrLkkxijqIM8sx+TEKLFIckP4K2ee6wapvp1m0v8788XEQAyEIKPssAzDKPFA5gDgdOQ407SIbAevTZbZDqYqvlstW80sUhSYWKEUq1S88PtE9DjhbMxomFQEP1bez+KY1qJS+Q+aXDNodWyD0IvQt1EGlP6k+XjR5Fm3oqMFHrV2lLbsP4rIHUB5ZJIgllzE7R/RFKUTiNisUZOHzu1qrO6y/zHH0EQxNF0AWtB+cOlxEwURuOMIaZuejuoGqWagsxxHynwgzD4EPEB70PgVLykiqOtAR1du/tv2p96wW0fT13wWECt4SZyt/T/tR6UsbM5IBH8o1rGemdbmC4cP+EgS4Bg8Xlj3xV+hTFkMkGNzavLdxq+mpTs9H9BYAmPtwCDEoe1C8WSFQMDIZ+QzH+bChqou1xdjb7132qvf/CkY1XFsEWlJKbyEj5jy7+61Hrcq8reGT8m72m/6AF0VF9GJNYOdPDiVS6Pq7Bq/NrNiyxdKR5JLlzundA0QyUlgcZPZY0DjcAgjSNblMsdqxk8A810req97j51sGdzhpXFFmqFrZPL4Gv9juvbG1ULJQshLMm9fY2Bre3+/uFm1FBmRnaTtcPj7cDGLf4sMjugy6FLnExOHR9NQF2VXi2v6FKXRQnWZ7al5cJD4QDSvieceNvaC7ibvBtpPHDNCz0tDU+97Z+LAg50e+YFBuPmjeU4wzxAfl4ibMHcNzw2XBk7vHuSPCKsfsx6HLrNgY8akXnjxwWJppRG9dZFlPQi4OCLLnKNWczTfLqckHyOS/mbmSvzrBBMHmwpzK9dp58vcYbTpeVrBmKW8XazhcV0bDJdUBYehd1VzKBMYHySrKJ8exwRSy+7fquju8+rz3vlLFjdTO6jYMJyxdR4NbpGhub61wOGaIVs0+1yNcCFHvCt9S1T3QE85Uz/rNq8jqv+60pq/Vshu1FLjAtU64Wr+Jy9HdQfc4FNItakJZVEVhUmlgbsBp1VzeSUI1Wx7bDBz6feqe4Vbdj92e3qjdVtrO0TPHpbvprVuwWbHcsIOwkbKbtUK9bcki26HzSxBYLCxEI1VWYcJoPmxlbTVjRVRNQQMqlRIu//3uDepm5dvhauFE4FHfMttb0aDGHLXFrQmxq69FsSKx8rV+v5DNneHT9xwSlC8jRZJWr2CFZvhpAGhUXPpLtzTdHaYJ9frP8NbrDezH6MDl0+IW2GjJMbf/qtaqAas6rQyxBLgFyPje4v7uH6c8X085XLFilGV7YuBQVTgQHowE+vQh6qLouulg6K7jzNkwyMq1zKk6qyCtZ7K8vUjRcO1tEhIy9khXVhBePmGSWlxEvyiMDUL9yPdi+Kb39vIJ58DSZLphqhCpWqumslPED+LICJ8taUarVIhaB12tSi0uQRT3BHL9fv3H+rbzmNwqwKOnrafRq4C60tMW/Vwmf0VOVaha/FvZSrgszRQ5B3ED2P/B9J3g9MJ2pymmlqtTvCbg0Q6GNpxLMFPwVYlL8y0TFesICQj8BCb1R9j1tfikvqlTuObXkgeGMFtHjE8CUX5FlSdOFDEPQA7tBCvrxMURqAanZLGhyTT3RySPP3VJCUvsPyYiOxQbFE0QvP/x3vC3BKP9qZe7NuEMFGM2I0TJRXhGWCyzG5ca9BpdCpzkeb31pCWrK77w5U8VxTHvPLM/JEBaJ6sceh0SGWkDpdvptIylRLBSzH79ZiZBOfI7zTveNeIlzyCkHvkOae0kwwSqRKm9vP7kfhXGMlw6pThSPPouAihBJ68gYwdt2Zq1qKY6tBfV4gURKQw1XjXSNtc8RjCBLgUpSxbg8B3G+6zCpxe4QN14CtElaizZLS001TeoM5Azry1UFlTtfsXIrQSqN76t4psMaCQnK0croS7+Oz41UTTGMB4fT/sV0Ni0dap9swbPofZ4FLYhOyQoJz8w7TyYOmY71DUvJCT+8dNluSytP7ARyO/sSQ2hHVAj2iJRKAw1rj5JPz89fDM9HWT3d9C7to2sq6pEvdPa/PtvEQwZqBqzGkckrzaqPXs/Mj6kMxcfafzY2K+91rCAqnGtPcBz3I31YgZ/C94NwA22FxkskED9QbZCZz/1NZcg4wJj4KnDe7VlrSusuLdJzyLroADsDbISQhG/FGsWPyO+NS9JAkjJR4tFBj73LRwSj/Xq1zbC47Vjr4ms2bFBwnjad+1L+d0AcgXcBjkIbg9QHCEqVD2HTd1NN038SIhDLzYPIZgISOit0k7BubbUsQOuV62ztLPDpNhz50L0Svuk/G8ApwJXAgMJ0BCKIEIyS0NxUmZQQ07ITPJJgENdNPsc4ARk7f/Y0MYFvMqyTK5erYKt9LB1vdvNSuCT6/n1wvuj/9AAEgO2AwsHWgxPG5Ao0jkySP9VEFY0VSpSLk08RPE26iXIEb33hOE7zVLAIrdTryCu5qtUqSephrZXxs3TVeRE9DH5w/v0//3/fAATAqkIfxMyHS0vBUBvT4hbb1q6WcBWf07sRSI1ux74BJTnO9FnwMK0drC9qwus36xxrE25U8vY2nXpzPCr82jzCvPE9W/73gM2EDUghTTHS69Zh16xW59VUE1dQeEtBxNL83HaEclIv9y4r7KMr4mvx7QlyAba8uJ75Obn2emi6yzxUf2vElcruUhFXZFlPGNmXiFTGz8LHdP34tUfwYixP601qjeq366zxTjYhN8j4bnlXeTU6yr8LBTgNXNTe2b/Yf1YVEeRJzUFXuPgyYC82rdjus+6wMv+5hPtQ+8v7F7uJfoWFSs6s1gda1Fo/1t8Q9Ecn/Yl1enBbbpptj+2BsW32fbcpNk321fsXws4Odlbnm6oZWZU5Cup+0/Rl8CHufW3lrOpwdrPGNZy12rlKAK8LmlYFW7AaYBUfCdc9AjNa8ELwwbBmr5X0J/UitTf3fwBKzIhWZ9uK2VRRpEQy97TxI6+EL+3t0y9bMUtxN/QgvYpMfZcI3CsZd5BfgOI2VHGesFLvpivZLsovuLCJt2eEQFH3WfWZn1BPQbZ11XJnsq9xYmyErdjufHDl+SSI4lViGyHZbg5GgIU4djUoNPZw3CyZLdmugbSxASvPbVjD22zSRcNK9q3zI/OY8e6qrGpCa9bwDz1eDx3YU1tKViQJ6r4w+SA5sfZO7cSrf2up7zx6tIuD1kYaPBYNij3/AXtK+x44uHCEa1Yroy8JempKc1TAGWzW4wqLvvG6n7qEeH3wdOkF6jNtRbbJxvsTYBhxWbkQ8wUDfiO9+rwzdqysOGjKKg2v6H30TUsVZZfrFckKksFQvsy/FLsMszdo0qh8KhqxkEAJDjkUpRcqlVNLA0LeQTMBSL+kdvxsUOgk6U9v+nw8yX2SB9WQlgCQDYeLw5mC+EJnPkh04Kor52Ppz/BTvIBJxFHSVNKVKtM0StuEz8PDQ6JA/jmd72InyeexKhcxVT2qCgjRT9QUFJHUjA2OSD9GVcbRhdhAq/csLTknGaem6s5yHPxnh1zPTBK704wUNVFrTFuJ5UlGSRAGbgD7eDeuZ2i2p0Zp8W8zeA0DmwxmULHSKxKe0liR2A0yyvGJ6UnpCQrGQD9p9q7u3amZ58Rp/a11tF39kEZtC6LN7o59zqvP0tEMTSMKjcpxyntJlQcEg1V7UnPcbUEpD2cQ6IFryjFM+K6BhcdUy1/N3E5VzqAOqw/4DjQLN4qaypCKUwm+xyoDfT13NobwCqtMaP1oPmoVrZwynTmxgPzHBYuWzRsOOM1ljaOOYw+bzuDNU0zFTMEMnMwKiZdFxMCPOhizIi5r6vYo2Cjp6wSus7O5OYPAsISSCFOKKIsXSr0K/QtCTSlO8k1bjINM1czNTTLLRgiVBL0+xfhi8oIuWCt9KVFqFyyUcAe1hDwYgZZFosjRivPK2UsCS33MQY5xECtPu458jjQN+Uy9itQGssC0OSLyeK3ba0ep1en8bCjwULZ4vQ7CRwbASDNISoiNiMpJhgwEj0SPHg6Izt7Ossz5CXxEpb1Ztg6wUizwqxCq8O4gM2A5tf/NRMMHH8fjR2XHVYiaS8BQRM/jD3oPLg3yCmWEavxL9OeuzqwbKq7roG/lNnr9WYKsxLZFVAWKxztJjA6UkTGQ6RC7TqiK0IOvubLx361Y67aq+C87dnJ9sUHkRCJEV8VVBtkMLRGHkY5RJY9RSuGCZvehcHTsQKthLPHzfTqEwAXB8QHeA1/HH42uUnLSTxEPTSiEvDmv8TDtLSumbao0p3yIAFpBSIGlA9bKBpHzEtqSD44fhfm6I3GbLfdspm+S+Hw+ukElQR/CNEeCj/1T+NLajsDF6rjQsEDtMiw27sK3IHwMPaY90AIACoaTNlRFknILsj9YNLcvCy2ZrnV2RbyhvUR968HaSodTn1U7kjqJ8nw7ckButa37MGp3/PtpOzz9akT+T5IWexSwjwWDf3ansS5v0+/79xc7Trv1/LSDX86Mll2Vo5BwhBB3OjC8b5uvjvSD+EK5J3n4gTtNUBYbVdgPucK9deLwme/m76gzsDXR9nJ5OoHBD1pW2VaSj9SCK/a18iKxH/Cws311krWpOOmDuBBI15MXBM+rgaH2TLKQsnBw1fHmc2Oz3vdiwpVQNlcwF5QRHIS1+TL0ZfQtstkwzPNbs5S2Gf8OzImV59lZ1DVICXtDdMzz+rOMMBlv+/BSsdQ3UoPgEO0XTFkM02jHUnwrNr02HPUO8PevLG+asG013sEKTymXPtnxln1M04GvOzs5YvmSdq5vQi517mUwEDauQ3IPuhapGWrWfI2eg0Q8+fpa+Vr3XfGPLF7sGayU7+34b4WuUQMXHllilkAOb4QBPVa64LqLuYR1fe2DKvNqmKvIsIe5x8Zs0MlW2ZkcGTJSd0naAgL+eDyXvCS6FbW4LnbpuClJatltlrU5gGFLWVNn11bY3xlQ01FLisPN/0r+2v6K/WS6KzSTLZCoDyh0qM0rAi/LuJiDOIyIUwSWl1fymCDVOY5OyCODa0FtgOtACT+UPQf4VjHC6wEnkuc/Z76puG2ZNOj9qYX/jPbSEVUzVeBWVlV7zulJOYTGgpqAS8CzQPXABH2VOaszk62q6APmBeZ/Z1sp/+4LtCe74YRmi+jQcJPb1dLW95Z5lmRUM45BSf6GIgPxgrWCiMOCQyzA8b5F+jJ0eW9zKikmTiZy5sUovOuOMC219X0khPMKnY9NU3wVK9VZ1YIV11SXkjZM/kgcxXADp0O7A67DzQRGAqfAHDxZNfpwUysF5z+kf6TvpjMoLWtpcMO3W38Xhn1MaNFVE4+VG9WgVZUVhNYJ0ecNHIiZxtgGBgWrxZMFoMKRQAl74DZQsCpqD6a+I/4kYiZ46aHuFzScvHfEpYq3TsHSPVMbkpkSupM0k5FPH8uBCgIJfcj3CUeIlwSUf/U5gzNGbMTnxuSzpMOmn2pYMLL4lADBx1wM3NDi0rDTr1PJ1FZSuM8SzdkMzsvfioeIf0J/OtmypeuJZyLkxeaeqfRvlrkPQu6KjM6lD+tQDFBVUdMSRI+zDtqOKQ1gipmFYLyKso8qiaY+JFInJKwwNfV/Lwa2Sx3NMk0yDr0RVBBizsEPYg7RTAqFA/sZb8noveVKZwRsCrXsACEHqgt4TEVMow3qEHrO7I4DTXTJpMIi91Qt8Khc5j2pgTK/PVPFxYkqiYoJ3Ax/kJQQAo9CDa1Id37+sqGqxeeJ6TPwkbvDRVIJHsnISvYO7NN9khXRuU8HiMR7/u/5qcpnvW0Z+NAC78ZVBd+G0Qtuki/TDNL7jzuE3ndJbYZpjCmh8WT6rEGDg2fEDYfVz+8SZVLvj2SGzXhirdRp5ajYsC76pcAbglZC/ccUj4rTAJKszewD9PWqrTGqXSsidB49WIHWwsyFW4tak55UPBJ4DBU/cPMS7RVrDjA4+WS/l0BgwSeGKY3X1BvTR46sRAA2iy7a6+RraPOIO0W9Kf02/+6If5JzU+4RoEpy/L/yIq6y7ZGxjji++6T73v0aA6gNzNSiU64OS8Rc9/swwi8W7oj0tfnh+y48HD85SBuRMxTlUsmMl0DRtmOxBu/h79g1QTmh+wG7rv71hwYQIxTtEtDNU8MHt9zyXfDOcPayzjdI+EV4gzoswLRKn1JTlElRHEoGf3/2xPPTMzuyx3Q/ts83pnd2ub//rYmD0UQUqBIni+PC67lV9GOy8bJxMgR0XHb7N/R317ssAhVLXxHaVNZTp08fBuO+77ldNsA2J/WR85U1I/Z5dxg3g/rJQfeKQVDMVAtUeVEnipRCXvsy9oa1zHY69YC0YTSC9VC177XZuOF9scTuTDvQrNMHU3pPPkkQwUh7WDg5Np6233aBtbvzDXOH9CtzxHQE9if6mwK9ia5OxNIiE60TDtAAi1kE1P58equ4+Tj9OLS3ZvU+8ecxqnIJMlizR3S7uCX9iIToCv1O0FGsksjSos8FiowE8P+fvMx65LpLOkJ6zHqyeCa1XPLjMpHy9XLiM9Q2C7q1P5DFesqIDuVRUlL5U5dSoY8qir2F4gGivw/9z30YvRp9JXwHut935bQWsZoxuzGDcd6yifTpOEt9N0LPyQzNOg+A0abSb9KYkDDMVgfQA0O/u3yAe9K7abv8OwB6K/fRtKaxVq+lL3Lvsa/AsSJzTHa4vI6DGIjSzaXQJNH1EoXSyZDGTE5IDgOjAGK+0b4GPqw+qr4vvC94obQkMDturG7nrxWwhPLLty08mgQMCiTOCZDkEj5StxLF0BQLxkd4g5QB3UDBgUIApj7Ye+m3nvKG7nettq3jbvsxaLZCvR+ECMqEzsfREhI8ElgQiYvqR04EW4JBwbrBkcCzfTz3s7JN7detFa3LsBEz2npbws2KoU6REL/RGlGgDg5IWwPXQaQA0EAxvi46JfRr7uurkexc7jdx6zlRQtyKVg5BkEiQzBDdy48HYgVghUvFK8JqvM81Ky53bEFufvJ+emzEZ4wjD5dQVdBUzuaJVMZ2xX3EwcHde7uzQ20m60GtZbJbe0tFk8vzDdROXw8SylxHpocXxpfCdDpVMSCrmGuCrut204HGSdRNLk1Rjd0KK0eqx3FGNsG4t5WvCOrwLPNzZP6diHfMJ8ydDVAMSQm6iVZICsJU95Tu52qBLaI1vcDvSERLmUu3jWOLkwrTyqqGLPyqMYQr1yykc4F/N4dkidKJ0swRy/0LNEq6hTd6XPABa6+t+rZugaFH+kipCWeNb8wZy8fJLj/c8+ls7WtO8Ve8e0U/R4sIEQuPjkKOKswsROi3t66Ea8qwIXqdg6vGZAbrSfoPEo7jzVrGb7l4b+xssi+Q+f3ClgWyhacJNw+wz0mN7MbP+mWwZ20tr2P4ywEHg4zDywe1DvvPsg3kRs857zCGbb4upLeTv6qB88JnRnEOIZCPT0dJaj03cq2u9+4qtdR+p0GigfaEt0ubEVZQawwhAg42MLB+ryPyinr4PpF/ooDEBthPQtGjD2SI+H2KdJPxODB69QE77n50vmAAm8dFD5CRac8RSLM9QXSX8QNw/jNhOac8GDx4PYEDosxrEaSQbwvbQkk4a7LhcYGxvzTZuUU6Wfpv/M6DscvF0UdQKQvEA6C6BzTest5y9HO++EF6m3q0e6m/yYdFzkvRtY/yy48DvDsmNcA0G/PIs7Q2xjmOuig6oTy3Qk/KMU9xUWJPnssfQ9p8LHdlNcS14/VZNby4LrjF+Mp5/z1Tw3PKNE7n0M6POYt9BKL9j/iFNqB1ojVmNLy1EDap9ty2/XfL+ytA3seOzPqPQ8/hjZEJDgNdfcG6XLhR94c34Dc5NRZ3FneJ97Q35PnOvYdC3wgpzH7OzFAjznXLDkZ3wLY8ETo+ONA4RLfj925143XJdqz25ncvODT6pb6bg16IfwvaTgpPLU49S5VHr4KTPqP7THm6+Of5NfjUeEa223WT9is1zjZ9NvW4ALrWflmDgogJSyUNBQ4Uza1Lp0iSBNYBJL4tfKr7z3v4e0y6mbkYdyo1qTWm9Zb1wXaD+BT6yz7eA1yHpwq1TDqM7IzaCuoHswPcwHG9pTwse9n8GLxpu8O63PiytiD2ZzZLdlc2yvgy+qX+sIMmRwgKPktczEyMiIqzh2uDswBfPg/9Drz1fJH85Lw7+lI387XG9gv2EXaL9+/50v3YAhMGjclECzGLpEvHycGHGcOrQQZ/YX8jft7+v32i+4f4jLZ8di02WbcH+N08DwDHBb2IhYpwSuwLBQkkBaeCMj/svw9+y375Pdw7+HjIdlE2hvbk9+m6iT85A+KH8smgSmxKZAjzRTlCFgAMv+9/uj9N/bp6FDbn9c42QLfCOuw/XAROR+6JUkozideGoUNHAY+BcoGzwM9+ELnIdk82AHcUuU99/kM1RvuI3MlIyafGGMMhAbaBawDdPy/7sPe89Yp23Tknvb0DS8d7CM6JOMj/haLC3cJJwovBYz3NuTj1sXYneBd8iIJphliIB0hXSC0ExwMsQtPC4wCRe/Z3JjWZ9xb6vgBwRSjHHgdhx+pFWgOFA0CC2X/C+zf2nHWjdwJ7rwHLRjsHCQesR6tFacTvBH3CVf2huDA1VHar+hNAacUrhvTHPwenBcwFnoUdAzB+DjhAtah2SvoZAC0D70TnBSrGHMSIBH2DvQELO+k3DTVNtzg7dQGwxMbFlUWMhuaFh4WNxDyAOHm7NjJ1lricvmcCzARXhKlFRcYOxajEygI8O/93bHWN9vY7JEDERCgE00UIB2IHF0bGBddBHfrA9yz1nDiuvf2CPgOTQ6LFNceMR5LHRcUWf9Y5j7b2tmC6fX9iQhNCTULbxLJHcYcHBo5DZ/1i+Hg2fHYL+jy+8wGuQcjCRoRKCAnH9EcjBFD/IfmO9zc2KfgCvG3/+oDUAN7B+YVQh9fHz0bZQ6e9mXj9Nvo2fnjd/VWAKYDKAJ4B48VGyKsIbAdzBKu/aLoLt9b3JHenOyE+YD/gf3y/hAG0RX2IashkR1iEi39f+sk4eTdPd3l55f0LPxj/Yj+YQOTDSgcXCSGItAdQxFs/g7sN+GG3b/cVd+J6vDyiPeJ9i35vwCnDcUbhiX9I48g8RZRCHb01ueL4G/enN6r4l3slfOB96H4jfiN/9cI0BVLINkl6yQ0IGgYUQsF+i/uFeY/43/ikuLd56TuzPPL9Gv0ofRK+O3+OwptF7Qh3CQ3I9YexRcODS0BsvQR7NbmvuQg5HbkmOiX7znzjPXD9a32zPmU/6QHExEwGnQhfyX2I/kgQxvnEY4GX/mS8MPqJOhG5+jmm+Ya5U/pke/F8FryM/IE8131e/pXAl4L7BM5HQki4SQaIzQgMRrnETsHqPwR8jfswOgo55bmf+fK5pnlGegt7HXuv+7L7ibvtO4b8jL4EgB2CfwSDRtYIBQjyyEIH9MZrhEGCfj+g/bh8IntxOtC69jqB+v96Ufojux+7nPvJ/Aa8PXxWfXb+FoA6wjiEUoZTB6xIQ0iXB90G9kUJAuKAIX4h/J37rXtFO4s7tPt+OwI67vtVvBs8KzvO/AR8k72Xf1+Bl4QQBdYHGkfqh/RHNAXHhCIBl79MPbf8tvwr/FJ8Uzw/O3965ntwu5a7pnvqPAl9VD8fwZrEKAXEhwEHl4bxxWeDcUDhvqL9Rvzw/L+8nLyv/AL7R3ve+/E7v/vCvN3+mMEVA63FekZ0xv1F70QNAbE/ND2VvQs9AX0pfKj7o3sl+1H7vnvz/M0/MoHkhFjFyoaaBkrE8wJLAB0+hj4mvfK9+L0RO+Y7gjvRvDx83j8AQlQEjkXKBneFpAOiwQR/Uv5g/h5+PP0au7e7FftBe/c9GIA5wylE9wWuBa0D/oF0v62+y/7nvny9KztRe0N7vfx+vpdCGkR8BTaFVYP4QUh/8P8yfzC+rv0+O017nTwOvY2Ak4NwhL2E9QQswfVADP+1P58/Iv1Ge6u7g7xsPgCBYcOPhLgErUNGwWxAM7/jf5e+Q/x/e2J7yT1/v9vCpoP8xDTDc8FdwH5AJj/gPos8sLuR/Cm9eEAdwqDDv4OwQqdAzYBugDq/hz4bPA/7zXyMPrDBT4MJQ4hDuQHjQOSAr8Byfw59E7v0vBU9roAlQmfDPUM1grVBYgEhwSSAGT4bvEA8bb0ov39Bj8LrgsRDBYHeAQbBOAB2/qE86fwCPOj+aQDbgmbCrAKhQioBVMFKQQF/872uPFH8nT2cv9xBkUJZQkUCmYH4QZmBs0Djvx89SPyYPQb+i0CzAYZCBYI4AhkBmcGugUdAqP67fTg8ln1X/uOAkIGCgf1Bp4I2garBgIGkQIP/Ej22PNQ9RP6qwDYBAQGHQYhB7QHEwecBvwEKQAR+uX1aPSU9j/7xAALBKkE4gTrBSoH4Qa3BlYFegHO+433vvVl9vP5IP/5AkYEOgSDBFQGKwcMB78GqwSVAJD7Gvid9r72dPnM/VsBcgPiA/QD9wT/BjAHMwenBqMEtQAB/Pr4ofdk93/5z/zh/8ABHwIvArMCeQSbBokGSgacBccDUACG/N35kPgj+DP5/fvQ/t4AwgHlAQQCtwJcBEAGNAYeBnkFEARqATv+c/v6+Vr5KPld+oH8s/5KALQA+wDsAI0BtgKjBL0FtwVsBdAEbQMzAX3+Xfz++mf6N/qj+jb8Cf6A/zQAZABdAHsAGwFVAs4DCgUEBdwEbQSMAwwC7f/q/ZD8vvtp+077vPsb/Xf+e/8IABsAAQAFAHUAOgFWApcDPQQzBPcDhgOUAjYBiv8S/gT9mvxP/Ej8TfxW/VP+Hv+a/9L/wv/V/w0AoQBbAWcCQgNxA1gDIgOlAt0BwgCE/3r+yf13/Vf9Uf19/SP+1/5m/7j/3f/l/wQAPwC+AHABEwKEAnICQwL7AXkBygDr/y//qf5t/l7+Xv5n/sf+Mf92/5//qP+j/77/AABnAOAAQAF7AWMBQgEJAacAMwDB/3j/WP9R/1j/Xf+J/8H/3f/g/+H/6f/8/x4ARQBjAG4AYwBSADoAIAAMAAQABwA=`}],In={head_burst:`decapitation`,eye_left:`jaw_dislocation`,eye_right:`jaw_dislocation`,ribs_left:`shoulder_left`,ribs_right:`shoulder_right`},Ln={duration:1.1,first:[330,420],second:[760,880],gain:.16},Rn={duration:1.2,first:[520,360],second:[980,720],gain:.13},zn={duration:1.3,first:[300,280],second:[640,600],gain:.11,delay:.75},Bn=2.5,Vn=20,Hn=.05,Un=2e4,Wn=650,Gn=[`pointerdown`,`pointerup`,`touchend`,`click`,`keydown`],Kn={jab:{from:520,to:1500,duration:.09},straight:{from:420,to:1150,duration:.12},hook:{from:300,to:880,duration:.14},uppercut:{from:240,to:820,duration:.15}};function qn(e){return Math.round(14+(1-Math.max(0,Math.min(1,e)))*22)}var Jn=class{settings;context=null;master=null;noiseBuffer=null;injuryBuffers=new Map;crowdGain=null;unlocked=!1;unlockPromise=null;crowdStarted=!1;destroyed=!1;timers=new Set;lastBreathTick=-300;lastHeartbeatTick=-300;clapperRound=0;murmurGain=null;murmurLevel=0;lastOohAt=-1/0;lastChantAt=-1/0;muffle=null;rockedLevel=0;lastRockedBeat=-300;lastTick=-1;unlockListener=()=>{let e=this.context;e!==null&&e.state!==`running`&&e.resume().catch(()=>void 0),this.unlock().catch(()=>void 0)};visibility=()=>{let e=this.context;if(e===null)return;let t=document.hidden?e.suspend():this.unlocked?e.resume():null;t!==null&&t.catch(()=>void 0)};constructor(e){this.settings=e;for(let e of Gn)window.addEventListener(e,this.unlockListener);document.addEventListener(`visibilitychange`,this.visibility)}unlock(){return this.destroyed||this.unlocked?Promise.resolve():(this.unlockPromise===null&&(this.unlockPromise=this.performUnlock().finally(()=>{this.unlockPromise=null})),this.unlockPromise)}async performUnlock(){let e=this.context;if(e===null){e=new AudioContext;let t=e.createGain();t.gain.value=Math.min(.8,Math.max(0,this.settings().volume));let n=e.createBiquadFilter();n.type=`lowpass`,n.frequency.value=Un,n.Q.value=.7,t.connect(n).connect(e.destination),this.context=e,this.master=t,this.muffle=n}if(e.state===`suspended`&&await e.resume(),this.destroyed||this.context!==e)return;let t=await this.decodeInjuryBuffers(e);if(!(this.destroyed||this.context!==e)){this.injuryBuffers=t,this.unlocked=!0;for(let e of Gn)window.removeEventListener(e,this.unlockListener);this.crowdStarted||(this.crowdStarted=!0,this.crowdBed())}}setVolume(){this.master!==null&&(this.master.gain.value=Math.min(.8,Math.max(0,this.settings().volume)))}event(e,t=!1){if(this.unlocked)switch(e.kind){case`punch_start`:this.whoosh(e.detail.split(`:`)[1]??`jab`,t);break;case`whiff`:this.noise({duration:.11,frequency:850,sweepTo:320,gain:.07,type:`bandpass`,q:1.1});break;case`hit`:case`counter_hit`:{let n=e.detail.endsWith(`body`),r=Math.min(1,e.amount/260),i=Math.min(.36,.14+r*.2)*(e.kind===`counter_hit`?1.25:1);this.impact(i,n,r,t),(e.kind===`counter_hit`||r>.7||t)&&this.crowdSwell(.35+r*.4),(e.kind===`counter_hit`&&e.amount>=50||e.amount>=90)&&this.ooh(Math.min(1,e.amount/160));break}case`referee_hit`:{let t=Math.min(1,e.amount/260);this.impact(Math.min(.36,.16+t*.2),e.detail.endsWith(`body`),t),this.ooh(.7+t*.3),this.crowdSwell(.5+t*.3);break}case`referee_down`:this.impact(.36,!1,1),this.crowdRoar(1),this.ooh(1);break;case`block`:this.noise({duration:.045,frequency:1200,sweepTo:600,gain:.14,type:`bandpass`,q:1.1}),this.noise({duration:.09,frequency:260,gain:.08}),this.tone({from:160,to:110,duration:.06,type:`triangle`,gain:.05}),t&&this.tone({from:96,to:44,duration:.2,type:`sine`,gain:.2});break;case`perfect_block`:this.noise({duration:.05,frequency:1800,sweepTo:900,gain:.16,type:`bandpass`,q:1.6}),this.tone({from:280,to:210,duration:.06,type:`triangle`,gain:.06});break;case`guard_break`:this.impact(.3,!1,.9),this.tone({from:230,to:78,duration:.2,type:`sawtooth`,gain:.08}),this.crowdSwell(.5),this.ooh(.6);break;case`stun`:this.tone({from:96,to:74,duration:.22,type:`sine`,gain:.1}),this.crowdSwell(.3);break;case`parry`:this.noise({duration:.06,frequency:2400,sweepTo:1100,gain:.18,type:`bandpass`,q:1.8}),this.tone({from:330,to:180,duration:.09,type:`triangle`,gain:.07}),this.crowdSwell(.35);break;case`body_collapse`:this.tone({from:118,to:52,duration:.42,type:`sine`,gain:.16}),this.noise({duration:.26,frequency:420,sweepTo:180,gain:.05,type:`bandpass`,q:.9}),this.crowdSwell(.6);break;case`eye_shut`:this.crowdSwell(.25);break;case`corner`:this.noise({duration:.22,frequency:2600,sweepTo:1500,gain:.05,type:`bandpass`,q:.8});break;case`knockdown`:this.impact(.34,!1,1),this.tone({from:60,to:28,duration:.42,type:`sine`,gain:.3}),this.noise({duration:.3,frequency:140,gain:.24}),this.crowdRoar(1),this.hush();break;case`bell`:{let t=e.detail===`round_start`?3:1;for(let e=0;e10*r||this.clapperRound===t||(this.clapperRound=t,!this.unlocked))return;this.noise({duration:.05,frequency:2600,gain:.42,type:`bandpass`,q:1.4}),this.noise({duration:.09,frequency:700,gain:.18,type:`bandpass`,q:.8});let i=window.setTimeout(()=>{this.timers.delete(i),this.noise({duration:.05,frequency:2400,gain:.4,type:`bandpass`,q:1.4}),this.noise({duration:.09,frequency:660,gain:.16,type:`bandpass`,q:.8})},120);this.timers.add(i)}chant(){let e=this.context;if(!(!this.unlocked||e===null||e.currentTime-this.lastChantAtthis.murmurLevel;this.murmurLevel=r,n.gain.setTargetAtTime(r*Hn,t.currentTime,i?.3:.8)}rocked(e,t){this.follow(t);let n=this.context,r=this.muffle;if(!this.unlocked||n===null||r===null)return;let i=Math.max(0,Math.min(1,e));if(Math.abs(i-this.rockedLevel)>=.02||i===0&&this.rockedLevel!==0){let e=i>this.rockedLevel;this.rockedLevel=i,r.frequency.setTargetAtTime(Un*(Wn/Un)**+i,n.currentTime,e?.05:.9)}i>.15&&t-this.lastRockedBeat>=qn(i)&&(this.lastRockedBeat=t,this.tone({from:58,to:40,duration:.12,type:`sine`,gain:.09+i*.08}),this.tone({from:50,to:36,duration:.14,type:`sine`,gain:.07+i*.06,delay:.16}))}snapshot(e,t,n,r){if(this.follow(e),!this.unlocked)return;let i=1-t/Math.max(1,n);i>.55&&e-this.lastBreathTick>=75&&(this.lastBreathTick=e,this.noise({duration:.18,frequency:420,gain:.045+i*.04})),(i>.72||r>500)&&this.rockedLevel<=.15&&e-this.lastHeartbeatTick>=24&&(this.lastHeartbeatTick=e,this.tone({from:52,duration:.09,type:`sine`,gain:.055}))}result(e){if(this.openMuffle(),!this.unlocked)return;this.crowdSwell(1),this.tone({from:e.winner_id===null?280:520,duration:.45,type:`triangle`,gain:.18});let t=window.setTimeout(()=>{this.timers.delete(t),this.tone({from:650,duration:.5,type:`triangle`,gain:.14})},160);this.timers.add(t)}injury(e){let t=this.context,n=this.master,r=this.injuryBuffers.get(In[e]??e),i=this.settings();if(!this.unlocked||t===null||n===null||i.blood!==`full`||i.reducedMotion||(this.tearing(),r===void 0))return;let a=t.createBufferSource(),o=t.createGain();a.buffer=r,o.gain.value=.2,a.connect(o).connect(n),a.start()}tearing(){this.noise({duration:.09,frequency:2600,sweepTo:700,gain:.22,type:`bandpass`,q:1.6}),this.noise({duration:.4,frequency:900,sweepTo:150,gain:.28,type:`lowpass`,q:6,offset:.35});for(let[e,t]of[.3,.9,1.5].entries())this.noise({duration:.2,frequency:480-e*60,sweepTo:170,gain:.13-e*.03,type:`bandpass`,q:4,delay:t,offset:.2+t})}async decodeInjuryBuffers(e){let t=await Promise.all(Fn.map(async t=>{let n=atob(t.wav),r=new Uint8Array(n.length);for(let e=0;evoid 0)}},Yn=class extends Error{code;reloadRequired;name=`ClientError`;constructor(e,t=!1){super(e),this.code=e,this.reloadRequired=t}};async function Xn(e,t){if(!e.ok)throw new Yn(e.status===429?`rate_limited`:t);if(!(e.headers.get(`content-type`)??``).toLowerCase().startsWith(`application/json`))throw new Yn(t);try{return ye(await e.text())}catch{throw new Yn(t)}}function Zn(e=window.location.search){let t=new URLSearchParams(e).getAll(`instance_id`);if(t.length!==1||!/^[A-Za-z0-9_-]{1,255}$/u.test(t[0]??``))throw new Yn(`invalid_launch`);return t[0]}function Qn(e){if(typeof e==`object`&&e&&`protocol`in e&&e.protocol!==5)throw new Yn(`client_outdated`,!0)}async function $n(e,t){let n=new URL(`/api/hands/bootstrap`,window.location.origin);try{let r=await Xn(await fetch(n,{method:`POST`,credentials:`same-origin`,cache:`no-store`,headers:{"Content-Type":`application/json`},body:JSON.stringify({instance_id:e}),...t===void 0?{}:{signal:t}}),`bootstrap_failed`);return Qn(r),it(r)}catch(e){throw e instanceof Yn?e:e instanceof P?new Yn(`invalid_bootstrap`):new Yn(`bootstrap_failed`)}}async function er(e,t,n){try{return at(await Xn(await fetch(new URL(`/api/hands/token`,window.location.origin),{method:`POST`,credentials:`same-origin`,cache:`no-store`,headers:{"Content-Type":`application/json`},body:JSON.stringify({code:e,state:t}),...n===void 0?{}:{signal:n}}),`token_failed`))}catch(e){throw e instanceof Yn?e:e instanceof P?new Yn(`invalid_token_response`):new Yn(`token_failed`)}}function tr(e){return e instanceof Yn?e.code:e instanceof P?`protocol_error`:`unexpected_error`}var nr=typeof globalThis<`u`?globalThis:typeof window<`u`?window:typeof global<`u`?global:typeof self<`u`?self:{};function rr(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,`default`)?e.default:e}var ir={exports:{}},ar;function or(){return ar?ir.exports:(ar=1,(function(e){var t=Object.prototype.hasOwnProperty,n=`~`;function r(){}Object.create&&(r.prototype=Object.create(null),new r().__proto__||(n=!1));function i(e,t,n){this.fn=e,this.context=t,this.once=n||!1}function a(e,t,r,a,o){if(typeof r!=`function`)throw TypeError(`The listener must be a function`);var s=new i(r,a||e,o),c=n?n+t:t;return e._events[c]?e._events[c].fn?e._events[c]=[e._events[c],s]:e._events[c].push(s):(e._events[c]=s,e._eventsCount++),e}function o(e,t){--e._eventsCount===0?e._events=new r:delete e._events[t]}function s(){this._events=new r,this._eventsCount=0}s.prototype.eventNames=function(){var e=[],r,i;if(this._eventsCount===0)return e;for(i in r=this._events)t.call(r,i)&&e.push(n?i.slice(1):i);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(r)):e},s.prototype.listeners=function(e){var t=n?n+e:e,r=this._events[t];if(!r)return[];if(r.fn)return[r.fn];for(var i=0,a=r.length,o=Array(a);ie;function t(e){}e.assertIs=t;function n(e){throw Error()}e.assertNever=n,e.arrayToEnum=e=>{let t={};for(let n of e)t[n]=n;return t},e.getValidEnumValues=t=>{let n=e.objectKeys(t).filter(e=>typeof t[t[e]]!=`number`),r={};for(let e of n)r[e]=t[e];return e.objectValues(r)},e.objectValues=t=>e.objectKeys(t).map(function(e){return t[e]}),e.objectKeys=typeof Object.keys==`function`?e=>Object.keys(e):e=>{let t=[];for(let n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.push(n);return t},e.find=(e,t)=>{for(let n of e)if(t(n))return n},e.isInteger=typeof Number.isInteger==`function`?e=>Number.isInteger(e):e=>typeof e==`number`&&isFinite(e)&&Math.floor(e)===e;function r(e,t=` | `){return e.map(e=>typeof e==`string`?`'${e}'`:e).join(t)}e.joinValues=r,e.jsonStringifyReplacer=(e,t)=>typeof t==`bigint`?t.toString():t})(cr||={});var lr;(function(e){e.mergeShapes=(e,t)=>({...e,...t})})(lr||={});var z=cr.arrayToEnum([`string`,`nan`,`number`,`integer`,`float`,`boolean`,`date`,`bigint`,`symbol`,`function`,`undefined`,`null`,`array`,`object`,`unknown`,`promise`,`void`,`never`,`map`,`set`]),ur=e=>{switch(typeof e){case`undefined`:return z.undefined;case`string`:return z.string;case`number`:return isNaN(e)?z.nan:z.number;case`boolean`:return z.boolean;case`function`:return z.function;case`bigint`:return z.bigint;case`symbol`:return z.symbol;case`object`:return Array.isArray(e)?z.array:e===null?z.null:e.then&&typeof e.then==`function`&&e.catch&&typeof e.catch==`function`?z.promise:typeof Map<`u`&&e instanceof Map?z.map:typeof Set<`u`&&e instanceof Set?z.set:typeof Date<`u`&&e instanceof Date?z.date:z.object;default:return z.unknown}},B=cr.arrayToEnum([`invalid_type`,`invalid_literal`,`custom`,`invalid_union`,`invalid_union_discriminator`,`invalid_enum_value`,`unrecognized_keys`,`invalid_arguments`,`invalid_return_type`,`invalid_date`,`invalid_string`,`too_small`,`too_big`,`invalid_intersection_types`,`not_multiple_of`,`not_finite`]),dr=e=>JSON.stringify(e,null,2).replace(/"([^"]+)":/g,`$1:`),fr=class e extends Error{constructor(e){super(),this.issues=[],this.addIssue=e=>{this.issues=[...this.issues,e]},this.addIssues=(e=[])=>{this.issues=[...this.issues,...e]};let t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name=`ZodError`,this.issues=e}get errors(){return this.issues}format(e){let t=e||function(e){return e.message},n={_errors:[]},r=e=>{for(let i of e.issues)if(i.code===`invalid_union`)i.unionErrors.map(r);else if(i.code===`invalid_return_type`)r(i.returnTypeError);else if(i.code===`invalid_arguments`)r(i.argumentsError);else if(i.path.length===0)n._errors.push(t(i));else{let e=n,r=0;for(;re.message){let t={},n=[];for(let r of this.issues)r.path.length>0?(t[r.path[0]]=t[r.path[0]]||[],t[r.path[0]].push(e(r))):n.push(e(r));return{formErrors:n,fieldErrors:t}}get formErrors(){return this.flatten()}};fr.create=e=>new fr(e);var pr=(e,t)=>{let n;switch(e.code){case B.invalid_type:n=e.received===z.undefined?`Required`:`Expected ${e.expected}, received ${e.received}`;break;case B.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(e.expected,cr.jsonStringifyReplacer)}`;break;case B.unrecognized_keys:n=`Unrecognized key(s) in object: ${cr.joinValues(e.keys,`, `)}`;break;case B.invalid_union:n=`Invalid input`;break;case B.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${cr.joinValues(e.options)}`;break;case B.invalid_enum_value:n=`Invalid enum value. Expected ${cr.joinValues(e.options)}, received '${e.received}'`;break;case B.invalid_arguments:n=`Invalid function arguments`;break;case B.invalid_return_type:n=`Invalid function return type`;break;case B.invalid_date:n=`Invalid date`;break;case B.invalid_string:typeof e.validation==`object`?`includes`in e.validation?(n=`Invalid input: must include "${e.validation.includes}"`,typeof e.validation.position==`number`&&(n=`${n} at one or more positions greater than or equal to ${e.validation.position}`)):`startsWith`in e.validation?n=`Invalid input: must start with "${e.validation.startsWith}"`:`endsWith`in e.validation?n=`Invalid input: must end with "${e.validation.endsWith}"`:cr.assertNever(e.validation):n=e.validation===`regex`?`Invalid`:`Invalid ${e.validation}`;break;case B.too_small:n=e.type===`array`?`Array must contain ${e.exact?`exactly`:e.inclusive?`at least`:`more than`} ${e.minimum} element(s)`:e.type===`string`?`String must contain ${e.exact?`exactly`:e.inclusive?`at least`:`over`} ${e.minimum} character(s)`:e.type===`number`?`Number must be ${e.exact?`exactly equal to `:e.inclusive?`greater than or equal to `:`greater than `}${e.minimum}`:e.type===`date`?`Date must be ${e.exact?`exactly equal to `:e.inclusive?`greater than or equal to `:`greater than `}${new Date(Number(e.minimum))}`:`Invalid input`;break;case B.too_big:n=e.type===`array`?`Array must contain ${e.exact?`exactly`:e.inclusive?`at most`:`less than`} ${e.maximum} element(s)`:e.type===`string`?`String must contain ${e.exact?`exactly`:e.inclusive?`at most`:`under`} ${e.maximum} character(s)`:e.type===`number`?`Number must be ${e.exact?`exactly`:e.inclusive?`less than or equal to`:`less than`} ${e.maximum}`:e.type===`bigint`?`BigInt must be ${e.exact?`exactly`:e.inclusive?`less than or equal to`:`less than`} ${e.maximum}`:e.type===`date`?`Date must be ${e.exact?`exactly`:e.inclusive?`smaller than or equal to`:`smaller than`} ${new Date(Number(e.maximum))}`:`Invalid input`;break;case B.custom:n=`Invalid input`;break;case B.invalid_intersection_types:n=`Intersection results could not be merged`;break;case B.not_multiple_of:n=`Number must be a multiple of ${e.multipleOf}`;break;case B.not_finite:n=`Number must be finite`;break;default:n=t.defaultError,cr.assertNever(e)}return{message:n}},mr=pr;function hr(e){mr=e}function gr(){return mr}var _r=e=>{let{data:t,path:n,errorMaps:r,issueData:i}=e,a=[...n,...i.path||[]],o={...i,path:a};if(i.message!==void 0)return{...i,path:a,message:i.message};let s=``,c=r.filter(e=>!!e).slice().reverse();for(let e of c)s=e(o,{data:t,defaultError:s}).message;return{...i,path:a,message:s}},vr=[];function V(e,t){let n=gr(),r=_r({issueData:t,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,n,n===pr?void 0:pr].filter(e=>!!e)});e.common.issues.push(r)}var yr=class e{constructor(){this.value=`valid`}dirty(){this.value===`valid`&&(this.value=`dirty`)}abort(){this.value!==`aborted`&&(this.value=`aborted`)}static mergeArray(e,t){let n=[];for(let r of t){if(r.status===`aborted`)return br;r.status===`dirty`&&e.dirty(),n.push(r.value)}return{status:e.value,value:n}}static async mergeObjectAsync(t,n){let r=[];for(let e of n){let t=await e.key,n=await e.value;r.push({key:t,value:n})}return e.mergeObjectSync(t,r)}static mergeObjectSync(e,t){let n={};for(let r of t){let{key:t,value:i}=r;if(t.status===`aborted`||i.status===`aborted`)return br;t.status===`dirty`&&e.dirty(),i.status===`dirty`&&e.dirty(),t.value!==`__proto__`&&(i.value!==void 0||r.alwaysSet)&&(n[t.value]=i.value)}return{status:e.value,value:n}}},br=Object.freeze({status:`aborted`}),xr=e=>({status:`dirty`,value:e}),Sr=e=>({status:`valid`,value:e}),Cr=e=>e.status===`aborted`,wr=e=>e.status===`dirty`,Tr=e=>e.status===`valid`,Er=e=>typeof Promise<`u`&&e instanceof Promise;function Dr(e,t,n,r){if(typeof t==`function`?e!==t||!r:!t.has(e))throw TypeError(`Cannot read private member from an object whose class did not declare it`);return t.get(e)}function Or(e,t,n,r,i){if(typeof t==`function`?e!==t||!i:!t.has(e))throw TypeError(`Cannot write private member to an object whose class did not declare it`);return t.set(e,n),n}var kr;(function(e){e.errToObj=e=>typeof e==`string`?{message:e}:e||{},e.toString=e=>typeof e==`string`?e:e?.message})(kr||={});var Ar,jr,Mr=class{constructor(e,t,n,r){this._cachedPath=[],this.parent=e,this.data=t,this._path=n,this._key=r}get path(){return this._cachedPath.length||(this._key instanceof Array?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},Nr=(e,t)=>{if(Tr(t))return{success:!0,data:t.value};if(!e.common.issues.length)throw Error(`Validation failed but no issues detected.`);return{success:!1,get error(){if(this._error)return this._error;let t=new fr(e.common.issues);return this._error=t,this._error}}};function Pr(e){if(!e)return{};let{errorMap:t,invalid_type_error:n,required_error:r,description:i}=e;if(t&&(n||r))throw Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return t?{errorMap:t,description:i}:{errorMap:(t,i)=>{let{message:a}=e;return t.code===`invalid_enum_value`?{message:a??i.defaultError}:i.data===void 0?{message:a??r??i.defaultError}:t.code===`invalid_type`?{message:a??n??i.defaultError}:{message:i.defaultError}},description:i}}var Fr=class{constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this)}get description(){return this._def.description}_getType(e){return ur(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:ur(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new yr,ctx:{common:e.parent.common,data:e.data,parsedType:ur(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let t=this._parse(e);if(Er(t))throw Error(`Synchronous parse encountered promise.`);return t}_parseAsync(e){let t=this._parse(e);return Promise.resolve(t)}parse(e,t){let n=this.safeParse(e,t);if(n.success)return n.data;throw n.error}safeParse(e,t){let n={common:{issues:[],async:t?.async??!1,contextualErrorMap:t?.errorMap},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:ur(e)};return Nr(n,this._parseSync({data:e,path:n.path,parent:n}))}async parseAsync(e,t){let n=await this.safeParseAsync(e,t);if(n.success)return n.data;throw n.error}async safeParseAsync(e,t){let n={common:{issues:[],contextualErrorMap:t?.errorMap,async:!0},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:ur(e)},r=this._parse({data:e,path:n.path,parent:n});return Nr(n,await(Er(r)?r:Promise.resolve(r)))}refine(e,t){let n=e=>typeof t==`string`||t===void 0?{message:t}:typeof t==`function`?t(e):t;return this._refinement((t,r)=>{let i=e(t),a=()=>r.addIssue({code:B.custom,...n(t)});return typeof Promise<`u`&&i instanceof Promise?i.then(e=>e?!0:(a(),!1)):i?!0:(a(),!1)})}refinement(e,t){return this._refinement((n,r)=>e(n)?!0:(r.addIssue(typeof t==`function`?t(n,r):t),!1))}_refinement(e){return new Mi({schema:this,typeName:Wi.ZodEffects,effect:{type:`refinement`,refinement:e}})}superRefine(e){return this._refinement(e)}optional(){return Ni.create(this,this._def)}nullable(){return Pi.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return pi.create(this,this._def)}promise(){return ji.create(this,this._def)}or(e){return gi.create([this,e],this._def)}and(e){return bi.create(this,e,this._def)}transform(e){return new Mi({...Pr(this._def),schema:this,typeName:Wi.ZodEffects,effect:{type:`transform`,transform:e}})}default(e){let t=typeof e==`function`?e:()=>e;return new Fi({...Pr(this._def),innerType:this,defaultValue:t,typeName:Wi.ZodDefault})}brand(){return new zi({typeName:Wi.ZodBranded,type:this,...Pr(this._def)})}catch(e){let t=typeof e==`function`?e:()=>e;return new Ii({...Pr(this._def),innerType:this,catchValue:t,typeName:Wi.ZodCatch})}describe(e){let t=this.constructor;return new t({...this._def,description:e})}pipe(e){return Bi.create(this,e)}readonly(){return Vi.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},Ir=/^c[^\s-]{8,}$/i,Lr=/^[0-9a-z]+$/,Rr=/^[0-9A-HJKMNP-TV-Z]{26}$/,zr=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,Br=/^[a-z0-9_-]{21}$/i,Vr=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,Hr=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,Ur=`^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`,Wr,Gr=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,Kr=/^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,qr=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,Jr=`((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))`,Yr=RegExp(`^${Jr}$`);function Xr(e){let t=`([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d`;return e.precision?t=`${t}\\.\\d{${e.precision}}`:e.precision??(t=`${t}(\\.\\d+)?`),t}function Zr(e){return RegExp(`^${Xr(e)}$`)}function Qr(e){let t=`${Jr}T${Xr(e)}`,n=[];return n.push(e.local?`Z?`:`Z`),e.offset&&n.push(`([+-]\\d{2}:?\\d{2})`),t=`${t}(${n.join(`|`)})`,RegExp(`^${t}$`)}function $r(e,t){return!!((t===`v4`||!t)&&Gr.test(e)||(t===`v6`||!t)&&Kr.test(e))}var ei=class e extends Fr{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==z.string){let t=this._getOrReturnCtx(e);return V(t,{code:B.invalid_type,expected:z.string,received:t.parsedType}),br}let t=new yr,n;for(let r of this._def.checks)if(r.kind===`min`)e.data.lengthr.value&&(n=this._getOrReturnCtx(e,n),V(n,{code:B.too_big,maximum:r.value,type:`string`,inclusive:!0,exact:!1,message:r.message}),t.dirty());else if(r.kind===`length`){let i=e.data.length>r.value,a=e.data.lengthe.test(t),{validation:t,code:B.invalid_string,...kr.errToObj(n)})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}email(e){return this._addCheck({kind:`email`,...kr.errToObj(e)})}url(e){return this._addCheck({kind:`url`,...kr.errToObj(e)})}emoji(e){return this._addCheck({kind:`emoji`,...kr.errToObj(e)})}uuid(e){return this._addCheck({kind:`uuid`,...kr.errToObj(e)})}nanoid(e){return this._addCheck({kind:`nanoid`,...kr.errToObj(e)})}cuid(e){return this._addCheck({kind:`cuid`,...kr.errToObj(e)})}cuid2(e){return this._addCheck({kind:`cuid2`,...kr.errToObj(e)})}ulid(e){return this._addCheck({kind:`ulid`,...kr.errToObj(e)})}base64(e){return this._addCheck({kind:`base64`,...kr.errToObj(e)})}ip(e){return this._addCheck({kind:`ip`,...kr.errToObj(e)})}datetime(e){return typeof e==`string`?this._addCheck({kind:`datetime`,precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:`datetime`,precision:e?.precision===void 0?null:e?.precision,offset:e?.offset??!1,local:e?.local??!1,...kr.errToObj(e?.message)})}date(e){return this._addCheck({kind:`date`,message:e})}time(e){return typeof e==`string`?this._addCheck({kind:`time`,precision:null,message:e}):this._addCheck({kind:`time`,precision:e?.precision===void 0?null:e?.precision,...kr.errToObj(e?.message)})}duration(e){return this._addCheck({kind:`duration`,...kr.errToObj(e)})}regex(e,t){return this._addCheck({kind:`regex`,regex:e,...kr.errToObj(t)})}includes(e,t){return this._addCheck({kind:`includes`,value:e,position:t?.position,...kr.errToObj(t?.message)})}startsWith(e,t){return this._addCheck({kind:`startsWith`,value:e,...kr.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:`endsWith`,value:e,...kr.errToObj(t)})}min(e,t){return this._addCheck({kind:`min`,value:e,...kr.errToObj(t)})}max(e,t){return this._addCheck({kind:`max`,value:e,...kr.errToObj(t)})}length(e,t){return this._addCheck({kind:`length`,value:e,...kr.errToObj(t)})}nonempty(e){return this.min(1,kr.errToObj(e))}trim(){return new e({...this._def,checks:[...this._def.checks,{kind:`trim`}]})}toLowerCase(){return new e({...this._def,checks:[...this._def.checks,{kind:`toLowerCase`}]})}toUpperCase(){return new e({...this._def,checks:[...this._def.checks,{kind:`toUpperCase`}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind===`datetime`)}get isDate(){return!!this._def.checks.find(e=>e.kind===`date`)}get isTime(){return!!this._def.checks.find(e=>e.kind===`time`)}get isDuration(){return!!this._def.checks.find(e=>e.kind===`duration`)}get isEmail(){return!!this._def.checks.find(e=>e.kind===`email`)}get isURL(){return!!this._def.checks.find(e=>e.kind===`url`)}get isEmoji(){return!!this._def.checks.find(e=>e.kind===`emoji`)}get isUUID(){return!!this._def.checks.find(e=>e.kind===`uuid`)}get isNANOID(){return!!this._def.checks.find(e=>e.kind===`nanoid`)}get isCUID(){return!!this._def.checks.find(e=>e.kind===`cuid`)}get isCUID2(){return!!this._def.checks.find(e=>e.kind===`cuid2`)}get isULID(){return!!this._def.checks.find(e=>e.kind===`ulid`)}get isIP(){return!!this._def.checks.find(e=>e.kind===`ip`)}get isBase64(){return!!this._def.checks.find(e=>e.kind===`base64`)}get minLength(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e}get maxLength(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.valuenew ei({checks:[],typeName:Wi.ZodString,coerce:e?.coerce??!1,...Pr(e)});function ti(e,t){let n=(e.toString().split(`.`)[1]||``).length,r=(t.toString().split(`.`)[1]||``).length,i=n>r?n:r;return parseInt(e.toFixed(i).replace(`.`,``))%parseInt(t.toFixed(i).replace(`.`,``))/10**i}var ni=class e extends Fr{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==z.number){let t=this._getOrReturnCtx(e);return V(t,{code:B.invalid_type,expected:z.number,received:t.parsedType}),br}let t,n=new yr;for(let r of this._def.checks)r.kind===`int`?cr.isInteger(e.data)||(t=this._getOrReturnCtx(e,t),V(t,{code:B.invalid_type,expected:`integer`,received:`float`,message:r.message}),n.dirty()):r.kind===`min`?(r.inclusive?e.datar.value:e.data>=r.value)&&(t=this._getOrReturnCtx(e,t),V(t,{code:B.too_big,maximum:r.value,type:`number`,inclusive:r.inclusive,exact:!1,message:r.message}),n.dirty()):r.kind===`multipleOf`?ti(e.data,r.value)!==0&&(t=this._getOrReturnCtx(e,t),V(t,{code:B.not_multiple_of,multipleOf:r.value,message:r.message}),n.dirty()):r.kind===`finite`?Number.isFinite(e.data)||(t=this._getOrReturnCtx(e,t),V(t,{code:B.not_finite,message:r.message}),n.dirty()):cr.assertNever(r);return{status:n.value,value:e.data}}gte(e,t){return this.setLimit(`min`,e,!0,kr.toString(t))}gt(e,t){return this.setLimit(`min`,e,!1,kr.toString(t))}lte(e,t){return this.setLimit(`max`,e,!0,kr.toString(t))}lt(e,t){return this.setLimit(`max`,e,!1,kr.toString(t))}setLimit(t,n,r,i){return new e({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:kr.toString(i)}]})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}int(e){return this._addCheck({kind:`int`,message:kr.toString(e)})}positive(e){return this._addCheck({kind:`min`,value:0,inclusive:!1,message:kr.toString(e)})}negative(e){return this._addCheck({kind:`max`,value:0,inclusive:!1,message:kr.toString(e)})}nonpositive(e){return this._addCheck({kind:`max`,value:0,inclusive:!0,message:kr.toString(e)})}nonnegative(e){return this._addCheck({kind:`min`,value:0,inclusive:!0,message:kr.toString(e)})}multipleOf(e,t){return this._addCheck({kind:`multipleOf`,value:e,message:kr.toString(t)})}finite(e){return this._addCheck({kind:`finite`,message:kr.toString(e)})}safe(e){return this._addCheck({kind:`min`,inclusive:!0,value:-(2**53-1),message:kr.toString(e)})._addCheck({kind:`max`,inclusive:!0,value:2**53-1,message:kr.toString(e)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.valuee.kind===`int`||e.kind===`multipleOf`&&cr.isInteger(e.value))}get isFinite(){let e=null,t=null;for(let n of this._def.checks)if(n.kind===`finite`||n.kind===`int`||n.kind===`multipleOf`)return!0;else n.kind===`min`?(t===null||n.value>t)&&(t=n.value):n.kind===`max`&&(e===null||n.valuenew ni({checks:[],typeName:Wi.ZodNumber,coerce:e?.coerce||!1,...Pr(e)});var ri=class e extends Fr{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){if(this._def.coerce&&(e.data=BigInt(e.data)),this._getType(e)!==z.bigint){let t=this._getOrReturnCtx(e);return V(t,{code:B.invalid_type,expected:z.bigint,received:t.parsedType}),br}let t,n=new yr;for(let r of this._def.checks)r.kind===`min`?(r.inclusive?e.datar.value:e.data>=r.value)&&(t=this._getOrReturnCtx(e,t),V(t,{code:B.too_big,type:`bigint`,maximum:r.value,inclusive:r.inclusive,message:r.message}),n.dirty()):r.kind===`multipleOf`?e.data%r.value!==BigInt(0)&&(t=this._getOrReturnCtx(e,t),V(t,{code:B.not_multiple_of,multipleOf:r.value,message:r.message}),n.dirty()):cr.assertNever(r);return{status:n.value,value:e.data}}gte(e,t){return this.setLimit(`min`,e,!0,kr.toString(t))}gt(e,t){return this.setLimit(`min`,e,!1,kr.toString(t))}lte(e,t){return this.setLimit(`max`,e,!0,kr.toString(t))}lt(e,t){return this.setLimit(`max`,e,!1,kr.toString(t))}setLimit(t,n,r,i){return new e({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:kr.toString(i)}]})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}positive(e){return this._addCheck({kind:`min`,value:BigInt(0),inclusive:!1,message:kr.toString(e)})}negative(e){return this._addCheck({kind:`max`,value:BigInt(0),inclusive:!1,message:kr.toString(e)})}nonpositive(e){return this._addCheck({kind:`max`,value:BigInt(0),inclusive:!0,message:kr.toString(e)})}nonnegative(e){return this._addCheck({kind:`min`,value:BigInt(0),inclusive:!0,message:kr.toString(e)})}multipleOf(e,t){return this._addCheck({kind:`multipleOf`,value:e,message:kr.toString(t)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.valuenew ri({checks:[],typeName:Wi.ZodBigInt,coerce:e?.coerce??!1,...Pr(e)});var ii=class extends Fr{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==z.boolean){let t=this._getOrReturnCtx(e);return V(t,{code:B.invalid_type,expected:z.boolean,received:t.parsedType}),br}return Sr(e.data)}};ii.create=e=>new ii({typeName:Wi.ZodBoolean,coerce:e?.coerce||!1,...Pr(e)});var ai=class e extends Fr{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==z.date){let t=this._getOrReturnCtx(e);return V(t,{code:B.invalid_type,expected:z.date,received:t.parsedType}),br}if(isNaN(e.data.getTime()))return V(this._getOrReturnCtx(e),{code:B.invalid_date}),br;let t=new yr,n;for(let r of this._def.checks)r.kind===`min`?e.data.getTime()r.value&&(n=this._getOrReturnCtx(e,n),V(n,{code:B.too_big,message:r.message,inclusive:!0,exact:!1,maximum:r.value,type:`date`}),t.dirty()):cr.assertNever(r);return{status:t.value,value:new Date(e.data.getTime())}}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}min(e,t){return this._addCheck({kind:`min`,value:e.getTime(),message:kr.toString(t)})}max(e,t){return this._addCheck({kind:`max`,value:e.getTime(),message:kr.toString(t)})}get minDate(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e==null?null:new Date(e)}get maxDate(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.valuenew ai({checks:[],coerce:e?.coerce||!1,typeName:Wi.ZodDate,...Pr(e)});var oi=class extends Fr{_parse(e){if(this._getType(e)!==z.symbol){let t=this._getOrReturnCtx(e);return V(t,{code:B.invalid_type,expected:z.symbol,received:t.parsedType}),br}return Sr(e.data)}};oi.create=e=>new oi({typeName:Wi.ZodSymbol,...Pr(e)});var si=class extends Fr{_parse(e){if(this._getType(e)!==z.undefined){let t=this._getOrReturnCtx(e);return V(t,{code:B.invalid_type,expected:z.undefined,received:t.parsedType}),br}return Sr(e.data)}};si.create=e=>new si({typeName:Wi.ZodUndefined,...Pr(e)});var ci=class extends Fr{_parse(e){if(this._getType(e)!==z.null){let t=this._getOrReturnCtx(e);return V(t,{code:B.invalid_type,expected:z.null,received:t.parsedType}),br}return Sr(e.data)}};ci.create=e=>new ci({typeName:Wi.ZodNull,...Pr(e)});var li=class extends Fr{constructor(){super(...arguments),this._any=!0}_parse(e){return Sr(e.data)}};li.create=e=>new li({typeName:Wi.ZodAny,...Pr(e)});var ui=class extends Fr{constructor(){super(...arguments),this._unknown=!0}_parse(e){return Sr(e.data)}};ui.create=e=>new ui({typeName:Wi.ZodUnknown,...Pr(e)});var di=class extends Fr{_parse(e){let t=this._getOrReturnCtx(e);return V(t,{code:B.invalid_type,expected:z.never,received:t.parsedType}),br}};di.create=e=>new di({typeName:Wi.ZodNever,...Pr(e)});var fi=class extends Fr{_parse(e){if(this._getType(e)!==z.undefined){let t=this._getOrReturnCtx(e);return V(t,{code:B.invalid_type,expected:z.void,received:t.parsedType}),br}return Sr(e.data)}};fi.create=e=>new fi({typeName:Wi.ZodVoid,...Pr(e)});var pi=class e extends Fr{_parse(e){let{ctx:t,status:n}=this._processInputParams(e),r=this._def;if(t.parsedType!==z.array)return V(t,{code:B.invalid_type,expected:z.array,received:t.parsedType}),br;if(r.exactLength!==null){let e=t.data.length>r.exactLength.value,i=t.data.lengthr.maxLength.value&&(V(t,{code:B.too_big,maximum:r.maxLength.value,type:`array`,inclusive:!0,exact:!1,message:r.maxLength.message}),n.dirty()),t.common.async)return Promise.all([...t.data].map((e,n)=>r.type._parseAsync(new Mr(t,e,t.path,n)))).then(e=>yr.mergeArray(n,e));let i=[...t.data].map((e,n)=>r.type._parseSync(new Mr(t,e,t.path,n)));return yr.mergeArray(n,i)}get element(){return this._def.type}min(t,n){return new e({...this._def,minLength:{value:t,message:kr.toString(n)}})}max(t,n){return new e({...this._def,maxLength:{value:t,message:kr.toString(n)}})}length(t,n){return new e({...this._def,exactLength:{value:t,message:kr.toString(n)}})}nonempty(e){return this.min(1,e)}};pi.create=(e,t)=>new pi({type:e,minLength:null,maxLength:null,exactLength:null,typeName:Wi.ZodArray,...Pr(t)});function mi(e){if(e instanceof hi){let t={};for(let n in e.shape){let r=e.shape[n];t[n]=Ni.create(mi(r))}return new hi({...e._def,shape:()=>t})}else if(e instanceof pi)return new pi({...e._def,type:mi(e.element)});else if(e instanceof Ni)return Ni.create(mi(e.unwrap()));else if(e instanceof Pi)return Pi.create(mi(e.unwrap()));else if(e instanceof xi)return xi.create(e.items.map(e=>mi(e)));else return e}var hi=class e extends Fr{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let e=this._def.shape(),t=cr.objectKeys(e);return this._cached={shape:e,keys:t}}_parse(e){if(this._getType(e)!==z.object){let t=this._getOrReturnCtx(e);return V(t,{code:B.invalid_type,expected:z.object,received:t.parsedType}),br}let{status:t,ctx:n}=this._processInputParams(e),{shape:r,keys:i}=this._getCached(),a=[];if(!(this._def.catchall instanceof di&&this._def.unknownKeys===`strip`))for(let e in n.data)i.includes(e)||a.push(e);let o=[];for(let e of i){let t=r[e],i=n.data[e];o.push({key:{status:`valid`,value:e},value:t._parse(new Mr(n,i,n.path,e)),alwaysSet:e in n.data})}if(this._def.catchall instanceof di){let e=this._def.unknownKeys;if(e===`passthrough`)for(let e of a)o.push({key:{status:`valid`,value:e},value:{status:`valid`,value:n.data[e]}});else if(e===`strict`)a.length>0&&(V(n,{code:B.unrecognized_keys,keys:a}),t.dirty());else if(e!==`strip`)throw Error(`Internal ZodObject error: invalid unknownKeys value.`)}else{let e=this._def.catchall;for(let t of a){let r=n.data[t];o.push({key:{status:`valid`,value:t},value:e._parse(new Mr(n,r,n.path,t)),alwaysSet:t in n.data})}}return n.common.async?Promise.resolve().then(async()=>{let e=[];for(let t of o){let n=await t.key,r=await t.value;e.push({key:n,value:r,alwaysSet:t.alwaysSet})}return e}).then(e=>yr.mergeObjectSync(t,e)):yr.mergeObjectSync(t,o)}get shape(){return this._def.shape()}strict(t){return kr.errToObj,new e({...this._def,unknownKeys:`strict`,...t===void 0?{}:{errorMap:(e,n)=>{var r;let i=(r=this._def).errorMap?.call(r,e,n).message??n.defaultError;return e.code===`unrecognized_keys`?{message:kr.errToObj(t).message??i}:{message:i}}}})}strip(){return new e({...this._def,unknownKeys:`strip`})}passthrough(){return new e({...this._def,unknownKeys:`passthrough`})}extend(t){return new e({...this._def,shape:()=>({...this._def.shape(),...t})})}merge(t){return new e({unknownKeys:t._def.unknownKeys,catchall:t._def.catchall,shape:()=>({...this._def.shape(),...t._def.shape()}),typeName:Wi.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(t){return new e({...this._def,catchall:t})}pick(t){let n={};return cr.objectKeys(t).forEach(e=>{t[e]&&this.shape[e]&&(n[e]=this.shape[e])}),new e({...this._def,shape:()=>n})}omit(t){let n={};return cr.objectKeys(this.shape).forEach(e=>{t[e]||(n[e]=this.shape[e])}),new e({...this._def,shape:()=>n})}deepPartial(){return mi(this)}partial(t){let n={};return cr.objectKeys(this.shape).forEach(e=>{let r=this.shape[e];t&&!t[e]?n[e]=r:n[e]=r.optional()}),new e({...this._def,shape:()=>n})}required(t){let n={};return cr.objectKeys(this.shape).forEach(e=>{if(t&&!t[e])n[e]=this.shape[e];else{let t=this.shape[e];for(;t instanceof Ni;)t=t._def.innerType;n[e]=t}}),new e({...this._def,shape:()=>n})}keyof(){return Oi(cr.objectKeys(this.shape))}};hi.create=(e,t)=>new hi({shape:()=>e,unknownKeys:`strip`,catchall:di.create(),typeName:Wi.ZodObject,...Pr(t)}),hi.strictCreate=(e,t)=>new hi({shape:()=>e,unknownKeys:`strict`,catchall:di.create(),typeName:Wi.ZodObject,...Pr(t)}),hi.lazycreate=(e,t)=>new hi({shape:e,unknownKeys:`strip`,catchall:di.create(),typeName:Wi.ZodObject,...Pr(t)});var gi=class extends Fr{_parse(e){let{ctx:t}=this._processInputParams(e),n=this._def.options;function r(e){for(let t of e)if(t.result.status===`valid`)return t.result;for(let n of e)if(n.result.status===`dirty`)return t.common.issues.push(...n.ctx.common.issues),n.result;let n=e.map(e=>new fr(e.ctx.common.issues));return V(t,{code:B.invalid_union,unionErrors:n}),br}if(t.common.async)return Promise.all(n.map(async e=>{let n={...t,common:{...t.common,issues:[]},parent:null};return{result:await e._parseAsync({data:t.data,path:t.path,parent:n}),ctx:n}})).then(r);{let e,r=[];for(let i of n){let n={...t,common:{...t.common,issues:[]},parent:null},a=i._parseSync({data:t.data,path:t.path,parent:n});if(a.status===`valid`)return a;a.status===`dirty`&&!e&&(e={result:a,ctx:n}),n.common.issues.length&&r.push(n.common.issues)}if(e)return t.common.issues.push(...e.ctx.common.issues),e.result;let i=r.map(e=>new fr(e));return V(t,{code:B.invalid_union,unionErrors:i}),br}}get options(){return this._def.options}};gi.create=(e,t)=>new gi({options:e,typeName:Wi.ZodUnion,...Pr(t)});var _i=e=>e instanceof Ei?_i(e.schema):e instanceof Mi?_i(e.innerType()):e instanceof Di?[e.value]:e instanceof ki?e.options:e instanceof Ai?cr.objectValues(e.enum):e instanceof Fi?_i(e._def.innerType):e instanceof si?[void 0]:e instanceof ci?[null]:e instanceof Ni?[void 0,..._i(e.unwrap())]:e instanceof Pi?[null,..._i(e.unwrap())]:e instanceof zi||e instanceof Vi?_i(e.unwrap()):e instanceof Ii?_i(e._def.innerType):[],vi=class e extends Fr{_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==z.object)return V(t,{code:B.invalid_type,expected:z.object,received:t.parsedType}),br;let n=this.discriminator,r=t.data[n],i=this.optionsMap.get(r);return i?t.common.async?i._parseAsync({data:t.data,path:t.path,parent:t}):i._parseSync({data:t.data,path:t.path,parent:t}):(V(t,{code:B.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[n]}),br)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(t,n,r){let i=new Map;for(let e of n){let n=_i(e.shape[t]);if(!n.length)throw Error(`A discriminator value for key \`${t}\` could not be extracted from all schema options`);for(let r of n){if(i.has(r))throw Error(`Discriminator property ${String(t)} has duplicate value ${String(r)}`);i.set(r,e)}}return new e({typeName:Wi.ZodDiscriminatedUnion,discriminator:t,options:n,optionsMap:i,...Pr(r)})}};function yi(e,t){let n=ur(e),r=ur(t);if(e===t)return{valid:!0,data:e};if(n===z.object&&r===z.object){let n=cr.objectKeys(t),r=cr.objectKeys(e).filter(e=>n.indexOf(e)!==-1),i={...e,...t};for(let n of r){let r=yi(e[n],t[n]);if(!r.valid)return{valid:!1};i[n]=r.data}return{valid:!0,data:i}}else if(n===z.array&&r===z.array){if(e.length!==t.length)return{valid:!1};let n=[];for(let r=0;r{if(Cr(e)||Cr(r))return br;let i=yi(e.value,r.value);return i.valid?((wr(e)||wr(r))&&t.dirty(),{status:t.value,value:i.data}):(V(n,{code:B.invalid_intersection_types}),br)};return n.common.async?Promise.all([this._def.left._parseAsync({data:n.data,path:n.path,parent:n}),this._def.right._parseAsync({data:n.data,path:n.path,parent:n})]).then(([e,t])=>r(e,t)):r(this._def.left._parseSync({data:n.data,path:n.path,parent:n}),this._def.right._parseSync({data:n.data,path:n.path,parent:n}))}};bi.create=(e,t,n)=>new bi({left:e,right:t,typeName:Wi.ZodIntersection,...Pr(n)});var xi=class e extends Fr{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==z.array)return V(n,{code:B.invalid_type,expected:z.array,received:n.parsedType}),br;if(n.data.lengththis._def.items.length&&(V(n,{code:B.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:`array`}),t.dirty());let r=[...n.data].map((e,t)=>{let r=this._def.items[t]||this._def.rest;return r?r._parse(new Mr(n,e,n.path,t)):null}).filter(e=>!!e);return n.common.async?Promise.all(r).then(e=>yr.mergeArray(t,e)):yr.mergeArray(t,r)}get items(){return this._def.items}rest(t){return new e({...this._def,rest:t})}};xi.create=(e,t)=>{if(!Array.isArray(e))throw Error(`You must pass an array of schemas to z.tuple([ ... ])`);return new xi({items:e,typeName:Wi.ZodTuple,rest:null,...Pr(t)})};var Si=class e extends Fr{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==z.object)return V(n,{code:B.invalid_type,expected:z.object,received:n.parsedType}),br;let r=[],i=this._def.keyType,a=this._def.valueType;for(let e in n.data)r.push({key:i._parse(new Mr(n,e,n.path,e)),value:a._parse(new Mr(n,n.data[e],n.path,e)),alwaysSet:e in n.data});return n.common.async?yr.mergeObjectAsync(t,r):yr.mergeObjectSync(t,r)}get element(){return this._def.valueType}static create(t,n,r){return n instanceof Fr?new e({keyType:t,valueType:n,typeName:Wi.ZodRecord,...Pr(r)}):new e({keyType:ei.create(),valueType:t,typeName:Wi.ZodRecord,...Pr(n)})}},Ci=class extends Fr{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==z.map)return V(n,{code:B.invalid_type,expected:z.map,received:n.parsedType}),br;let r=this._def.keyType,i=this._def.valueType,a=[...n.data.entries()].map(([e,t],a)=>({key:r._parse(new Mr(n,e,n.path,[a,`key`])),value:i._parse(new Mr(n,t,n.path,[a,`value`]))}));if(n.common.async){let e=new Map;return Promise.resolve().then(async()=>{for(let n of a){let r=await n.key,i=await n.value;if(r.status===`aborted`||i.status===`aborted`)return br;(r.status===`dirty`||i.status===`dirty`)&&t.dirty(),e.set(r.value,i.value)}return{status:t.value,value:e}})}else{let e=new Map;for(let n of a){let r=n.key,i=n.value;if(r.status===`aborted`||i.status===`aborted`)return br;(r.status===`dirty`||i.status===`dirty`)&&t.dirty(),e.set(r.value,i.value)}return{status:t.value,value:e}}}};Ci.create=(e,t,n)=>new Ci({valueType:t,keyType:e,typeName:Wi.ZodMap,...Pr(n)});var wi=class e extends Fr{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==z.set)return V(n,{code:B.invalid_type,expected:z.set,received:n.parsedType}),br;let r=this._def;r.minSize!==null&&n.data.sizer.maxSize.value&&(V(n,{code:B.too_big,maximum:r.maxSize.value,type:`set`,inclusive:!0,exact:!1,message:r.maxSize.message}),t.dirty());let i=this._def.valueType;function a(e){let n=new Set;for(let r of e){if(r.status===`aborted`)return br;r.status===`dirty`&&t.dirty(),n.add(r.value)}return{status:t.value,value:n}}let o=[...n.data.values()].map((e,t)=>i._parse(new Mr(n,e,n.path,t)));return n.common.async?Promise.all(o).then(e=>a(e)):a(o)}min(t,n){return new e({...this._def,minSize:{value:t,message:kr.toString(n)}})}max(t,n){return new e({...this._def,maxSize:{value:t,message:kr.toString(n)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}};wi.create=(e,t)=>new wi({valueType:e,minSize:null,maxSize:null,typeName:Wi.ZodSet,...Pr(t)});var Ti=class e extends Fr{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==z.function)return V(t,{code:B.invalid_type,expected:z.function,received:t.parsedType}),br;function n(e,n){return _r({data:e,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,gr(),pr].filter(e=>!!e),issueData:{code:B.invalid_arguments,argumentsError:n}})}function r(e,n){return _r({data:e,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,gr(),pr].filter(e=>!!e),issueData:{code:B.invalid_return_type,returnTypeError:n}})}let i={errorMap:t.common.contextualErrorMap},a=t.data;if(this._def.returns instanceof ji){let e=this;return Sr(async function(...t){let o=new fr([]),s=await e._def.args.parseAsync(t,i).catch(e=>{throw o.addIssue(n(t,e)),o}),c=await Reflect.apply(a,this,s);return await e._def.returns._def.type.parseAsync(c,i).catch(e=>{throw o.addIssue(r(c,e)),o})})}else{let e=this;return Sr(function(...t){let o=e._def.args.safeParse(t,i);if(!o.success)throw new fr([n(t,o.error)]);let s=Reflect.apply(a,this,o.data),c=e._def.returns.safeParse(s,i);if(!c.success)throw new fr([r(s,c.error)]);return c.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...t){return new e({...this._def,args:xi.create(t).rest(ui.create())})}returns(t){return new e({...this._def,returns:t})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(t,n,r){return new e({args:t||xi.create([]).rest(ui.create()),returns:n||ui.create(),typeName:Wi.ZodFunction,...Pr(r)})}},Ei=class extends Fr{get schema(){return this._def.getter()}_parse(e){let{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}};Ei.create=(e,t)=>new Ei({getter:e,typeName:Wi.ZodLazy,...Pr(t)});var Di=class extends Fr{_parse(e){if(e.data!==this._def.value){let t=this._getOrReturnCtx(e);return V(t,{received:t.data,code:B.invalid_literal,expected:this._def.value}),br}return{status:`valid`,value:e.data}}get value(){return this._def.value}};Di.create=(e,t)=>new Di({value:e,typeName:Wi.ZodLiteral,...Pr(t)});function Oi(e,t){return new ki({values:e,typeName:Wi.ZodEnum,...Pr(t)})}var ki=class e extends Fr{constructor(){super(...arguments),Ar.set(this,void 0)}_parse(e){if(typeof e.data!=`string`){let t=this._getOrReturnCtx(e),n=this._def.values;return V(t,{expected:cr.joinValues(n),received:t.parsedType,code:B.invalid_type}),br}if(Dr(this,Ar)||Or(this,Ar,new Set(this._def.values)),!Dr(this,Ar).has(e.data)){let t=this._getOrReturnCtx(e),n=this._def.values;return V(t,{received:t.data,code:B.invalid_enum_value,options:n}),br}return Sr(e.data)}get options(){return this._def.values}get enum(){let e={};for(let t of this._def.values)e[t]=t;return e}get Values(){let e={};for(let t of this._def.values)e[t]=t;return e}get Enum(){let e={};for(let t of this._def.values)e[t]=t;return e}extract(t,n=this._def){return e.create(t,{...this._def,...n})}exclude(t,n=this._def){return e.create(this.options.filter(e=>!t.includes(e)),{...this._def,...n})}};Ar=new WeakMap,ki.create=Oi;var Ai=class extends Fr{constructor(){super(...arguments),jr.set(this,void 0)}_parse(e){let t=cr.getValidEnumValues(this._def.values),n=this._getOrReturnCtx(e);if(n.parsedType!==z.string&&n.parsedType!==z.number){let e=cr.objectValues(t);return V(n,{expected:cr.joinValues(e),received:n.parsedType,code:B.invalid_type}),br}if(Dr(this,jr)||Or(this,jr,new Set(cr.getValidEnumValues(this._def.values))),!Dr(this,jr).has(e.data)){let e=cr.objectValues(t);return V(n,{received:n.data,code:B.invalid_enum_value,options:e}),br}return Sr(e.data)}get enum(){return this._def.values}};jr=new WeakMap,Ai.create=(e,t)=>new Ai({values:e,typeName:Wi.ZodNativeEnum,...Pr(t)});var ji=class extends Fr{unwrap(){return this._def.type}_parse(e){let{ctx:t}=this._processInputParams(e);return t.parsedType!==z.promise&&t.common.async===!1?(V(t,{code:B.invalid_type,expected:z.promise,received:t.parsedType}),br):Sr((t.parsedType===z.promise?t.data:Promise.resolve(t.data)).then(e=>this._def.type.parseAsync(e,{path:t.path,errorMap:t.common.contextualErrorMap})))}};ji.create=(e,t)=>new ji({type:e,typeName:Wi.ZodPromise,...Pr(t)});var Mi=class extends Fr{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===Wi.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:t,ctx:n}=this._processInputParams(e),r=this._def.effect||null,i={addIssue:e=>{V(n,e),e.fatal?t.abort():t.dirty()},get path(){return n.path}};if(i.addIssue=i.addIssue.bind(i),r.type===`preprocess`){let e=r.transform(n.data,i);if(n.common.async)return Promise.resolve(e).then(async e=>{if(t.value===`aborted`)return br;let r=await this._def.schema._parseAsync({data:e,path:n.path,parent:n});return r.status===`aborted`?br:r.status===`dirty`||t.value===`dirty`?xr(r.value):r});{if(t.value===`aborted`)return br;let r=this._def.schema._parseSync({data:e,path:n.path,parent:n});return r.status===`aborted`?br:r.status===`dirty`||t.value===`dirty`?xr(r.value):r}}if(r.type===`refinement`){let e=e=>{let t=r.refinement(e,i);if(n.common.async)return Promise.resolve(t);if(t instanceof Promise)throw Error(`Async refinement encountered during synchronous parse operation. Use .parseAsync instead.`);return e};if(n.common.async===!1){let r=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});return r.status===`aborted`?br:(r.status===`dirty`&&t.dirty(),e(r.value),{status:t.value,value:r.value})}else return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(n=>n.status===`aborted`?br:(n.status===`dirty`&&t.dirty(),e(n.value).then(()=>({status:t.value,value:n.value}))))}if(r.type===`transform`)if(n.common.async===!1){let e=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});if(!Tr(e))return e;let a=r.transform(e.value,i);if(a instanceof Promise)throw Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);return{status:t.value,value:a}}else return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(e=>Tr(e)?Promise.resolve(r.transform(e.value,i)).then(e=>({status:t.value,value:e})):e);cr.assertNever(r)}};Mi.create=(e,t,n)=>new Mi({schema:e,typeName:Wi.ZodEffects,effect:t,...Pr(n)}),Mi.createWithPreprocess=(e,t,n)=>new Mi({schema:t,effect:{type:`preprocess`,transform:e},typeName:Wi.ZodEffects,...Pr(n)});var Ni=class extends Fr{_parse(e){return this._getType(e)===z.undefined?Sr(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};Ni.create=(e,t)=>new Ni({innerType:e,typeName:Wi.ZodOptional,...Pr(t)});var Pi=class extends Fr{_parse(e){return this._getType(e)===z.null?Sr(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};Pi.create=(e,t)=>new Pi({innerType:e,typeName:Wi.ZodNullable,...Pr(t)});var Fi=class extends Fr{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return t.parsedType===z.undefined&&(n=this._def.defaultValue()),this._def.innerType._parse({data:n,path:t.path,parent:t})}removeDefault(){return this._def.innerType}};Fi.create=(e,t)=>new Fi({innerType:e,typeName:Wi.ZodDefault,defaultValue:typeof t.default==`function`?t.default:()=>t.default,...Pr(t)});var Ii=class extends Fr{_parse(e){let{ctx:t}=this._processInputParams(e),n={...t,common:{...t.common,issues:[]}},r=this._def.innerType._parse({data:n.data,path:n.path,parent:{...n}});return Er(r)?r.then(e=>({status:`valid`,value:e.status===`valid`?e.value:this._def.catchValue({get error(){return new fr(n.common.issues)},input:n.data})})):{status:`valid`,value:r.status===`valid`?r.value:this._def.catchValue({get error(){return new fr(n.common.issues)},input:n.data})}}removeCatch(){return this._def.innerType}};Ii.create=(e,t)=>new Ii({innerType:e,typeName:Wi.ZodCatch,catchValue:typeof t.catch==`function`?t.catch:()=>t.catch,...Pr(t)});var Li=class extends Fr{_parse(e){if(this._getType(e)!==z.nan){let t=this._getOrReturnCtx(e);return V(t,{code:B.invalid_type,expected:z.nan,received:t.parsedType}),br}return{status:`valid`,value:e.data}}};Li.create=e=>new Li({typeName:Wi.ZodNaN,...Pr(e)});var Ri=Symbol(`zod_brand`),zi=class extends Fr{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return this._def.type._parse({data:n,path:t.path,parent:t})}unwrap(){return this._def.type}},Bi=class e extends Fr{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.common.async)return(async()=>{let e=await this._def.in._parseAsync({data:n.data,path:n.path,parent:n});return e.status===`aborted`?br:e.status===`dirty`?(t.dirty(),xr(e.value)):this._def.out._parseAsync({data:e.value,path:n.path,parent:n})})();{let e=this._def.in._parseSync({data:n.data,path:n.path,parent:n});return e.status===`aborted`?br:e.status===`dirty`?(t.dirty(),{status:`dirty`,value:e.value}):this._def.out._parseSync({data:e.value,path:n.path,parent:n})}}static create(t,n){return new e({in:t,out:n,typeName:Wi.ZodPipeline})}},Vi=class extends Fr{_parse(e){let t=this._def.innerType._parse(e),n=e=>(Tr(e)&&(e.value=Object.freeze(e.value)),e);return Er(t)?t.then(e=>n(e)):n(t)}unwrap(){return this._def.innerType}};Vi.create=(e,t)=>new Vi({innerType:e,typeName:Wi.ZodReadonly,...Pr(t)});function Hi(e,t={},n){return e?li.create().superRefine((r,i)=>{if(!e(r)){let e=typeof t==`function`?t(r):typeof t==`string`?{message:t}:t,a=e.fatal??n??!0,o=typeof e==`string`?{message:e}:e;i.addIssue({code:`custom`,...o,fatal:a})}}):li.create()}var Ui={object:hi.lazycreate},Wi;(function(e){e.ZodString=`ZodString`,e.ZodNumber=`ZodNumber`,e.ZodNaN=`ZodNaN`,e.ZodBigInt=`ZodBigInt`,e.ZodBoolean=`ZodBoolean`,e.ZodDate=`ZodDate`,e.ZodSymbol=`ZodSymbol`,e.ZodUndefined=`ZodUndefined`,e.ZodNull=`ZodNull`,e.ZodAny=`ZodAny`,e.ZodUnknown=`ZodUnknown`,e.ZodNever=`ZodNever`,e.ZodVoid=`ZodVoid`,e.ZodArray=`ZodArray`,e.ZodObject=`ZodObject`,e.ZodUnion=`ZodUnion`,e.ZodDiscriminatedUnion=`ZodDiscriminatedUnion`,e.ZodIntersection=`ZodIntersection`,e.ZodTuple=`ZodTuple`,e.ZodRecord=`ZodRecord`,e.ZodMap=`ZodMap`,e.ZodSet=`ZodSet`,e.ZodFunction=`ZodFunction`,e.ZodLazy=`ZodLazy`,e.ZodLiteral=`ZodLiteral`,e.ZodEnum=`ZodEnum`,e.ZodEffects=`ZodEffects`,e.ZodNativeEnum=`ZodNativeEnum`,e.ZodOptional=`ZodOptional`,e.ZodNullable=`ZodNullable`,e.ZodDefault=`ZodDefault`,e.ZodCatch=`ZodCatch`,e.ZodPromise=`ZodPromise`,e.ZodBranded=`ZodBranded`,e.ZodPipeline=`ZodPipeline`,e.ZodReadonly=`ZodReadonly`})(Wi||={});var Gi=(e,t={message:`Input not instance of ${e.name}`})=>Hi(t=>t instanceof e,t),H=ei.create,Ki=ni.create,qi=Li.create,Ji=ri.create,Yi=ii.create,Xi=ai.create,Zi=oi.create,Qi=si.create,$i=ci.create,ea=li.create,ta=ui.create,na=di.create,ra=fi.create,ia=pi.create,U=hi.create,aa=hi.strictCreate,oa=gi.create,sa=vi.create,ca=bi.create,la=xi.create,ua=Si.create,da=Ci.create,fa=wi.create,pa=Ti.create,ma=Ei.create,ha=Di.create,ga=ki.create,_a=Ai.create,va=ji.create,ya=Mi.create,ba=Ni.create,xa=Pi.create,Sa=Mi.createWithPreprocess,Ca=Bi.create,W=Object.freeze({__proto__:null,defaultErrorMap:pr,setErrorMap:hr,getErrorMap:gr,makeIssue:_r,EMPTY_PATH:vr,addIssueToContext:V,ParseStatus:yr,INVALID:br,DIRTY:xr,OK:Sr,isAborted:Cr,isDirty:wr,isValid:Tr,isAsync:Er,get util(){return cr},get objectUtil(){return lr},ZodParsedType:z,getParsedType:ur,ZodType:Fr,datetimeRegex:Qr,ZodString:ei,ZodNumber:ni,ZodBigInt:ri,ZodBoolean:ii,ZodDate:ai,ZodSymbol:oi,ZodUndefined:si,ZodNull:ci,ZodAny:li,ZodUnknown:ui,ZodNever:di,ZodVoid:fi,ZodArray:pi,ZodObject:hi,ZodUnion:gi,ZodDiscriminatedUnion:vi,ZodIntersection:bi,ZodTuple:xi,ZodRecord:Si,ZodMap:Ci,ZodSet:wi,ZodFunction:Ti,ZodLazy:Ei,ZodLiteral:Di,ZodEnum:ki,ZodNativeEnum:Ai,ZodPromise:ji,ZodEffects:Mi,ZodTransformer:Mi,ZodOptional:Ni,ZodNullable:Pi,ZodDefault:Fi,ZodCatch:Ii,ZodNaN:Li,BRAND:Ri,ZodBranded:zi,ZodPipeline:Bi,ZodReadonly:Vi,custom:Hi,Schema:Fr,ZodSchema:Fr,late:Ui,get ZodFirstPartyTypeKind(){return Wi},coerce:{string:(e=>ei.create({...e,coerce:!0})),number:(e=>ni.create({...e,coerce:!0})),boolean:(e=>ii.create({...e,coerce:!0})),bigint:(e=>ri.create({...e,coerce:!0})),date:(e=>ai.create({...e,coerce:!0}))},any:ea,array:ia,bigint:Ji,boolean:Yi,date:Xi,discriminatedUnion:sa,effect:ya,enum:ga,function:pa,instanceof:Gi,intersection:ca,lazy:ma,literal:ha,map:da,nan:qi,nativeEnum:_a,never:na,null:$i,nullable:xa,number:Ki,object:U,oboolean:()=>Yi().optional(),onumber:()=>Ki().optional(),optional:ba,ostring:()=>H().optional(),pipeline:Ca,preprocess:Sa,promise:va,record:ua,set:fa,strictObject:aa,string:H,symbol:Zi,transformer:ya,tuple:la,undefined:Qi,union:oa,unknown:ta,void:ra,NEVER:br,ZodIssueCode:B,quotelessJson:dr,ZodError:fr}),wa={exports:{}},Ta;function Ea(){return Ta?wa.exports:(Ta=1,(function(e){var t=(function(e){var n=1e7,r=9007199254740992,i=f(r),a=`0123456789abcdefghijklmnopqrstuvwxyz`,o=typeof BigInt==`function`;function s(e,t,n,r){return e===void 0?s[0]:t===void 0||+t==10&&!n?I(e):ge(e,t,n,r)}function c(e,t){this.value=e,this.sign=t,this.isSmall=!1}c.prototype=Object.create(s.prototype);function l(e){this.value=e,this.sign=e<0,this.isSmall=!0}l.prototype=Object.create(s.prototype);function u(e){this.value=e}u.prototype=Object.create(s.prototype);function d(e){return-r0?Math.floor(e):Math.ceil(e)}function _(e,t){var r=e.length,i=t.length,a=Array(r),o=0,s=n,c,l;for(l=0;l=s),a[l]=c-o*s;for(;l0&&a.push(o),a}function v(e,t){return e.length>=t.length?_(e,t):_(t,e)}function y(e,t){var r=e.length,i=Array(r),a=n,o,s;for(s=0;s0;)i[s++]=t%a,t=Math.floor(t/a);return i}c.prototype.add=function(e){var t=I(e);if(this.sign!==t.sign)return this.subtract(t.negate());var n=this.value,r=t.value;return t.isSmall?new c(y(n,Math.abs(r)),this.sign):new c(v(n,r),this.sign)},c.prototype.plus=c.prototype.add,l.prototype.add=function(e){var t=I(e),n=this.value;if(n<0!==t.sign)return this.subtract(t.negate());var r=t.value;if(t.isSmall){if(d(n+r))return new l(n+r);r=f(Math.abs(r))}return new c(y(r,Math.abs(n)),n<0)},l.prototype.plus=l.prototype.add,u.prototype.add=function(e){return new u(this.value+I(e).value)},u.prototype.plus=u.prototype.add;function b(e,t){var r=e.length,i=t.length,a=Array(r),o=0,s=n,c,l;for(c=0;c=0?r=b(e,t):(r=b(t,e),n=!n),r=p(r),typeof r==`number`?(n&&(r=-r),new l(r)):new c(r,n)}function S(e,t,r){var i=e.length,a=Array(i),o=-t,s=n,u,d;for(u=0;u=0)},l.prototype.minus=l.prototype.subtract,u.prototype.subtract=function(e){return new u(this.value-I(e).value)},u.prototype.minus=u.prototype.subtract,c.prototype.negate=function(){return new c(this.value,!this.sign)},l.prototype.negate=function(){var e=this.sign,t=new l(-this.value);return t.sign=!e,t},u.prototype.negate=function(){return new u(-this.value)},c.prototype.abs=function(){return new c(this.value,!1)},l.prototype.abs=function(){return new l(Math.abs(this.value))},u.prototype.abs=function(){return new u(this.value>=0?this.value:-this.value)};function C(e,t){var r=e.length,i=t.length,a=h(r+i),o=n,s,c,l,u,d;for(l=0;l0;)i[c++]=o%a,o=Math.floor(o/a);return i}function T(e,t){for(var n=[];t-->0;)n.push(0);return n.concat(e)}function E(e,t){var n=Math.max(e.length,t.length);if(n<=30)return C(e,t);n=Math.ceil(n/2);var r=e.slice(n),i=e.slice(0,n),a=t.slice(n),o=t.slice(0,n),s=E(i,o),c=E(r,a),l=v(v(s,T(b(b(E(v(i,r),v(o,a)),s),c),n)),T(c,2*n));return m(l),l}function D(e,t){return-.012*e-.012*t+15e-6*e*t>0}c.prototype.multiply=function(e){var t=I(e),r=this.value,i=t.value,a=this.sign!==t.sign,o;if(t.isSmall){if(i===0)return s[0];if(i===1)return this;if(i===-1)return this.negate();if(o=Math.abs(i),o=0;f--){for(d=a-1,l[f+i]!==s&&(d=Math.floor((l[f+i]*a+l[f+i-1])/s)),m=0,g=0,v=u.length,_=0;_i&&(u=(u+1)*s),c=Math.ceil(u/d);do{if(f=w(t,c),ne(f,o)<=0)break;c--}while(c);a.push(c),o=b(o,f)}return a.reverse(),[p(a),p(o)]}function ee(e,t){var r=e.length,i=h(r),a=n,o,s,c=0,l;for(o=r-1;o>=0;--o)l=c*a+e[o],s=g(l/t),c=l-s*t,i[o]=s|0;return[i,c|0]}function te(e,t){var r,i=I(t);if(o)return[new u(e.value/i.value),new u(e.value%i.value)];var a=e.value,d=i.value,m;if(d===0)throw Error(`Cannot divide by zero`);if(e.isSmall)return i.isSmall?[new l(g(a/d)),new l(a%d)]:[s[0],e];if(i.isSmall){if(d===1)return[e,s[0]];if(d==-1)return[e.negate(),s[0]];var h=Math.abs(d);if(ht.length?1:-1;for(var n=e.length-1;n>=0;n--)if(e[n]!==t[n])return e[n]>t[n]?1:-1;return 0}c.prototype.compareAbs=function(e){var t=I(e),n=this.value,r=t.value;return t.isSmall?1:ne(n,r)},l.prototype.compareAbs=function(e){var t=I(e),n=Math.abs(this.value),r=t.value;return t.isSmall?(r=Math.abs(r),n===r?0:n>r?1:-1):-1},u.prototype.compareAbs=function(e){var t=this.value,n=I(e).value;return t=t>=0?t:-t,n=n>=0?n:-n,t===n?0:t>n?1:-1},c.prototype.compare=function(e){if(e===1/0)return-1;if(e===-1/0)return 1;var t=I(e),n=this.value,r=t.value;return this.sign===t.sign?t.isSmall?this.sign?-1:1:ne(n,r)*(this.sign?-1:1):t.sign?1:-1},c.prototype.compareTo=c.prototype.compare,l.prototype.compare=function(e){if(e===1/0)return-1;if(e===-1/0)return 1;var t=I(e),n=this.value,r=t.value;return t.isSmall?n==r?0:n>r?1:-1:n<0===t.sign?n<0?1:-1:n<0?-1:1},l.prototype.compareTo=l.prototype.compare,u.prototype.compare=function(e){if(e===1/0)return-1;if(e===-1/0)return 1;var t=this.value,n=I(e).value;return t===n?0:t>n?1:-1},u.prototype.compareTo=u.prototype.compare,c.prototype.equals=function(e){return this.compare(e)===0},u.prototype.eq=u.prototype.equals=l.prototype.eq=l.prototype.equals=c.prototype.eq=c.prototype.equals,c.prototype.notEquals=function(e){return this.compare(e)!==0},u.prototype.neq=u.prototype.notEquals=l.prototype.neq=l.prototype.notEquals=c.prototype.neq=c.prototype.notEquals,c.prototype.greater=function(e){return this.compare(e)>0},u.prototype.gt=u.prototype.greater=l.prototype.gt=l.prototype.greater=c.prototype.gt=c.prototype.greater,c.prototype.lesser=function(e){return this.compare(e)<0},u.prototype.lt=u.prototype.lesser=l.prototype.lt=l.prototype.lesser=c.prototype.lt=c.prototype.lesser,c.prototype.greaterOrEquals=function(e){return this.compare(e)>=0},u.prototype.geq=u.prototype.greaterOrEquals=l.prototype.geq=l.prototype.greaterOrEquals=c.prototype.geq=c.prototype.greaterOrEquals,c.prototype.lesserOrEquals=function(e){return this.compare(e)<=0},u.prototype.leq=u.prototype.lesserOrEquals=l.prototype.leq=l.prototype.lesserOrEquals=c.prototype.leq=c.prototype.lesserOrEquals,c.prototype.isEven=function(){return(this.value[0]&1)==0},l.prototype.isEven=function(){return(this.value&1)==0},u.prototype.isEven=function(){return(this.value&BigInt(1))===BigInt(0)},c.prototype.isOdd=function(){return(this.value[0]&1)==1},l.prototype.isOdd=function(){return(this.value&1)==1},u.prototype.isOdd=function(){return(this.value&BigInt(1))===BigInt(1)},c.prototype.isPositive=function(){return!this.sign},l.prototype.isPositive=function(){return this.value>0},u.prototype.isPositive=l.prototype.isPositive,c.prototype.isNegative=function(){return this.sign},l.prototype.isNegative=function(){return this.value<0},u.prototype.isNegative=l.prototype.isNegative,c.prototype.isUnit=function(){return!1},l.prototype.isUnit=function(){return Math.abs(this.value)===1},u.prototype.isUnit=function(){return this.abs().value===BigInt(1)},c.prototype.isZero=function(){return!1},l.prototype.isZero=function(){return this.value===0},u.prototype.isZero=function(){return this.value===BigInt(0)},c.prototype.isDivisibleBy=function(e){var t=I(e);return t.isZero()?!1:t.isUnit()?!0:t.compareAbs(2)===0?this.isEven():this.mod(t).isZero()},u.prototype.isDivisibleBy=l.prototype.isDivisibleBy=c.prototype.isDivisibleBy;function re(e){var t=e.abs();if(t.isUnit())return!1;if(t.equals(2)||t.equals(3)||t.equals(5))return!0;if(t.isEven()||t.isDivisibleBy(3)||t.isDivisibleBy(5))return!1;if(t.lesser(49))return!0}function ie(e,n){for(var r=e.prev(),i=r,a=0,o,s,c;i.isEven();)i=i.divide(2),a++;next:for(s=0;s-r?new l(e-1):new c(i,!0)},u.prototype.prev=function(){return new u(this.value-BigInt(1))};for(var ae=[1];2*ae[ae.length-1]<=n;)ae.push(2*ae[ae.length-1]);var M=ae.length,oe=ae[M-1];function se(e){return Math.abs(e)<=n}c.prototype.shiftLeft=function(e){var t=I(e).toJSNumber();if(!se(t))throw Error(String(t)+` is too large for shifting.`);if(t<0)return this.shiftRight(-t);var n=this;if(n.isZero())return n;for(;t>=M;)n=n.multiply(oe),t-=M-1;return n.multiply(ae[t])},u.prototype.shiftLeft=l.prototype.shiftLeft=c.prototype.shiftLeft,c.prototype.shiftRight=function(e){var t,n=I(e).toJSNumber();if(!se(n))throw Error(String(n)+` is too large for shifting.`);if(n<0)return this.shiftLeft(-n);for(var r=this;n>=M;){if(r.isZero()||r.isNegative()&&r.isUnit())return r;t=te(r,oe),r=t[1].isNegative()?t[0].prev():t[0],n-=M-1}return t=te(r,ae[n]),t[1].isNegative()?t[0].prev():t[0]},u.prototype.shiftRight=l.prototype.shiftRight=c.prototype.shiftRight;function ce(e,n,r){n=I(n);for(var i=e.isNegative(),a=n.isNegative(),o=i?e.not():e,s=a?n.not():n,c=0,l=0,u=null,d=null,f=[];!o.isZero()||!s.isZero();)u=te(o,oe),c=u[1].toJSNumber(),i&&(c=oe-1-c),d=te(s,oe),l=d[1].toJSNumber(),a&&(l=oe-1-l),o=u[0],s=d[0],f.push(r(c,l));for(var p=r(+!!i,+!!a)===0?t(0):t(-1),m=f.length-1;m>=0;--m)p=p.multiply(oe).add(t(f[m]));return p}c.prototype.not=function(){return this.negate().prev()},u.prototype.not=l.prototype.not=c.prototype.not,c.prototype.and=function(e){return ce(this,e,function(e,t){return e&t})},u.prototype.and=l.prototype.and=c.prototype.and,c.prototype.or=function(e){return ce(this,e,function(e,t){return e|t})},u.prototype.or=l.prototype.or=c.prototype.or,c.prototype.xor=function(e){return ce(this,e,function(e,t){return e^t})},u.prototype.xor=l.prototype.xor=c.prototype.xor;var le=1<<30,ue=(n&-n)*(n&-n)|le;function N(e){var t=e.value,r=typeof t==`number`?t|le:typeof t==`bigint`?t|BigInt(le):t[0]+t[1]*n|ue;return r&-r}function de(e,n){if(n.compareTo(e)<=0){var r=de(e,n.square(n)),i=r.p,a=r.e,o=i.multiply(n);return o.compareTo(e)<=0?{p:o,e:a*2+1}:{p:i,e:a*2}}return{p:t(1),e:0}}c.prototype.bitLength=function(){var e=this;return e.compareTo(t(0))<0&&(e=e.negate().subtract(t(1))),e.compareTo(t(0))===0?t(0):t(de(e,t(2)).e).add(t(1))},u.prototype.bitLength=l.prototype.bitLength=c.prototype.bitLength;function fe(e,t){return e=I(e),t=I(t),e.greater(t)?e:t}function pe(e,t){return e=I(e),t=I(t),e.lesser(t)?e:t}function me(e,t){if(e=I(e).abs(),t=I(t).abs(),e.equals(t))return e;if(e.isZero())return t;if(t.isZero())return e;for(var n=s[1],r,i;e.isEven()&&t.isEven();)r=pe(N(e),N(t)),e=e.divide(r),t=t.divide(r),n=n.multiply(r);for(;e.isEven();)e=e.divide(N(e));do{for(;t.isEven();)t=t.divide(N(t));e.greater(t)&&(i=t,t=e,e=i),t=t.subtract(e)}while(!t.isZero());return n.isUnit()?e:e.multiply(n)}function he(e,t){return e=I(e).abs(),t=I(t).abs(),e.divide(me(e,t)).multiply(t)}function P(e,t,r){e=I(e),t=I(t);var i=r||Math.random,a=pe(e,t),o=fe(e,t).subtract(a).add(1);if(o.isSmall)return a.add(Math.floor(i()*o));for(var c=ye(o,n).value,l=[],u=!0,d=0;d=s){if(l===`1`&&s===1)continue;throw Error(l+` is not a valid digit in base `+t+`.`)}}t=I(t);var u=[],d=e[0]===`-`;for(o=+!!d;o`&&o=0;a--)r=r.add(e[a].times(i)),i=i.times(t);return n?r.negate():r}function ve(e,t){return t||=a,e`}function ye(e,n){if(n=t(n),n.isZero()){if(e.isZero())return{value:[0],isNegative:!1};throw Error(`Cannot convert nonzero numbers to base 0.`)}if(n.equals(-1)){if(e.isZero())return{value:[0],isNegative:!1};if(e.isNegative())return{value:[].concat.apply([],Array.apply(null,Array(-e.toJSNumber())).map(Array.prototype.valueOf,[1,0])),isNegative:!1};var r=Array.apply(null,Array(e.toJSNumber()-1)).map(Array.prototype.valueOf,[0,1]);return r.unshift([1]),{value:[].concat.apply([],r),isNegative:!1}}var i=!1;if(e.isNegative()&&n.isPositive()&&(i=!0,e=e.abs()),n.isUnit())return e.isZero()?{value:[0],isNegative:!1}:{value:Array.apply(null,Array(e.toJSNumber())).map(Number.prototype.valueOf,1),isNegative:i};for(var a=[],o=e,s;o.isNegative()||o.compareAbs(n)>=0;){s=o.divmod(n),o=s.quotient;var c=s.remainder;c.isNegative()&&(c=n.minus(c).abs(),o=o.next()),a.push(c.toJSNumber())}return a.push(o.toJSNumber()),{value:a.reverse(),isNegative:i}}function be(e,t,n){var r=ye(e,t);return(r.isNegative?`-`:``)+r.value.map(function(e){return ve(e,n)}).join(``)}c.prototype.toArray=function(e){return ye(this,e)},l.prototype.toArray=function(e){return ye(this,e)},u.prototype.toArray=function(e){return ye(this,e)},c.prototype.toString=function(t,n){if(t===e&&(t=10),t!==10||n)return be(this,t,n);for(var r=this.value,i=r.length,a=String(r[--i]),o=`0000000`,s;--i>=0;)s=String(r[i]),a+=o.slice(s.length)+s;return(this.sign?`-`:``)+a},l.prototype.toString=function(t,n){return t===e&&(t=10),t!=10||n?be(this,t,n):String(this.value)},u.prototype.toString=l.prototype.toString,u.prototype.toJSON=c.prototype.toJSON=l.prototype.toJSON=function(){return this.toString()},c.prototype.valueOf=function(){return parseInt(this.toString(),10)},c.prototype.toJSNumber=c.prototype.valueOf,l.prototype.valueOf=function(){return this.value},l.prototype.toJSNumber=l.prototype.valueOf,u.prototype.valueOf=u.prototype.toJSNumber=function(){return parseInt(this.toString(),10)};function xe(e){if(d(+e)){var t=+e;if(t===g(t))return o?new u(BigInt(t)):new l(t);throw Error(`Invalid integer: `+e)}var n=e[0]===`-`;n&&(e=e.slice(1));var r=e.split(/e/i);if(r.length>2)throw Error(`Invalid integer: `+r.join(`e`));if(r.length===2){var i=r[1];if(i[0]===`+`&&(i=i.slice(1)),i=+i,i!==g(i)||!d(i))throw Error(`Invalid integer: `+i+` is not a valid exponent.`);var a=r[0],s=a.indexOf(`.`);if(s>=0&&(i-=a.length-s-1,a=a.slice(0,s)+a.slice(s+1)),i<0)throw Error(`Cannot include negative exponent part for integers`);a+=Array(i+1).join(`0`),e=a}if(!/^([0-9][0-9]*)$/.test(e))throw Error(`Invalid integer: `+e);if(o)return new u(BigInt(n?`-`+e:e));for(var f=[],p=e.length,h=7,_=p-h;p>0;)f.push(+e.slice(_,p)),_-=h,_<0&&(_=0),p-=h;return m(f),new c(f,n)}function F(e){if(o)return new u(BigInt(e));if(d(e)){if(e!==g(e))throw Error(e+` is not an integer.`);return new l(e)}return xe(e.toString())}function I(e){return typeof e==`number`?F(e):typeof e==`string`?xe(e):typeof e==`bigint`?new u(e):e}for(var L=0;L<1e3;L++)s[L]=I(L),L>0&&(s[-L]=I(-L));return s.one=s[1],s.zero=s[0],s.minusOne=s[-1],s.max=fe,s.min=pe,s.gcd=me,s.lcm=he,s.isInstance=function(e){return e instanceof c||e instanceof l||e instanceof u},s.randBetween=P,s.fromArray=function(e,t,n){return _e(e.map(I),I(t||10),n)},s})();e.hasOwnProperty(`exports`)&&(e.exports=t)})(wa),wa.exports)}var Da=rr(Ea()),Oa=64,ka=16,Aa=Oa/ka;function ja(){try{return!0}catch{return!1}}function Ma(e,t,n){let r=0;for(let i=0;ie&t[n]))}or({parts:t}){return new e(this.parts.map((e,n)=>e|t[n]))}xor({parts:t}){return new e(this.parts.map((e,n)=>e^t[n]))}not(){return new e(this.parts.map(e=>~e))}equals({parts:e}){return this.parts.every((t,n)=>t===e[n])}toString(){if(this.str!=null)return this.str;let e=Array(Oa/4);return this.parts.forEach((t,n)=>{let r=Na(t.toString());for(let t=0;t<4;t++)e[t+n*4]=r[3-t]||0}),this.str=Da.fromArray(e,16).toString()}toJSON(){return this.toString()}},Ia=ja();Ia&&BigInt.prototype.toJSON==null&&(BigInt.prototype.toJSON=function(){return this.toString()});var La={},Ra=Ia?function(e){return BigInt(e)}:function(e){return e instanceof Fa?e:(typeof e==`number`&&(e=e.toString()),La[e]??(La[e]=Fa.fromString(e)),La[e])},za=Ra(0),Ba=Ia?function(e=za,t=za){return e&t}:function(e=za,t=za){return e.and(t)},Va=Ia?function(e=za,t=za){return e|t}:function(e=za,t=za){return e.or(t)},Ha=Ia?function(e=za,t=za){return e^t}:function(e=za,t=za){return e.xor(t)},Ua=Ia?function(e=za){return~e}:function(e=za){return e.not()},Wa=Ia?function(e,t){return e===t}:function(e,t){return e==null||t==null?e==t:e.equals(t)};function Ga(...e){let t=e[0];for(let n=1;n{let[n]=Object.entries(e).find(([,e])=>e===t)??[];return t!=null&&n===void 0?e.UNHANDLED:t},H().or(Ki()))}function no(e){let t=Hi().transform(t=>{let n=e.safeParse(t);return n.success?n.data:e._def.defaultValue()});return t.overlayType=e,t}var ro=W.object({image_url:W.string()}).describe(`Response for "INITIATE_IMAGE_UPLOAD" Command`),io=W.object({mediaUrl:W.string().max(1024)}).describe(`Request for "OPEN_SHARE_MOMENT_DIALOG" Command`),ao=W.object({access_token:W.union([W.string(),W.null()]).optional()}).describe(`Request for "AUTHENTICATE" Command`),oo=W.object({access_token:W.string(),user:W.object({username:W.string(),discriminator:W.string(),id:W.string(),avatar:W.union([W.string(),W.null()]).optional(),public_flags:W.number(),global_name:W.union([W.string(),W.null()]).optional()}),scopes:W.array(no(W.enum(`identify,identify.premium,email,connections,guilds,guilds.join,guilds.members.read,guilds.channels.read,gdm.join,bot,rpc,rpc.notifications.read,rpc.voice.read,rpc.voice.write,rpc.video.read,rpc.video.write,rpc.screenshare.read,rpc.screenshare.write,rpc.activities.write,webhook.incoming,messages.read,applications.builds.upload,applications.builds.read,applications.commands,applications.commands.permissions.update,applications.commands.update,applications.store.update,applications.entitlements,activities.read,activities.write,activities.invites.write,relationships.read,relationships.write,voice,dm_channels.read,role_connections.write,presences.read,presences.write,openid,dm_channels.messages.read,dm_channels.messages.write,gateway.connect,account.global_name.update,payment_sources.country_code,sdk.social_layer_presence,sdk.social_layer,lobbies.write,application_identities.write`.split(`,`)).or(W.literal(-1)).default(-1))),expires:W.string(),application:W.object({description:W.string(),icon:W.union([W.string(),W.null()]).optional(),id:W.string(),rpc_origins:W.array(W.string()).optional(),name:W.string()})}).describe(`Response for "AUTHENTICATE" Command`),so=W.object({participants:W.array(W.object({id:W.string(),username:W.string(),global_name:W.union([W.string(),W.null()]).optional(),discriminator:W.string(),avatar:W.union([W.string(),W.null()]).optional(),flags:W.number(),bot:W.boolean(),avatar_decoration_data:W.union([W.object({asset:W.union([W.string(),W.null()]).optional(),skuId:W.string().optional(),expiresAt:W.number().optional()}),W.null()]).optional(),premium_type:W.union([W.number(),W.null()]).optional(),nickname:W.string().optional()}))}).describe(`Response for "GET_ACTIVITY_INSTANCE_CONNECTED_PARTICIPANTS" Command`),co=W.object({command:W.string(),options:W.array(W.object({name:W.string(),value:W.string()})).optional(),content:W.string().max(2e3).optional(),require_launch_channel:W.boolean().optional(),preview_image:W.object({height:W.number(),url:W.string(),width:W.number()}).optional(),components:W.array(W.object({type:W.literal(1),components:W.array(W.object({type:W.literal(2),style:W.number().gte(1).lte(5),label:W.string().max(80).optional(),custom_id:W.string().max(100).describe(`Developer-defined identifier for the button; max 100 characters`).optional()})).max(5).optional()})).optional(),pid:W.number().optional()}).describe(`Request for "SHARE_INTERACTION" Command`),lo=W.object({success:W.boolean()}).describe(`Response for "SHARE_INTERACTION" Command`),uo=W.object({custom_id:W.string().max(64).optional(),message:W.string().max(1e3),link_id:W.string().max(64).optional()}).describe(`Request for "SHARE_LINK" Command`),fo=W.object({success:W.boolean(),didCopyLink:W.boolean(),didSendMessage:W.boolean()}).describe(`Response for "SHARE_LINK" Command`),po=W.object({relationships:W.array(W.object({type:W.number(),user:W.object({id:W.string(),username:W.string(),global_name:W.union([W.string(),W.null()]).optional(),discriminator:W.string(),avatar:W.union([W.string(),W.null()]).optional(),flags:W.number(),bot:W.boolean(),avatar_decoration_data:W.union([W.object({asset:W.union([W.string(),W.null()]).optional(),skuId:W.string().optional(),expiresAt:W.number().optional()}),W.null()]).optional(),premium_type:W.union([W.number(),W.null()]).optional()}),presence:W.object({status:W.string(),activity:W.union([W.object({session_id:W.string().optional(),type:W.number().optional(),name:W.string(),url:W.union([W.string(),W.null()]).optional(),application_id:W.string().optional(),status_display_type:W.number().optional(),state:W.string().optional(),state_url:W.string().optional(),details:W.string().optional(),details_url:W.string().optional(),emoji:W.union([W.object({name:W.string(),id:W.union([W.string(),W.null()]).optional(),animated:W.union([W.boolean(),W.null()]).optional()}),W.null()]).optional(),assets:W.object({large_image:W.string().optional(),large_text:W.string().optional(),large_url:W.string().optional(),small_image:W.string().optional(),small_text:W.string().optional(),small_url:W.string().optional()}).optional(),timestamps:W.object({start:W.number().optional(),end:W.number().optional()}).optional(),party:W.object({id:W.string().optional(),size:W.array(W.number()).min(2).max(2).optional(),privacy:W.number().optional()}).optional(),secrets:W.object({match:W.string().optional(),join:W.string().optional()}).optional(),sync_id:W.string().optional(),created_at:W.number().optional(),instance:W.boolean().optional(),flags:W.number().optional(),metadata:W.object({}).optional(),platform:W.string().optional(),supported_platforms:W.array(W.string()).optional(),buttons:W.array(W.string()).optional(),hangStatus:W.string().optional()}),W.null()]).optional()}).optional()}))}).describe(`Response for "GET_RELATIONSHIPS" Command`),mo=W.object({user_id:W.string(),content:W.string().min(0).max(1024).optional()}).describe(`Request for "INVITE_USER_EMBEDDED" Command`),ho=W.object({id:W.string().max(64)}).describe(`Request for "GET_USER" Command`),go=W.union([W.object({id:W.string(),username:W.string(),global_name:W.union([W.string(),W.null()]).optional(),discriminator:W.string(),avatar:W.union([W.string(),W.null()]).optional(),flags:W.number(),bot:W.boolean(),avatar_decoration_data:W.union([W.object({asset:W.union([W.string(),W.null()]).optional(),skuId:W.string().optional(),expiresAt:W.number().optional()}),W.null()]).optional(),premium_type:W.union([W.number(),W.null()]).optional()}),W.null()]),_o=W.object({quest_id:W.string()}).describe(`Request for "GET_QUEST_ENROLLMENT_STATUS" Command`),vo=W.object({quest_id:W.string(),is_enrolled:W.boolean(),enrolled_at:W.union([W.string(),W.null()]).optional()}).describe(`Response for "GET_QUEST_ENROLLMENT_STATUS" Command`),yo=W.object({quest_id:W.string()}).describe(`Request for "QUEST_START_TIMER" Command`),bo=W.object({success:W.boolean()}).describe(`Response for "QUEST_START_TIMER" Command`),xo=W.object({quest_id:W.string(),enrolled_at:W.union([W.string(),W.null()]).optional(),completed_at:W.union([W.string(),W.null()]).optional(),external_cta_url:W.string()}).describe(`Response for "GET_QUEST" Command`),So=W.object({ticket:W.string()}).describe(`Response for "REQUEST_PROXY_TICKET_REFRESH" Command`),Co;(function(e){e.INITIATE_IMAGE_UPLOAD=`INITIATE_IMAGE_UPLOAD`,e.OPEN_SHARE_MOMENT_DIALOG=`OPEN_SHARE_MOMENT_DIALOG`,e.AUTHENTICATE=`AUTHENTICATE`,e.GET_ACTIVITY_INSTANCE_CONNECTED_PARTICIPANTS=`GET_ACTIVITY_INSTANCE_CONNECTED_PARTICIPANTS`,e.SHARE_INTERACTION=`SHARE_INTERACTION`,e.SHARE_LINK=`SHARE_LINK`,e.GET_RELATIONSHIPS=`GET_RELATIONSHIPS`,e.INVITE_USER_EMBEDDED=`INVITE_USER_EMBEDDED`,e.GET_USER=`GET_USER`,e.GET_QUEST_ENROLLMENT_STATUS=`GET_QUEST_ENROLLMENT_STATUS`,e.QUEST_START_TIMER=`QUEST_START_TIMER`,e.GET_QUEST=`GET_QUEST`,e.REQUEST_PROXY_TICKET_REFRESH=`REQUEST_PROXY_TICKET_REFRESH`})(Co||={});var wo=W.object({}).optional().nullable(),To=W.void(),Eo={[Co.INITIATE_IMAGE_UPLOAD]:{request:To,response:ro},[Co.OPEN_SHARE_MOMENT_DIALOG]:{request:io,response:wo},[Co.AUTHENTICATE]:{request:ao,response:oo},[Co.GET_ACTIVITY_INSTANCE_CONNECTED_PARTICIPANTS]:{request:To,response:so},[Co.SHARE_INTERACTION]:{request:co,response:lo},[Co.SHARE_LINK]:{request:uo,response:fo},[Co.GET_RELATIONSHIPS]:{request:To,response:po},[Co.INVITE_USER_EMBEDDED]:{request:mo,response:wo},[Co.GET_USER]:{request:ho,response:go},[Co.GET_QUEST_ENROLLMENT_STATUS]:{request:_o,response:vo},[Co.QUEST_START_TIMER]:{request:yo,response:bo},[Co.GET_QUEST]:{request:To,response:xo},[Co.REQUEST_PROXY_TICKET_REFRESH]:{request:To,response:So}},Do=t({Activity:()=>Ho,Attachment:()=>Zo,CertifiedDevice:()=>_s,CertifiedDeviceTypeObject:()=>gs,Channel:()=>Ko,ChannelMention:()=>Xo,ChannelTypesObject:()=>Go,Commands:()=>ko,DISPATCH:()=>Oo,Embed:()=>is,EmbedAuthor:()=>ns,EmbedField:()=>rs,EmbedFooter:()=>Qo,EmbedProvider:()=>ts,Emoji:()=>Lo,Entitlement:()=>xs,EntitlementTypesObject:()=>bs,Guild:()=>Yo,GuildMember:()=>Fo,GuildMemberRPC:()=>Io,Image:()=>$o,KeyTypesObject:()=>ds,LayoutMode:()=>ks,LayoutModeTypeObject:()=>Os,Message:()=>ls,MessageActivity:()=>os,MessageApplication:()=>ss,MessageReference:()=>cs,Orientation:()=>Ds,OrientationLockState:()=>Cs,OrientationLockStateTypeObject:()=>Ss,OrientationTypeObject:()=>Es,PermissionOverwrite:()=>Wo,PermissionOverwriteTypeObject:()=>Uo,PresenceUpdate:()=>qo,Reaction:()=>as,ReceiveFramePayload:()=>Ao,Relationship:()=>No,Role:()=>Jo,Scopes:()=>Mo,ScopesObject:()=>jo,ShortcutKey:()=>fs,Sku:()=>ys,SkuTypeObject:()=>vs,Status:()=>Vo,StatusObject:()=>Bo,ThermalState:()=>Ts,ThermalStateTypeObject:()=>ws,User:()=>Po,UserVoiceState:()=>zo,Video:()=>es,VoiceDevice:()=>us,VoiceSettingModeTypeObject:()=>ps,VoiceSettingsIO:()=>hs,VoiceSettingsMode:()=>ms,VoiceState:()=>Ro}),Oo=`DISPATCH`,ko;(function(e){e.AUTHORIZE=`AUTHORIZE`,e.GET_GUILDS=`GET_GUILDS`,e.GET_GUILD=`GET_GUILD`,e.GET_CHANNEL=`GET_CHANNEL`,e.GET_CHANNELS=`GET_CHANNELS`,e.SELECT_VOICE_CHANNEL=`SELECT_VOICE_CHANNEL`,e.SELECT_TEXT_CHANNEL=`SELECT_TEXT_CHANNEL`,e.SUBSCRIBE=`SUBSCRIBE`,e.UNSUBSCRIBE=`UNSUBSCRIBE`,e.CAPTURE_SHORTCUT=`CAPTURE_SHORTCUT`,e.SET_CERTIFIED_DEVICES=`SET_CERTIFIED_DEVICES`,e.SET_ACTIVITY=`SET_ACTIVITY`,e.GET_SKUS=`GET_SKUS`,e.GET_ENTITLEMENTS=`GET_ENTITLEMENTS`,e.GET_SKUS_EMBEDDED=`GET_SKUS_EMBEDDED`,e.GET_ENTITLEMENTS_EMBEDDED=`GET_ENTITLEMENTS_EMBEDDED`,e.START_PURCHASE=`START_PURCHASE`,e.SET_CONFIG=`SET_CONFIG`,e.SEND_ANALYTICS_EVENT=`SEND_ANALYTICS_EVENT`,e.USER_SETTINGS_GET_LOCALE=`USER_SETTINGS_GET_LOCALE`,e.OPEN_EXTERNAL_LINK=`OPEN_EXTERNAL_LINK`,e.ENCOURAGE_HW_ACCELERATION=`ENCOURAGE_HW_ACCELERATION`,e.CAPTURE_LOG=`CAPTURE_LOG`,e.SET_ORIENTATION_LOCK_STATE=`SET_ORIENTATION_LOCK_STATE`,e.OPEN_INVITE_DIALOG=`OPEN_INVITE_DIALOG`,e.GET_PLATFORM_BEHAVIORS=`GET_PLATFORM_BEHAVIORS`,e.GET_CHANNEL_PERMISSIONS=`GET_CHANNEL_PERMISSIONS`,e.AUTHENTICATE=`AUTHENTICATE`,e.GET_ACTIVITY_INSTANCE_CONNECTED_PARTICIPANTS=`GET_ACTIVITY_INSTANCE_CONNECTED_PARTICIPANTS`,e.GET_QUEST=`GET_QUEST`,e.GET_QUEST_ENROLLMENT_STATUS=`GET_QUEST_ENROLLMENT_STATUS`,e.GET_RELATIONSHIPS=`GET_RELATIONSHIPS`,e.GET_USER=`GET_USER`,e.INITIATE_IMAGE_UPLOAD=`INITIATE_IMAGE_UPLOAD`,e.INVITE_USER_EMBEDDED=`INVITE_USER_EMBEDDED`,e.OPEN_SHARE_MOMENT_DIALOG=`OPEN_SHARE_MOMENT_DIALOG`,e.QUEST_START_TIMER=`QUEST_START_TIMER`,e.REQUEST_PROXY_TICKET_REFRESH=`REQUEST_PROXY_TICKET_REFRESH`,e.SHARE_INTERACTION=`SHARE_INTERACTION`,e.SHARE_LINK=`SHARE_LINK`})(ko||={});var Ao=U({cmd:H(),data:ta(),evt:$i(),nonce:H()}).passthrough(),jo=Object.assign(Object.assign({},oo.shape.scopes.element.overlayType._def.innerType.options[0].Values),{UNHANDLED:-1}),Mo=to(jo),No=po.shape.relationships.element,Po=U({id:H(),username:H(),discriminator:H(),global_name:H().optional().nullable(),avatar:H().optional().nullable(),avatar_decoration_data:U({asset:H(),sku_id:H().optional()}).nullable(),bot:Yi(),flags:Ki().optional().nullable(),premium_type:Ki().optional().nullable()}),Fo=U({user:Po,nick:H().optional().nullable(),roles:ia(H()),joined_at:H(),deaf:Yi(),mute:Yi()}),Io=U({user_id:H(),nick:H().optional().nullable(),guild_id:H(),avatar:H().optional().nullable(),avatar_decoration_data:U({asset:H(),sku_id:H().optional().nullable()}).optional().nullable(),color_string:H().optional().nullable()}),Lo=U({id:H(),name:H().optional().nullable(),roles:ia(H()).optional().nullable(),user:Po.optional().nullable(),require_colons:Yi().optional().nullable(),managed:Yi().optional().nullable(),animated:Yi().optional().nullable(),available:Yi().optional().nullable()}),Ro=U({mute:Yi(),deaf:Yi(),self_mute:Yi(),self_deaf:Yi(),suppress:Yi()}),zo=U({mute:Yi(),nick:H(),user:Po,voice_state:Ro,volume:Ki()}),Bo={UNHANDLED:-1,IDLE:`idle`,DND:`dnd`,ONLINE:`online`,OFFLINE:`offline`},Vo=to(Bo),Ho=U({name:H(),type:Ki(),url:H().optional().nullable(),created_at:Ki().optional().nullable(),timestamps:U({start:Ki(),end:Ki()}).partial().optional().nullable(),application_id:H().optional().nullable(),details:H().optional().nullable(),details_url:H().url().optional().nullable(),state:H().optional().nullable(),state_url:H().url().optional().nullable(),emoji:Lo.optional().nullable(),party:U({id:H().optional().nullable(),size:ia(Ki()).optional().nullable()}).optional().nullable(),assets:U({large_image:H().nullable(),large_text:H().nullable(),large_url:H().url().optional().nullable(),small_image:H().nullable(),small_text:H().nullable(),small_url:H().url().optional().nullable()}).partial().optional().nullable(),secrets:U({join:H(),match:H()}).partial().optional().nullable(),instance:Yi().optional().nullable(),flags:Ki().optional().nullable()}),Uo={UNHANDLED:-1,ROLE:0,MEMBER:1},Wo=U({id:H(),type:to(Uo),allow:H(),deny:H()}),Go={UNHANDLED:-1,DM:1,GROUP_DM:3,GUILD_TEXT:0,GUILD_VOICE:2,GUILD_CATEGORY:4,GUILD_ANNOUNCEMENT:5,GUILD_STORE:6,ANNOUNCEMENT_THREAD:10,PUBLIC_THREAD:11,PRIVATE_THREAD:12,GUILD_STAGE_VOICE:13,GUILD_DIRECTORY:14,GUILD_FORUM:15},Ko=U({id:H(),type:to(Go),guild_id:H().optional().nullable(),position:Ki().optional().nullable(),permission_overwrites:ia(Wo).optional().nullable(),name:H().optional().nullable(),topic:H().optional().nullable(),nsfw:Yi().optional().nullable(),last_message_id:H().optional().nullable(),bitrate:Ki().optional().nullable(),user_limit:Ki().optional().nullable(),rate_limit_per_user:Ki().optional().nullable(),recipients:ia(Po).optional().nullable(),icon:H().optional().nullable(),owner_id:H().optional().nullable(),application_id:H().optional().nullable(),parent_id:H().optional().nullable(),last_pin_timestamp:H().optional().nullable()}),qo=U({user:Po,guild_id:H(),status:Vo,activities:ia(Ho),client_status:U({desktop:Vo,mobile:Vo,web:Vo}).partial()}),Jo=U({id:H(),name:H(),color:Ki(),hoist:Yi(),position:Ki(),permissions:H(),managed:Yi(),mentionable:Yi()}),Yo=U({id:H(),name:H(),owner_id:H(),icon:H().nullable(),icon_hash:H().optional().nullable(),splash:H().nullable(),discovery_splash:H().nullable(),owner:Yi().optional().nullable(),permissions:H().optional().nullable(),region:H(),afk_channel_id:H().nullable(),afk_timeout:Ki(),widget_enabled:Yi().optional().nullable(),widget_channel_id:H().optional().nullable(),verification_level:Ki(),default_message_notifications:Ki(),explicit_content_filter:Ki(),roles:ia(Jo),emojis:ia(Lo),features:ia(H()),mfa_level:Ki(),application_id:H().nullable(),system_channel_id:H().nullable(),system_channel_flags:Ki(),rules_channel_id:H().nullable(),joined_at:H().optional().nullable(),large:Yi().optional().nullable(),unavailable:Yi().optional().nullable(),member_count:Ki().optional().nullable(),voice_states:ia(Ro).optional().nullable(),members:ia(Fo).optional().nullable(),channels:ia(Ko).optional().nullable(),presences:ia(qo).optional().nullable(),max_presences:Ki().optional().nullable(),max_members:Ki().optional().nullable(),vanity_url_code:H().nullable(),description:H().nullable(),banner:H().nullable(),premium_tier:Ki(),premium_subscription_count:Ki().optional().nullable(),preferred_locale:H(),public_updates_channel_id:H().nullable(),max_video_channel_users:Ki().optional().nullable(),approximate_member_count:Ki().optional().nullable(),approximate_presence_count:Ki().optional().nullable()}),Xo=U({id:H(),guild_id:H(),type:Ki(),name:H()}),Zo=U({id:H(),filename:H(),size:Ki(),url:H(),proxy_url:H(),height:Ki().optional().nullable(),width:Ki().optional().nullable()}),Qo=U({text:H(),icon_url:H().optional().nullable(),proxy_icon_url:H().optional().nullable()}),$o=U({url:H().optional().nullable(),proxy_url:H().optional().nullable(),height:Ki().optional().nullable(),width:Ki().optional().nullable()}),es=$o.omit({proxy_url:!0}),ts=U({name:H().optional().nullable(),url:H().optional().nullable()}),ns=U({name:H().optional().nullable(),url:H().optional().nullable(),icon_url:H().optional().nullable(),proxy_icon_url:H().optional().nullable()}),rs=U({name:H(),value:H(),inline:Yi()}),is=U({title:H().optional().nullable(),type:H().optional().nullable(),description:H().optional().nullable(),url:H().optional().nullable(),timestamp:H().optional().nullable(),color:Ki().optional().nullable(),footer:Qo.optional().nullable(),image:$o.optional().nullable(),thumbnail:$o.optional().nullable(),video:es.optional().nullable(),provider:ts.optional().nullable(),author:ns.optional().nullable(),fields:ia(rs).optional().nullable()}),as=U({count:Ki(),me:Yi(),emoji:Lo}),os=U({type:Ki(),party_id:H().optional().nullable()}),ss=U({id:H(),cover_image:H().optional().nullable(),description:H(),icon:H().optional().nullable(),name:H()}),cs=U({message_id:H().optional().nullable(),channel_id:H().optional().nullable(),guild_id:H().optional().nullable()}),ls=U({id:H(),channel_id:H(),guild_id:H().optional().nullable(),author:Po.optional().nullable(),member:Fo.optional().nullable(),content:H(),timestamp:H(),edited_timestamp:H().optional().nullable(),tts:Yi(),mention_everyone:Yi(),mentions:ia(Po),mention_roles:ia(H()),mention_channels:ia(Xo),attachments:ia(Zo),embeds:ia(is),reactions:ia(as).optional().nullable(),nonce:oa([H(),Ki()]).optional().nullable(),pinned:Yi(),webhook_id:H().optional().nullable(),type:Ki(),activity:os.optional().nullable(),application:ss.optional().nullable(),message_reference:cs.optional().nullable(),flags:Ki().optional().nullable(),stickers:ia(ta()).optional().nullable(),referenced_message:ta().optional().nullable()}),us=U({id:H(),name:H()}),ds={UNHANDLED:-1,KEYBOARD_KEY:0,MOUSE_BUTTON:1,KEYBOARD_MODIFIER_KEY:2,GAMEPAD_BUTTON:3},fs=U({type:to(ds),code:Ki(),name:H()}),ps={UNHANDLED:-1,PUSH_TO_TALK:`PUSH_TO_TALK`,VOICE_ACTIVITY:`VOICE_ACTIVITY`},ms=U({type:to(ps),auto_threshold:Yi(),threshold:Ki(),shortcut:ia(fs),delay:Ki()}),hs=U({device_id:H(),volume:Ki(),available_devices:ia(us)}),gs={UNHANDLED:-1,AUDIO_INPUT:`AUDIO_INPUT`,AUDIO_OUTPUT:`AUDIO_OUTPUT`,VIDEO_INPUT:`VIDEO_INPUT`},_s=U({type:to(gs),id:H(),vendor:U({name:H(),url:H()}),model:U({name:H(),url:H()}),related:ia(H()),echo_cancellation:Yi().optional().nullable(),noise_suppression:Yi().optional().nullable(),automatic_gain_control:Yi().optional().nullable(),hardware_mute:Yi().optional().nullable()}),vs={UNHANDLED:-1,APPLICATION:1,DLC:2,CONSUMABLE:3,BUNDLE:4,SUBSCRIPTION:5},ys=U({id:H(),name:H(),type:to(vs),price:U({amount:Ki(),currency:H()}),application_id:H(),flags:Ki(),release_date:H().nullable()}),bs={UNHANDLED:-1,PURCHASE:1,PREMIUM_SUBSCRIPTION:2,DEVELOPER_GIFT:3,TEST_MODE_PURCHASE:4,FREE_PURCHASE:5,USER_GIFT:6,PREMIUM_PURCHASE:7},xs=U({id:H(),sku_id:H(),application_id:H(),user_id:H(),gift_code_flags:Ki(),type:to(bs),gifter_user_id:H().optional().nullable(),branches:ia(H()).optional().nullable(),starts_at:H().optional().nullable(),ends_at:H().optional().nullable(),parent_id:H().optional().nullable(),consumed:Yi().optional().nullable(),deleted:Yi().optional().nullable(),gift_code_batch_id:H().optional().nullable()}),Ss={UNHANDLED:-1,UNLOCKED:1,PORTRAIT:2,LANDSCAPE:3},Cs=to(Ss),ws={UNHANDLED:-1,NOMINAL:0,FAIR:1,SERIOUS:2,CRITICAL:3},Ts=to(ws),Es={UNHANDLED:-1,PORTRAIT:0,LANDSCAPE:1},Ds=to(Es),Os={UNHANDLED:-1,FOCUSED:0,PIP:1,GRID:2},ks=to(Os),As=`ERROR`,js;(function(e){e.READY=`READY`,e.VOICE_STATE_UPDATE=`VOICE_STATE_UPDATE`,e.SPEAKING_START=`SPEAKING_START`,e.SPEAKING_STOP=`SPEAKING_STOP`,e.ACTIVITY_LAYOUT_MODE_UPDATE=`ACTIVITY_LAYOUT_MODE_UPDATE`,e.ORIENTATION_UPDATE=`ORIENTATION_UPDATE`,e.CURRENT_USER_UPDATE=`CURRENT_USER_UPDATE`,e.CURRENT_GUILD_MEMBER_UPDATE=`CURRENT_GUILD_MEMBER_UPDATE`,e.ENTITLEMENT_CREATE=`ENTITLEMENT_CREATE`,e.THERMAL_STATE_UPDATE=`THERMAL_STATE_UPDATE`,e.ACTIVITY_INSTANCE_PARTICIPANTS_UPDATE=`ACTIVITY_INSTANCE_PARTICIPANTS_UPDATE`,e.RELATIONSHIP_UPDATE=`RELATIONSHIP_UPDATE`,e.ACTIVITY_JOIN=`ACTIVITY_JOIN`,e.QUEST_ENROLLMENT_STATUS_UPDATE=`QUEST_ENROLLMENT_STATUS_UPDATE`})(js||={});var Ms=Ao.extend({evt:_a(js),nonce:H().nullable(),cmd:ha(Oo),data:U({}).passthrough()}),Ns=Ao.extend({evt:ha(As),data:U({code:Ki(),message:H().optional()}).passthrough(),cmd:_a(ko),nonce:H().nullable()}),Ps=oa([Ms,Ms.extend({evt:H()}),Ns]);function Fs(e){let t=e.evt;if(!(t in js))throw Error(`Unrecognized event type ${e.evt}`);return Is[t].payload.parse(e)}var Is={[js.READY]:{payload:Ms.extend({evt:ha(js.READY),data:U({v:Ki(),config:U({cdn_host:H().optional(),api_endpoint:H(),environment:H()}),user:U({id:H(),username:H(),discriminator:H(),avatar:H().optional()}).optional()})})},[js.VOICE_STATE_UPDATE]:{payload:Ms.extend({evt:ha(js.VOICE_STATE_UPDATE),data:zo}),subscribeArgs:U({channel_id:H()})},[js.SPEAKING_START]:{payload:Ms.extend({evt:ha(js.SPEAKING_START),data:U({lobby_id:H().optional(),channel_id:H().optional(),user_id:H()})}),subscribeArgs:U({lobby_id:H().nullable().optional(),channel_id:H().nullable().optional()})},[js.SPEAKING_STOP]:{payload:Ms.extend({evt:ha(js.SPEAKING_STOP),data:U({lobby_id:H().optional(),channel_id:H().optional(),user_id:H()})}),subscribeArgs:U({lobby_id:H().nullable().optional(),channel_id:H().nullable().optional()})},[js.ACTIVITY_LAYOUT_MODE_UPDATE]:{payload:Ms.extend({evt:ha(js.ACTIVITY_LAYOUT_MODE_UPDATE),data:U({layout_mode:to(Os)})})},[js.ORIENTATION_UPDATE]:{payload:Ms.extend({evt:ha(js.ORIENTATION_UPDATE),data:U({screen_orientation:to(Es),orientation:_a($a)})})},[js.CURRENT_USER_UPDATE]:{payload:Ms.extend({evt:ha(js.CURRENT_USER_UPDATE),data:Po})},[js.CURRENT_GUILD_MEMBER_UPDATE]:{payload:Ms.extend({evt:ha(js.CURRENT_GUILD_MEMBER_UPDATE),data:Io}),subscribeArgs:U({guild_id:H()})},[js.ENTITLEMENT_CREATE]:{payload:Ms.extend({evt:ha(js.ENTITLEMENT_CREATE),data:U({entitlement:xs})})},[js.THERMAL_STATE_UPDATE]:{payload:Ms.extend({evt:ha(js.THERMAL_STATE_UPDATE),data:U({thermal_state:Ts})})},[js.ACTIVITY_INSTANCE_PARTICIPANTS_UPDATE]:{payload:Ms.extend({evt:ha(js.ACTIVITY_INSTANCE_PARTICIPANTS_UPDATE),data:U({participants:so.shape.participants})})},[js.RELATIONSHIP_UPDATE]:{payload:Ms.extend({evt:ha(js.RELATIONSHIP_UPDATE),data:No})},[js.ACTIVITY_JOIN]:{payload:Ms.extend({evt:ha(js.ACTIVITY_JOIN),data:U({applicationId:H(),secret:H()})})},[js.QUEST_ENROLLMENT_STATUS_UPDATE]:{payload:Ms.extend({evt:ha(js.QUEST_ENROLLMENT_STATUS_UPDATE),data:U({quest_id:H(),is_enrolled:Yi(),enrolled_at:H().date()})})}};function Ls(e,t){throw t}var Rs=U({}).nullable(),zs=U({code:H()}),Bs=U({guilds:ia(U({id:H(),name:H()}))}),Vs=U({id:H(),name:H(),icon_url:H().optional(),members:ia(Fo)}),Hs=U({id:H(),type:to(Go),guild_id:H().optional().nullable(),name:H().optional().nullable(),topic:H().optional().nullable(),bitrate:Ki().optional().nullable(),user_limit:Ki().optional().nullable(),position:Ki().optional().nullable(),voice_states:ia(zo),messages:ia(ls)}),Us=U({channels:ia(Ko)});Hs.nullable();var Ws=Hs.nullable(),Gs=Hs.nullable();U({input:hs,output:hs,mode:ms,automatic_gain_control:Yi(),echo_cancellation:Yi(),noise_suppression:Yi(),qos:Yi(),silence_warning:Yi(),deaf:Yi(),mute:Yi()});var Ks=U({evt:H()}),qs=U({shortcut:fs}),Js=Ho,Ys=U({skus:ia(ys)}),Xs=U({entitlements:ia(xs)}),Zs=ia(xs).nullable(),Qs=U({use_interactive_pip:Yi()}),$s=U({locale:H()}),ec=U({enabled:Yi()}),tc=U({permissions:Ji().or(H())}),nc=no(U({opened:Yi().or($i())}).default({opened:null})),rc=U({iosKeyboardResizesView:ba(Yi())}),ic=Ao.extend({cmd:_a(ko),evt:$i()});function ac({cmd:e,data:t}){switch(e){case ko.AUTHORIZE:return zs.parse(t);case ko.CAPTURE_SHORTCUT:return qs.parse(t);case ko.ENCOURAGE_HW_ACCELERATION:return ec.parse(t);case ko.GET_CHANNEL:return Hs.parse(t);case ko.GET_CHANNELS:return Us.parse(t);case ko.GET_CHANNEL_PERMISSIONS:return tc.parse(t);case ko.GET_GUILD:return Vs.parse(t);case ko.GET_GUILDS:return Bs.parse(t);case ko.GET_PLATFORM_BEHAVIORS:return rc.parse(t);case ko.GET_CHANNEL:return Hs.parse(t);case ko.SELECT_TEXT_CHANNEL:return Gs.parse(t);case ko.SELECT_VOICE_CHANNEL:return Ws.parse(t);case ko.SET_ACTIVITY:return Js.parse(t);case ko.GET_SKUS_EMBEDDED:return Ys.parse(t);case ko.GET_ENTITLEMENTS_EMBEDDED:return Xs.parse(t);case ko.SET_CONFIG:return Qs.parse(t);case ko.START_PURCHASE:return Zs.parse(t);case ko.SUBSCRIBE:case ko.UNSUBSCRIBE:return Ks.parse(t);case ko.USER_SETTINGS_GET_LOCALE:return $s.parse(t);case ko.OPEN_EXTERNAL_LINK:return nc.parse(t);case ko.SET_ORIENTATION_LOCK_STATE:case ko.SET_CERTIFIED_DEVICES:case ko.SEND_ANALYTICS_EVENT:case ko.OPEN_INVITE_DIALOG:case ko.CAPTURE_LOG:case ko.GET_SKUS:case ko.GET_ENTITLEMENTS:return Rs.parse(t);case ko.AUTHENTICATE:case ko.GET_ACTIVITY_INSTANCE_CONNECTED_PARTICIPANTS:case ko.GET_QUEST:case ko.GET_QUEST_ENROLLMENT_STATUS:case ko.GET_RELATIONSHIPS:case ko.GET_USER:case ko.INITIATE_IMAGE_UPLOAD:case ko.INVITE_USER_EMBEDDED:case ko.OPEN_SHARE_MOMENT_DIALOG:case ko.QUEST_START_TIMER:case ko.REQUEST_PROXY_TICKET_REFRESH:case ko.SHARE_INTERACTION:case ko.SHARE_LINK:let{response:n}=Eo[e];return n.parse(t);default:Ls(e,Error(`Unrecognized command ${e}`))}}function oc(e){return Object.assign(Object.assign({},e),{data:ac(e)})}U({frame_id:H(),platform:_a(eo).optional().nullable()}),U({v:ha(1),encoding:ha(`json`).optional(),client_id:H(),frame_id:H()});var sc=U({code:Ki(),message:H().optional()}),cc=U({evt:H().nullable(),nonce:H().nullable(),data:ta().nullable(),cmd:H()}).passthrough();function lc(e){let t=cc.parse(e);return t.evt==null?oc(ic.passthrough().parse(t)):t.evt===`ERROR`?Ns.parse(t):Fs(Ps.parse(t))}function uc(e,t,n,r=()=>void 0){let i=Ao.extend({cmd:ha(t),data:n});return async n=>{let a=await e({cmd:t,args:n,transfer:r(n)});return i.parse(a).data}}function dc(e,t=()=>void 0){let n=Eo[e].response,r=Ao.extend({cmd:ha(e),data:n});return n=>async i=>{let a=await n({cmd:e,args:i,transfer:t(i)});return r.parse(a).data}}var fc=e=>uc(e,ko.AUTHORIZE,zs),pc=e=>uc(e,ko.CAPTURE_LOG,Rs),mc=e=>uc(e,ko.ENCOURAGE_HW_ACCELERATION,ec),hc=e=>uc(e,ko.GET_CHANNEL,Hs),gc=e=>uc(e,ko.GET_ENTITLEMENTS_EMBEDDED,Xs),_c=e=>uc(e,ko.GET_SKUS_EMBEDDED,Ys),vc=e=>uc(e,ko.GET_CHANNEL_PERMISSIONS,tc),yc=e=>uc(e,ko.GET_PLATFORM_BEHAVIORS,rc),bc=e=>uc(e,ko.OPEN_EXTERNAL_LINK,nc),xc=e=>uc(e,ko.OPEN_INVITE_DIALOG,Rs);Ho.pick({state:!0,state_url:!0,details:!0,details_url:!0,timestamps:!0,assets:!0,party:!0,secrets:!0,instance:!0,type:!0}).extend({type:Ho.shape.type.optional(),instance:Ho.shape.instance.optional()}).nullable();var Sc=e=>uc(e,ko.SET_ACTIVITY,Js),Cc=e=>uc(e,ko.SET_CONFIG,Qs);function wc({sendCommand:e,cmd:t,response:n,fallbackTransform:r,transferTransform:i=()=>void 0}){let a=Ao.extend({cmd:ha(t),data:n});return async n=>{try{let r=await e({cmd:t,args:n,transfer:i(n)});return a.parse(r).data}catch(o){if(o.code===Qa.INVALID_PAYLOAD){let o=r(n),s=await e({cmd:t,args:o,transfer:i(o)});return a.parse(s).data}else throw o}}}var Tc=e=>({lock_state:e.lock_state,picture_in_picture_lock_state:e.picture_in_picture_lock_state}),Ec=e=>wc({sendCommand:e,cmd:ko.SET_ORIENTATION_LOCK_STATE,response:Rs,fallbackTransform:Tc}),Dc=e=>uc(e,ko.START_PURCHASE,Zs),Oc=e=>uc(e,ko.USER_SETTINGS_GET_LOCALE,$s),kc=dc(Co.AUTHENTICATE),Ac=dc(Co.GET_ACTIVITY_INSTANCE_CONNECTED_PARTICIPANTS),jc=dc(Co.GET_QUEST),Mc=dc(Co.GET_QUEST_ENROLLMENT_STATUS),Nc=dc(Co.GET_RELATIONSHIPS),Pc=dc(Co.GET_USER),Fc=dc(Co.INITIATE_IMAGE_UPLOAD),Ic=dc(Co.INVITE_USER_EMBEDDED),Lc=dc(Co.OPEN_SHARE_MOMENT_DIALOG),Rc=dc(Co.QUEST_START_TIMER),zc=dc(Co.REQUEST_PROXY_TICKET_REFRESH),Bc=dc(Co.SHARE_INTERACTION),Vc=dc(Co.SHARE_LINK);function Hc(e){return{authorize:fc(e),captureLog:pc(e),encourageHardwareAcceleration:mc(e),getChannel:hc(e),getChannelPermissions:vc(e),getEntitlements:gc(e),getPlatformBehaviors:yc(e),getSkus:_c(e),openExternalLink:bc(e),openInviteDialog:xc(e),setActivity:Sc(e),setConfig:Cc(e),setOrientationLockState:Ec(e),startPurchase:Dc(e),userSettingsGetLocale:Oc(e),getInstanceConnectedParticipants:Ac(e),authenticate:kc(e),getActivityInstanceConnectedParticipants:Ac(e),getQuest:jc(e),getQuestEnrollmentStatus:Mc(e),getRelationships:Nc(e),getUser:Pc(e),initiateImageUpload:Fc(e),inviteUserEmbedded:Ic(e),openShareMomentDialog:Lc(e),questStartTimer:Rc(e),requestProxyTicketRefresh:zc(e),shareInteraction:Bc(e),shareLink:Vc(e)}}var Uc=class extends Error{constructor(e,t=``){super(t),this.code=e,this.message=t,this.name=`Discord SDK Error`}};function Wc(){return{disableConsoleLogOverride:!1}}var Gc=[`log`,`warn`,`debug`,`info`,`error`];function Kc(e,t,n){let r=e[t],i=e;r&&(e[t]=function(){let e=[].slice.call(arguments);n(t,``+e.join(` `)),r.apply(i,e)})}var qc=`2.5.0`,Jc={randomUUID:typeof crypto<`u`&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)},Yc,Xc=new Uint8Array(16);function Zc(){if(!Yc){if(typeof crypto>`u`||!crypto.getRandomValues)throw Error(`crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported`);Yc=crypto.getRandomValues.bind(crypto)}return Yc(Xc)}var Qc=[];for(let e=0;e<256;++e)Qc.push((e+256).toString(16).slice(1));function $c(e,t=0){return(Qc[e[t+0]]+Qc[e[t+1]]+Qc[e[t+2]]+Qc[e[t+3]]+`-`+Qc[e[t+4]]+Qc[e[t+5]]+`-`+Qc[e[t+6]]+Qc[e[t+7]]+`-`+Qc[e[t+8]]+Qc[e[t+9]]+`-`+Qc[e[t+10]]+Qc[e[t+11]]+Qc[e[t+12]]+Qc[e[t+13]]+Qc[e[t+14]]+Qc[e[t+15]]).toLowerCase()}function el(e,t,n){if(Jc.randomUUID&&!t&&!e)return Jc.randomUUID();e||={};let r=e.random??e.rng?.()??Zc();if(r.length<16)throw Error(`Random bytes length must be >= 16`);return r[6]=r[6]&15|64,r[8]=r[8]&63|128,$c(r)}var tl;(function(e){e[e.HANDSHAKE=0]=`HANDSHAKE`,e[e.FRAME=1]=`FRAME`,e[e.CLOSE=2]=`CLOSE`,e[e.HELLO=3]=`HELLO`})(tl||={});var nl=new Set(rl());function rl(){return typeof window>`u`?[]:[window.location.origin,`https://discord.com`,`https://discordapp.com`,`https://ptb.discord.com`,`https://ptb.discordapp.com`,`https://canary.discord.com`,`https://canary.discordapp.com`,`https://staging.discord.co`,`http://localhost:3333`,`https://pax.discord.com`,`null`]}function il(){return[window.parent.opener??window.parent,document.referrer?document.referrer:`*`]}var al=class{getTransfer(e){switch(e.cmd){case ko.SUBSCRIBE:case ko.UNSUBSCRIBE:return;default:return e.transfer??void 0}}constructor(e,t){if(this.sdkVersion=qc,this.mobileAppVersion=null,this.source=null,this.sourceOrigin=``,this.eventBus=new sr,this.pendingCommands=new Map,this.sendCommand=e=>{var t;if(this.source==null)throw Error(`Attempting to send message before initialization`);let n=el();return(t=this.source)==null||t.postMessage([tl.FRAME,Object.assign(Object.assign({},e),{nonce:n})],this.sourceOrigin,this.getTransfer(e)),new Promise((e,t)=>{this.pendingCommands.set(n,{resolve:e,reject:t})})},this.commands=Hc(this.sendCommand),this.handleMessage=e=>{if(!nl.has(e.origin))return;let t=e.data;if(!Array.isArray(t))return;let[n,r]=t;switch(n){case tl.HELLO:return;case tl.CLOSE:return this.handleClose(r);case tl.HANDSHAKE:return this.handleHandshake();case tl.FRAME:return this.handleFrame(r);default:throw Error(`Invalid message format`)}},this.isReady=!1,this.clientId=e,this.configuration=t??Wc(),typeof window<`u`&&window.addEventListener(`message`,this.handleMessage),typeof window>`u`){this.frameId=``,this.instanceId=``,this.customId=null,this.referrerId=null,this.platform=eo.DESKTOP,this.guildId=null,this.channelId=null,this.locationId=null;return}let n=new URLSearchParams(this._getSearch()),r=n.get(`frame_id`);if(!r)throw Error(`frame_id query param is not defined`);this.frameId=r;let i=n.get(`instance_id`);if(!i)throw Error(`instance_id query param is not defined`);this.instanceId=i;let a=n.get(`platform`);if(!a)throw Error(`platform query param is not defined`);if(a!==eo.DESKTOP&&a!==eo.MOBILE)throw Error(`Invalid query param "platform" of "${a}". Valid values are "${eo.DESKTOP}" or "${eo.MOBILE}"`);this.platform=a,this.customId=n.get(`custom_id`),this.referrerId=n.get(`referrer_id`),this.guildId=n.get(`guild_id`),this.channelId=n.get(`channel_id`),this.locationId=n.get(`location_id`),this.mobileAppVersion=n.get(`mobile_app_version`),[this.source,this.sourceOrigin]=il(),this.addOnReadyListener(),this.handshake()}close(e,t){var n;window.removeEventListener(`message`,this.handleMessage);let r=el();(n=this.source)==null||n.postMessage([tl.CLOSE,{code:e,message:t,nonce:r}],this.sourceOrigin)}async subscribe(e,t,...n){let[r]=n,i=this.eventBus.listenerCount(e),a=this.eventBus.on(e,t);return Object.values(js).includes(e)&&e!==js.READY&&i===0&&await this.sendCommand({cmd:ko.SUBSCRIBE,args:r,evt:e}),a}async unsubscribe(e,t,...n){let[r]=n;return e!==js.READY&&this.eventBus.listenerCount(e)===1&&await this.sendCommand({cmd:ko.UNSUBSCRIBE,evt:e,args:r}),this.eventBus.off(e,t)}async ready(){this.isReady||await new Promise(e=>{this.eventBus.once(js.READY,e)})}parseMajorMobileVersion(){if(this.mobileAppVersion&&this.mobileAppVersion.includes(`.`))try{return parseInt(this.mobileAppVersion.split(`.`)[0])}catch{return-1}return-1}handshake(){var e;let t={v:1,encoding:`json`,client_id:this.clientId,frame_id:this.frameId},n=this.parseMajorMobileVersion();(this.platform===eo.DESKTOP||n>=250)&&(t.sdk_version=this.sdkVersion),(e=this.source)==null||e.postMessage([tl.HANDSHAKE,t],this.sourceOrigin)}addOnReadyListener(){this.eventBus.once(js.READY,()=>{this.overrideConsoleLogging(),this.isReady=!0})}overrideConsoleLogging(){if(this.configuration.disableConsoleLogOverride)return;let e=(e,t)=>{this.commands.captureLog({level:e,message:t})};Gc.forEach(t=>{Kc(console,t,e)})}handleClose(e){sc.parse(e)}handleHandshake(){}handleFrame(e){var t,n;let r;try{r=lc(e)}catch(t){console.error(`Failed to parse`,e),console.error(t);return}if(r.cmd===`DISPATCH`)this.eventBus.emit(r.evt,r.data);else{if(r.evt===`ERROR`){if(r.nonce!=null){(t=this.pendingCommands.get(r.nonce))==null||t.reject(r.data),this.pendingCommands.delete(r.nonce);return}this.eventBus.emit(`error`,new Uc(r.data.code,r.data.message))}if(r.nonce==null){console.error(`Missing nonce`,e);return}(n=this.pendingCommands.get(r.nonce))==null||n.resolve(r),this.pendingCommands.delete(r.nonce)}}_getSearch(){return typeof window>`u`?``:window.location.search}},ol=1e9,sl={precision:20,rounding:4,toExpNeg:-7,toExpPos:21,LN10:`2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286`},cl=!0,ll=`[DecimalError] `,ul=ll+`Invalid argument: `,dl=ll+`Exponent out of range: `,fl=Math.floor,pl=Math.pow,ml=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,hl,gl=1e7,_l=7,vl=9007199254740991,yl=fl(vl/_l),bl={};bl.absoluteValue=bl.abs=function(){var e=new this.constructor(this);return e.s&&=1,e},bl.comparedTo=bl.cmp=function(e){var t,n,r,i,a=this;if(e=new a.constructor(e),a.s!==e.s)return a.s||-e.s;if(a.e!==e.e)return a.e>e.e^a.s<0?1:-1;for(r=a.d.length,i=e.d.length,t=0,n=re.d[t]^a.s<0?1:-1;return r===i?0:r>i^a.s<0?1:-1},bl.decimalPlaces=bl.dp=function(){var e=this,t=e.d.length-1,n=(t-e.e)*_l;if(t=e.d[t],t)for(;t%10==0;t/=10)n--;return n<0?0:n},bl.dividedBy=bl.div=function(e){return wl(this,new this.constructor(e))},bl.dividedToIntegerBy=bl.idiv=function(e){var t=this,n=t.constructor;return jl(wl(t,new n(e),0,1),n.precision)},bl.equals=bl.eq=function(e){return!this.cmp(e)},bl.exponent=function(){return El(this)},bl.greaterThan=bl.gt=function(e){return this.cmp(e)>0},bl.greaterThanOrEqualTo=bl.gte=function(e){return this.cmp(e)>=0},bl.isInteger=bl.isint=function(){return this.e>this.d.length-2},bl.isNegative=bl.isneg=function(){return this.s<0},bl.isPositive=bl.ispos=function(){return this.s>0},bl.isZero=function(){return this.s===0},bl.lessThan=bl.lt=function(e){return this.cmp(e)<0},bl.lessThanOrEqualTo=bl.lte=function(e){return this.cmp(e)<1},bl.logarithm=bl.log=function(e){var t,n=this,r=n.constructor,i=r.precision,a=i+5;if(e===void 0)e=new r(10);else if(e=new r(e),e.s<1||e.eq(hl))throw Error(ll+`NaN`);if(n.s<1)throw Error(ll+(n.s?`NaN`:`-Infinity`));return n.eq(hl)?new r(0):(cl=!1,t=wl(kl(n,a),kl(e,a),a),cl=!0,jl(t,i))},bl.minus=bl.sub=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?Ml(t,e):xl(t,(e.s=-e.s,e))},bl.modulo=bl.mod=function(e){var t,n=this,r=n.constructor,i=r.precision;if(e=new r(e),!e.s)throw Error(ll+`NaN`);return n.s?(cl=!1,t=wl(n,e,0,1).times(e),cl=!0,n.minus(t)):jl(new r(n),i)},bl.naturalExponential=bl.exp=function(){return Tl(this)},bl.naturalLogarithm=bl.ln=function(){return kl(this)},bl.negated=bl.neg=function(){var e=new this.constructor(this);return e.s=-e.s||0,e},bl.plus=bl.add=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?xl(t,e):Ml(t,(e.s=-e.s,e))},bl.precision=bl.sd=function(e){var t,n,r,i=this;if(e!==void 0&&e!==!!e&&e!==1&&e!==0)throw Error(ul+e);if(t=El(i)+1,r=i.d.length-1,n=r*_l+1,r=i.d[r],r){for(;r%10==0;r/=10)n--;for(r=i.d[0];r>=10;r/=10)n++}return e&&t>n?t:n},bl.squareRoot=bl.sqrt=function(){var e,t,n,r,i,a,o,s=this,c=s.constructor;if(s.s<1){if(!s.s)return new c(0);throw Error(ll+`NaN`)}for(e=El(s),cl=!1,i=Math.sqrt(+s),i==0||i==1/0?(t=Cl(s.d),(t.length+e)%2==0&&(t+=`0`),i=Math.sqrt(t),e=fl((e+1)/2)-(e<0||e%2),i==1/0?t=`5e`+e:(t=i.toExponential(),t=t.slice(0,t.indexOf(`e`)+1)+e),r=new c(t)):r=new c(i.toString()),n=c.precision,i=o=n+3;;)if(a=r,r=a.plus(wl(s,a,o+2)).times(.5),Cl(a.d).slice(0,o)===(t=Cl(r.d)).slice(0,o)){if(t=t.slice(o-3,o+1),i==o&&t==`4999`){if(jl(a,n+1,0),a.times(a).eq(s)){r=a;break}}else if(t!=`9999`)break;o+=4}return cl=!0,jl(r,n)},bl.times=bl.mul=function(e){var t,n,r,i,a,o,s,c,l,u=this,d=u.constructor,f=u.d,p=(e=new d(e)).d;if(!u.s||!e.s)return new d(0);for(e.s*=u.s,n=u.e+e.e,c=f.length,l=p.length,c=0;){for(t=0,i=c+r;i>r;)s=a[i]+p[r]*f[i-r-1]+t,a[i--]=s%gl|0,t=s/gl|0;a[i]=(a[i]+t)%gl|0}for(;!a[--o];)a.pop();return t?++n:a.shift(),e.d=a,e.e=n,cl?jl(e,d.precision):e},bl.toDecimalPlaces=bl.todp=function(e,t){var n=this,r=n.constructor;return n=new r(n),e===void 0?n:(Sl(e,0,ol),t===void 0?t=r.rounding:Sl(t,0,8),jl(n,e+El(n)+1,t))},bl.toExponential=function(e,t){var n,r=this,i=r.constructor;return e===void 0?n=Nl(r,!0):(Sl(e,0,ol),t===void 0?t=i.rounding:Sl(t,0,8),r=jl(new i(r),e+1,t),n=Nl(r,!0,e+1)),n},bl.toFixed=function(e,t){var n,r,i=this,a=i.constructor;return e===void 0?Nl(i):(Sl(e,0,ol),t===void 0?t=a.rounding:Sl(t,0,8),r=jl(new a(i),e+El(i)+1,t),n=Nl(r.abs(),!1,e+El(r)+1),i.isneg()&&!i.isZero()?`-`+n:n)},bl.toInteger=bl.toint=function(){var e=this,t=e.constructor;return jl(new t(e),El(e)+1,t.rounding)},bl.toNumber=function(){return+this},bl.toPower=bl.pow=function(e){var t,n,r,i,a,o,s=this,c=s.constructor,l=12,u=+(e=new c(e));if(!e.s)return new c(hl);if(s=new c(s),!s.s){if(e.s<1)throw Error(ll+`Infinity`);return s}if(s.eq(hl))return s;if(r=c.precision,e.eq(hl))return jl(s,r);if(t=e.e,n=e.d.length-1,o=t>=n,a=s.s,!o){if(a<0)throw Error(ll+`NaN`)}else if((n=u<0?-u:u)<=vl){for(i=new c(hl),t=Math.ceil(r/_l+4),cl=!1;n%2&&(i=i.times(s),Pl(i.d,t)),n=fl(n/2),n!==0;)s=s.times(s),Pl(s.d,t);return cl=!0,e.s<0?new c(hl).div(i):jl(i,r)}return a=a<0&&e.d[Math.max(t,n)]&1?-1:1,s.s=1,cl=!1,i=e.times(kl(s,r+l)),cl=!0,i=Tl(i),i.s=a,i},bl.toPrecision=function(e,t){var n,r,i=this,a=i.constructor;return e===void 0?(n=El(i),r=Nl(i,n<=a.toExpNeg||n>=a.toExpPos)):(Sl(e,1,ol),t===void 0?t=a.rounding:Sl(t,0,8),i=jl(new a(i),e,t),n=El(i),r=Nl(i,e<=n||n<=a.toExpNeg,e)),r},bl.toSignificantDigits=bl.tosd=function(e,t){var n=this,r=n.constructor;return e===void 0?(e=r.precision,t=r.rounding):(Sl(e,1,ol),t===void 0?t=r.rounding:Sl(t,0,8)),jl(new r(n),e,t)},bl.toString=bl.valueOf=bl.val=bl.toJSON=bl[Symbol.for(`nodejs.util.inspect.custom`)]=function(){var e=this,t=El(e),n=e.constructor;return Nl(e,t<=n.toExpNeg||t>=n.toExpPos)};function xl(e,t){var n,r,i,a,o,s,c,l,u=e.constructor,d=u.precision;if(!e.s||!t.s)return t.s||(t=new u(e)),cl?jl(t,d):t;if(c=e.d,l=t.d,o=e.e,i=t.e,c=c.slice(),a=o-i,a){for(a<0?(r=c,a=-a,s=l.length):(r=l,i=o,s=c.length),o=Math.ceil(d/_l),s=o>s?o+1:s+1,a>s&&(a=s,r.length=1),r.reverse();a--;)r.push(0);r.reverse()}for(s=c.length,a=l.length,s-a<0&&(a=s,r=l,l=c,c=r),n=0;a;)n=(c[--a]=c[a]+l[a]+n)/gl|0,c[a]%=gl;for(n&&(c.unshift(n),++i),s=c.length;c[--s]==0;)c.pop();return t.d=c,t.e=i,cl?jl(t,d):t}function Sl(e,t,n){if(e!==~~e||en)throw Error(ul+e)}function Cl(e){var t,n,r,i=e.length-1,a=``,o=e[0];if(i>0){for(a+=o,t=1;tr?1:-1;else for(i=a=0;it[i]?1:-1;break}return a}function n(e,t,n){for(var r=0;n--;)e[n]-=r,r=+(e[n]1;)e.shift()}return function(r,i,a,o){var s,c,l,u,d,f,p,m,h,g,_,v,y,b,x,S,C,w,T=r.constructor,E=r.s==i.s?1:-1,D=r.d,O=i.d;if(!r.s)return new T(r);if(!i.s)throw Error(ll+`Division by zero`);for(c=r.e-i.e,C=O.length,x=D.length,p=new T(E),m=p.d=[],l=0;O[l]==(D[l]||0);)++l;if(O[l]>(D[l]||0)&&--c,v=a==null?a=T.precision:o?a+(El(r)-El(i))+1:a,v<0)return new T(0);if(v=v/_l+2|0,l=0,C==1)for(u=0,O=O[0],v++;(l1&&(O=e(O,u),D=e(D,u),C=O.length,x=D.length),b=C,h=D.slice(0,C),g=h.length;g=gl/2&&++S;do u=0,s=t(O,h,C,g),s<0?(_=h[0],C!=g&&(_=_*gl+(h[1]||0)),u=_/S|0,u>1?(u>=gl&&(u=gl-1),d=e(O,u),f=d.length,g=h.length,s=t(d,h,f,g),s==1&&(u--,n(d,C16)throw Error(dl+El(e));if(!e.s)return new u(hl);for(t==null?(cl=!1,s=d):s=t,o=new u(.03125);e.abs().gte(.1);)e=e.times(o),l+=5;for(r=Math.log(pl(2,l))/Math.LN10*2+5|0,s+=r,n=i=a=new u(hl),u.precision=s;;){if(i=jl(i.times(e),s),n=n.times(++c),o=a.plus(wl(i,n,s)),Cl(o.d).slice(0,s)===Cl(a.d).slice(0,s)){for(;l--;)a=jl(a.times(a),s);return u.precision=d,t==null?(cl=!0,jl(a,d)):a}a=o}}function El(e){for(var t=e.e*_l,n=e.d[0];n>=10;n/=10)t++;return t}function Dl(e,t,n){if(t>e.LN10.sd())throw cl=!0,n&&(e.precision=n),Error(ll+`LN10 precision limit exceeded`);return jl(new e(e.LN10),t)}function Ol(e){for(var t=``;e--;)t+=`0`;return t}function kl(e,t){var n,r,i,a,o,s,c,l,u,d=1,f=10,p=e,m=p.d,h=p.constructor,g=h.precision;if(p.s<1)throw Error(ll+(p.s?`NaN`:`-Infinity`));if(p.eq(hl))return new h(0);if(t==null?(cl=!1,l=g):l=t,p.eq(10))return t??(cl=!0),Dl(h,l);if(l+=f,h.precision=l,n=Cl(m),r=n.charAt(0),a=El(p),Math.abs(a)<0x5543df729c000){for(;r<7&&r!=1||r==1&&n.charAt(1)>3;)p=p.times(e),n=Cl(p.d),r=n.charAt(0),d++;a=El(p),r>1?(p=new h(`0.`+n),a++):p=new h(r+`.`+n.slice(1))}else return c=Dl(h,l+2,g).times(a+``),p=kl(new h(r+`.`+n.slice(1)),l-f).plus(c),h.precision=g,t==null?(cl=!0,jl(p,g)):p;for(s=o=p=wl(p.minus(hl),p.plus(hl),l),u=jl(p.times(p),l),i=3;;){if(o=jl(o.times(u),l),c=s.plus(wl(o,new h(i),l)),Cl(c.d).slice(0,l)===Cl(s.d).slice(0,l))return s=s.times(2),a!==0&&(s=s.plus(Dl(h,l+2,g).times(a+``))),s=wl(s,new h(d),l),h.precision=g,t==null?(cl=!0,jl(s,g)):s;s=c,i+=2}}function Al(e,t){var n,r,i;for((n=t.indexOf(`.`))>-1&&(t=t.replace(`.`,``)),(r=t.search(/e/i))>0?(n<0&&(n=r),n+=+t.slice(r+1),t=t.substring(0,r)):n<0&&(n=t.length),r=0;t.charCodeAt(r)===48;)++r;for(i=t.length;t.charCodeAt(i-1)===48;)--i;if(t=t.slice(r,i),t){if(i-=r,n=n-r-1,e.e=fl(n/_l),e.d=[],r=(n+1)%_l,n<0&&(r+=_l),ryl||e.e<-yl))throw Error(dl+n)}else e.s=0,e.e=0,e.d=[0];return e}function jl(e,t,n){var r,i,a,o,s,c,l,u,d=e.d;for(o=1,a=d[0];a>=10;a/=10)o++;if(r=t-o,r<0)r+=_l,i=t,l=d[u=0];else{if(u=Math.ceil((r+1)/_l),a=d.length,u>=a)return e;for(l=a=d[u],o=1;a>=10;a/=10)o++;r%=_l,i=r-_l+o}if(n!==void 0&&(a=pl(10,o-i-1),s=l/a%10|0,c=t<0||d[u+1]!==void 0||l%a,c=n<4?(s||c)&&(n==0||n==(e.s<0?3:2)):s>5||s==5&&(n==4||c||n==6&&(r>0?i>0?l/pl(10,o-i):0:d[u-1])%10&1||n==(e.s<0?8:7))),t<1||!d[0])return c?(a=El(e),d.length=1,t=t-a-1,d[0]=pl(10,(_l-t%_l)%_l),e.e=fl(-t/_l)||0):(d.length=1,d[0]=e.e=e.s=0),e;if(r==0?(d.length=u,a=1,u--):(d.length=u+1,a=pl(10,_l-r),d[u]=i>0?(l/pl(10,o-i)%pl(10,i)|0)*a:0),c)for(;;)if(u==0){(d[0]+=a)==gl&&(d[0]=1,++e.e);break}else{if(d[u]+=a,d[u]!=gl)break;d[u--]=0,a=1}for(r=d.length;d[--r]===0;)d.pop();if(cl&&(e.e>yl||e.e<-yl))throw Error(dl+El(e));return e}function Ml(e,t){var n,r,i,a,o,s,c,l,u,d,f=e.constructor,p=f.precision;if(!e.s||!t.s)return t.s?t.s=-t.s:t=new f(e),cl?jl(t,p):t;if(c=e.d,d=t.d,r=t.e,l=e.e,c=c.slice(),o=l-r,o){for(u=o<0,u?(n=c,o=-o,s=d.length):(n=d,r=l,s=c.length),i=Math.max(Math.ceil(p/_l),s)+2,o>i&&(o=i,n.length=1),n.reverse(),i=o;i--;)n.push(0);n.reverse()}else{for(i=c.length,s=d.length,u=i0;--i)c[s++]=0;for(i=d.length;i>o;){if(c[--i]0?a=a.charAt(0)+`.`+a.slice(1)+Ol(r):o>1&&(a=a.charAt(0)+`.`+a.slice(1)),a=a+(i<0?`e`:`e+`)+i):i<0?(a=`0.`+Ol(-i-1)+a,n&&(r=n-o)>0&&(a+=Ol(r))):i>=o?(a+=Ol(i+1-o),n&&(r=n-i-1)>0&&(a=a+`.`+Ol(r))):((r=i+1)0&&(i+1===o&&(a+=`.`),a+=Ol(r))),e.s<0?`-`+a:a}function Pl(e,t){if(e.length>t)return e.length=t,!0}function Fl(e){var t,n,r;function i(e){var t=this;if(!(t instanceof i))return new i(e);if(t.constructor=i,e instanceof i){t.s=e.s,t.e=e.e,t.d=(e=e.d)?e.slice():e;return}if(typeof e==`number`){if(e*0!=0)throw Error(ul+e);if(e>0)t.s=1;else if(e<0)e=-e,t.s=-1;else{t.s=0,t.e=0,t.d=[0];return}if(e===~~e&&e<1e7){t.e=0,t.d=[e];return}return Al(t,e.toString())}else if(typeof e!=`string`)throw Error(ul+e);if(e.charCodeAt(0)===45?(e=e.slice(1),t.s=-1):t.s=1,ml.test(e))Al(t,e);else throw Error(ul+e)}if(i.prototype=bl,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.clone=Fl,i.config=i.set=Il,e===void 0&&(e={}),e)for(r=[`precision`,`rounding`,`toExpNeg`,`toExpPos`,`LN10`],t=0;t=i[t+1]&&r<=i[t+2])this[n]=r;else throw Error(ul+n+`: `+r);if((r=e[n=`LN10`])!==void 0)if(r==Math.LN10)this[n]=new this(r);else throw Error(ul+n+`: `+r);return this}hl=new(Fl(sl))(1);var G;(function(e){e.AED=`aed`,e.AFN=`afn`,e.ALL=`all`,e.AMD=`amd`,e.ANG=`ang`,e.AOA=`aoa`,e.ARS=`ars`,e.AUD=`aud`,e.AWG=`awg`,e.AZN=`azn`,e.BAM=`bam`,e.BBD=`bbd`,e.BDT=`bdt`,e.BGN=`bgn`,e.BHD=`bhd`,e.BIF=`bif`,e.BMD=`bmd`,e.BND=`bnd`,e.BOB=`bob`,e.BOV=`bov`,e.BRL=`brl`,e.BSD=`bsd`,e.BTN=`btn`,e.BWP=`bwp`,e.BYN=`byn`,e.BYR=`byr`,e.BZD=`bzd`,e.CAD=`cad`,e.CDF=`cdf`,e.CHE=`che`,e.CHF=`chf`,e.CHW=`chw`,e.CLF=`clf`,e.CLP=`clp`,e.CNY=`cny`,e.COP=`cop`,e.COU=`cou`,e.CRC=`crc`,e.CUC=`cuc`,e.CUP=`cup`,e.CVE=`cve`,e.CZK=`czk`,e.DJF=`djf`,e.DKK=`dkk`,e.DOP=`dop`,e.DZD=`dzd`,e.EGP=`egp`,e.ERN=`ern`,e.ETB=`etb`,e.EUR=`eur`,e.FJD=`fjd`,e.FKP=`fkp`,e.GBP=`gbp`,e.GEL=`gel`,e.GHS=`ghs`,e.GIP=`gip`,e.GMD=`gmd`,e.GNF=`gnf`,e.GTQ=`gtq`,e.GYD=`gyd`,e.HKD=`hkd`,e.HNL=`hnl`,e.HRK=`hrk`,e.HTG=`htg`,e.HUF=`huf`,e.IDR=`idr`,e.ILS=`ils`,e.INR=`inr`,e.IQD=`iqd`,e.IRR=`irr`,e.ISK=`isk`,e.JMD=`jmd`,e.JOD=`jod`,e.JPY=`jpy`,e.KES=`kes`,e.KGS=`kgs`,e.KHR=`khr`,e.KMF=`kmf`,e.KPW=`kpw`,e.KRW=`krw`,e.KWD=`kwd`,e.KYD=`kyd`,e.KZT=`kzt`,e.LAK=`lak`,e.LBP=`lbp`,e.LKR=`lkr`,e.LRD=`lrd`,e.LSL=`lsl`,e.LTL=`ltl`,e.LVL=`lvl`,e.LYD=`lyd`,e.MAD=`mad`,e.MDL=`mdl`,e.MGA=`mga`,e.MKD=`mkd`,e.MMK=`mmk`,e.MNT=`mnt`,e.MOP=`mop`,e.MRO=`mro`,e.MUR=`mur`,e.MVR=`mvr`,e.MWK=`mwk`,e.MXN=`mxn`,e.MXV=`mxv`,e.MYR=`myr`,e.MZN=`mzn`,e.NAD=`nad`,e.NGN=`ngn`,e.NIO=`nio`,e.NOK=`nok`,e.NPR=`npr`,e.NZD=`nzd`,e.OMR=`omr`,e.PAB=`pab`,e.PEN=`pen`,e.PGK=`pgk`,e.PHP=`php`,e.PKR=`pkr`,e.PLN=`pln`,e.PYG=`pyg`,e.QAR=`qar`,e.RON=`ron`,e.RSD=`rsd`,e.RUB=`rub`,e.RWF=`rwf`,e.SAR=`sar`,e.SBD=`sbd`,e.SCR=`scr`,e.SDG=`sdg`,e.SEK=`sek`,e.SGD=`sgd`,e.SHP=`shp`,e.SLL=`sll`,e.SOS=`sos`,e.SRD=`srd`,e.SSP=`ssp`,e.STD=`std`,e.SVC=`svc`,e.SYP=`syp`,e.SZL=`szl`,e.THB=`thb`,e.TJS=`tjs`,e.TMT=`tmt`,e.TND=`tnd`,e.TOP=`top`,e.TRY=`try`,e.TTD=`ttd`,e.TWD=`twd`,e.TZS=`tzs`,e.UAH=`uah`,e.UGX=`ugx`,e.USD=`usd`,e.USN=`usn`,e.USS=`uss`,e.UYI=`uyi`,e.UYU=`uyu`,e.UZS=`uzs`,e.VEF=`vef`,e.VND=`vnd`,e.VUV=`vuv`,e.WST=`wst`,e.XAF=`xaf`,e.XAG=`xag`,e.XAU=`xau`,e.XBA=`xba`,e.XBB=`xbb`,e.XBC=`xbc`,e.XBD=`xbd`,e.XCD=`xcd`,e.XDR=`xdr`,e.XFU=`xfu`,e.XOF=`xof`,e.XPD=`xpd`,e.XPF=`xpf`,e.XPT=`xpt`,e.XSU=`xsu`,e.XTS=`xts`,e.XUA=`xua`,e.YER=`yer`,e.ZAR=`zar`,e.ZMW=`zmw`,e.ZWL=`zwl`})(G||={}),G.AED,G.AFN,G.ALL,G.AMD,G.ANG,G.AOA,G.ARS,G.AUD,G.AWG,G.AZN,G.BAM,G.BBD,G.BDT,G.BGN,G.BHD,G.BIF,G.BMD,G.BND,G.BOB,G.BOV,G.BRL,G.BSD,G.BTN,G.BWP,G.BYR,G.BYN,G.BZD,G.CAD,G.CDF,G.CHE,G.CHF,G.CHW,G.CLF,G.CLP,G.CNY,G.COP,G.COU,G.CRC,G.CUC,G.CUP,G.CVE,G.CZK,G.DJF,G.DKK,G.DOP,G.DZD,G.EGP,G.ERN,G.ETB,G.EUR,G.FJD,G.FKP,G.GBP,G.GEL,G.GHS,G.GIP,G.GMD,G.GNF,G.GTQ,G.GYD,G.HKD,G.HNL,G.HRK,G.HTG,G.HUF,G.IDR,G.ILS,G.INR,G.IQD,G.IRR,G.ISK,G.JMD,G.JOD,G.JPY,G.KES,G.KGS,G.KHR,G.KMF,G.KPW,G.KRW,G.KWD,G.KYD,G.KZT,G.LAK,G.LBP,G.LKR,G.LRD,G.LSL,G.LTL,G.LVL,G.LYD,G.MAD,G.MDL,G.MGA,G.MKD,G.MMK,G.MNT,G.MOP,G.MRO,G.MUR,G.MVR,G.MWK,G.MXN,G.MXV,G.MYR,G.MZN,G.NAD,G.NGN,G.NIO,G.NOK,G.NPR,G.NZD,G.OMR,G.PAB,G.PEN,G.PGK,G.PHP,G.PKR,G.PLN,G.PYG,G.QAR,G.RON,G.RSD,G.RUB,G.RWF,G.SAR,G.SBD,G.SCR,G.SDG,G.SEK,G.SGD,G.SHP,G.SLL,G.SOS,G.SRD,G.SSP,G.STD,G.SVC,G.SYP,G.SZL,G.THB,G.TJS,G.TMT,G.TND,G.TOP,G.TRY,G.TTD,G.TWD,G.TZS,G.UAH,G.UGX,G.USD,G.USN,G.USS,G.UYI,G.UYU,G.UZS,G.VEF,G.VND,G.VUV,G.WST,G.XAF,G.XAG,G.XAU,G.XBA,G.XBB,G.XBC,G.XBD,G.XCD,G.XDR,G.XFU,G.XOF,G.XPD,G.XPF,G.XPT,G.XSU,G.XTS,G.XUA,G.YER,G.ZAR,G.ZMW,G.ZWL;var Ll={exports:{}};Ll.exports;var Rl;function zl(){return Rl?Ll.exports:(Rl=1,(function(e,t){var n=`__lodash_hash_undefined__`,r=9007199254740991,i=`[object Arguments]`,a=`[object Array]`,o=`[object Boolean]`,s=`[object Date]`,c=`[object Error]`,l=`[object Function]`,u=`[object Map]`,d=`[object Number]`,f=`[object Object]`,p=`[object Promise]`,m=`[object RegExp]`,h=`[object Set]`,g=`[object String]`,_=`[object Symbol]`,v=`[object WeakMap]`,y=`[object ArrayBuffer]`,b=`[object DataView]`,x=`[object Float32Array]`,S=`[object Float64Array]`,C=`[object Int8Array]`,w=`[object Int16Array]`,T=`[object Int32Array]`,E=`[object Uint8Array]`,D=`[object Uint8ClampedArray]`,O=`[object Uint16Array]`,k=`[object Uint32Array]`,A=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,j=/^\w*$/,ee=/^\./,te=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ne=/[\\^$.*+?()[\]{}|]/g,re=/\\(\\)?/g,ie=/^\[object .+?Constructor\]$/,ae=/^(?:0|[1-9]\d*)$/,M={};M[x]=M[S]=M[C]=M[w]=M[T]=M[E]=M[D]=M[O]=M[k]=!0,M[i]=M[a]=M[y]=M[o]=M[b]=M[s]=M[c]=M[l]=M[u]=M[d]=M[f]=M[m]=M[h]=M[g]=M[v]=!1;var oe=typeof nr==`object`&&nr&&nr.Object===Object&&nr,se=typeof self==`object`&&self&&self.Object===Object&&self,ce=oe||se||globalThis,le=t&&!t.nodeType&&t,ue=le&&e&&!e.nodeType&&e,N=ue&&ue.exports===le&&oe.process,de=function(){try{return N&&N.binding(`util`)}catch{}}(),fe=de&&de.isTypedArray;function pe(e,t){for(var n=-1,r=e?e.length:0;++n-1}function at(e,t){var n=this.__data__,r=St(n,e);return r<0?n.push([e,t]):n[r][1]=t,this}et.prototype.clear=tt,et.prototype.delete=nt,et.prototype.get=rt,et.prototype.has=it,et.prototype.set=at;function ot(e){var t=-1,n=e?e.length:0;for(this.clear();++ts))return!1;var l=a.get(e);if(l&&a.get(t))return l==t;var u=-1,d=!0,f=i&1?new ft:void 0;for(a.set(e,t),a.set(t,e);++u-1&&e%1==0&&e-1&&e%1==0&&e<=r}function hn(e){var t=typeof e;return!!e&&(t==`object`||t==`function`)}function gn(e){return!!e&&typeof e==`object`}function _n(e){return typeof e==`symbol`||gn(e)&&Te.call(e)==_}var vn=fe?ge(fe):Nt;function yn(e){return e==null?``:zt(e)}function bn(e,t,n){var r=e==null?void 0:Et(e,t);return r===void 0?n:r}function xn(e,t){return e!=null&&Yt(e,t,Ot)}function Sn(e){return dn(e)?xt(e):Ft(e)}function Cn(e,t,n){var r=un(e)||vn(e);if(t=Pt(t),n==null)if(r||hn(e)){var i=e.constructor;n=r?un(e)?new i:[]:pn(i)?Ct(ke(e)):{}}else n={};return(r?pe:Tt)(e,function(e,r,i){return t(n,e,r,i)}),n}function wn(e){return e}function Tn(e){return Zt(e)?he(an(e)):Rt(e)}e.exports=Cn})(Ll,Ll.exports),Ll.exports)}zl();var{Commands:Bl}=Do,Vl=[`identify`,`guilds.members.read`];function Hl(e,t){if(e instanceof Yn)return e;if(typeof e==`object`&&e&&`code`in e){let n=e.code,r=Object.values(Qa).filter(e=>typeof e==`number`);if(typeof n==`number`&&r.includes(n))return new Yn(`${t}_${n}`)}return new Yn(t)}var Ul=15e3,Wl=12e4,Gl=15e3;function Kl(e=window.location.search){let t=new URLSearchParams(e),n=t.getAll(`frame_id`),r=t.getAll(`platform`);if(n.length!==1||n[0]===void 0||n[0].length===0||n[0].length>255||r.length!==1||![`desktop`,`mobile`].includes(r[0]??``))throw new Yn(`invalid_launch`)}async function ql(e,t,n,r,i){let a=null,o=new Promise((e,n)=>{t!==void 0&&(a=()=>n(new Yn(`cancelled`)),t.addEventListener(`abort`,a,{once:!0}),t.aborted&&a())}),s=null,c=new Promise((e,t)=>{s=setTimeout(()=>t(new Yn(r)),i)}),l=Promise.resolve().then(()=>{if(t?.aborted)throw new Yn(`cancelled`);return e()}).catch(e=>{throw Hl(e,n)});try{return await Promise.race([l,o,c])}finally{s!==null&&clearTimeout(s),t!==void 0&&a!==null&&t.removeEventListener(`abort`,a)}}var Jl=class{makeSDK;sdk=null;authenticated=!1;closed=!1;constructor(e=e=>new al(e)){this.makeSDK=e}async authorize(e){let t=Zn();Kl();let n=await $n(t,e),r=this.open(n.client_id),i=()=>{if(e?.aborted)throw new Yn(`cancelled`)};try{if(i(),await ql(()=>r.ready(),e,`sdk_ready_failed`,`sdk_ready_timeout`,Ul),i(),r.instanceId!==t)throw new Yn(`instance_mismatch`);let a=await ql(()=>r.commands.authorize({client_id:n.client_id,response_type:`code`,state:n.state,prompt:`none`,scope:[...Vl]}),e,`authorize_failed`,`authorize_timeout`,Wl);i();let o=await er(a.code,n.state,e);if(i(),!this.authenticated){if(await ql(()=>r.commands.authenticate({access_token:o.access_token}),e,`sdk_authenticate_failed`,`sdk_authenticate_timeout`,Gl)==null)throw new Yn(`sdk_authenticate_failed`);this.authenticated=!0,i()}let s=o.ticket;return{sdk:r,bootstrap:n,player:o.player,takeTicket:()=>{let e=s;return s=null,e},destroy:()=>{s=null}}}catch(t){throw e?.aborted?new Yn(`cancelled`):new Yn(Hl(t,`authorization_failed`).code,!0)}}close(){if(!this.closed&&(this.closed=!0,this.sdk!==null))try{this.sdk.close(Za.CLOSE_NORMAL,`Hands session closed`)}catch{}}open(e){if(this.closed)throw new Yn(`cancelled`);if(this.sdk!==null)return this.sdk;try{this.sdk=this.makeSDK(e)}catch(e){throw new Yn(Hl(e,`sdk_initialization_failed`).code,!0)}return this.sdk}},Yl={Digit1:`corner_cut`,Numpad1:`corner_cut`,Digit2:`corner_swelling`,Numpad2:`corner_swelling`,Digit3:`corner_breath`,Numpad3:`corner_breath`},Xl={2:`corner_cut`,3:`corner_swelling`,1:`corner_breath`},Zl=[{kind:`corner_cut`,choice:`cut`,key:`1`,title:`Close the cut`},{kind:`corner_swelling`,choice:`swelling`,key:`2`,title:`Bring down the swelling`},{kind:`corner_breath`,choice:`breath`,key:`3`,title:`Catch your breath`}],Ql={cut:`Your corner is closing the cut.`,swelling:`Your corner is bringing the swelling down.`,breath:`Your corner is getting your breath back.`,balanced:`Your corner did a little of everything.`},$l=1500,eu=1e3;function tu(e){return e<150?`small`:e<350?`nasty`:e<550?`deep`:`dangerous`}var nu=(e,t)=>Math.round(Math.max(0,Math.min(1,e/t))*100);function ru(e){let{trauma:t}=e,n=Math.max(t.left_cut,t.right_cut),r=Math.max(0,n-x.cut.worse_cut),i=Math.max(t.left_eye,t.right_eye),a=Math.max(0,i-x.swelling.eyes),o=i>=p?a0,swelling:Math.max(t.left_eye,t.right_eye)>0||t.swelling>0,breath:!0,balanced:!1}}function au(){try{return[...navigator.getGamepads?.()??[]].find(e=>e!==null&&e.connected&&e.mapping===`standard`)??null}catch{return null}}var ou=class{pick;now;element;buttons=new Map;details=new Map;status;visible=!1;choice=null;pending=null;shown=null;frozen=null;available=null;padFrame=0;padPrevious=new Set;measuredTop=null;resize=()=>{this.measuredTop=null};keydown=e=>{let t=Yl[e.code];t===void 0||!this.visible||e.repeat||(e.preventDefault(),this.choose(t))};constructor(e,t,n=()=>performance.now()){this.pick=t,this.now=n;let r=document.createElement(`section`);r.className=`corner`,r.dataset.corner=``,r.hidden=!0,r.setAttribute(`aria-label`,`Instructions for your corner`);let i=document.createElement(`p`);i.className=`corner-title`,i.textContent=`YOUR CORNER`;let a=document.createElement(`div`);a.className=`corner-choices`;for(let{kind:e,key:t,title:n}of Zl){let r=document.createElement(`button`);r.type=`button`,r.dataset.cornerPick=e;let i=document.createElement(`kbd`);i.textContent=t;let o=document.createElement(`strong`);o.textContent=n;let s=document.createElement(`span`);r.append(i,o,s),r.addEventListener(`click`,()=>this.choose(e)),a.append(r),this.buttons.set(e,r),this.details.set(e,s)}this.status=document.createElement(`p`),this.status.className=`corner-status`,this.status.setAttribute(`role`,`status`),r.append(i,a,this.status),e.append(r),this.element=r,window.addEventListener(`keydown`,this.keydown),window.addEventListener(`resize`,this.resize)}update(e,t,n){let r=e?.fighters.find(e=>e.player_id===t);if(!(n&&e!==null&&e.phase===`rest`&&r!==void 0)||r===void 0){this.setVisible(!1),this.choice=null,this.pending=null,this.shown=null,this.frozen=null;return}this.setVisible(!0),this.choice=r.corner_choice,(this.choice!==null||this.pending!==null&&this.now()-this.pending.at>$l)&&(this.pending=null);let i=this.choice!==null||this.pending!==null;i||(this.frozen=null);let a=i&&this.frozen!==null?this.frozen:ru(r);this.shown=a;let o=iu(r);this.available=o;for(let{kind:e,choice:t}of Zl){let n=this.buttons.get(e),r=this.details.get(e);r.textContent!==a[t]&&(r.textContent=a[t]),n.disabled=i||!o[t],n.toggleAttribute(`data-picked`,this.choice===t||this.pending?.kind===e)}let s=this.choice===null?this.pending===null?`Tell your corner what to work on before the bell.`:`Calling it to your corner…`:Ql[this.choice];this.status.textContent!==s&&(this.status.textContent=s)}choose(e){if(!this.visible||this.choice!==null||this.pending!==null)return;let t=Zl.find(t=>t.kind===e)?.choice;if(!(t===void 0||this.available?.[t]===!1)&&this.pick(e)){this.frozen=this.shown,this.pending={kind:e,at:this.now()};for(let[t,n]of this.buttons)n.disabled=!0,n.toggleAttribute(`data-picked`,t===e);this.status.textContent=`Calling it to your corner…`}}setVisible(e){if(e!==this.visible)if(this.visible=e,this.element.hidden=!e,this.measuredTop=null,this.padPrevious.clear(),e){let e=au();for(let t of Object.keys(Xl))e?.buttons[Number(t)]?.pressed===!0&&this.padPrevious.add(Number(t));this.padFrame=requestAnimationFrame(()=>this.pollPad())}else cancelAnimationFrame(this.padFrame)}top(){if(!this.visible)return null;if(this.measuredTop===null){let e=this.element.getBoundingClientRect();if(e.height<=0)return null;this.measuredTop=e.top-(this.element.parentElement?.getBoundingClientRect().top??0)}return this.measuredTop}pollPad(){if(!this.visible)return;let e=au();if(e!==null)for(let[t,n]of Object.entries(Xl)){let r=Number(t),i=e.buttons[r]?.pressed===!0;i&&!this.padPrevious.has(r)&&this.choose(n),i?this.padPrevious.add(r):this.padPrevious.delete(r)}this.padFrame=requestAnimationFrame(()=>this.pollPad())}destroy(){this.setVisible(!1),window.removeEventListener(`keydown`,this.keydown),window.removeEventListener(`resize`,this.resize),this.element.remove()}},su={invalid_launch:`open Hands from a Discord voice channel with Play now`,cancelled:`the session was cancelled`,authorization_failed:`Discord did not authorize the session`,authorize_failed:`Discord did not authorize the session`,authorize_timeout:`Discord took too long to authorize the session`,sdk_ready_failed:`the Discord client did not respond`,sdk_ready_timeout:`the Discord client took too long to respond`,sdk_authenticate_failed:`Discord did not confirm your identity`,sdk_authenticate_timeout:`Discord took too long to confirm your identity`,sdk_initialization_failed:`the Discord client could not start the activity`,instance_mismatch:`this window belongs to a different activity instance`,bootstrap_failed:`the Hands server could not be reached`,token_failed:`the Hands server rejected the sign-in`,invalid_bootstrap:`the Hands server sent an unexpected reply`,invalid_token_response:`the Hands server sent an unexpected reply`,ticket_unavailable:`the session ticket was already used`,protocol_error:`the server and client disagree on the protocol`,unexpected_error:`something unexpected went wrong`,authentication_timeout:`the connection took too long to authenticate`,authentication_required:`the connection was not authenticated`,invalid_ticket:`the session ticket was rejected`,invalid_request:`the server rejected the request`,invalid_input:`the server rejected an input frame`,input_queue_full:`the server could not keep up with the inputs`,rate_limited:`too many requests were sent; wait a moment`,service_busy:`the server is busy right now`,service_unavailable:`the server is unavailable right now`,upstream_unavailable:`Discord is unavailable right now`,room_closed:`the bout has already ended; use Play now to start another`,room_full:`both seats in this bout are taken`,already_in_room:`you are already in a bout in another channel`,match_not_started:`the bout has not started yet`,connection_replaced:`this seat was taken over by a newer connection`,spectator_read_only:`spectators cannot send input`,server_shutting_down:`the server is restarting`,internal_error:`the server hit an internal error`,not_in_activity:`you are not a participant of this activity`,invalid_activity:`this activity instance is not valid`,invalid_state:`the sign-in state expired; retry`,invalid_guild:`this activity belongs to another server`,persistence_failed:`the result could not be saved`,rematch_unavailable:`the ring could not be cleared for a rematch; use Play now to start another bout`,network_unavailable:`the connection to the Hands server could not be opened`,match_abandoned:`both fighters lost their connection and the bout was called off`};function cu(e){if(e===`client_outdated`)return`Hands was updated. Reload to continue (client_outdated).`;let t=su[e]??su[e.replace(/_\d+$/u,``)];return t===void 0?`Unable to continue (${e}).`:`Unable to continue: ${t} (${e}).`}function lu(){try{if(window.matchMedia?.(`(pointer: coarse)`).matches)return!0}catch{}return(navigator.maxTouchPoints??0)>0&&new URLSearchParams(window.location.search).get(`platform`)===`mobile`}var uu=[{label:`JAB`,punchClass:`jab`},{label:`STRAIGHT`,punchClass:`straight`},{label:`HOOK`,punchClass:`hook`},{label:`UPPER`,punchClass:`uppercut`}],du=[{label:`◀ SLIP`,name:`Slip left`,kind:`slip_left`},{label:`WEAVE`,name:`Weave`,kind:`weave`},{label:`SLIP ▶`,name:`Slip right`,kind:`slip_right`},{label:`PULL`,name:`Pull`,kind:`pull`},{label:`CLINCH`,name:`Clinch`,kind:`clinch`}],fu=class{sharedActions;root;stickZone;stickBase;stickKnob;pads=[];moves=[];stickPointer=null;stickOrigin={x:0,y:0};moveX=0;moveY=0;body=!1;power=!1;guard=`none`;knockdown=!1;enabled=!0;heldPointers=new Map;heldListener=null;constructor(e,t){this.sharedActions=t,this.root=document.createElement(`div`),this.root.className=`touch-controls`,this.root.setAttribute(`aria-label`,`Touch controls`),this.root.innerHTML=`
-
${tu.map(e=>``).join(``)}
+
${du.map(e=>``).join(``)}
-
${eu.map(e=>``).join(``)}
-
`,e.append(this.root),this.stickZone=this.root.querySelector(`[data-stick]`),this.stickBase=this.root.querySelector(`[data-stick-base]`),this.stickKnob=this.root.querySelector(`[data-stick-knob]`),this.pads.push(...this.root.querySelectorAll(`[data-punch]`)),this.moves.push(...this.root.querySelectorAll(`[data-move]`)),this.bind()}bind(){let e=this.stickZone;e.addEventListener(`pointerdown`,t=>{if(this.stickPointer!==null)return;t.preventDefault(),this.stickPointer=t.pointerId,this.stickOrigin={x:t.clientX,y:t.clientY},e.setPointerCapture(t.pointerId);let n=e.getBoundingClientRect();this.stickBase.style.left=`${t.clientX-n.left}px`,this.stickBase.style.top=`${t.clientY-n.top}px`,this.stickBase.classList.add(`active`),this.updateStick(t.clientX,t.clientY)}),e.addEventListener(`pointermove`,e=>{e.pointerId===this.stickPointer&&(e.preventDefault(),this.updateStick(e.clientX,e.clientY))});let t=e=>{e.pointerId===this.stickPointer&&(this.stickPointer=null,this.moveX=0,this.moveY=0,this.stickKnob.style.transform=`translate(-50%, -50%)`,this.stickBase.classList.remove(`active`))};e.addEventListener(`pointerup`,t),e.addEventListener(`pointercancel`,t);for(let e of this.pads)e.addEventListener(`pointerdown`,t=>{if(!this.enabled)return;t.preventDefault();let n=e.getBoundingClientRect(),r=t.clientX-n.lefte.classList.remove(`pressed`),120)});for(let e of this.moves)e.addEventListener(`pointerdown`,t=>{!this.enabled||this.knockdown||(t.preventDefault(),this.sharedActions.push(`touch`,{kind:e.dataset.move}),e.classList.add(`pressed`),window.setTimeout(()=>e.classList.remove(`pressed`),120))});for(let e of this.root.querySelectorAll(`[data-mod], [data-guard]`)){let t=e.dataset.mod??e.dataset.guard??``,n=n=>{n.preventDefault(),e.setPointerCapture(n.pointerId),this.heldPointers.set(n.pointerId,t),(t===`guard_high`||t===`guard_low`)&&this.sharedActions.clear(),this.syncHeld(),e.classList.add(`pressed`)},r=n=>{this.heldPointers.delete(n.pointerId)&&(this.syncHeld(),e.classList.toggle(`pressed`,[...this.heldPointers.values()].includes(t)))};e.addEventListener(`pointerdown`,n),e.addEventListener(`pointerup`,r),e.addEventListener(`pointercancel`,r)}}syncHeld(){let e=[...this.heldPointers.values()];this.body=e.includes(`body`),this.power=e.includes(`power`),this.guard=e.findLast(e=>e===`guard_high`||e===`guard_low`)??`none`}updateStick(e,t){let n=e-this.stickOrigin.x,r=t-this.stickOrigin.y,i=Math.hypot(n,r);i>56&&(n=n/i*56,r=r/i*56),this.stickKnob.style.transform=`translate(calc(-50% + ${n}px), calc(-50% + ${r}px))`;let a=Math.min(1,i/56),o=a<.15?0:(a-.15)/.85,s=i>0?n/Math.max(i,1e-6):0,c=i>0?r/Math.max(i,1e-6):0;this.moveX=Math.round(s*o*1e3)||0,this.moveY=Math.round(-c*o*1e3)||0}setKnockdown(e){if(this.knockdown!==e){this.knockdown=e,this.root.classList.toggle(`knockdown`,e);for(let[t,n]of this.pads.entries()){let r=n.querySelector(`.touch-pad-label`);r!==null&&(r.textContent=e?t%2==0?`GET UP`:`RHYTHM`:eu[t].label)}}}setEnabled(e,t=e){this.enabled=e,this.root.classList.toggle(`disabled`,!t),this.root.classList.toggle(`resting`,t&&!e),t?e||this.sharedActions.clearSource(`touch`):this.reset()}frame(){return this.enabled?{moveX:this.moveX,moveY:this.moveY,defense:this.guard,actions:[]}:{moveX:0,moveY:0,defense:`none`,actions:[]}}reset(){this.stickPointer=null,this.moveX=0,this.moveY=0,this.body=!1,this.power=!1,this.guard=`none`,this.heldPointers.clear(),this.stickBase.classList.remove(`active`);for(let e of this.root.querySelectorAll(`.pressed`))e.classList.remove(`pressed`);this.sharedActions.clearSource(`touch`)}destroy(){this.reset(),this.root.remove()}},ru={block:[55,.12,.22],hit:[85,.3,.42],counter_hit:[105,.38,.5],stun:[125,.42,.55],knockdown:[180,.62,.65],parry:[60,.18,.4],body_collapse:[170,.55,.3]},iu=class{settings;constructor(e){this.settings=e}event(e){if(!this.settings().haptics)return;let t=ru[e.kind];if(t===void 0)return;let n=this.padActuator();if(n===null){this.vibrate(t[0]);return}try{Promise.resolve(n.playEffect(`dual-rumble`,{duration:Math.min(180,Math.max(0,t[0])),strongMagnitude:Math.min(.65,Math.max(0,t[1])),weakMagnitude:Math.min(.65,Math.max(0,t[2]))})).catch(()=>void 0)}catch{}}padActuator(){if(typeof navigator.getGamepads!=`function`)return null;let e;try{e=[...navigator.getGamepads.call(navigator)]}catch{return null}let t=e.find(e=>e!==null&&e.connected&&`vibrationActuator`in e)?.vibrationActuator;return t==null||typeof t.playEffect!=`function`?null:t}vibrate(e){if(!(!$l()||typeof navigator.vibrate!=`function`))try{navigator.vibrate(Math.min(180,Math.max(0,e)))}catch{}}},au={KeyF:[`left`,`jab`],KeyJ:[`right`,`jab`],KeyR:[`left`,`straight`],KeyU:[`right`,`straight`],KeyG:[`left`,`hook`],KeyH:[`right`,`hook`],KeyT:[`left`,`uppercut`],KeyY:[`right`,`uppercut`]},ou={KeyZ:{kind:`slip_left`},KeyX:{kind:`slip_right`},KeyC:{kind:`weave`},KeyV:{kind:`pull`},KeyB:{kind:`clinch`},KeyN:{kind:`switch_stance`},KeyM:{kind:`taunt`},Digit1:{kind:`foul`,foul:`low_blow`},Digit2:{kind:`foul`,foul:`headbutt`},ArrowLeft:{kind:`get_up_left`},ArrowRight:{kind:`get_up_right`}},su=new Set([...Object.keys(au),...Object.keys(ou),`KeyW`,`KeyA`,`KeyS`,`KeyD`,`KeyQ`,`KeyE`,`ShiftLeft`,`ShiftRight`,`AltLeft`,`AltRight`]),cu=[`Move: W up · S down · A left · D right`,`High / low guard: Q / E`,`Left/right jab: F / J`,`Left/right straight: R / U`,`Left/right hook: G / H`,`Left/right uppercut: T / Y`,`Body: Shift · Power: Alt`,`Slip: Z / X · Weave: C · Pull: V`,`Clinch: B · Stance: N · Taunt: M · Fouls (on purpose): Shift+1 low blow / Shift+2 headbutt`,`Get-up rhythm: ← / →`,`Camera: K cycles broadcast, close and over the shoulder (behind your fighter, W walks at the opponent and A / D circle him).`,`Style pick before the bout: arrow keys choose · Enter settles · 1–5 settle on that card at once.`,`Controller move: left stick. High / low guard: left / right shoulder (independent of punches).`,`Controller face classes: bottom jab · right straight · left hook · top uppercut.`,`Controller face hand: hold D-pad left for left hand or D-pad right for right hand, then press a face punch; otherwise punches use the right hand. A direction used for a punch is consumed and does not evade.`,`Controller modifiers: left trigger body · right trigger power.`,`Controller actions: left stick press clinch · right stick press switch stance · hold right trigger + right stick press to taunt · D-pad up weave · D-pad down pull · tap and release D-pad left/right to slip; while down, D-pad left/right performs the private get-up rhythm immediately.`,`Controller fouls: View/Back low blow · Menu/Start headbutt.`,`Controller style pick: D-pad or left stick to choose · bottom face button settles.`,`Right-stick gesture: horizontal 0–22.5° hook · 22.5–45° jab · 45–70° straight · 70–90° uppercut; left/right direction selects hand.`,`Between rounds, tell your corner what to work on: 1 close the cut · 2 bring down the swelling · 3 catch your breath (controller: left, top or right face button; or tap).`,`Touch: drag the left side to move · tap a punch pad's left or right half for that hand · hold BODY, POWER, GUARD or LOW · tap ◀ SLIP, SLIP ▶, WEAVE, PULL or CLINCH.`],lu=`Move WASD · Jab F/J · Straight R/U · Hook G/H · Uppercut T/Y · Guard Q/E · Body Shift · Power Alt`,uu=`Drag on the left to move · Tap the pads to punch, L or R hand · Hold BODY, POWER or GUARD · Tap SLIP, WEAVE, PULL or CLINCH`,du=`Drag left to move · Tap pads to punch · Hold GUARD`,fu=(e,t)=>e?t<480?du:uu:lu,pu=[{title:`Keyboard`,items:cu.filter(e=>!e.startsWith(`Controller`)&&!e.startsWith(`Right-stick`)&&!e.startsWith(`Between rounds`)&&!e.startsWith(`Touch`))},{title:`Between rounds`,items:cu.filter(e=>e.startsWith(`Between rounds`))},{title:`Controller`,items:cu.filter(e=>e.startsWith(`Controller`)||e.startsWith(`Right-stick`))},{title:`Touch`,items:cu.filter(e=>e.startsWith(`Touch`))}];function mu(e,t){return e.kind===t.kind?e.kind===`punch`&&t.kind===`punch`?e.hand===t.hand&&e.class===t.class&&e.target===t.target&&e.power===t.power:e.kind===`foul`&&t.kind===`foul`?e.foul===t.foul:!0:!1}function hu(e,t,n){if(n<1||e.length>0&&mu(e.at(-1),t))return;let r=e.length-n+1;r>0&&e.splice(0,r),e.push(t)}var gu=class{maximum;queue=[];counter=0;listener=null;constructor(e=1){this.maximum=e}setListener(e){this.listener=e}push(e,t){if(this.maximum<1)return;let n=this.queue.at(-1);if(n!==void 0&&mu(n.action,t)){n.source=e;return}let r={...t,id:`c${this.counter+=1}`},i=this.queue.length-this.maximum+1;i>0&&this.queue.splice(0,i),this.queue.push({action:r,source:e}),this.listener?.(r)}clear(){this.queue.length=0}clearSource(e){let t=this.queue.filter(t=>t.source!==e);this.queue.splice(0,this.queue.length,...t)}drain(e){return this.queue.splice(0,e).map(e=>e.action)}};function _u(e,t,n=.18){let r=Math.hypot(e,t);if(!Number.isFinite(r)||r<=n)return{x:0,y:0};let i=(Math.min(1,r)-n)/(1-n);return{x:e/r*i,y:t/r*i}}var vu=(e,t)=>{let n=Math.atan2(Math.abs(t),Math.abs(e))*180/Math.PI;return n<22.5?`hook`:n<45?`jab`:n<70?`straight`:`uppercut`},yu=class{active=!1;hand=`right`;target=`head`;power=`normal`;peak={x:0,y:0};peakMagnitude=0;update(e,t,n,r){let i=Math.hypot(e,t);if(!this.active&&i>=.55&&Math.abs(e)>=.12)return this.active=!0,this.hand=e<0?`left`:`right`,this.target=n?`body`:`head`,this.power=r?`power`:`normal`,this.peak={x:e,y:t},this.peakMagnitude=i,null;if(!this.active)return null;if(i>this.peakMagnitude&&(this.peak={x:e,y:t},this.peakMagnitude=i),i<=.25){let e={kind:`punch`,hand:this.hand,class:vu(this.peak.x,this.peak.y),target:this.target,power:this.power};return this.reset(),e}return null}reset(){this.active=!1,this.peak={x:0,y:0},this.peakMagnitude=0}},bu=[`jab`,`straight`,`hook`,`uppercut`],xu=(e,t)=>e.buttons[t]?.pressed===!0;function Su(){let e=navigator.getGamepads;if(typeof e!=`function`)return null;try{return[...e.call(navigator)].find(e=>e!==null&&e.connected&&e.mapping===`standard`)??null}catch{return null}}var Cu=class{maximumQueue;sharedActions;gesture=new yu;queue=[];previous=new Set;selectorConsumed=new Map;raf=0;currentId=null;moveX=0;moveY=0;defense=`none`;knockdown=!1;enabled=!0;disconnect=e=>{e.gamepad.id===this.currentId&&this.reset()};constructor(e=1,t){this.maximumQueue=e,this.sharedActions=t,window.addEventListener(`gamepaddisconnected`,this.disconnect),this.raf=requestAnimationFrame(()=>this.poll())}push(e){this.sharedActions===void 0?hu(this.queue,e,this.maximumQueue):this.sharedActions.push(`gamepad`,e)}clearActions(){this.queue.length=0,this.sharedActions?.clear()}poll(){if(!this.enabled){this.reset(),this.schedulePoll();return}let e=Su();if(e===null){this.currentId!==null&&this.reset(),this.schedulePoll();return}this.currentId!==null&&this.currentId!==e.id&&this.reset(),this.currentId=e.id;let t=_u(e.axes[0]??0,e.axes[1]??0);this.moveX=Math.round(t.x*1e3),this.moveY=Math.round(-t.y*1e3);let n=xu(e,4)?`guard_high`:xu(e,5)?`guard_low`:`none`;n!==`none`&&n!==this.defense&&this.clearActions(),this.defense=n;let r=this.gesture.update(e.axes[2]??0,e.axes[3]??0,xu(e,6),xu(e,7));r!==null&&this.push(r);let i=bu.some((t,n)=>xu(e,n)&&!this.previous.has(n));for(let t of[14,15]){let n=xu(e,t),r=this.previous.has(t);this.knockdown?(n&&!r&&this.push({kind:t===14?`get_up_left`:`get_up_right`}),this.selectorConsumed.delete(t)):n?(r||this.selectorConsumed.set(t,!1),i&&this.selectorConsumed.set(t,!0)):r&&(this.selectorConsumed.get(t)===!1&&this.push({kind:t===14?`slip_left`:`slip_right`}),this.selectorConsumed.delete(t))}for(let t=0;tthis.poll())}setKnockdown(e){this.knockdown=e}setEnabled(e){this.enabled=e,e||this.reset()}frame(e=4){let t=this.sharedActions===void 0?this.queue.splice(0,e):[];return{moveX:this.moveX,moveY:this.moveY,defense:this.defense,actions:t}}reset(){this.currentId=null,this.moveX=this.moveY=0,this.defense=`none`,this.queue.length=0,this.sharedActions?.clearSource(`gamepad`),this.previous.clear(),this.selectorConsumed.clear(),this.gesture.reset()}destroy(){cancelAnimationFrame(this.raf),window.removeEventListener(`gamepaddisconnected`,this.disconnect),this.reset()}},wu=class{target;maximumQueue;sharedActions;held=new Set;queue=[];enabled=!0;keydown=e=>{if(!su.has(e.code))return;if(!this.enabled){this.held.add(e.code);return}if(e.preventDefault(),e.repeat){this.held.add(e.code);return}this.held.add(e.code),(e.code===`KeyQ`||e.code===`KeyE`)&&this.clearActions();let t=au[e.code];if(t!==void 0)this.push({kind:`punch`,hand:t[0],class:t[1],target:this.hasShift()?`body`:`head`,power:this.hasAlt()?`power`:`normal`});else{let t=ou[e.code];t!==void 0&&(t.kind!==`foul`||this.hasShift())&&this.push(t)}};keyup=e=>{su.has(e.code)&&(this.enabled&&e.preventDefault(),this.held.delete(e.code))};visibility=()=>{document.hidden&&this.reset()};blur=()=>this.reset();constructor(e=window,t=1,n){this.target=e,this.maximumQueue=t,this.sharedActions=n,e.addEventListener(`keydown`,this.keydown),e.addEventListener(`keyup`,this.keyup),e.addEventListener(`blur`,this.blur),document.addEventListener(`visibilitychange`,this.visibility)}hasShift(){return this.held.has(`ShiftLeft`)||this.held.has(`ShiftRight`)}hasAlt(){return this.held.has(`AltLeft`)||this.held.has(`AltRight`)}push(e){this.sharedActions===void 0?hu(this.queue,e,this.maximumQueue):this.sharedActions.push(`keyboard`,e)}clearActions(){this.queue.length=0,this.sharedActions?.clear()}setEnabled(e){this.enabled=e,e||(this.queue.length=0,this.sharedActions?.clearSource(`keyboard`))}frame(e=4){if(!this.enabled)return{moveX:0,moveY:0,defense:`none`,actions:[]};let t=(this.held.has(`KeyD`)?1e3:0)-(this.held.has(`KeyA`)?1e3:0),n=(this.held.has(`KeyW`)?1e3:0)-(this.held.has(`KeyS`)?1e3:0);t!==0&&n!==0&&(t=Math.sign(t)*707,n=Math.sign(n)*707);let r=this.held.has(`KeyQ`)?`guard_high`:this.held.has(`KeyE`)?`guard_low`:`none`;return{moveX:t,moveY:n,defense:r,actions:this.sharedActions===void 0?this.queue.splice(0,e):[]}}reset(){this.held.clear(),this.queue.length=0,this.sharedActions?.clearSource(`keyboard`)}destroy(){this.reset(),this.target.removeEventListener(`keydown`,this.keydown),this.target.removeEventListener(`keyup`,this.keyup),this.target.removeEventListener(`blur`,this.blur),document.removeEventListener(`visibilitychange`,this.visibility)}};function Tu(e,t,n,r){let i=e=>Math.max(-1e3,Math.min(1e3,Math.round(e)))||0;return{moveX:i(-r*e+n*t),moveY:i(-n*e-r*t)}}var Eu=class{actions=new gu(1);keyboard;gamepad;touch=null;reset=()=>{this.keyboard.reset(),this.gamepad.reset(),this.touch?.reset(),this.actions.clear(),this.gamepad.setKnockdown(!1)};constructor(){this.keyboard=new wu(window,1,this.actions),this.gamepad=new Cu(1,this.actions),window.addEventListener(`blur`,this.reset),document.addEventListener(`visibilitychange`,this.visibility)}visibility=()=>{document.hidden&&this.reset()};attachTouch(e,t=$l()){this.touch!==null||!t||(this.touch=new nu(e,this.actions))}setActive(e,t=e){this.keyboard.setEnabled(e),this.gamepad.setEnabled(e),this.touch?.setEnabled(e,t)}setKnockdown(e){this.gamepad.setKnockdown(e),this.touch?.setKnockdown(e)}onAction(e){this.actions.setListener(e)}setViewForward(e){this.viewForward=e}viewForward=null;held(){let e=this.keyboard.frame(0),t=this.gamepad.frame(0),n=this.touch?.frame()??null,r=t.moveX===0?n!==null&&n.moveX!==0?n.moveX:e.moveX:t.moveX,i=t.moveY===0?n!==null&&n.moveY!==0?n.moveY:e.moveY:t.moveY,a=t.defense===`none`?n!==null&&n.defense!==`none`?n.defense:e.defense:t.defense,o=r!==0||i!==0?this.viewForward?.()??null:null;if(o===null)return{moveX:r,moveY:i,defense:a};let s=Tu(r,i,o.x,o.z);return{moveX:s.moveX,moveY:s.moveY,defense:a}}frame(){return{...this.held(),actions:this.actions.drain(4)}}destroy(){window.removeEventListener(`blur`,this.reset),document.removeEventListener(`visibilitychange`,this.visibility),this.keyboard.destroy(),this.gamepad.destroy(),this.touch?.destroy()}},Du=(e,t,n)=>e+(t-e)*n,Ou=(e,t,n)=>({...t,x:Du(e.x,t.x,n),y:Du(e.y,t.y,n),facing:Du(e.facing,t.facing,n),facing_x:Du(e.facing_x,t.facing_x,n),facing_y:Du(e.facing_y,t.facing_y,n),velocity_x:Du(e.velocity_x,t.velocity_x,n),velocity_y:Du(e.velocity_y,t.velocity_y,n),stamina:Du(e.stamina,t.stamina,n),maximum_stamina:Du(e.maximum_stamina,t.maximum_stamina,n),conditioning:Du(e.conditioning,t.conditioning,n),guard:Du(e.guard,t.guard,n),poise:Du(e.poise,t.poise,n)}),ku=1.5,Au=6,ju=.5,Mu=2500,Nu=1,Pu=.04,Fu=100,Iu=.01,Lu=4,Ru=class{maximum;tickRate;initialDelayTicks;snapshots=[];offsetTicks=null;delayTicks;lastStarvationMs=-1/0;lastFrameMs=null;behindPushes=0;needs=[];constructor(e=8,t=30,n=2){this.maximum=e,this.tickRate=t,this.initialDelayTicks=n,this.delayTicks=n}get interpolationDelayTicks(){return this.delayTicks}push(e,t){let n=this.snapshots.at(-1);if(n!==void 0&&e.tick<=n.tick)return!1;if(this.snapshots.push(e),this.snapshots.length>this.maximum&&this.snapshots.shift(),t!==void 0&&Number.isFinite(t)){let n=e.tick-t*this.tickRate/1e3;this.offsetTicks!==null&&n=Lu&&this.restartClock(),this.offsetTicks===null?(this.offsetTicks=n,this.need(t,this.initialDelayTicks)):this.offsetTicks=Math.max(n,this.offsetTicks-Iu),this.need(t,this.offsetTicks-n+Nu)}return!0}resync(){this.restartClock()}restartClock(){this.offsetTicks=null,this.delayTicks=this.initialDelayTicks,this.lastStarvationMs=-1/0,this.behindPushes=0,this.needs.length=0}need(e,t){for(;this.needs.length>0&&this.needs.at(-1).ticks<=t;)this.needs.pop();this.needs.push({atMs:e,ticks:t})}recentNeed(e){for(;this.needs.length>0&&this.needs[0].atMs<=e-Mu;)this.needs.shift();return this.needs[0]?.ticks??0}latest(){return this.snapshots.at(-1)??null}renderTick(e){let t=this.latest();if(t===null)return 0;let n=this.snapshots[0].tick;if(this.offsetTicks===null)return Math.max(n,t.tick-1);let r=this.lastFrameMs===null?0:Math.min(Fu,Math.max(0,e-this.lastFrameMs));this.lastFrameMs=e;let i=e*this.tickRate/1e3+this.offsetTicks-this.delayTicks;if(i>t.tick+.25)e-this.lastStarvationMs>250&&(this.lastStarvationMs=e,this.delayTicks=Math.min(Au,this.delayTicks+ju),this.need(e,this.delayTicks));else{let t=Math.max(ku,this.recentNeed(e));this.delayTicks>t&&(this.delayTicks=Math.max(t,this.delayTicks-Pu*r*this.tickRate/1e3))}return Math.min(t.tick,Math.max(n,i))}sample(e){let t=this.snapshots.findIndex(t=>t.tick>=e);if(t<=0)return this.snapshots[Math.max(0,t)]??this.latest();let n=this.snapshots[t-1],r=this.snapshots[t];if(n.phase!==r.phase||n.fighters.some((e,t)=>e.knockdowns!==r.fighters[t]?.knockdowns))return r;let i=Math.max(0,Math.min(1,(e-n.tick)/Math.max(1,r.tick-n.tick)));return{...r,fighters:[Ou(n.fighters[0],r.fighters[0],i),Ou(n.fighters[1],r.fighters[1],i)]}}clear(){this.snapshots.length=0,this.offsetTicks=null}},zu=class{highest=-1;accept(e){let t=new Set,n=e.filter(e=>e.event_id<=this.highest||t.has(e.event_id)?!1:(t.add(e.event_id),!0)).sort((e,t)=>e.event_id-t.event_id);for(let e of n)this.highest=Math.max(this.highest,e.event_id);return n}reset(){this.highest=-1}};function Bu(e=window.location){let t=new URL(`/api/hands/ws`,e.origin);if(e.protocol===`https:`)t.protocol=`wss:`;else if(e.protocol===`http:`&&[`localhost`,`127.0.0.1`,`::1`].includes(e.hostname))t.protocol=`ws:`;else throw Error(`insecure_websocket_origin`);return t.search=``,t.hash=``,t.toString()}var Vu=1,Hu={moveX:0,moveY:0,defense:`none`,actions:[]},Uu=33,Wu=8,Gu=50,Ku=20,qu=2048;function Ju(e){try{return We(e)}catch(t){let n;try{let t=pe(e);n=typeof t==`object`&&t&&`version`in t?t.version:void 0}catch{}throw typeof n==`number`&&n!==4?new Bn(`client_outdated`,!0):t}}var Yu=class{getInput;callbacks;makeSocket;now;socket=null;reconnectTicket;reconnectTimer=null;opponentPauseTimer=null;inputTimer=null;reconnectDeadline=0;opponentPauseDeadline=0;opponentPaused=!1;attempts=0;nextSequence=0;playerId=null;sentAt=new Map;actionSequences=new Map;latencyMs=null;serverTick=0;role=null;active=!1;resting=!1;boutStarted=!1;disposed=!1;terminal=!1;inputSuppressed=!1;pointerFocus=!1;listenersBound=!1;lastInputSentAt=-1/0;sendTimes=[];edgeSendTimes=[];constructor(e,t,n,r=e=>new WebSocket(e),i=()=>performance.now()){this.getInput=t,this.callbacks=n,this.makeSocket=r,this.now=i,this.reconnectTicket=e}start(){this.disposed||this.listenersBound||(this.bindInputListeners(),this.connect(),!this.disposed&&!this.terminal&&(this.inputTimer=window.setInterval(()=>this.flushInput(),Uu)))}bindInputListeners(){this.listenersBound=!0,window.addEventListener(`blur`,this.onInputLoss),window.addEventListener(`focus`,this.onInputRegain),window.addEventListener(`pointerdown`,this.onPagePointer,!0),document.addEventListener(`visibilitychange`,this.onVisibilityChange)}setActive(e){this.setInputActive(e)}setInputActive(e){let t=this.active;this.active=e,e?this.boutStarted=!0:t&&this.sendInput(Hu,!0)}notifyAction(){this.now()-(this.edgeSendTimes.at(-1)??-1/0)=Ku||this.flushInput()&&this.edgeSendTimes.push(this.lastInputSentAt)}sendsInLastSecond(){return this.withinLastSecond(this.sendTimes)}withinLastSecond(e){let t=this.now()-1e3;for(;e.length>0&&e[0]<=t;)e.shift();return e.length}onInputLoss=()=>{this.inputSuppressed||(this.sendInput(Hu,this.boutStarted),this.inputSuppressed=!0,this.pointerFocus=!1)};onInputRegain=()=>{!document.hidden&&document.hasFocus()&&(this.inputSuppressed=!1)};onPagePointer=()=>{if(!document.hidden&&(this.pointerFocus=!0,this.inputSuppressed=!1,!document.hasFocus()))try{window.focus()}catch{}};onVisibilityChange=()=>{document.hidden?this.onInputLoss():this.onInputRegain()};connect(){if(this.disposed||this.terminal)return;let e=this.reconnectTicket;if(e===null){this.terminal=!0,this.stopInputLifecycle(),this.callbacks.onFreshAuth();return}let t;try{t=this.makeSocket(Bu())}catch{this.terminal=!0,this.stopInputLifecycle(),this.callbacks.onFatal(`network_unavailable`);return}this.socket=t,t.binaryType=`arraybuffer`,t.onopen=()=>{if(!(this.socket!==t||this.disposed))try{t.send(JSON.stringify({version:4,type:`authenticate`,ticket:e})),this.reconnectTicket=null}catch{this.handleClose(t)}},t.onmessage=e=>this.handleMessage(t,e),t.onerror=()=>void 0,t.onclose=()=>this.handleClose(t)}handleMessage(e,t){if(!(this.socket!==e||this.disposed||this.terminal))try{if(typeof t.data!=`string`&&!(t.data instanceof ArrayBuffer))throw Error(`unsupported_frame`);let n=Ju(t.data);if(this.applyMessage(n),n.type===`ticket`){try{e.send(JSON.stringify({version:4,type:`ticket_ack`,refresh_id:n.refresh_id}))}catch{this.handleClose(e)}return}this.callbacks.onMessage(n),n.type===`error`?this.terminate(n.code,e):n.type===`final`&&(this.terminal=!0,this.clearTransportReconnect(!0),this.clearOpponentPause(!0),this.stopInputLifecycle(),this.socket===e&&(this.socket=null),e.onopen=e.onmessage=e.onclose=e.onerror=null,e.close(1e3,`complete`))}catch(e){this.callbacks.onFatal(Kn(e)),this.dispose()}}applyMessage(e){if(e.type===`welcome`){if(e.reconnect_ticket===void 0)throw Error(`missing_reconnect_ticket`);this.reconnectTicket=e.reconnect_ticket,this.serverTick=e.server_tick;let t=this.role===`spectator`&&e.role===`fighter`;this.role=e.role,this.playerId=e.role===`fighter`?e.player_id:null,this.sentAt.clear(),e.role===`fighter`?this.nextSequence=Math.max(this.nextSequence,e.next_sequence):this.stopInputLifecycle(),t&&(this.listenersBound||this.bindInputListeners(),this.inputTimer??=window.setInterval(()=>this.flushInput(),Uu)),this.attempts=0,this.clearTransportReconnect(!0)}else e.type===`ticket`?this.reconnectTicket=e.reconnect_ticket:e.type===`snapshot`?(this.serverTick=Math.max(this.serverTick,e.payload.tick),this.setInputActive([`countdown`,`fight`,`knockdown`,`foul_recovery`].includes(e.payload.phase)),this.resting=e.payload.phase===`rest`,this.observeAcknowledgement(e.payload)):e.type===`paused`?(this.setInputActive(!1),this.startOpponentPause(e.grace_ms)):e.type===`resumed`?(this.setInputActive(!0),this.attempts=0,this.clearOpponentPause(!0)):e.type===`select`?this.clearOpponentPause(!0):e.type===`ready`?(this.clearOpponentPause(!0),this.setInputActive(!0)):e.type===`waiting`?(this.clearOpponentPause(!0),this.setInputActive(!1)):(e.type===`final`||e.type===`error`)&&(this.active=!1,this.clearOpponentPause(!0))}terminate(e,t){this.terminal=!0,this.active=!1,this.clearTransportReconnect(!0),this.clearOpponentPause(!0),this.stopInputLifecycle(),this.callbacks.onFatal(e),this.socket===t&&(this.socket=null,t.onopen=t.onmessage=t.onclose=t.onerror=null,t.close(1e3,`terminal`))}handleClose(e){if(this.socket!==e||(this.socket=null,this.active=!1,this.disposed||this.terminal))return;if(this.reconnectTicket===null){this.terminal=!0,this.stopInputLifecycle(),this.callbacks.onFreshAuth();return}this.clearOpponentPause(!1),this.reconnectDeadline===0&&(this.reconnectDeadline=this.now()+2e4);let t=Math.max(0,this.reconnectDeadline-this.now());if(this.callbacks.onReconnect(t),t<=0){this.terminal=!0,this.stopInputLifecycle(),this.callbacks.onFreshAuth();return}let n=Math.min(3e3,250*2**Math.min(this.attempts,4),t);this.attempts+=1,this.reconnectTimer=window.setTimeout(()=>{this.reconnectTimer=null,this.callbacks.onReconnect(Math.max(0,this.reconnectDeadline-this.now())),this.connect()},n)}requestCpu(e){let t=this.socket;if(this.role!==`fighter`||this.disposed||this.terminal||t?.readyState!==Vu)return!1;try{return t.send(Xe(e)),!0}catch{return this.handleClose(t),!1}}chooseStyle(e,t){let n=this.socket;if(this.role!==`fighter`||this.disposed||this.terminal||n?.readyState!==Vu)return!1;try{return n.send(Je(e,t)),!0}catch{return this.handleClose(n),!1}}get inputLatencyMs(){return this.latencyMs}sequenceOf(e){return this.actionSequences.get(e)??null}observeAcknowledgement(e){if(this.playerId===null)return;let t=e.fighters.find(e=>e.player_id===this.playerId);if(t===void 0||t.last_input_sequence<0)return;let n=this.sentAt.get(t.last_input_sequence);if(n!==void 0){let e=Math.max(0,this.now()-n);this.latencyMs=this.latencyMs===null?e:this.latencyMs*.8+e*.2}for(let e of this.sentAt.keys())e<=t.last_input_sequence&&this.sentAt.delete(e)}sendInput(e,t=!1){return(this.active||t)&&this.transmit(e)}sendCornerChoice(e){return this.resting?this.transmit({moveX:0,moveY:0,defense:`none`,actions:[{kind:e}]}):!1}transmit(e){let t=this.socket;if(this.role!==`fighter`||this.disposed||this.terminal||t?.readyState!==Vu)return!1;try{let n=e.actions.slice(0,4);t.send(qe(this.nextSequence,this.serverTick,{...e,actions:n})),this.sentAt.set(this.nextSequence,this.now()),this.sentAt.size>128&&this.sentAt.delete(this.sentAt.keys().next().value);for(let e of n)e.id!==void 0&&this.actionSequences.set(e.id,this.nextSequence);for(;this.actionSequences.size>64;)this.actionSequences.delete(this.actionSequences.keys().next().value);return this.nextSequence+=1,this.lastInputSentAt=this.now(),this.sendTimes.push(this.lastInputSentAt),!0}catch{return this.handleClose(t),!1}}flushInput(){return this.inputSuppressed||document.hidden||!(this.pointerFocus||document.hasFocus())||this.sendsInLastSecond()>=Gu||(this.socket?.bufferedAmount??0)>qu?!1:this.sendInput(this.getInput())}startOpponentPause(e){this.clearOpponentPause(!1),this.opponentPaused=!0,this.opponentPauseDeadline=this.now()+e,this.callbacks.onReconnect(e),e>0&&this.scheduleOpponentPauseTick()}scheduleOpponentPauseTick(){let e=Math.max(0,this.opponentPauseDeadline-this.now());if(e<=0){this.opponentPauseDeadline=0,this.callbacks.onReconnect(0);return}this.opponentPauseTimer=window.setTimeout(()=>{this.opponentPauseTimer=null;let e=Math.max(0,this.opponentPauseDeadline-this.now());this.callbacks.onReconnect(e),e>0?this.scheduleOpponentPauseTick():this.opponentPauseDeadline=0},Math.min(250,e))}clearOpponentPause(e){let t=this.opponentPaused;this.opponentPaused=!1,this.opponentPauseDeadline=0,this.opponentPauseTimer!==null&&(clearTimeout(this.opponentPauseTimer),this.opponentPauseTimer=null),e&&t&&this.callbacks.onReconnect(0)}cancelReconnect(){this.reconnectTimer!==null&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null)}clearTransportReconnect(e){let t=this.reconnectDeadline!==0;this.reconnectDeadline=0,this.cancelReconnect(),e&&t&&this.callbacks.onReconnect(0)}stopInputLifecycle(){this.inputTimer!==null&&(clearInterval(this.inputTimer),this.inputTimer=null),this.listenersBound&&=(window.removeEventListener(`blur`,this.onInputLoss),window.removeEventListener(`focus`,this.onInputRegain),window.removeEventListener(`pointerdown`,this.onPagePointer,!0),document.removeEventListener(`visibilitychange`,this.onVisibilityChange),!1)}dispose(){if(this.disposed)return;this.disposed=!0,this.active=!1,this.reconnectTicket=null,this.clearTransportReconnect(!0),this.clearOpponentPause(!0),this.stopInputLifecycle();let e=this.socket;this.socket=null,e!==null&&(e.onopen=e.onmessage=e.onclose=e.onerror=null,e.close(1e3,`teardown`))}},Xu={play:`CALLAHAN`,colour:`OKAFOR`,announcer:`RING ANNOUNCER`},Zu=.3,Qu=.9,$u=.25,ed=2.6,td=4.5,nd=.8,rd=6,id=9,ad=6,od=42,sd=8,cd=15,ld=10,ud=[60,Math.round(k*.6),Math.round(k*.8)],dd={cut:Math.round(k*.7),swelling:Math.round(ne*.75)},fd=500,pd=.2,md=.3,hd=120,gd={knockdown:[`Down goes {b}!`,`{a} drops {b}!`,`{b} is down! What a shot from {a}!`,`Down goes {b}! {a} found the chin!`],knockdownAgain:[`{b} is down again!`,`Down for the second time! {b} is in deep trouble!`,`{a} puts {b} down again!`],knockdownCounter:[`Down goes {b}, off a perfect counter!`,`{a} times it, and {b} is down!`],struggle:[`{b} is struggling to get up...`,`{b} is trying to beat the count...`,`Can {b} get up?`],upLate:[`{b} beats the count at {n}!`,`Up at {n}! {b} is still in this!`,`{b} makes it up at {n}, but the legs look heavy.`],upEarly:[`{b} is up at {n}.`,`{b} is back up at the count of {n}.`,`Up at {n}. {b} wants to keep fighting.`],finishCall:[`{a} has to go for the finish now.`,`{b} needs to survive the next minute.`,`{b} has to hold and clear the head.`],hurt:[`{b} is hurt!`,`{a} has {b} in trouble!`,`{b}'s legs just buckled!`,`Big shot! {b} is wobbled!`,`{b} is rocked! Keep the pressure on, {a}!`],hurtBadly:[`{b} is out on their feet!`,`{b} is in all sorts of trouble!`,`{b} is badly hurt!`],guardBreak:[`{a} blasts right through the guard!`,`The guard is gone! {b} can't keep those hands up!`,`{a} breaks the guard down!`],counter:[`What a counter from {a}!`,`{a} times it perfectly! A {punch} on the counter!`,`{b} walked right into that {punch}!`,`Counter {punch} from {a}! Beautiful timing.`],bigShot:[`Big {punch} from {a}!`,`{a} lands a thudding {punch}!`,`That {punch} landed flush!`,`Huge {punch}! {b} felt that one.`],cut:[`{b} is cut over the {side} eye.`,`There's blood now. A cut over {b}'s {side} eye.`,`That's opened a cut over the {side} eye of {b}.`],cutWorse:[`That cut over {b}'s {side} eye is getting worse.`,`The blood is pouring from that {side} eye now.`,`{b} is bleeding badly from the {side} eye.`],cutDoctor:[`The doctor will be watching that cut very closely.`,`If that cut gets any worse, the doctor could stop this.`],eyeSwelling:[`{b}'s {side} eye is swelling badly.`,`{b} is having trouble seeing out of that {side} eye.`],eyeShut:[`{b}'s {side} eye has closed completely!`,`That {side} eye is shut! {b} can't see them coming from that side.`,`{b} is fighting with one eye now.`],blindSide:[`{a} is working the blind side.`,`{b} never saw that one. Nothing is getting through that {side} eye.`,`Smart from {a}, punching where {b} can't see.`],parried:[`{a} picks it off and {b} is wide open!`,`Beautiful parry from {a}! {b} is off balance.`,`{a} slaps it away and {b} is left stranded.`],bodyCollapse:[`Body shot! {b} is going down!`,`{a} digs to the body and {b} is folding!`,`Oh, that body shot! {b} is in agony!`],knockdownBody:[`Down goes {b} from the body shot!`,`{b} takes a knee! That body shot took everything out!`,`{a} goes downstairs and {b} can't take it!`],cornerCut:[`{a}'s cutman is working on that cut.`,`They're working hard on the cut in {a}'s corner.`],cornerSwelling:[`{a}'s corner is getting the swelling down.`,`Ice and the enswell on that eye in {a}'s corner.`],cornerBreath:[`{a}'s corner wants the breath back first. Big drink of water.`,`{a} is told to breathe and settle down.`],combo:[`A three-punch combination from {a}!`,`{a} puts it together beautifully.`,`Lovely combination from {a}!`],unanswered:[`Five unanswered punches from {a}!`,`{a} is unloading! {b} has to fire back!`,`{b} is just covering up as {a} lets the hands go!`],jab:[`{a}'s jab is finding a home.`,`Stiff jab from {a}, and another.`,`{a} keeps popping that jab in {b}'s face.`],body:[`{a} is going to work on the body.`,`{a} keeps digging to the body.`,`Another one downstairs from {a}.`],payoff:[`The body work is paying off. {b} is slowing down.`,`Those body shots are taking it out of {b}.`,`{a} has invested in the body, and {b} is paying for it now.`],tiring:[`{b} is running on empty.`,`{b} is breathing hard. Those punches have nothing on them.`,`{b} has punched out. The tank is empty.`],takeover:[`{a} is taking over this round.`,`This is all {a} right now.`,`{a} is in complete control.`],clinch:[`{a} ties {b} up.`,`{a} grabs hold.`,`They're tied up in the clinch.`],holdingOn:[`{a} is hurt and holding on!`,`{a} grabs on for dear life!`,`Smart from {a}, holding on to clear the head.`],refBreak:[`The referee breaks them.`,`The referee steps in to separate them.`,`Break! The referee pulls them apart.`],taunt:[`{a} drops the hands and invites {b} in!`,`Showboating from {a}! The crowd loves it.`,`{a} is taunting {b} now!`,`{a} sticks the chin out. Come and get it!`],lowBlow:[`Low blow from {a}! The referee steps in.`,`That's below the belt! {b} is doubled over.`,`{a} goes low, and the referee calls time.`],headbutt:[`Headbutt from {a}! The referee calls time.`,`{a} leads with the head! That's a foul.`],warning:[`A warning for {a}. One more and it costs a point.`,`The referee warns {a}. That can't happen again.`],deduction:[`The referee takes a point from {a}!`,`That costs {a} a point!`,`Point deduction! {a} has been warned enough.`],resume:[`And we're back underway.`,`Time in. Let's box.`],box:[`The referee waves them on. {b} has to survive now.`,`Box! {a} will be looking to finish it.`,`{b} has convinced the referee. Here comes {a}.`],evade:[`{a} slips it! Lovely head movement.`,`{b} misses, and {a} was never there.`,`Great defence from {a}.`],parry:[`{a} picks that off with the gloves.`,`{a} parries it away.`,`Tight defence from {a}.`],whiff:[`{a} misses wildly with the {punch}.`,`Big swing and a miss from {a}.`,`{a} throws everything into that {punch} and hits nothing but air.`],southpaw:[`{a} switches to southpaw.`,`{a} turns southpaw now.`],orthodox:[`{a} goes back to orthodox.`,`{a} switches back to orthodox.`],roundStart:[`Round {r}. Here we go.`,`We're underway in round {r}.`,`Round {r} is on.`],roundEnd:[`That's the bell to end round {r}.`,`The bell ends round {r}.`,`And that's round {r} in the books.`],savedByBell:[`Saved by the bell! {b} was in real trouble.`,`{b} is saved by the bell!`,`The bell rescues {b}!`],finalBell:[`That's the final bell!`,`The final bell! We go to the scorecards.`],summary:[`Round {r}: {a} landed {x} of {y}, {b} {z} of {w}.`],roundFor:[`I had that round for {a}.`,`{a} took that round.`,`That was {a}'s round.`],roundBig:[`The knockdown makes that a big round for {a}.`,`{a} wins that round big with the knockdown.`],roundClose:[`Close round. That one could go either way.`,`Tough round to score.`,`Nothing between them in that round.`],pullingAway:[`{a} is pulling away on the cards.`,`{b} needs something big. {a} is building a lead.`],doctor:[`The ringside doctor is taking a close look at {b}.`,`The doctor is in {b}'s corner checking that cut.`],ko:[`It's all over! {a} wins by knockout!`,`{b} can't beat the count! {a} wins it!`,`That's it! {a} has knocked out {b}!`],flashKo:[`Lights out! {b} is out cold!`,`One punch, and it's over! {a} wins!`,`Good night! {a} ends it with one shot!`],tko:[`Three knockdowns, and it's over! {a} wins!`,`The referee waves it off! {a} wins by stoppage!`],doctorStop:[`The doctor has seen enough! It's stopped on the cut!`,`The doctor stops it! {b} can't continue!`],disqualified:[`{b} is disqualified!`,`That's it! {b} has been thrown out!`],forfeit:[`{b} has left the ring. {a} wins by forfeit.`],replay:[`Here it is again.`,`Let's see that one more time.`,`Watch {a} set it up...`]},_d={ko:`ko`,flash_ko:`flashKo`,tko:`tko`,doctor_stoppage:`doctorStop`,disqualification:`disqualified`,forfeit:`forfeit`},vd={struggle:new Set([`knockdown`])},yd=`struggle`,bd=new Set([`countdown`]),xd=3.2,Sd=new Set([`knockdown`,`knockdownAgain`,`knockdownCounter`,`knockdownBody`,`bodyCollapse`,`upLate`,`upEarly`,`hurt`,`hurtBadly`,`lowBlow`,`headbutt`,`deduction`,`ko`,`flashKo`,`tko`,`doctorStop`,`disqualified`,`forfeit`,`replay`,`savedByBell`,`finalBell`,`roundEnd`,`roundStart`]),Cd={ko:98,flashKo:98,tko:98,doctorStop:98,disqualified:98,forfeit:98,knockdown:95,knockdownAgain:95,knockdownCounter:95,knockdownBody:95,bodyCollapse:86,upLate:90,upEarly:90,replay:88,deduction:84,lowBlow:82,headbutt:82,hurt:80,box:78,hurtBadly:80,holdingOn:76,savedByBell:74,finalBell:72,struggle:70,guardBreak:65,eyeShut:62,counter:60,parried:58,bigShot:55,roundEnd:52,cut:50,cutWorse:50,summary:50,cutDoctor:48,doctor:48,eyeSwelling:48,cornerCut:47,cornerSwelling:47,cornerBreath:47,blindSide:42,roundFor:46,roundBig:46,roundClose:46,pullingAway:46,unanswered:45,finishCall:44,warning:42,combo:40,payoff:40,takeover:38,body:35,jab:30,tiring:30,roundStart:28,taunt:25,parry:22,evade:20,clinch:20,whiff:18,refBreak:12,southpaw:10,orthodox:10,resume:10},wd={finishCall:`colour`,payoff:`colour`,tiring:`colour`,takeover:`colour`,holdingOn:`colour`,taunt:`colour`,parry:`colour`,evade:`colour`,warning:`colour`,blindSide:`colour`,cornerCut:`colour`,cornerSwelling:`colour`,cornerBreath:`colour`,roundFor:`colour`,roundBig:`colour`,roundClose:`colour`,pullingAway:`colour`,doctor:`colour`,cutDoctor:`colour`,jab:`colour`},Td={combo:6,jab:20,body:18,evade:12,parry:15,parried:8,blindSide:20,whiff:12,clinch:15,refBreak:20,taunt:10,southpaw:15,orthodox:15,bigShot:4,counter:3,unanswered:15,takeover:25},Ed=[`zero`,`one`,`two`,`three`,`four`,`five`,`six`,`seven`,`eight`,`nine`,`ten`,`eleven`,`twelve`,`thirteen`,`fourteen`,`fifteen`],Dd=e=>Ed[e]??String(e),Od=[...Ed,`sixteen`,`seventeen`,`eighteen`,`nineteen`],kd=[``,``,`twenty`,`thirty`,`forty`,`fifty`,`sixty`,`seventy`,`eighty`,`ninety`];function Ad(e){return!Number.isInteger(e)||e<0||e>=1e3?String(e):e<20?Od[e]:e<100?`${kd[Math.floor(e/10)]}${e%10==0?``:`-${Od[e%10]}`}`:`${Od[Math.floor(e/100)]} hundred${e%100==0?``:` and ${Ad(e%100)}`}`}function jd(e,t=!0){if(le(e))return`making a pro debut`;let n=e.draws>0?`${Ad(e.wins)}, ${Ad(e.losses)} and ${Ad(e.draws)}`:`${Ad(e.wins)} and ${e.losses===0?`oh`:Ad(e.losses)}`;return t&&e.knockouts>0?`${n}, ${Ad(e.knockouts)} by knockout`:n}function Md(e){return .85+e.length*.077+(e.split(`...`).length-1)*.35}var Nd=.3;function Pd(e,t){let n=t-Nd,r=[e=>[e.record===void 0?null:jd(e.record),rt(e.style)],e=>[rt(e.style)],()=>[]];for(let t of r){let r=e.map((e,n)=>{let r=n===0?`In the blue corner`:`And in the red corner`,i=t(e).filter(e=>e!==null);return i.length===0?`${r}, ${e.name}!`:`${r}, ${i.join(`, `)}... ${e.name}!`});if(r.reduce((e,t)=>e+Md(t),0)<=n)return r}let i=`${e[0].name}... versus ${e[1].name}!`;return Md(i)<=n?[i]:[]}function Fd(e,t){let n=e.replace(/\{(a|b|n|side|punch|r|x|y|z|w)\}/gu,(e,n)=>String(t[n]??``));return n.charAt(0).toUpperCase()+n.slice(1)}var Id=(e,t)=>{let n=Math.imul((e|0)^Math.imul(t,2654435761),2246822507);return n^=n>>>13,n=Math.imul(n,3266489909),(n^n>>>16)>>>0};function Ld(e){let t=e.split(`:`);return[t.at(-2),t.at(-1)]}function Rd(e,t){let[n=`punch`,r=`head`]=Ld(e),i=t!==void 0&&t.action===n?t.action_hand:null,a=n===`jab`?`jab`:n===`straight`?i===null?`straight`:`${i} hand`:i===null?n:`${i} ${n}`;return r===`body`?`${a} to the body`:a}function zd(e){if(e.phase===`knockdown`){let t=Math.max(...e.fighters.map(e=>e.get_up_count));return Math.min(1,.3+t*.07)}if(e.phase!==`fight`)return 0;let t=0;for(let[n,r]of e.fighters.entries()){let i=e.fighters[1-n];r.is_downed||(r.stunned_ticks>0?t=Math.max(t,.75):r.poise<150&&(t=Math.max(t,.45)),(Math.max(Math.abs(r.x),Math.abs(r.y))>400||Math.abs(r.x)+Math.abs(r.y)>640)&&Math.hypot(r.x-i.x,r.y-i.y)<150&&(t=Math.max(t,.4)))}return t}var Bd=()=>({thrown:0,landed:0,damage:0,knockdowns:0,body:0}),Vd=()=>({jabs:[],window:[],evasions:[],run:0,runTick:-1e3,unanswered:0,stunnedAt:-1e3,knockedDownAt:-1e5,lowSince:null,tiredRound:0,takeoverRound:0,payoffRound:0,cutMarks:[0,0],eyeShut:[!1,!1],eyeSwelling:[!1,!1],rounds:0}),Hd=class{hooks;queue=[];showing=null;lastEnd=-1/0;lastChoice=new Map;cooldowns=new Map;notes=new Map;tallies=new Map;players={};fighters=null;tickRate=30;introduced=!1;lastPhase=null;round=0;roundLength=null;fightRemaining=0;struggleCalled=-1;lastKnockdown=null;final=null;verdictGiven=!1;resultCalled=!1;caption={line:null,opacity:0,entering:0};constructor(e={}){this.hooks=e}observe(e,t,n,r,i){this.players=n,this.fighters=e.fighters,this.tickRate=r,this.trackClock(e),this.introduced||(this.introduced=!0,e.phase===`countdown`&&e.round_number===1&&this.introduce(e,i));let a=t.find(e=>e.kind===`result`)??null;for(let n of t)this.consider(n,e,a,i);this.inspect(e,i),this.lastPhase=e.phase,this.dropOutOfPhase(e.phase,i)}dropOutOfPhase(e,t){for(let t=this.queue.length-1;t>=0;--t){let n=this.queue[t].phases;n!==null&&!n.has(e)&&this.queue.splice(t,1)}let n=this.showing;n!==null&&n.phases!==null&&!n.phases.has(e)&&(n.end=Math.min(n.end,t+$u))}finish(e,t,n,r){this.players=t,this.final=e,n&&(this.enqueue(this.announcement(`Ladies and gentlemen, we go to the scorecards.`,{kicker:`LADIES AND GENTLEMEN`,title:`WE GO TO THE SCORECARDS`,detail:``,corner:null},ad,99),r,null,30),this.hooks.speak?.([`Ladies and gentlemen, we go to the scorecards.`])),e.method===`forfeit`&&!this.resultCalled&&e.winner_id!==null&&(this.resultCalled=!0,this.say(`forfeit`,e.round,r,{a:this.nameOf(e.winner_id),b:this.nameOf(this.otherId(e.winner_id))},`result`,0))}verdict(e){let t=this.final;if(t===null||this.verdictGiven)return;this.verdictGiven=!0;let n=nn(t);if(t.winner_id===null){let r=`After ${Dd(t.round)} rounds, this bout is scored a ${n.toLowerCase()}.`;this.enqueue(this.announcement(r,{kicker:`AFTER ${Dd(t.round).toUpperCase()} ROUNDS`,title:n,detail:``,corner:null},id,100),e,`verdict`,30),this.hooks.speak?.([r]);return}let r=this.nameOf(t.winner_id),i=n.toLowerCase();this.enqueue(this.announcement(`The winner, by ${i}: ${r}!`,{kicker:`THE WINNER, BY ${n}`,title:r.toUpperCase(),detail:``,corner:this.seatOf(t.winner_id)},id,100),e,`verdict`,30),this.hooks.speak?.([`And the winner, by ${i}... ${r}!`])}resultShown(e){let t=this.final;if(t===null||this.verdictGiven)return;if(t.method===`decision`||t.method===`draw`){this.verdict(e);return}if(this.verdictGiven=!0,t.winner_id===null)return;let n=this.nameOf(t.winner_id),r={ko:`knockout`,flash_ko:`knockout`,tko:`technical knockout`,doctor_stoppage:`doctor stoppage`,disqualification:`disqualification`,forfeit:`forfeit`}[t.method]??t.method.replaceAll(`_`,` `),i=this.stoppageClock(t.round),a=t.method===`ko`||t.method===`flash_ko`||t.method===`tko`||t.method===`doctor_stoppage`,o=a&&i!==null?`STOPPED AT ${i} OF ROUND ${t.round}`:`ROUND ${t.round}`,s=a&&i!==null?`${n} wins by ${r} at ${i} of round ${t.round}.`:`${n} wins by ${r} in round ${t.round}.`;this.enqueue(this.announcement(s,{kicker:o,title:n.toUpperCase(),detail:`WINS BY ${r.toUpperCase()}`,corner:this.seatOf(t.winner_id)},id,100),e,`verdict`,30);let c=a&&i!==null?`The referee stops the contest at ${i} of round ${Dd(t.round)}. `:``;this.hooks.speak?.([`${c}Your winner, by ${r}... ${n}!`])}replay(e){let t=this.lastKnockdown;this.say(`replay`,t?.tick??0,e,{a:this.nameOf(t?.actor??null),b:this.nameOf(t?.target??null)},`replay`,.6,6)}current(e){for(let t=this.queue.length-1;t>=0;--t)this.queue[t].expires<=e&&this.queue.splice(t,1);this.showing!==null&&e>=this.showing.end&&(this.lastEnd=this.showing.end,this.showing=null);let t=null;for(let n of this.queue)n.at>e||(t===null||n.line.priority>t.line.priority||n.line.priority===t.line.priority&&n.at=this.lastEnd+Qu:t.line.urgent&&t.line.priority>n.line.priority&&e-n.start>=nd)&&(this.queue.splice(this.queue.indexOf(t),1),this.showing={line:t.line,start:e,end:e+t.line.hold,moment:t.moment,phases:t.phases},t.spoken!==null&&this.hooks.speak?.([t.spoken]))}let n=this.showing;return n===null?null:(this.caption.line=n.line,this.caption.opacity=Math.max(0,Math.min(1,(e-n.start)/$u,(n.end-e)/$u)),this.caption.entering=Math.max(0,1-(e-n.start)/$u),this.caption)}trackClock(e){e.phase===`fight`&&((this.lastPhase===`countdown`||this.lastPhase===`rest`)&&(this.roundLength={round:e.round_number,ticks:e.phase_ticks_remaining+1}),this.fightRemaining=e.phase_ticks_remaining),e.round_number!==this.round&&(this.round=e.round_number,this.tallies.clear())}stoppageClock(e){let t=this.roundLength;if(t===null||t.round!==e)return null;let n=Math.max(0,Math.floor((t.ticks-this.fightRemaining)/this.tickRate));return`${Math.floor(n/60)}:${String(n%60).padStart(2,`0`)}`}introduce(e,t){let n=e.phase_ticks_remaining/this.tickRate;if(n<1.2)return;let r=e.fighters.map(e=>this.nameOf(e.player_id)),i=e.fighters.map((e,t)=>({name:r[t],record:this.players[e.player_id]?.record,style:e.style})),a=Pd([i[0],i[1]],n),o=Math.max(1.4,a.length===2?Md(a[0]):n/2),s=[o,Math.max(1.4,n-o)];for(let n of[0,1]){let i=n===0?`blue`:`red`,c=this.players[e.fighters[n].player_id],l=nt(e.fighters[n].style),u=c===void 0?``:`${l===null?``:`${l} · `}${c.record===void 0?``:`${ue(c.record)} · `}${c.cpu===!0?`COMPUTER`:`RATED ${c.rating}`}`;this.enqueue(this.announcement(`In the ${i} corner, ${r[n]}.`,{kicker:`IN THE ${i.toUpperCase()} CORNER`,title:r[n].toUpperCase(),detail:u,corner:n},s[n],97),t+n*o,null,30,bd,a[n]??null)}}consider(e,t,n,r){let i=e.actor_id,a=e.target_id,o=`${e.tick}:${a??i??``}`,s={a:this.nameOf(i),b:this.nameOf(a)};switch(e.kind){case`punch_start`:i!==null&&(this.tally(i).thrown+=1);return;case`hit`:case`counter_hit`:i!==null&&a!==null&&!en(e,t.events)&&this.landed(e,i,a,t,r);return;case`stun`:{if(a===null)return;this.notesFor(a).stunnedAt=e.tick;let t=this.fighter(a),n=t!==void 0&&(t.poise=S-6);this.say(n?`hurtBadly`:`hurt`,e.event_id,r,s,o);return}case`guard_break`:this.say(`guardBreak`,e.event_id,r,s,o);return;case`knockdown`:{if(a===null||(this.lastKnockdown={actor:i,target:a,tick:e.tick},this.notesFor(a).knockedDownAt=e.tick,i!==null&&(this.tally(i).knockdowns+=1),n!==null))return;let c=t.events.some(t=>t.kind===`counter_hit`&&t.tick===e.tick&&t.target_id===a);this.say(e.amount>=2?`knockdownAgain`:e.detail===`body`?`knockdownBody`:c?`knockdownCounter`:`knockdown`,e.event_id,r,s,o);return}case`body_collapse`:this.say(`bodyCollapse`,e.event_id,r,s,o);return;case`parry`:this.say(`parried`,e.event_id,r,s,o,Zu,void 0,i);return;case`eye_shut`:if(a===null||e.detail!==`left`&&e.detail!==`right`)return;this.notesFor(a).eyeShut[e.detail===`left`?0:1]=!0,this.say(`eyeShut`,e.event_id,r,{...s,side:e.detail},o);return;case`blind_side`:if(e.detail!==`left`&&e.detail!==`right`)return;this.say(`blindSide`,e.event_id,r,{...s,side:e.detail},null,Zu,void 0,i);return;case`corner`:{let t=e.detail===`cut`?`cornerCut`:e.detail===`swelling`?`cornerSwelling`:e.detail===`breath`?`cornerBreath`:null;t!==null&&this.say(t,e.event_id,r,s,null,Zu,void 0,i);return}case`count`:e.amount>=6&&this.struggleCalled!==this.lastKnockdown?.tick&&this.fighter(a)?.is_downed===!0&&(this.struggleCalled=this.lastKnockdown?.tick??e.tick,this.say(`struggle`,e.event_id,r,{a:this.nameOf(this.otherId(a)),b:this.nameOf(a)},yd));return;case`get_up`:{for(let e=this.queue.length-1;e>=0;--e)this.queue[e].moment===yd&&this.queue.splice(e,1);this.showing?.moment===yd&&(this.showing.end=Math.min(this.showing.end,r+$u));let t={a:this.nameOf(this.otherId(i)),b:this.nameOf(i),n:Dd(e.amount)};this.say(e.amount>=8?`upLate`:`upEarly`,e.event_id,r,t,o),this.say(`finishCall`,e.event_id,r,t,null,3.4,4);return}case`perfect_block`:this.say(`parry`,e.event_id,r,s,o,Zu,void 0,i);return;case`evade`:{if(i===null)return;let t=this.notesFor(i);t.evasions=t.evasions.filter(t=>t>e.tick-ld*this.tickRate),t.evasions.push(e.tick),(this.fighter(a)?.action_power===`power`||t.evasions.length>=3)&&this.say(`evade`,e.event_id,r,s,o,Zu,void 0,i)&&(t.evasions.length=0);return}case`whiff`:{let t=this.fighter(i);if(t?.action_power!==`power`||t.action===null)return;this.say(`whiff`,e.event_id,r,{...s,punch:Rd(`${t.action}:${t.action_target??`head`}`,t)},o,Zu,void 0,i);return}case`clinch`:{if(i===null)return;let t=this.fighter(i),n=e.tick-this.notesFor(i).stunnedAt<=3*this.tickRate||t!==void 0&&t.poise<150;this.say(n?`holdingOn`:`clinch`,e.event_id,r,s,o,Zu,void 0,i);return}case`referee_break`:this.say(`refBreak`,e.event_id,r,s,null,Zu,void 0,`referee`);return;case`taunt`:this.say(`taunt`,e.event_id,r,{a:s.a,b:this.nameOf(this.otherId(i))},o,Zu,void 0,i);return;case`foul`:this.say(e.detail===`headbutt`?`headbutt`:`lowBlow`,e.event_id,r,s,o),this.fighter(i)?.warnings===1&&this.say(`warning`,e.event_id,r,s,null,3.6,4);return;case`point_deduction`:this.say(`deduction`,e.event_id,r,s,`deduction:${e.tick}`);return;case`resume`:this.say(`resume`,e.event_id,r,s,null);return;case`box`:this.say(`box`,e.event_id,r,{a:this.nameOf(this.otherId(a)),b:this.nameOf(a)},o);return;case`stance`:this.say(e.detail===`southpaw`?`southpaw`:`orthodox`,e.event_id,r,s,null,Zu,void 0,i);return;case`exhausted`:i!==null&&this.tired(i,e.event_id,r);return;case`bell`:e.detail===`round_start`?(this.tallies.clear(),t.round_number>=2&&this.say(`roundStart`,e.event_id,r,{r:t.round_number},null,Zu,xd)):e.detail===`round_end`&&this.roundEnded(e,t,n,r);return;case`result`:this.resulted(e,r);return;default:return}}landed(e,t,n,r,i){let[a,o]=Ld(e.detail),s=this.tally(t);s.landed+=1,s.damage+=e.amount,o===`body`&&(s.body+=1);let c=this.notesFor(t),l=this.notesFor(n);l.run=0,l.unanswered=0,c.run=e.tick-c.runTick<=od?c.run+1:1,c.runTick=e.tick,c.unanswered+=1,c.window=c.window.filter(t=>t>e.tick-cd*this.tickRate),c.window.push(e.tick);let u=`${e.tick}:${n}`,d=r.fighters.find(e=>e.player_id===t),f={a:this.nameOf(t),b:this.nameOf(n),punch:Rd(e.detail,d)},p=d?.action_power===`power`&&d.action===a;if(e.kind===`counter_hit`&&e.amount>=40?this.say(`counter`,e.event_id,i,f,u,Zu,void 0,t):(e.amount>=85||p&&o===`head`&&e.amount>=60)&&this.say(`bigShot`,e.event_id,i,f,u,Zu,void 0,t),c.unanswered===5?this.say(`unanswered`,e.event_id,i,f,u,Zu,void 0,t):c.run===3&&this.say(`combo`,e.event_id,i,f,u,Zu,void 0,t),a===`jab`&&(c.jabs=c.jabs.filter(t=>t>e.tick-sd*this.tickRate),c.jabs.push(e.tick),c.jabs.length>=3&&this.say(`jab`,e.event_id,i,f,null,Zu,void 0,t)&&(c.jabs.length=0)),o===`body`){let a=this.fighter(n);a!==void 0&&s.body>=5&&a.staminat>e.tick-cd*this.tickRate).length;c.window.length>=7&&m<=2&&c.takeoverRound!==r.round_number&&(c.takeoverRound=r.round_number,this.say(`takeover`,e.event_id,i,f,null,Zu,void 0,t)&&this.hooks.cue?.(`chant`))}roundEnded(e,t,n,r){let i=t.round_number;if(n!==null){(n.detail===`decision`||n.detail===`draw`)&&this.say(`finalBell`,e.event_id,r,{},`bell`,Zu,xd);return}let a=t.fighters.find(t=>{let n=this.notesFor(t.player_id);return t.stunned_ticks>0||t.poise({id:e.player_id,tally:this.tally(e.player_id)})),[c,l]=o.tally.landed>=s.tally.landed?[o,s]:[s,o];c.tally.thrown+l.tally.thrown>0&&this.sayAt(`summary`,e.event_id,r+2.4,{r:i,a:this.nameOf(c.id),x:c.tally.landed,y:c.tally.thrown,b:this.nameOf(l.id),z:l.tally.landed,w:l.tally.thrown},5);let u=(o.tally.knockdowns-s.tally.knockdowns)*1e3+(o.tally.damage-s.tally.damage)+6*(o.tally.landed-s.tally.landed),d=Math.abs(u)0?o:s;d!==null&&(this.notesFor(d.id).rounds+=1);let f=d===null?null:d===o?s:o,p=d===null||f===null?0:this.notesFor(d.id).rounds-this.notesFor(f.id).rounds,m=d===null?`roundClose`:o.tally.knockdowns===s.tally.knockdowns?i>=2&&p>=2?`pullingAway`:`roundFor`:`roundBig`;this.sayAt(m,e.event_id,r+6.4,{a:this.nameOf(d?.id??null),b:this.nameOf(f?.id??null)},5);let h=t.fighters.find(e=>Math.max(e.trauma.left_cut,e.trauma.right_cut)>=dd.cut||e.trauma.swelling>=dd.swelling);h!==void 0&&this.sayAt(`doctor`,e.event_id,r+10,{b:this.nameOf(h.player_id)},4)}resulted(e,t){let n=_d[e.detail];if(n===void 0||this.resultCalled)return;this.resultCalled=!0;let r=e.actor_id;this.say(n,e.event_id,t,{a:this.nameOf(r),b:this.nameOf(this.otherId(r))},`result`,0)}inspect(e,t){if(e.phase===`fight`)for(let n of e.fighters){let r=this.notesFor(n.player_id),i={a:this.nameOf(this.otherId(n.player_id)),b:this.nameOf(n.player_id)};for(let[a,o]of[[0,`left`],[1,`right`]]){let s=a===0?n.trauma.left_cut:n.trauma.right_cut,c=r.cutMarks[a];c=ud[c]&&(r.cutMarks[a]=ud.filter(e=>s>=e).length,this.say(c===0?`cut`:c===1?`cutWorse`:`cutDoctor`,e.tick+a,t,{...i,side:o},null));let l=a===0?n.trauma.left_eye:n.trauma.right_eye;!r.eyeSwelling[a]&&!r.eyeShut[a]&&l>=fd&&(r.eyeSwelling[a]=!0,this.say(`eyeSwelling`,e.tick+a,t,{...i,side:o},null))}let a=n.stamina/Math.max(1,n.maximum_stamina);a=2*this.tickRate&&this.tired(n.player_id,e.tick,t)):a>=md&&(r.lowSince=null)}}tired(e,t,n){let r=this.notesFor(e);r.tiredRound!==this.round&&(r.tiredRound=this.round,this.say(`tiring`,t,n,{a:this.nameOf(this.otherId(e)),b:this.nameOf(e)},null))}say(e,t,n,r,i,a=Zu,o,s){let c=Td[e],l=`${e}:${s??``}`;if(c!==void 0){if(n<(this.cooldowns.get(l)??-1/0))return!1;this.cooldowns.set(l,n+c)}let u=Fd(this.choose(e,t),r),d={speaker:wd[e]??`play`,text:u,priority:Cd[e],urgent:Sd.has(e),hold:Ud(u),card:null};return this.enqueue(d,n+a,i,o,vd[e]??null)}sayAt(e,t,n,r,i){let a=Fd(this.choose(e,t),r);this.enqueue({speaker:wd[e]??`play`,text:a,priority:Cd[e],urgent:Sd.has(e),hold:Ud(a),card:null},n,null,i)}announcement(e,t,n,r){return{speaker:`announcer`,text:e,priority:r,urgent:!0,hold:n,card:t}}choose(e,t){let n=gd[e],r=Id(t,e.length*31+e.charCodeAt(0))%n.length;return n.length>1&&this.lastChoice.get(e)===r&&(r=(r+1)%n.length),this.lastChoice.set(e,r),n[r]}enqueue(e,t,n,r,i=null,a=null){if(n!==null){if(this.queue.some(t=>t.moment===n&&t.line.priority>=e.priority)||this.showing?.moment===n&&this.showing.line.priority>=e.priority)return!1;for(let e=this.queue.length-1;e>=0;--e)this.queue[e].moment===n&&this.queue.splice(e,1)}if(this.queue.push({line:e,at:t,expires:t+(r??(e.urgent?td:ed)),moment:n,phases:i,spoken:a}),this.queue.length>rd){let e=0;for(let t=1;tt.player_id===e)}otherId(e){let t=this.fighters;return t===null||e===null?null:t[0].player_id===e?t[1].player_id:t[1].player_id===e?t[0].player_id:null}seatOf(e){let t=this.fighters?.findIndex(t=>t.player_id===e)??-1;return t===0||t===1?t:null}nameOf(e){if(e===null)return`the fighter`;let t=this.players[e]?.name;if(t!==void 0&&t.trim().length>0)return t.trim();let n=this.seatOf(e);return n===0?`the blue corner`:n===1?`the red corner`:`the fighter`}};function Ud(e){return Math.min(5.2,Math.max(2.2,1.4+e.length*.05))}var Wd=`attached`,Gd=1e3,Kd=1001,qd=1002,Jd=1003,Yd=1004,Xd=1005,Zd=1006,Qd=1007,$d=1008,ef=1009,tf=1010,nf=1011,rf=1012,af=1013,of=1014,sf=1015,cf=1016,lf=1017,uf=1018,df=1020,ff=35902,pf=35899,mf=1021,hf=1022,gf=1023,_f=1026,vf=1027,yf=1028,bf=1029,xf=1030,Sf=1031,Cf=1033,wf=33776,Tf=33777,Ef=33778,Df=33779,Of=35840,kf=35841,Af=35842,jf=35843,Mf=36196,Nf=37492,Pf=37496,Ff=37488,If=37489,Lf=37490,Rf=37491,zf=37808,Bf=37809,Vf=37810,Hf=37811,Uf=37812,Wf=37813,Gf=37814,Kf=37815,qf=37816,Jf=37817,Yf=37818,Xf=37819,Zf=37820,Qf=37821,$f=36492,ep=36494,tp=36495,np=36283,rp=36284,ip=36285,ap=36286,op=2300,sp=2301,cp=2302,lp=2303,up=2400,dp=2401,fp=2402,pp=2500,mp=3200,hp=`srgb`,gp=`srgb-linear`,_p=`linear`,vp=`srgb`,yp=7680,bp=35044,xp=35048,Sp=2e3;function Cp(e){for(let t=e.length-1;t>=0;--t)if(e[t]>=65535)return!0;return!1}function wp(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function Tp(e){return document.createElementNS(`http://www.w3.org/1999/xhtml`,e)}function Ep(){let e=Tp(`canvas`);return e.style.display=`block`,e}var Dp={};function Op(...e){let t=`THREE.`+e.shift();console.log(t,...e)}function kp(e){let t=e[0];if(typeof t==`string`&&t.startsWith(`TSL:`)){let t=e[1];t&&t.isStackTrace?e[0]+=` `+t.getLocation():e[1]=`Stack trace not available. Enable "THREE.Node.captureStackTrace" to capture stack traces.`}return e}function Ap(...e){e=kp(e);let t=`THREE.`+e.shift();{let n=e[0];n&&n.isStackTrace?console.warn(n.getError(t)):console.warn(t,...e)}}function jp(...e){e=kp(e);let t=`THREE.`+e.shift();{let n=e[0];n&&n.isStackTrace?console.error(n.getError(t)):console.error(t,...e)}}function Mp(...e){let t=e.join(` `);t in Dp||(Dp[t]=!0,Ap(...e))}function Np(e,t,n){return new Promise(function(r,i){function a(){switch(e.clientWaitSync(t,e.SYNC_FLUSH_COMMANDS_BIT,0)){case e.WAIT_FAILED:i();break;case e.TIMEOUT_EXPIRED:setTimeout(a,n);break;default:r()}}setTimeout(a,n)})}var Pp={0:1,2:6,4:7,3:5,1:0,6:2,7:4,5:3},Fp=class{addEventListener(e,t){this._listeners===void 0&&(this._listeners={});let n=this._listeners;n[e]===void 0&&(n[e]=[]),n[e].indexOf(t)===-1&&n[e].push(t)}hasEventListener(e,t){let n=this._listeners;return n!==void 0&&n[e]!==void 0&&n[e].indexOf(t)!==-1}removeEventListener(e,t){let n=this._listeners;if(n===void 0)return;let r=n[e];if(r!==void 0){let e=r.indexOf(t);e!==-1&&r.splice(e,1)}}dispatchEvent(e){let t=this._listeners;if(t===void 0)return;let n=t[e.type];if(n!==void 0){e.target=this;let t=n.slice(0);for(let n=0,r=t.length;n>8&255]+Ip[e>>16&255]+Ip[e>>24&255]+`-`+Ip[t&255]+Ip[t>>8&255]+`-`+Ip[t>>16&15|64]+Ip[t>>24&255]+`-`+Ip[n&63|128]+Ip[n>>8&255]+`-`+Ip[n>>16&255]+Ip[n>>24&255]+Ip[r&255]+Ip[r>>8&255]+Ip[r>>16&255]+Ip[r>>24&255]).toLowerCase()}function Vp(e,t,n){return Math.max(t,Math.min(n,e))}function Hp(e,t){return(e%t+t)%t}function Up(e,t,n,r,i){return r+(e-t)*(i-r)/(n-t)}function Wp(e,t,n){return e===t?0:(n-e)/(t-e)}function Gp(e,t,n){return(1-n)*e+n*t}function Kp(e,t,n,r){return Gp(e,t,1-Math.exp(-n*r))}function qp(e,t=1){return t-Math.abs(Hp(e,t*2)-t)}function Jp(e,t,n){return e<=t?0:e>=n?1:(e=(e-t)/(n-t),e*e*(3-2*e))}function Yp(e,t,n){return e<=t?0:e>=n?1:(e=(e-t)/(n-t),e*e*e*(e*(e*6-15)+10))}function Xp(e,t){return e+Math.floor(Math.random()*(t-e+1))}function Zp(e,t){return e+Math.random()*(t-e)}function Qp(e){return e*(.5-Math.random())}function $p(e){e!==void 0&&(Lp=e);let t=Lp+=1831565813;return t=Math.imul(t^t>>>15,t|1),t^=t+Math.imul(t^t>>>7,t|61),((t^t>>>14)>>>0)/4294967296}function em(e){return e*Rp}function tm(e){return e*zp}function nm(e){return e>0&&Number.isInteger(e)&&2**Math.round(Math.log2(e))===e}function rm(e){return 2**Math.ceil(Math.log(e)/Math.LN2)}function im(e){return 2**Math.floor(Math.log(e)/Math.LN2)}function am(e,t,n,r,i){let a=Math.cos,o=Math.sin,s=a(n/2),c=o(n/2),l=a((t+r)/2),u=o((t+r)/2),d=a((t-r)/2),f=o((t-r)/2),p=a((r-t)/2),m=o((r-t)/2);switch(i){case`XYX`:e.set(s*u,c*d,c*f,s*l);break;case`YZY`:e.set(c*f,s*u,c*d,s*l);break;case`ZXZ`:e.set(c*d,c*f,s*u,s*l);break;case`XZX`:e.set(s*u,c*m,c*p,s*l);break;case`YXY`:e.set(c*p,s*u,c*m,s*l);break;case`ZYZ`:e.set(c*m,c*p,s*u,s*l);break;default:Ap(`MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: `+i)}}function om(e,t){switch(t.constructor){case Float32Array:return e;case Uint32Array:return e/4294967295;case Uint16Array:return e/65535;case Uint8Array:case Uint8ClampedArray:return e/255;case Int32Array:return Math.max(e/2147483647,-1);case Int16Array:return Math.max(e/32767,-1);case Int8Array:return Math.max(e/127,-1);default:throw Error(`THREE.MathUtils: Invalid component type.`)}}function sm(e,t){switch(t.constructor){case Float32Array:return e;case Uint32Array:return Math.round(e*4294967295);case Uint16Array:return Math.round(e*65535);case Uint8Array:case Uint8ClampedArray:return Math.round(e*255);case Int32Array:return Math.round(e*2147483647);case Int16Array:return Math.round(e*32767);case Int8Array:return Math.round(e*127);default:throw Error(`THREE.MathUtils: Invalid component type.`)}}var K={DEG2RAD:Rp,RAD2DEG:zp,generateUUID:Bp,clamp:Vp,euclideanModulo:Hp,mapLinear:Up,inverseLerp:Wp,lerp:Gp,damp:Kp,pingpong:qp,smoothstep:Jp,smootherstep:Yp,randInt:Xp,randFloat:Zp,randFloatSpread:Qp,seededRandom:$p,degToRad:em,radToDeg:tm,isPowerOfTwo:nm,ceilPowerOfTwo:rm,floorPowerOfTwo:im,setQuaternionFromProperEuler:am,normalize:sm,denormalize:om},q=class e{static{e.prototype.isVector2=!0}constructor(e=0,t=0){this.x=e,this.y=t}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,t){return this.x=e,this.y=t,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw Error(`THREE.Vector2: index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw Error(`THREE.Vector2: index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){let t=this.x,n=this.y,r=e.elements;return this.x=r[0]*t+r[3]*n+r[6],this.y=r[1]*t+r[4]*n+r[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,t){return this.x=Vp(this.x,e.x,t.x),this.y=Vp(this.y,e.y,t.y),this}clampScalar(e,t){return this.x=Vp(this.x,e,t),this.y=Vp(this.y,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(Vp(n,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let n=this.dot(e)/t;return Math.acos(Vp(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y;return t*t+n*n}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this}rotateAround(e,t){let n=Math.cos(t),r=Math.sin(t),i=this.x-e.x,a=this.y-e.y;return this.x=i*n-a*r+e.x,this.y=i*r+a*n+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}},cm=class{constructor(e=0,t=0,n=0,r=1){this.isQuaternion=!0,this._x=e,this._y=t,this._z=n,this._w=r}static slerpFlat(e,t,n,r,i,a,o){let s=n[r+0],c=n[r+1],l=n[r+2],u=n[r+3],d=i[a+0],f=i[a+1],p=i[a+2],m=i[a+3];if(u!==m||s!==d||c!==f||l!==p){let e=s*d+c*f+l*p+u*m;e<0&&(d=-d,f=-f,p=-p,m=-m,e=-e);let t=1-o;if(e<.9995){let n=Math.acos(e),r=Math.sin(n);t=Math.sin(t*n)/r,o=Math.sin(o*n)/r,s=s*t+d*o,c=c*t+f*o,l=l*t+p*o,u=u*t+m*o}else{s=s*t+d*o,c=c*t+f*o,l=l*t+p*o,u=u*t+m*o;let e=1/Math.sqrt(s*s+c*c+l*l+u*u);s*=e,c*=e,l*=e,u*=e}}e[t]=s,e[t+1]=c,e[t+2]=l,e[t+3]=u}static multiplyQuaternionsFlat(e,t,n,r,i,a){let o=n[r],s=n[r+1],c=n[r+2],l=n[r+3],u=i[a],d=i[a+1],f=i[a+2],p=i[a+3];return e[t]=o*p+l*u+s*f-c*d,e[t+1]=s*p+l*d+c*u-o*f,e[t+2]=c*p+l*f+o*d-s*u,e[t+3]=l*p-o*u-s*d-c*f,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,t,n,r){return this._x=e,this._y=t,this._z=n,this._w=r,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,t=!0){let n=e._x,r=e._y,i=e._z,a=e._order,o=Math.cos,s=Math.sin,c=o(n/2),l=o(r/2),u=o(i/2),d=s(n/2),f=s(r/2),p=s(i/2);switch(a){case`XYZ`:this._x=d*l*u+c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u-d*f*p;break;case`YXZ`:this._x=d*l*u+c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u+d*f*p;break;case`ZXY`:this._x=d*l*u-c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u-d*f*p;break;case`ZYX`:this._x=d*l*u-c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u+d*f*p;break;case`YZX`:this._x=d*l*u+c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u-d*f*p;break;case`XZY`:this._x=d*l*u-c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u+d*f*p;break;default:Ap(`Quaternion: .setFromEuler() encountered an unknown order: `+a)}return t===!0&&this._onChangeCallback(),this}setFromAxisAngle(e,t){let n=t/2,r=Math.sin(n);return this._x=e.x*r,this._y=e.y*r,this._z=e.z*r,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(e){let t=e.elements,n=t[0],r=t[4],i=t[8],a=t[1],o=t[5],s=t[9],c=t[2],l=t[6],u=t[10],d=n+o+u;if(d>0){let e=.5/Math.sqrt(d+1);this._w=.25/e,this._x=(l-s)*e,this._y=(i-c)*e,this._z=(a-r)*e}else if(n>o&&n>u){let e=2*Math.sqrt(1+n-o-u);this._w=(l-s)/e,this._x=.25*e,this._y=(r+a)/e,this._z=(i+c)/e}else if(o>u){let e=2*Math.sqrt(1+o-n-u);this._w=(i-c)/e,this._x=(r+a)/e,this._y=.25*e,this._z=(s+l)/e}else{let e=2*Math.sqrt(1+u-n-o);this._w=(a-r)/e,this._x=(i+c)/e,this._y=(s+l)/e,this._z=.25*e}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let n=e.dot(t)+1;return n<1e-8?(n=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=n):(this._x=0,this._y=-e.z,this._z=e.y,this._w=n)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x,this._w=n),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(Vp(this.dot(e),-1,1)))}rotateTowards(e,t){let n=this.angleTo(e);if(n===0)return this;let r=Math.min(1,t/n);return this.slerp(e,r),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return e===0?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x*=e,this._y*=e,this._z*=e,this._w*=e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){let n=e._x,r=e._y,i=e._z,a=e._w,o=t._x,s=t._y,c=t._z,l=t._w;return this._x=n*l+a*o+r*c-i*s,this._y=r*l+a*s+i*o-n*c,this._z=i*l+a*c+n*s-r*o,this._w=a*l-n*o-r*s-i*c,this._onChangeCallback(),this}slerp(e,t){let n=e._x,r=e._y,i=e._z,a=e._w,o=this.dot(e);o<0&&(n=-n,r=-r,i=-i,a=-a,o=-o);let s=1-t;if(o<.9995){let e=Math.acos(o),c=Math.sin(e);s=Math.sin(s*e)/c,t=Math.sin(t*e)/c,this._x=this._x*s+n*t,this._y=this._y*s+r*t,this._z=this._z*s+i*t,this._w=this._w*s+a*t,this._onChangeCallback()}else this._x=this._x*s+n*t,this._y=this._y*s+r*t,this._z=this._z*s+i*t,this._w=this._w*s+a*t,this.normalize();return this}slerpQuaternions(e,t,n){return this.copy(e).slerp(t,n)}random(){let e=2*Math.PI*Math.random(),t=2*Math.PI*Math.random(),n=Math.random(),r=Math.sqrt(1-n),i=Math.sqrt(n);return this.set(r*Math.sin(e),r*Math.cos(e),i*Math.sin(t),i*Math.cos(t))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}fromBufferAttribute(e,t){return this._x=e.getX(t),this._y=e.getY(t),this._z=e.getZ(t),this._w=e.getW(t),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}},J=class e{static{e.prototype.isVector3=!0}constructor(e=0,t=0,n=0){this.x=e,this.y=t,this.z=n}set(e,t,n){return n===void 0&&(n=this.z),this.x=e,this.y=t,this.z=n,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw Error(`THREE.Vector3: index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error(`THREE.Vector3: index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return this.applyQuaternion(um.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(um.setFromAxisAngle(e,t))}applyMatrix3(e){let t=this.x,n=this.y,r=this.z,i=e.elements;return this.x=i[0]*t+i[3]*n+i[6]*r,this.y=i[1]*t+i[4]*n+i[7]*r,this.z=i[2]*t+i[5]*n+i[8]*r,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){let t=this.x,n=this.y,r=this.z,i=e.elements,a=1/(i[3]*t+i[7]*n+i[11]*r+i[15]);return this.x=(i[0]*t+i[4]*n+i[8]*r+i[12])*a,this.y=(i[1]*t+i[5]*n+i[9]*r+i[13])*a,this.z=(i[2]*t+i[6]*n+i[10]*r+i[14])*a,this}applyQuaternion(e){let t=this.x,n=this.y,r=this.z,i=e.x,a=e.y,o=e.z,s=e.w,c=2*(a*r-o*n),l=2*(o*t-i*r),u=2*(i*n-a*t);return this.x=t+s*c+a*u-o*l,this.y=n+s*l+o*c-i*u,this.z=r+s*u+i*l-a*c,this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){let t=this.x,n=this.y,r=this.z,i=e.elements;return this.x=i[0]*t+i[4]*n+i[8]*r,this.y=i[1]*t+i[5]*n+i[9]*r,this.z=i[2]*t+i[6]*n+i[10]*r,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=Vp(this.x,e.x,t.x),this.y=Vp(this.y,e.y,t.y),this.z=Vp(this.z,e.z,t.z),this}clampScalar(e,t){return this.x=Vp(this.x,e,t),this.y=Vp(this.y,e,t),this.z=Vp(this.z,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(Vp(n,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this.z=e.z+(t.z-e.z)*n,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){let n=e.x,r=e.y,i=e.z,a=t.x,o=t.y,s=t.z;return this.x=r*s-i*o,this.y=i*a-n*s,this.z=n*o-r*a,this}projectOnVector(e){let t=e.lengthSq();if(t===0)return this.set(0,0,0);let n=e.dot(this)/t;return this.copy(e).multiplyScalar(n)}projectOnPlane(e){return lm.copy(this).projectOnVector(e),this.sub(lm)}reflect(e){return this.sub(lm.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let n=this.dot(e)/t;return Math.acos(Vp(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y,r=this.z-e.z;return t*t+n*n+r*r}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,t,n){let r=Math.sin(t)*e;return this.x=r*Math.sin(n),this.y=Math.cos(t)*e,this.z=r*Math.cos(n),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,n){return this.x=e*Math.sin(t),this.y=n,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){let t=this.setFromMatrixColumn(e,0).length(),n=this.setFromMatrixColumn(e,1).length(),r=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=n,this.z=r,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,t*4)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,t*3)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}setFromColor(e){return this.x=e.r,this.y=e.g,this.z=e.b,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){let e=Math.random()*Math.PI*2,t=Math.random()*2-1,n=Math.sqrt(1-t*t);return this.x=n*Math.cos(e),this.y=t,this.z=n*Math.sin(e),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}},lm=new J,um=new cm,dm=class e{static{e.prototype.isMatrix3=!0}constructor(e,t,n,r,i,a,o,s,c){this.elements=[1,0,0,0,1,0,0,0,1],e!==void 0&&this.set(e,t,n,r,i,a,o,s,c)}set(e,t,n,r,i,a,o,s,c){let l=this.elements;return l[0]=e,l[1]=r,l[2]=o,l[3]=t,l[4]=i,l[5]=s,l[6]=n,l[7]=a,l[8]=c,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){let t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],this}extractBasis(e,t,n){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(e){let t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let n=e.elements,r=t.elements,i=this.elements,a=n[0],o=n[3],s=n[6],c=n[1],l=n[4],u=n[7],d=n[2],f=n[5],p=n[8],m=r[0],h=r[3],g=r[6],_=r[1],v=r[4],y=r[7],b=r[2],x=r[5],S=r[8];return i[0]=a*m+o*_+s*b,i[3]=a*h+o*v+s*x,i[6]=a*g+o*y+s*S,i[1]=c*m+l*_+u*b,i[4]=c*h+l*v+u*x,i[7]=c*g+l*y+u*S,i[2]=d*m+f*_+p*b,i[5]=d*h+f*v+p*x,i[8]=d*g+f*y+p*S,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this}determinant(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8];return t*a*l-t*o*c-n*i*l+n*o*s+r*i*c-r*a*s}invert(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8],u=l*a-o*c,d=o*s-l*i,f=c*i-a*s,p=t*u+n*d+r*f;if(p===0)return this.set(0,0,0,0,0,0,0,0,0);let m=1/p;return e[0]=u*m,e[1]=(r*c-l*n)*m,e[2]=(o*n-r*a)*m,e[3]=d*m,e[4]=(l*t-r*s)*m,e[5]=(r*i-o*t)*m,e[6]=f*m,e[7]=(n*s-c*t)*m,e[8]=(a*t-n*i)*m,this}transpose(){let e,t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){let t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this}setUvTransform(e,t,n,r,i,a,o){let s=Math.cos(i),c=Math.sin(i);return this.set(n*s,n*c,-n*(s*a+c*o)+a+e,-r*c,r*s,-r*(-c*a+s*o)+o+t,0,0,1),this}scale(e,t){return Mp(`Matrix3: .scale() is deprecated. Use .makeScale() instead.`),this.premultiply(fm.makeScale(e,t)),this}rotate(e){return Mp(`Matrix3: .rotate() is deprecated. Use .makeRotation() instead.`),this.premultiply(fm.makeRotation(-e)),this}translate(e,t){return Mp(`Matrix3: .translate() is deprecated. Use .makeTranslation() instead.`),this.premultiply(fm.makeTranslation(e,t)),this}makeTranslation(e,t){return e.isVector2?this.set(1,0,e.x,0,1,e.y,0,0,1):this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,n,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}equals(e){let t=this.elements,n=e.elements;for(let e=0;e<9;e++)if(t[e]!==n[e])return!1;return!0}fromArray(e,t=0){for(let n=0;n<9;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){let n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e}clone(){return new this.constructor().fromArray(this.elements)}},fm=new dm,pm=new dm().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),mm=new dm().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function hm(){let e={enabled:!0,workingColorSpace:gp,spaces:{},convert:function(e,t,n){return this.enabled===!1||t===n||!t||!n?e:(this.spaces[t].transfer===`srgb`&&(e.r=_m(e.r),e.g=_m(e.g),e.b=_m(e.b)),this.spaces[t].primaries!==this.spaces[n].primaries&&(e.applyMatrix3(this.spaces[t].toXYZ),e.applyMatrix3(this.spaces[n].fromXYZ)),this.spaces[n].transfer===`srgb`&&(e.r=vm(e.r),e.g=vm(e.g),e.b=vm(e.b)),e)},workingToColorSpace:function(e,t){return this.convert(e,this.workingColorSpace,t)},colorSpaceToWorking:function(e,t){return this.convert(e,t,this.workingColorSpace)},getPrimaries:function(e){return this.spaces[e].primaries},getTransfer:function(e){return e===``?_p:this.spaces[e].transfer},getToneMappingMode:function(e){return this.spaces[e].outputColorSpaceConfig.toneMappingMode||`standard`},getLuminanceCoefficients:function(e,t=this.workingColorSpace){return e.fromArray(this.spaces[t].luminanceCoefficients)},define:function(e){Object.assign(this.spaces,e)},_getMatrix:function(e,t,n){return e.copy(this.spaces[t].toXYZ).multiply(this.spaces[n].fromXYZ)},_getDrawingBufferColorSpace:function(e){return this.spaces[e].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(e=this.workingColorSpace){return this.spaces[e].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(t,n){return Mp(`ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace().`),e.workingToColorSpace(t,n)},toWorkingColorSpace:function(t,n){return Mp(`ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking().`),e.colorSpaceToWorking(t,n)}},t=[.64,.33,.3,.6,.15,.06],n=[.2126,.7152,.0722],r=[.3127,.329];return e.define({[gp]:{primaries:t,whitePoint:r,transfer:_p,toXYZ:pm,fromXYZ:mm,luminanceCoefficients:n,workingColorSpaceConfig:{unpackColorSpace:hp},outputColorSpaceConfig:{drawingBufferColorSpace:hp}},[hp]:{primaries:t,whitePoint:r,transfer:vp,toXYZ:pm,fromXYZ:mm,luminanceCoefficients:n,outputColorSpaceConfig:{drawingBufferColorSpace:hp}}}),e}var gm=hm();function _m(e){return e<.04045?e*.0773993808:(e*.9478672986+.0521327014)**2.4}function vm(e){return e<.0031308?e*12.92:1.055*e**.41666-.055}var ym,bm=class{static getDataURL(e,t=`image/png`){if(/^data:/i.test(e.src)||typeof HTMLCanvasElement>`u`)return e.src;let n;if(e instanceof HTMLCanvasElement)n=e;else{ym===void 0&&(ym=Tp(`canvas`)),ym.width=e.width,ym.height=e.height;let t=ym.getContext(`2d`);e instanceof ImageData?t.putImageData(e,0,0):t.drawImage(e,0,0,e.width,e.height),n=ym}return n.toDataURL(t)}static sRGBToLinear(e){if(typeof HTMLImageElement<`u`&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<`u`&&e instanceof HTMLCanvasElement||typeof ImageBitmap<`u`&&e instanceof ImageBitmap){let t=Tp(`canvas`);t.width=e.width,t.height=e.height;let n=t.getContext(`2d`);n.drawImage(e,0,0,e.width,e.height);let r=n.getImageData(0,0,e.width,e.height),i=r.data;for(let e=0;e1),this.pmremVersion=0,this.normalized=!1}get width(){return this.source.getSize(Tm).x}get height(){return this.source.getSize(Tm).y}get depth(){return this.source.getSize(Tm).z}get image(){return this.source.data}set image(e){this.source.data=e}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return new this.constructor().copy(this)}copy(e){return this.name=e.name,this.source=e.source,this.mipmaps=e.mipmaps.slice(0),this.mapping=e.mapping,this.channel=e.channel,this.wrapS=e.wrapS,this.wrapT=e.wrapT,this.magFilter=e.magFilter,this.minFilter=e.minFilter,this.anisotropy=e.anisotropy,this.format=e.format,this.internalFormat=e.internalFormat,this.type=e.type,this.normalized=e.normalized,this.offset.copy(e.offset),this.repeat.copy(e.repeat),this.center.copy(e.center),this.rotation=e.rotation,this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrix.copy(e.matrix),this.generateMipmaps=e.generateMipmaps,this.premultiplyAlpha=e.premultiplyAlpha,this.flipY=e.flipY,this.unpackAlignment=e.unpackAlignment,this.colorSpace=e.colorSpace,this.renderTarget=e.renderTarget,this.isRenderTargetTexture=e.isRenderTargetTexture,this.isArrayTexture=e.isArrayTexture,this.userData=JSON.parse(JSON.stringify(e.userData)),this.needsUpdate=!0,this}setValues(e){for(let t in e){let n=e[t];if(n===void 0){Ap(`Texture.setValues(): parameter '${t}' has value of undefined.`);continue}let r=this[t];if(r===void 0){Ap(`Texture.setValues(): property '${t}' does not exist.`);continue}r&&n&&r.isVector2&&n.isVector2||r&&n&&r.isVector3&&n.isVector3||r&&n&&r.isMatrix3&&n.isMatrix3?r.copy(n):this[t]=n}}toJSON(e){let t=e===void 0||typeof e==`string`;if(!t&&e.textures[this.uuid]!==void 0)return e.textures[this.uuid];let n={metadata:{version:4.7,type:`Texture`,generator:`Texture.toJSON`},uuid:this.uuid,name:this.name,image:this.source.toJSON(e).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,normalized:this.normalized,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(n.userData=this.userData),t||(e.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:`dispose`})}transformUv(e){if(this.mapping!==300)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case Gd:e.x-=Math.floor(e.x);break;case Kd:e.x=e.x<0?0:1;break;case qd:Math.abs(Math.floor(e.x)%2)===1?e.x=Math.ceil(e.x)-e.x:e.x-=Math.floor(e.x);break}if(e.y<0||e.y>1)switch(this.wrapT){case Gd:e.y-=Math.floor(e.y);break;case Kd:e.y=e.y<0?0:1;break;case qd:Math.abs(Math.floor(e.y)%2)===1?e.y=Math.ceil(e.y)-e.y:e.y-=Math.floor(e.y);break}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){e===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(e){e===!0&&this.pmremVersion++}};Em.DEFAULT_IMAGE=null,Em.DEFAULT_MAPPING=300,Em.DEFAULT_ANISOTROPY=1;var Dm=class e{static{e.prototype.isVector4=!0}constructor(e=0,t=0,n=0,r=1){this.x=e,this.y=t,this.z=n,this.w=r}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,t,n,r){return this.x=e,this.y=t,this.z=n,this.w=r,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw Error(`THREE.Vector4: index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error(`THREE.Vector4: index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w===void 0?1:e.w,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){let t=this.x,n=this.y,r=this.z,i=this.w,a=e.elements;return this.x=a[0]*t+a[4]*n+a[8]*r+a[12]*i,this.y=a[1]*t+a[5]*n+a[9]*r+a[13]*i,this.z=a[2]*t+a[6]*n+a[10]*r+a[14]*i,this.w=a[3]*t+a[7]*n+a[11]*r+a[15]*i,this}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this.w/=e.w,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);let t=Math.sqrt(1-e.w*e.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t),this}setAxisAngleFromRotationMatrix(e){let t,n,r,i,a=.01,o=.1,s=e.elements,c=s[0],l=s[4],u=s[8],d=s[1],f=s[5],p=s[9],m=s[2],h=s[6],g=s[10];if(Math.abs(l-d)s&&e>_?e_?s1);this.dispose()}this.viewport.set(0,0,e,t),this.scissor.set(0,0,e,t)}clone(){return new this.constructor().copy(this)}copy(e){this.width=e.width,this.height=e.height,this.depth=e.depth,this.scissor.copy(e.scissor),this.scissorTest=e.scissorTest,this.viewport.copy(e.viewport),this.textures.length=0;for(let t=0,n=e.textures.length;t>>0}enable(e){this.mask|=1<1){for(let e=0;e1){for(let e=0;e0&&(r.userData=this.userData),r.layers=this.layers.mask,r.matrix=this.matrix.toArray(),r.up=this.up.toArray(),this.pivot!==null&&(r.pivot=this.pivot.toArray()),this.morphTargetDictionary!==void 0&&(r.morphTargetDictionary=Object.assign({},this.morphTargetDictionary)),this.morphTargetInfluences!==void 0&&(r.morphTargetInfluences=this.morphTargetInfluences.slice()),this.isInstancedMesh&&(r.type=`InstancedMesh`,r.count=this.count,r.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(r.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(r.type=`BatchedMesh`,r.perObjectFrustumCulled=this.perObjectFrustumCulled,r.sortObjects=this.sortObjects,r.drawRanges=this._drawRanges,r.reservedRanges=this._reservedRanges,r.geometryInfo=this._geometryInfo.map(e=>({...e,boundingBox:e.boundingBox?e.boundingBox.toJSON():void 0,boundingSphere:e.boundingSphere?e.boundingSphere.toJSON():void 0})),r.instanceInfo=this._instanceInfo.map(e=>({...e})),r.availableInstanceIds=this._availableInstanceIds.slice(),r.availableGeometryIds=this._availableGeometryIds.slice(),r.nextIndexStart=this._nextIndexStart,r.nextVertexStart=this._nextVertexStart,r.geometryCount=this._geometryCount,r.maxInstanceCount=this._maxInstanceCount,r.maxVertexCount=this._maxVertexCount,r.maxIndexCount=this._maxIndexCount,r.geometryInitialized=this._geometryInitialized,r.matricesTexture=this._matricesTexture.toJSON(e),r.indirectTexture=this._indirectTexture.toJSON(e),this._colorsTexture!==null&&(r.colorsTexture=this._colorsTexture.toJSON(e)),this.boundingSphere!==null&&(r.boundingSphere=this.boundingSphere.toJSON()),this.boundingBox!==null&&(r.boundingBox=this.boundingBox.toJSON()));function i(t,n){return t[n.uuid]===void 0&&(t[n.uuid]=n.toJSON(e)),n.uuid}if(this.isScene)this.background&&(this.background.isColor?r.background=this.background.toJSON():this.background.isTexture&&(r.background=this.background.toJSON(e).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(r.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){r.geometry=i(e.geometries,this.geometry);let t=this.geometry.parameters;if(t!==void 0&&t.shapes!==void 0){let n=t.shapes;if(Array.isArray(n))for(let t=0,r=n.length;t0){r.children=[];for(let t=0;t0){r.animations=[];for(let t=0;t0&&(n.geometries=t),r.length>0&&(n.materials=r),i.length>0&&(n.textures=i),o.length>0&&(n.images=o),s.length>0&&(n.shapes=s),c.length>0&&(n.skeletons=c),l.length>0&&(n.animations=l),u.length>0&&(n.nodes=u)}return n.object=r,n;function a(e){let t=[];for(let n in e){let r=e[n];delete r.metadata,t.push(r)}return t}}clone(e){return new this.constructor().copy(this,e)}copy(e,t=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.pivot=e.pivot===null?null:e.pivot.clone(),this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.static=e.static,this.animations=e.animations.slice(),this.userData=JSON.parse(JSON.stringify(e.userData)),t===!0)for(let t=0;t.025?(c.inputState.pinching=!1,this.dispatchEvent({type:`pinchend`,handedness:e.handedness,target:this})):!c.inputState.pinching&&o<=.015&&(c.inputState.pinching=!0,this.dispatchEvent({type:`pinchstart`,handedness:e.handedness,target:this}))}else s!==null&&e.gripSpace&&(i=t.getPose(e.gripSpace,n),i!==null&&(s.matrix.fromArray(i.transform.matrix),s.matrix.decompose(s.position,s.rotation,s.scale),s.matrixWorldNeedsUpdate=!0,i.linearVelocity?(s.hasLinearVelocity=!0,s.linearVelocity.copy(i.linearVelocity)):s.hasLinearVelocity=!1,i.angularVelocity?(s.hasAngularVelocity=!0,s.angularVelocity.copy(i.angularVelocity)):s.hasAngularVelocity=!1,s.eventsEnabled&&s.dispatchEvent({type:`gripUpdated`,data:e,target:this})));o!==null&&(r=t.getPose(e.targetRaySpace,n),r===null&&i!==null&&(r=i),r!==null&&(o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.matrixWorldNeedsUpdate=!0,r.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(r.linearVelocity)):o.hasLinearVelocity=!1,r.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(r.angularVelocity)):o.hasAngularVelocity=!1,this.dispatchEvent(sh)))}return o!==null&&(o.visible=r!==null),s!==null&&(s.visible=i!==null),c!==null&&(c.visible=a!==null),this}_getHandJoint(e,t){if(e.joints[t.jointName]===void 0){let n=new oh;n.matrixAutoUpdate=!1,n.visible=!1,e.joints[t.jointName]=n,e.add(n)}return e.joints[t.jointName]}},lh={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},uh={h:0,s:0,l:0},dh={h:0,s:0,l:0};function fh(e,t,n){return n<0&&(n+=1),n>1&&--n,n<1/6?e+(t-e)*6*n:n<1/2?t:n<2/3?e+(t-e)*6*(2/3-n):e}var Y=class{constructor(e,t,n){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(e,t,n)}set(e,t,n){if(t===void 0&&n===void 0){let t=e;t&&t.isColor?this.copy(t):typeof t==`number`?this.setHex(t):typeof t==`string`&&this.setStyle(t)}else this.setRGB(e,t,n);return this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,t=hp){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(e&255)/255,gm.colorSpaceToWorking(this,t),this}setRGB(e,t,n,r=gm.workingColorSpace){return this.r=e,this.g=t,this.b=n,gm.colorSpaceToWorking(this,r),this}setHSL(e,t,n,r=gm.workingColorSpace){if(e=Hp(e,1),t=Vp(t,0,1),n=Vp(n,0,1),t===0)this.r=this.g=this.b=n;else{let r=n<=.5?n*(1+t):n+t-n*t,i=2*n-r;this.r=fh(i,r,e+1/3),this.g=fh(i,r,e),this.b=fh(i,r,e-1/3)}return gm.colorSpaceToWorking(this,r),this}setStyle(e,t=hp){function n(t){t!==void 0&&parseFloat(t)<1&&Ap(`Color: Alpha component of `+e+` will be ignored.`)}let r;if(r=/^(\w+)\(([^\)]*)\)/.exec(e)){let i,a=r[1],o=r[2];switch(a){case`rgb`:case`rgba`:if(i=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(i[4]),this.setRGB(Math.min(255,parseInt(i[1],10))/255,Math.min(255,parseInt(i[2],10))/255,Math.min(255,parseInt(i[3],10))/255,t);if(i=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(i[4]),this.setRGB(Math.min(100,parseInt(i[1],10))/100,Math.min(100,parseInt(i[2],10))/100,Math.min(100,parseInt(i[3],10))/100,t);break;case`hsl`:case`hsla`:if(i=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(i[4]),this.setHSL(parseFloat(i[1])/360,parseFloat(i[2])/100,parseFloat(i[3])/100,t);break;default:Ap(`Color: Unknown color model `+e)}}else if(r=/^\#([A-Fa-f\d]+)$/.exec(e)){let n=r[1],i=n.length;if(i===3)return this.setRGB(parseInt(n.charAt(0),16)/15,parseInt(n.charAt(1),16)/15,parseInt(n.charAt(2),16)/15,t);if(i===6)return this.setHex(parseInt(n,16),t);Ap(`Color: Invalid hex color `+e)}else if(e&&e.length>0)return this.setColorName(e,t);return this}setColorName(e,t=hp){let n=lh[e.toLowerCase()];return n===void 0?Ap(`Color: Unknown color `+e):this.setHex(n,t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copySRGBToLinear(e){return this.r=_m(e.r),this.g=_m(e.g),this.b=_m(e.b),this}copyLinearToSRGB(e){return this.r=vm(e.r),this.g=vm(e.g),this.b=vm(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=hp){return gm.workingToColorSpace(ph.copy(this),e),Math.round(Vp(ph.r*255,0,255))*65536+Math.round(Vp(ph.g*255,0,255))*256+Math.round(Vp(ph.b*255,0,255))}getHexString(e=hp){return(`000000`+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=gm.workingColorSpace){gm.workingToColorSpace(ph.copy(this),t);let n=ph.r,r=ph.g,i=ph.b,a=Math.max(n,r,i),o=Math.min(n,r,i),s,c,l=(o+a)/2;if(o===a)s=0,c=0;else{let e=a-o;switch(c=l<=.5?e/(a+o):e/(2-a-o),a){case n:s=(r-i)/e+(r0?r.multiplyScalar(1/Math.sqrt(i)):r.set(0,0,0)}static getBarycoord(e,t,n,r,i){gh.subVectors(r,t),_h.subVectors(n,t),vh.subVectors(e,t);let a=gh.dot(gh),o=gh.dot(_h),s=gh.dot(vh),c=_h.dot(_h),l=_h.dot(vh),u=a*c-o*o;if(u===0)return i.set(0,0,0),null;let d=1/u,f=(c*s-o*l)*d,p=(a*l-o*s)*d;return i.set(1-f-p,p,f)}static containsPoint(e,t,n,r){return this.getBarycoord(e,t,n,r,yh)!==null&&yh.x>=0&&yh.y>=0&&yh.x+yh.y<=1}static getInterpolation(e,t,n,r,i,a,o,s){return this.getBarycoord(e,t,n,r,yh)===null?(s.x=0,s.y=0,`z`in s&&(s.z=0),`w`in s&&(s.w=0),null):(s.setScalar(0),s.addScaledVector(i,yh.x),s.addScaledVector(a,yh.y),s.addScaledVector(o,yh.z),s)}static getInterpolatedAttribute(e,t,n,r,i,a){return Eh.setScalar(0),Dh.setScalar(0),Oh.setScalar(0),Eh.fromBufferAttribute(e,t),Dh.fromBufferAttribute(e,n),Oh.fromBufferAttribute(e,r),a.setScalar(0),a.addScaledVector(Eh,i.x),a.addScaledVector(Dh,i.y),a.addScaledVector(Oh,i.z),a}static isFrontFacing(e,t,n,r){return gh.subVectors(n,t),_h.subVectors(e,t),gh.cross(_h).dot(r)<0}set(e,t,n){return this.a.copy(e),this.b.copy(t),this.c.copy(n),this}setFromPointsAndIndices(e,t,n,r){return this.a.copy(e[t]),this.b.copy(e[n]),this.c.copy(e[r]),this}setFromAttributeAndIndices(e,t,n,r){return this.a.fromBufferAttribute(e,t),this.b.fromBufferAttribute(e,n),this.c.fromBufferAttribute(e,r),this}clone(){return new this.constructor().copy(this)}copy(e){return this.a.copy(e.a),this.b.copy(e.b),this.c.copy(e.c),this}getArea(){return gh.subVectors(this.c,this.b),_h.subVectors(this.a,this.b),gh.cross(_h).length()*.5}getMidpoint(e){return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return e.getNormal(this.a,this.b,this.c,t)}getPlane(e){return e.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,n){return e.getBarycoord(t,this.a,this.b,this.c,n)}getInterpolation(t,n,r,i,a){return e.getInterpolation(t,this.a,this.b,this.c,n,r,i,a)}containsPoint(t){return e.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return e.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(e){return e.intersectsTriangle(this)}closestPointToPoint(e,t){let n=this.a,r=this.b,i=this.c,a,o;bh.subVectors(r,n),xh.subVectors(i,n),Ch.subVectors(e,n);let s=bh.dot(Ch),c=xh.dot(Ch);if(s<=0&&c<=0)return t.copy(n);wh.subVectors(e,r);let l=bh.dot(wh),u=xh.dot(wh);if(l>=0&&u<=l)return t.copy(r);let d=s*u-l*c;if(d<=0&&s>=0&&l<=0)return a=s/(s-l),t.copy(n).addScaledVector(bh,a);Th.subVectors(e,i);let f=bh.dot(Th),p=xh.dot(Th);if(p>=0&&f<=p)return t.copy(i);let m=f*c-s*p;if(m<=0&&c>=0&&p<=0)return o=c/(c-p),t.copy(n).addScaledVector(xh,o);let h=l*p-f*u;if(h<=0&&u-l>=0&&f-p>=0)return Sh.subVectors(i,r),o=(u-l)/(u-l+(f-p)),t.copy(r).addScaledVector(Sh,o);let g=1/(h+m+d);return a=m*g,o=d*g,t.copy(n).addScaledVector(bh,a).addScaledVector(xh,o)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}},Ah=class{constructor(e=new J(1/0,1/0,1/0),t=new J(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=e,this.max=t}set(e,t){return this.min.copy(e),this.max.copy(t),this}setFromArray(e){this.makeEmpty();for(let t=0,n=e.length;t=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y&&e.z>=this.min.z&&e.z<=this.max.z}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y&&e.max.z>=this.min.z&&e.min.z<=this.max.z}intersectsSphere(e){return this.clampPoint(e.center,Mh),Mh.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let t,n;return e.normal.x>0?(t=e.normal.x*this.min.x,n=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,n=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,n+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,n+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,n+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,n+=e.normal.z*this.min.z),t<=-e.constant&&n>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(Bh),Vh.subVectors(this.max,Bh),Ph.subVectors(e.a,Bh),Fh.subVectors(e.b,Bh),Ih.subVectors(e.c,Bh),Lh.subVectors(Fh,Ph),Rh.subVectors(Ih,Fh),zh.subVectors(Ph,Ih);let t=[0,-Lh.z,Lh.y,0,-Rh.z,Rh.y,0,-zh.z,zh.y,Lh.z,0,-Lh.x,Rh.z,0,-Rh.x,zh.z,0,-zh.x,-Lh.y,Lh.x,0,-Rh.y,Rh.x,0,-zh.y,zh.x,0];return!Wh(t,Ph,Fh,Ih,Vh)||(t=[1,0,0,0,1,0,0,0,1],!Wh(t,Ph,Fh,Ih,Vh))?!1:(Hh.crossVectors(Lh,Rh),t=[Hh.x,Hh.y,Hh.z],Wh(t,Ph,Fh,Ih,Vh))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,Mh).distanceTo(e)}getBoundingSphere(e){return this.isEmpty()?e.makeEmpty():(this.getCenter(e.center),e.radius=this.getSize(Mh).length()*.5),e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()?this:(jh[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),jh[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),jh[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),jh[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),jh[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),jh[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),jh[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),jh[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(jh),this)}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(e){return this.min.fromArray(e.min),this.max.fromArray(e.max),this}},jh=[new J,new J,new J,new J,new J,new J,new J,new J],Mh=new J,Nh=new Ah,Ph=new J,Fh=new J,Ih=new J,Lh=new J,Rh=new J,zh=new J,Bh=new J,Vh=new J,Hh=new J,Uh=new J;function Wh(e,t,n,r,i){for(let a=0,o=e.length-3;a<=o;a+=3){Uh.fromArray(e,a);let o=i.x*Math.abs(Uh.x)+i.y*Math.abs(Uh.y)+i.z*Math.abs(Uh.z),s=t.dot(Uh),c=n.dot(Uh),l=r.dot(Uh);if(Math.max(-Math.max(s,c,l),Math.min(s,c,l))>o)return!1}return!0}var Gh=new J,Kh=new q,qh=0,Jh=class extends Fp{constructor(e,t,n=!1){if(super(),Array.isArray(e))throw TypeError(`THREE.BufferAttribute: array should be a Typed Array.`);this.isBufferAttribute=!0,Object.defineProperty(this,"id",{value:qh++}),this.name=``,this.array=e,this.itemSize=t,this.count=e===void 0?0:e.length/t,this.normalized=n,this.usage=bp,this.updateRanges=[],this.gpuType=sf,this.version=0}onUploadCallback(){}set needsUpdate(e){e===!0&&this.version++}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.name=e.name,this.array=new e.array.constructor(e.array),this.itemSize=e.itemSize,this.count=e.count,this.normalized=e.normalized,this.usage=e.usage,this.gpuType=e.gpuType,this}copyAt(e,t,n){e*=this.itemSize,n*=t.itemSize;for(let r=0,i=this.itemSize;rthis.radius*this.radius&&(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center)),t}getBoundingBox(e){return this.isEmpty()?(e.makeEmpty(),e):(e.set(this.center,this.center),e.expandByScalar(this.radius),e)}applyMatrix4(e){return this.center.applyMatrix4(e),this.radius*=e.getMaxScaleOnAxis(),this}translate(e){return this.center.add(e),this}expandByPoint(e){if(this.isEmpty())return this.center.copy(e),this.radius=0,this;$h.subVectors(e,this.center);let t=$h.lengthSq();if(t>this.radius*this.radius){let e=Math.sqrt(t),n=(e-this.radius)*.5;this.center.addScaledVector($h,n/e),this.radius+=n}return this}union(e){return e.isEmpty()?this:this.isEmpty()?(this.copy(e),this):(this.center.equals(e.center)===!0?this.radius=Math.max(this.radius,e.radius):(eg.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint($h.copy(e.center).add(eg)),this.expandByPoint($h.copy(e.center).sub(eg))),this)}equals(e){return e.center.equals(this.center)&&e.radius===this.radius}clone(){return new this.constructor().copy(this)}toJSON(){return{radius:this.radius,center:this.center.toArray()}}fromJSON(e){return this.radius=e.radius,this.center.fromArray(e.center),this}},ng=0,rg=new Mm,ig=new ah,ag=new J,og=new Ah,sg=new Ah,cg=new J,lg=class e extends Fp{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:ng++}),this.uuid=Bp(),this.name=``,this.type=`BufferGeometry`,this.index=null,this.indirect=null,this.indirectOffset=0,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={},this._transformed=!1}getIndex(){return this.index}setIndex(e){return Array.isArray(e)?this.index=new(Cp(e)?Xh:Yh)(e,1):this.index=e,this}setIndirect(e,t=0){return this.indirect=e,this.indirectOffset=t,this}getIndirect(){return this.indirect}getAttribute(e){return this.attributes[e]}setAttribute(e,t){return this.attributes[e]=t,this}deleteAttribute(e){return delete this.attributes[e],this}hasAttribute(e){return this.attributes[e]!==void 0}addGroup(e,t,n=0){this.groups.push({start:e,count:t,materialIndex:n})}clearGroups(){this.groups=[]}setDrawRange(e,t){this.drawRange.start=e,this.drawRange.count=t}applyMatrix4(e){let t=this.attributes.position;t!==void 0&&(t.applyMatrix4(e),t.needsUpdate=!0);let n=this.attributes.normal;if(n!==void 0){let t=new dm().getNormalMatrix(e);n.applyNormalMatrix(t),n.needsUpdate=!0}let r=this.attributes.tangent;return r!==void 0&&(r.transformDirection(e),r.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this._transformed=!0,this}applyQuaternion(e){return rg.makeRotationFromQuaternion(e),this.applyMatrix4(rg),this}rotateX(e){return rg.makeRotationX(e),this.applyMatrix4(rg),this}rotateY(e){return rg.makeRotationY(e),this.applyMatrix4(rg),this}rotateZ(e){return rg.makeRotationZ(e),this.applyMatrix4(rg),this}translate(e,t,n){return rg.makeTranslation(e,t,n),this.applyMatrix4(rg),this}scale(e,t,n){return rg.makeScale(e,t,n),this.applyMatrix4(rg),this}lookAt(e){return ig.lookAt(e),ig.updateMatrix(),this.applyMatrix4(ig.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(ag).negate(),this.translate(ag.x,ag.y,ag.z),this}setFromPoints(e){let t=this.getAttribute(`position`);if(t===void 0){let t=[];for(let n=0,r=e.length;nt.count&&Ap(`BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry.`),t.needsUpdate=!0}return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new Ah);let e=this.attributes.position,t=this.morphAttributes.position;if(e&&e.isGLBufferAttribute){jp(`BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.`,this),this.boundingBox.set(new J(-1/0,-1/0,-1/0),new J(1/0,1/0,1/0));return}if(e!==void 0){if(this.boundingBox.setFromBufferAttribute(e),t)for(let e=0,n=t.length;e0&&(e.userData=this.userData),this.parameters!==void 0&&this._transformed!==!0){let t=this.parameters;for(let n in t)t[n]!==void 0&&(e[n]=t[n]);return e}e.data={attributes:{}};let t=this.index;t!==null&&(e.data.index={type:t.array.constructor.name,array:Array.prototype.slice.call(t.array)});let n=this.attributes;for(let t in n){let r=n[t];e.data.attributes[t]=r.toJSON(e.data)}let r={},i=!1;for(let t in this.morphAttributes){let n=this.morphAttributes[t],a=[];for(let t=0,r=n.length;t0&&(r[t]=a,i=!0)}i&&(e.data.morphAttributes=r,e.data.morphTargetsRelative=this.morphTargetsRelative);let a=this.groups;a.length>0&&(e.data.groups=JSON.parse(JSON.stringify(a)));let o=this.boundingSphere;return o!==null&&(e.data.boundingSphere=o.toJSON()),e}clone(){return new this.constructor().copy(this)}copy(e){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;let t={};this.name=e.name;let n=e.index;n!==null&&this.setIndex(n.clone());let r=e.attributes;for(let e in r){let n=r[e];this.setAttribute(e,n.clone(t))}let i=e.morphAttributes;for(let e in i){let n=[],r=i[e];for(let e=0,i=r.length;e1)?null:t.copy(e.start).addScaledVector(r,a)}intersectsLine(e){let t=this.distanceToPoint(e.start),n=this.distanceToPoint(e.end);return t<0&&n>0||n<0&&t>0}intersectsBox(e){return e.intersectsPlane(this)}intersectsSphere(e){return e.intersectsPlane(this)}coplanarPoint(e){return e.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(e,t){let n=t||hg.getNormalMatrix(e),r=this.coplanarPoint(pg).applyMatrix4(e),i=this.normal.applyMatrix3(n).normalize();return this.constant=-r.dot(i),this}translate(e){return this.constant-=e.dot(this.normal),this}equals(e){return e.normal.equals(this.normal)&&e.constant===this.constant}clone(){return new this.constructor().copy(this)}toJSON(){return{normal:this.normal.toArray(),constant:this.constant}}fromJSON(e){return this.normal.fromArray(e.normal),this.constant=e.constant,this}},_g=0,vg=class extends Fp{constructor(){super(),this.isMaterial=!0,Object.defineProperty(this,"id",{value:_g++}),this.uuid=Bp(),this.name=``,this.type=`Material`,this.blending=1,this.side=0,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.alphaHash=!1,this.blendSrc=204,this.blendDst=205,this.blendEquation=100,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.blendColor=new Y(0,0,0),this.blendAlpha=0,this.depthFunc=3,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=519,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=yp,this.stencilZFail=yp,this.stencilZPass=yp,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.forceSinglePass=!1,this.allowOverride=!0,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(e){this._alphaTest>0!=e>0&&this.version++,this._alphaTest=e}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(e){if(e!==void 0)for(let t in e){let n=e[t];if(n===void 0){Ap(`Material: parameter '${t}' has value of undefined.`);continue}let r=this[t];if(r===void 0){Ap(`Material: '${t}' is not a property of THREE.${this.type}.`);continue}r&&r.isColor?r.set(n):r&&r.isVector2&&n&&n.isVector2||r&&r.isEuler&&n&&n.isEuler||r&&r.isVector3&&n&&n.isVector3?r.copy(n):this[t]=n}}toJSON(e){let t=e===void 0||typeof e==`string`;t&&(e={textures:{},images:{}});let n={metadata:{version:4.7,type:`Material`,generator:`Material.toJSON`}};n.uuid=this.uuid,n.type=this.type,n.blending=this.blending,n.side=this.side,n.shadowSide=this.shadowSide,n.vertexColors=this.vertexColors,n.opacity=this.opacity,n.transparent=this.transparent,n.blendSrc=this.blendSrc,n.blendDst=this.blendDst,n.blendEquation=this.blendEquation,n.blendSrcAlpha=this.blendSrcAlpha,n.blendDstAlpha=this.blendDstAlpha,n.blendEquationAlpha=this.blendEquationAlpha,n.blendColor=this.blendColor.getHex(),n.blendAlpha=this.blendAlpha,n.depthFunc=this.depthFunc,n.depthTest=this.depthTest,n.depthWrite=this.depthWrite,n.colorWrite=this.colorWrite,n.clipIntersection=this.clipIntersection,n.clipShadows=this.clipShadows,n.stencilWriteMask=this.stencilWriteMask,n.stencilFunc=this.stencilFunc,n.stencilRef=this.stencilRef,n.stencilFuncMask=this.stencilFuncMask,n.stencilFail=this.stencilFail,n.stencilZFail=this.stencilZFail,n.stencilZPass=this.stencilZPass,n.stencilWrite=this.stencilWrite,n.polygonOffset=this.polygonOffset,n.polygonOffsetFactor=this.polygonOffsetFactor,n.polygonOffsetUnits=this.polygonOffsetUnits,n.dithering=this.dithering,n.alphaTest=this.alphaTest,n.alphaHash=this.alphaHash,n.alphaToCoverage=this.alphaToCoverage,n.premultipliedAlpha=this.premultipliedAlpha,n.forceSinglePass=this.forceSinglePass,n.allowOverride=this.allowOverride,n.visible=this.visible,n.toneMapped=this.toneMapped,n.name=this.name,this.color&&this.color.isColor&&(n.color=this.color.getHex()),this.roughness!==void 0&&(n.roughness=this.roughness),this.metalness!==void 0&&(n.metalness=this.metalness),this.sheen!==void 0&&(n.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(n.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0&&(n.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(n.emissive=this.emissive.getHex()),this.emissiveIntensity!==void 0&&(n.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(n.specular=this.specular.getHex()),this.specularIntensity!==void 0&&(n.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(n.specularColor=this.specularColor.getHex()),this.shininess!==void 0&&(n.shininess=this.shininess),this.clearcoat!==void 0&&(n.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0&&(n.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(n.clearcoatMap=this.clearcoatMap.toJSON(e).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(n.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(e).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(n.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(e).uuid,n.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.sheenColorMap&&this.sheenColorMap.isTexture&&(n.sheenColorMap=this.sheenColorMap.toJSON(e).uuid),this.sheenRoughnessMap&&this.sheenRoughnessMap.isTexture&&(n.sheenRoughnessMap=this.sheenRoughnessMap.toJSON(e).uuid),this.dispersion!==void 0&&(n.dispersion=this.dispersion),this.retroreflectivity!==void 0&&(n.retroreflectivity=this.retroreflectivity),this.iridescence!==void 0&&(n.iridescence=this.iridescence),this.iridescenceIOR!==void 0&&(n.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0&&(n.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(n.iridescenceMap=this.iridescenceMap.toJSON(e).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(n.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(e).uuid),this.anisotropy!==void 0&&(n.anisotropy=this.anisotropy),this.anisotropyRotation!==void 0&&(n.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(n.anisotropyMap=this.anisotropyMap.toJSON(e).uuid),this.map&&this.map.isTexture&&(n.map=this.map.toJSON(e).uuid),this.matcap&&this.matcap.isTexture&&(n.matcap=this.matcap.toJSON(e).uuid),this.alphaMap&&this.alphaMap.isTexture&&(n.alphaMap=this.alphaMap.toJSON(e).uuid),this.lightMap&&this.lightMap.isTexture&&(n.lightMap=this.lightMap.toJSON(e).uuid,n.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(n.aoMap=this.aoMap.toJSON(e).uuid,n.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(n.bumpMap=this.bumpMap.toJSON(e).uuid,n.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(n.normalMap=this.normalMap.toJSON(e).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(n.displacementMap=this.displacementMap.toJSON(e).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(n.roughnessMap=this.roughnessMap.toJSON(e).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(n.metalnessMap=this.metalnessMap.toJSON(e).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(n.emissiveMap=this.emissiveMap.toJSON(e).uuid),this.specularMap&&this.specularMap.isTexture&&(n.specularMap=this.specularMap.toJSON(e).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(n.specularIntensityMap=this.specularIntensityMap.toJSON(e).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(n.specularColorMap=this.specularColorMap.toJSON(e).uuid),this.envMap&&this.envMap.isTexture&&(n.envMap=this.envMap.toJSON(e).uuid,this.combine!==void 0&&(n.combine=this.combine)),this.envMapRotation!==void 0&&(n.envMapRotation=this.envMapRotation.toArray()),this.envMapIntensity!==void 0&&(n.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0&&(n.reflectivity=this.reflectivity),this.refractionRatio!==void 0&&(n.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(n.gradientMap=this.gradientMap.toJSON(e).uuid),this.transmission!==void 0&&(n.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(n.transmissionMap=this.transmissionMap.toJSON(e).uuid),this.thickness!==void 0&&(n.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(n.thicknessMap=this.thicknessMap.toJSON(e).uuid),this.attenuationDistance!==void 0&&(n.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0&&(n.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0&&(n.size=this.size),this.sizeAttenuation!==void 0&&(n.sizeAttenuation=this.sizeAttenuation),Array.isArray(this.clippingPlanes)&&this.clippingPlanes.length>0&&(n.clippingPlanes=this.clippingPlanes.map(e=>e.toJSON())),this.rotation!==void 0&&(n.rotation=this.rotation),this.depthPacking!==void 0&&(n.depthPacking=this.depthPacking),this.linewidth!==void 0&&(n.linewidth=this.linewidth),this.linecap!==void 0&&(n.linecap=this.linecap),this.linejoin!==void 0&&(n.linejoin=this.linejoin),this.dashSize!==void 0&&(n.dashSize=this.dashSize),this.gapSize!==void 0&&(n.gapSize=this.gapSize),this.scale!==void 0&&(n.scale=this.scale),this.wireframe!==void 0&&(n.wireframe=this.wireframe),this.wireframeLinewidth!==void 0&&(n.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!==void 0&&(n.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!==void 0&&(n.wireframeLinejoin=this.wireframeLinejoin),this.flatShading!==void 0&&(n.flatShading=this.flatShading),this.fog!==void 0&&(n.fog=this.fog),Object.keys(this.userData).length>0&&(n.userData=this.userData);function r(e){let t=[];for(let n in e){let r=e[n];delete r.metadata,t.push(r)}return t}if(t){let t=r(e.textures),i=r(e.images);t.length>0&&(n.textures=t),i.length>0&&(n.images=i)}return n}fromJSON(e,t){if(e.uuid!==void 0&&(this.uuid=e.uuid),e.name!==void 0&&(this.name=e.name),e.color!==void 0&&this.color!==void 0&&this.color.setHex(e.color),e.roughness!==void 0&&(this.roughness=e.roughness),e.metalness!==void 0&&(this.metalness=e.metalness),e.sheen!==void 0&&(this.sheen=e.sheen),e.sheenColor!==void 0&&(this.sheenColor=new Y().setHex(e.sheenColor)),e.sheenRoughness!==void 0&&(this.sheenRoughness=e.sheenRoughness),e.emissive!==void 0&&this.emissive!==void 0&&this.emissive.setHex(e.emissive),e.specular!==void 0&&this.specular!==void 0&&this.specular.setHex(e.specular),e.specularIntensity!==void 0&&(this.specularIntensity=e.specularIntensity),e.specularColor!==void 0&&this.specularColor!==void 0&&this.specularColor.setHex(e.specularColor),e.shininess!==void 0&&(this.shininess=e.shininess),e.clearcoat!==void 0&&(this.clearcoat=e.clearcoat),e.clearcoatRoughness!==void 0&&(this.clearcoatRoughness=e.clearcoatRoughness),e.dispersion!==void 0&&(this.dispersion=e.dispersion),e.retroreflectivity!==void 0&&(this.retroreflectivity=e.retroreflectivity),e.iridescence!==void 0&&(this.iridescence=e.iridescence),e.iridescenceIOR!==void 0&&(this.iridescenceIOR=e.iridescenceIOR),e.iridescenceThicknessRange!==void 0&&(this.iridescenceThicknessRange=e.iridescenceThicknessRange),e.transmission!==void 0&&(this.transmission=e.transmission),e.thickness!==void 0&&(this.thickness=e.thickness),e.attenuationDistance!==void 0&&(this.attenuationDistance=e.attenuationDistance),e.attenuationColor!==void 0&&this.attenuationColor!==void 0&&this.attenuationColor.setHex(e.attenuationColor),e.anisotropy!==void 0&&(this.anisotropy=e.anisotropy),e.anisotropyRotation!==void 0&&(this.anisotropyRotation=e.anisotropyRotation),e.fog!==void 0&&(this.fog=e.fog),e.flatShading!==void 0&&(this.flatShading=e.flatShading),e.blending!==void 0&&(this.blending=e.blending),e.combine!==void 0&&(this.combine=e.combine),e.side!==void 0&&(this.side=e.side),e.shadowSide!==void 0&&(this.shadowSide=e.shadowSide),e.opacity!==void 0&&(this.opacity=e.opacity),e.transparent!==void 0&&(this.transparent=e.transparent),e.alphaTest!==void 0&&(this.alphaTest=e.alphaTest),e.alphaHash!==void 0&&(this.alphaHash=e.alphaHash),e.depthFunc!==void 0&&(this.depthFunc=e.depthFunc),e.depthTest!==void 0&&(this.depthTest=e.depthTest),e.depthWrite!==void 0&&(this.depthWrite=e.depthWrite),e.colorWrite!==void 0&&(this.colorWrite=e.colorWrite),e.clippingPlanes!==void 0&&(this.clippingPlanes=e.clippingPlanes.map(e=>new gg().fromJSON(e))),e.clipIntersection!==void 0&&(this.clipIntersection=e.clipIntersection),e.clipShadows!==void 0&&(this.clipShadows=e.clipShadows),e.depthPacking!==void 0&&(this.depthPacking=e.depthPacking),e.blendSrc!==void 0&&(this.blendSrc=e.blendSrc),e.blendDst!==void 0&&(this.blendDst=e.blendDst),e.blendEquation!==void 0&&(this.blendEquation=e.blendEquation),e.blendSrcAlpha!==void 0&&(this.blendSrcAlpha=e.blendSrcAlpha),e.blendDstAlpha!==void 0&&(this.blendDstAlpha=e.blendDstAlpha),e.blendEquationAlpha!==void 0&&(this.blendEquationAlpha=e.blendEquationAlpha),e.blendColor!==void 0&&this.blendColor!==void 0&&this.blendColor.setHex(e.blendColor),e.blendAlpha!==void 0&&(this.blendAlpha=e.blendAlpha),e.stencilWriteMask!==void 0&&(this.stencilWriteMask=e.stencilWriteMask),e.stencilFunc!==void 0&&(this.stencilFunc=e.stencilFunc),e.stencilRef!==void 0&&(this.stencilRef=e.stencilRef),e.stencilFuncMask!==void 0&&(this.stencilFuncMask=e.stencilFuncMask),e.stencilFail!==void 0&&(this.stencilFail=e.stencilFail),e.stencilZFail!==void 0&&(this.stencilZFail=e.stencilZFail),e.stencilZPass!==void 0&&(this.stencilZPass=e.stencilZPass),e.stencilWrite!==void 0&&(this.stencilWrite=e.stencilWrite),e.wireframe!==void 0&&(this.wireframe=e.wireframe),e.wireframeLinewidth!==void 0&&(this.wireframeLinewidth=e.wireframeLinewidth),e.wireframeLinecap!==void 0&&(this.wireframeLinecap=e.wireframeLinecap),e.wireframeLinejoin!==void 0&&(this.wireframeLinejoin=e.wireframeLinejoin),e.rotation!==void 0&&(this.rotation=e.rotation),e.linewidth!==void 0&&(this.linewidth=e.linewidth),e.linecap!==void 0&&(this.linecap=e.linecap),e.linejoin!==void 0&&(this.linejoin=e.linejoin),e.dashSize!==void 0&&(this.dashSize=e.dashSize),e.gapSize!==void 0&&(this.gapSize=e.gapSize),e.scale!==void 0&&(this.scale=e.scale),e.polygonOffset!==void 0&&(this.polygonOffset=e.polygonOffset),e.polygonOffsetFactor!==void 0&&(this.polygonOffsetFactor=e.polygonOffsetFactor),e.polygonOffsetUnits!==void 0&&(this.polygonOffsetUnits=e.polygonOffsetUnits),e.dithering!==void 0&&(this.dithering=e.dithering),e.alphaToCoverage!==void 0&&(this.alphaToCoverage=e.alphaToCoverage),e.premultipliedAlpha!==void 0&&(this.premultipliedAlpha=e.premultipliedAlpha),e.forceSinglePass!==void 0&&(this.forceSinglePass=e.forceSinglePass),e.allowOverride!==void 0&&(this.allowOverride=e.allowOverride),e.visible!==void 0&&(this.visible=e.visible),e.toneMapped!==void 0&&(this.toneMapped=e.toneMapped),e.userData!==void 0&&(this.userData=e.userData),e.vertexColors!==void 0&&(typeof e.vertexColors==`number`?this.vertexColors=e.vertexColors>0:this.vertexColors=e.vertexColors),e.size!==void 0&&(this.size=e.size),e.sizeAttenuation!==void 0&&(this.sizeAttenuation=e.sizeAttenuation),e.map!==void 0&&(this.map=t[e.map]||null),e.matcap!==void 0&&(this.matcap=t[e.matcap]||null),e.alphaMap!==void 0&&(this.alphaMap=t[e.alphaMap]||null),e.bumpMap!==void 0&&(this.bumpMap=t[e.bumpMap]||null),e.bumpScale!==void 0&&(this.bumpScale=e.bumpScale),e.normalMap!==void 0&&(this.normalMap=t[e.normalMap]||null),e.normalMapType!==void 0&&(this.normalMapType=e.normalMapType),e.normalScale!==void 0){let t=e.normalScale;Array.isArray(t)===!1&&(t=[t,t]),this.normalScale=new q().fromArray(t)}return e.displacementMap!==void 0&&(this.displacementMap=t[e.displacementMap]||null),e.displacementScale!==void 0&&(this.displacementScale=e.displacementScale),e.displacementBias!==void 0&&(this.displacementBias=e.displacementBias),e.roughnessMap!==void 0&&(this.roughnessMap=t[e.roughnessMap]||null),e.metalnessMap!==void 0&&(this.metalnessMap=t[e.metalnessMap]||null),e.emissiveMap!==void 0&&(this.emissiveMap=t[e.emissiveMap]||null),e.emissiveIntensity!==void 0&&(this.emissiveIntensity=e.emissiveIntensity),e.specularMap!==void 0&&(this.specularMap=t[e.specularMap]||null),e.specularIntensityMap!==void 0&&(this.specularIntensityMap=t[e.specularIntensityMap]||null),e.specularColorMap!==void 0&&(this.specularColorMap=t[e.specularColorMap]||null),e.envMap!==void 0&&(this.envMap=t[e.envMap]||null),e.envMapRotation!==void 0&&this.envMapRotation.fromArray(e.envMapRotation),e.envMapIntensity!==void 0&&(this.envMapIntensity=e.envMapIntensity),e.reflectivity!==void 0&&(this.reflectivity=e.reflectivity),e.refractionRatio!==void 0&&(this.refractionRatio=e.refractionRatio),e.lightMap!==void 0&&(this.lightMap=t[e.lightMap]||null),e.lightMapIntensity!==void 0&&(this.lightMapIntensity=e.lightMapIntensity),e.aoMap!==void 0&&(this.aoMap=t[e.aoMap]||null),e.aoMapIntensity!==void 0&&(this.aoMapIntensity=e.aoMapIntensity),e.gradientMap!==void 0&&(this.gradientMap=t[e.gradientMap]||null),e.clearcoatMap!==void 0&&(this.clearcoatMap=t[e.clearcoatMap]||null),e.clearcoatRoughnessMap!==void 0&&(this.clearcoatRoughnessMap=t[e.clearcoatRoughnessMap]||null),e.clearcoatNormalMap!==void 0&&(this.clearcoatNormalMap=t[e.clearcoatNormalMap]||null),e.clearcoatNormalScale!==void 0&&(this.clearcoatNormalScale=new q().fromArray(e.clearcoatNormalScale)),e.iridescenceMap!==void 0&&(this.iridescenceMap=t[e.iridescenceMap]||null),e.iridescenceThicknessMap!==void 0&&(this.iridescenceThicknessMap=t[e.iridescenceThicknessMap]||null),e.transmissionMap!==void 0&&(this.transmissionMap=t[e.transmissionMap]||null),e.thicknessMap!==void 0&&(this.thicknessMap=t[e.thicknessMap]||null),e.anisotropyMap!==void 0&&(this.anisotropyMap=t[e.anisotropyMap]||null),e.sheenColorMap!==void 0&&(this.sheenColorMap=t[e.sheenColorMap]||null),e.sheenRoughnessMap!==void 0&&(this.sheenRoughnessMap=t[e.sheenRoughnessMap]||null),this}clone(){return new this.constructor().copy(this)}copy(e){this.name=e.name,this.blending=e.blending,this.side=e.side,this.vertexColors=e.vertexColors,this.opacity=e.opacity,this.transparent=e.transparent,this.blendSrc=e.blendSrc,this.blendDst=e.blendDst,this.blendEquation=e.blendEquation,this.blendSrcAlpha=e.blendSrcAlpha,this.blendDstAlpha=e.blendDstAlpha,this.blendEquationAlpha=e.blendEquationAlpha,this.blendColor.copy(e.blendColor),this.blendAlpha=e.blendAlpha,this.depthFunc=e.depthFunc,this.depthTest=e.depthTest,this.depthWrite=e.depthWrite,this.stencilWriteMask=e.stencilWriteMask,this.stencilFunc=e.stencilFunc,this.stencilRef=e.stencilRef,this.stencilFuncMask=e.stencilFuncMask,this.stencilFail=e.stencilFail,this.stencilZFail=e.stencilZFail,this.stencilZPass=e.stencilZPass,this.stencilWrite=e.stencilWrite;let t=e.clippingPlanes,n=null;if(t!==null){let e=t.length;n=Array(e);for(let r=0;r!==e;++r)n[r]=t[r].clone()}return this.clippingPlanes=n,this.clipIntersection=e.clipIntersection,this.clipShadows=e.clipShadows,this.shadowSide=e.shadowSide,this.colorWrite=e.colorWrite,this.precision=e.precision,this.polygonOffset=e.polygonOffset,this.polygonOffsetFactor=e.polygonOffsetFactor,this.polygonOffsetUnits=e.polygonOffsetUnits,this.dithering=e.dithering,this.alphaTest=e.alphaTest,this.alphaHash=e.alphaHash,this.alphaToCoverage=e.alphaToCoverage,this.premultipliedAlpha=e.premultipliedAlpha,this.forceSinglePass=e.forceSinglePass,this.allowOverride=e.allowOverride,this.visible=e.visible,this.toneMapped=e.toneMapped,this.userData=JSON.parse(JSON.stringify(e.userData)),this}dispose(){this.dispatchEvent({type:`dispose`})}set needsUpdate(e){e===!0&&this.version++}},yg=new J,bg=new J,xg=new J,Sg=new J,Cg=class{constructor(e=new J,t=new J(0,0,-1)){this.origin=e,this.direction=t}set(e,t){return this.origin.copy(e),this.direction.copy(t),this}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this}at(e,t){return t.copy(this.origin).addScaledVector(this.direction,e)}lookAt(e){return this.direction.copy(e).sub(this.origin).normalize(),this}recast(e){return this.origin.copy(this.at(e,yg)),this}closestPointToPoint(e,t){t.subVectors(e,this.origin);let n=t.dot(this.direction);return n<0?t.copy(this.origin):t.copy(this.origin).addScaledVector(this.direction,n)}distanceToPoint(e){return Math.sqrt(this.distanceSqToPoint(e))}distanceSqToPoint(e){let t=yg.subVectors(e,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(e):(yg.copy(this.origin).addScaledVector(this.direction,t),yg.distanceToSquared(e))}distanceSqToSegment(e,t,n,r){bg.copy(e).add(t).multiplyScalar(.5),xg.copy(t).sub(e).normalize(),Sg.copy(this.origin).sub(bg);let i=e.distanceTo(t)*.5,a=-this.direction.dot(xg),o=Sg.dot(this.direction),s=-Sg.dot(xg),c=Sg.lengthSq(),l=Math.abs(1-a*a),u,d,f,p;if(l>0)if(u=a*s-o,d=a*o-s,p=i*l,u>=0)if(d>=-p)if(d<=p){let e=1/l;u*=e,d*=e,f=u*(u+a*d+2*o)+d*(a*u+d+2*s)+c}else d=i,u=Math.max(0,-(a*d+o)),f=-u*u+d*(d+2*s)+c;else d=-i,u=Math.max(0,-(a*d+o)),f=-u*u+d*(d+2*s)+c;else d<=-p?(u=Math.max(0,-(-a*i+o)),d=u>0?-i:Math.min(Math.max(-i,-s),i),f=-u*u+d*(d+2*s)+c):d<=p?(u=0,d=Math.min(Math.max(-i,-s),i),f=d*(d+2*s)+c):(u=Math.max(0,-(a*i+o)),d=u>0?i:Math.min(Math.max(-i,-s),i),f=-u*u+d*(d+2*s)+c);else d=a>0?-i:i,u=Math.max(0,-(a*d+o)),f=-u*u+d*(d+2*s)+c;return n&&n.copy(this.origin).addScaledVector(this.direction,u),r&&r.copy(bg).addScaledVector(xg,d),f}intersectSphere(e,t){if(e.radius<0)return null;yg.subVectors(e.center,this.origin);let n=yg.dot(this.direction),r=yg.dot(yg)-n*n,i=e.radius*e.radius;if(r>i)return null;let a=Math.sqrt(i-r),o=n-a,s=n+a;return s<0?null:o<0?this.at(s,t):this.at(o,t)}intersectsSphere(e){return e.radius<0?!1:this.distanceSqToPoint(e.center)<=e.radius*e.radius}distanceToPlane(e){let t=e.normal.dot(this.direction);if(t===0)return e.distanceToPoint(this.origin)===0?0:null;let n=-(this.origin.dot(e.normal)+e.constant)/t;return n>=0?n:null}intersectPlane(e,t){let n=this.distanceToPlane(e);return n===null?null:this.at(n,t)}intersectsPlane(e){let t=e.distanceToPoint(this.origin);return t===0||e.normal.dot(this.direction)*t<0}intersectBox(e,t){let n,r,i,a,o,s,c=1/this.direction.x,l=1/this.direction.y,u=1/this.direction.z,d=this.origin;return c>=0?(n=(e.min.x-d.x)*c,r=(e.max.x-d.x)*c):(n=(e.max.x-d.x)*c,r=(e.min.x-d.x)*c),l>=0?(i=(e.min.y-d.y)*l,a=(e.max.y-d.y)*l):(i=(e.max.y-d.y)*l,a=(e.min.y-d.y)*l),n>a||i>r||((i>n||isNaN(n))&&(n=i),(a=0?(o=(e.min.z-d.z)*u,s=(e.max.z-d.z)*u):(o=(e.max.z-d.z)*u,s=(e.min.z-d.z)*u),n>s||o>r)||((o>n||n!==n)&&(n=o),(s=0?n:r,t)}intersectsBox(e){return this.intersectBox(e,yg)!==null}intersectTriangle(e,t,n,r,i){let a=this.origin,o=this.direction,s=o.x,c=o.y,l=o.z,u=e.x-a.x,d=e.y-a.y,f=e.z-a.z,p=t.x-a.x,m=t.y-a.y,h=t.z-a.z,g=n.x-a.x,_=n.y-a.y,v=n.z-a.z,y=Math.abs(s),b=Math.abs(c),x=Math.abs(l),S,C,w,T,E,D,O,ee,te,k,ne,A;if(y>=b&&y>=x?(w=s,D=u,te=p,A=g,s>=0?(S=c,C=l,T=d,E=f,O=m,ee=h,k=_,ne=v):(S=l,C=c,T=f,E=d,O=h,ee=m,k=v,ne=_)):b>=x?(w=c,D=d,te=m,A=_,c>=0?(S=l,C=s,T=f,E=u,O=h,ee=p,k=v,ne=g):(S=s,C=l,T=u,E=f,O=p,ee=h,k=g,ne=v)):(w=l,D=f,te=h,A=v,l>=0?(S=s,C=c,T=u,E=d,O=p,ee=m,k=g,ne=_):(S=c,C=s,T=d,E=u,O=m,ee=p,k=_,ne=g)),w===0)return null;let re=S/w,ie=C/w,ae=1/w,oe=T-re*D,j=E-ie*D,se=O-re*te,ce=ee-ie*te,le=k-re*A,ue=ne-ie*A,M=le*ce-ue*se,N=oe*ue-j*le,de=se*j-ce*oe;if(r){if(M<0||N<0||de<0)return null}else if((M<0||N<0||de<0)&&(M>0||N>0||de>0))return null;let fe=M+N+de;if(fe===0)return null;let pe=ae*(M*D+N*te+de*A);return(fe>0?pe<0:pe>0)?null:this.at(pe/fe,i)}applyMatrix4(e){return this.origin.applyMatrix4(e),this.direction.transformDirection(e),this}equals(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}},wg=class extends vg{constructor(e){super(),this.isMeshBasicMaterial=!0,this.type=`MeshBasicMaterial`,this.color=new Y(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new Hm,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=`round`,this.wireframeLinejoin=`round`,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}},Tg=new Mm,Eg=new Cg,Dg=new tg,Og=new J,kg=new J,Ag=new J,jg=new J,Mg=new J,Ng=new J,Pg=new J,Fg=new J,Ig=class extends ah{constructor(e=new lg,t=new wg){super(),this.isMesh=!0,this.type=`Mesh`,this.geometry=e,this.material=t,this.morphTargetDictionary=void 0,this.morphTargetInfluences=void 0,this.count=1,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),e.morphTargetInfluences!==void 0&&(this.morphTargetInfluences=e.morphTargetInfluences.slice()),e.morphTargetDictionary!==void 0&&(this.morphTargetDictionary=Object.assign({},e.morphTargetDictionary)),this.material=Array.isArray(e.material)?e.material.slice():e.material,this.geometry=e.geometry,this}updateMorphTargets(){let e=this.geometry.morphAttributes,t=Object.keys(e);if(t.length>0){let n=e[t[0]];if(n!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=n.length;e(e.far-e.near)**2))&&(Tg.copy(i).invert(),Eg.copy(e.ray).applyMatrix4(Tg),!(n.boundingBox!==null&&Eg.intersectsBox(n.boundingBox)===!1)&&this._computeIntersections(e,t,Eg)))}_computeIntersections(e,t,n){let r,i=this.geometry,a=this.material,o=i.index,s=i.attributes.position,c=i.attributes.uv,l=i.attributes.uv1,u=i.attributes.normal,d=i.groups,f=i.drawRange;if(o!==null)if(Array.isArray(a))for(let i=0,s=d.length;in.far?null:{distance:l,point:Fg.clone(),object:e}}function Rg(e,t,n,r,i,a,o,s,c,l){e.getVertexPosition(s,kg),e.getVertexPosition(c,Ag),e.getVertexPosition(l,jg);let u=Lg(e,t,n,r,kg,Ag,jg,Pg);if(u){let e=new J;kh.getBarycoord(Pg,kg,Ag,jg,e),i&&(u.uv=kh.getInterpolatedAttribute(i,s,c,l,e,new q)),a&&(u.uv1=kh.getInterpolatedAttribute(a,s,c,l,e,new q)),o&&(u.normal=kh.getInterpolatedAttribute(o,s,c,l,e,new J),u.normal.dot(r.direction)>0&&u.normal.multiplyScalar(-1));let t={a:s,b:c,c:l,normal:new J,materialIndex:0};kh.getNormal(kg,Ag,jg,t.normal),u.face=t,u.barycoord=e}return u}var zg=new Dm,Bg=new Dm,Vg=new Dm,Hg=new Dm,Ug=new Mm,Wg=new J,Gg=new tg,Kg=new Mm,qg=new Cg,Jg=class extends Ig{constructor(e,t){super(e,t),this.isSkinnedMesh=!0,this.type=`SkinnedMesh`,this.bindMode=Wd,this.bindMatrix=new Mm,this.bindMatrixInverse=new Mm,this.boundingBox=null,this.boundingSphere=null}computeBoundingBox(){let e=this.geometry;this.boundingBox===null&&(this.boundingBox=new Ah),this.boundingBox.makeEmpty();let t=e.getAttribute(`position`);for(let e=0;e0?e.max.x:e.min.x,d_.y=r.normal.y>0?e.max.y:e.min.y,d_.z=r.normal.z>0?e.max.z:e.min.z,r.distanceToPoint(d_)<0)return!1}return!0}containsPoint(e){let t=this.planes;for(let n=0;n<6;n++)if(t[n].distanceToPoint(e)<0)return!1;return!0}clone(){return new this.constructor().copy(this)}},p_=class extends vg{constructor(e){super(),this.isLineBasicMaterial=!0,this.type=`LineBasicMaterial`,this.color=new Y(16777215),this.map=null,this.linewidth=1,this.linecap=`round`,this.linejoin=`round`,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.linewidth=e.linewidth,this.linecap=e.linecap,this.linejoin=e.linejoin,this.fog=e.fog,this}},m_=new J,h_=new J,g_=new Mm,__=new Cg,v_=new tg,y_=new J,b_=new J,x_=class extends ah{constructor(e=new lg,t=new p_){super(),this.isLine=!0,this.type=`Line`,this.geometry=e,this.material=t,this.morphTargetDictionary=void 0,this.morphTargetInfluences=void 0,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),this.material=Array.isArray(e.material)?e.material.slice():e.material,this.geometry=e.geometry,this}computeLineDistances(){let e=this.geometry;if(e.index===null){let t=e.attributes.position,n=[0];for(let e=1,r=t.count;e0){let n=e[t[0]];if(n!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=n.length;er)return;y_.applyMatrix4(e.matrixWorld);let c=t.ray.origin.distanceTo(y_);if(!(ct.far))return{distance:c,point:b_.clone().applyMatrix4(e.matrixWorld),index:o,face:null,faceIndex:null,barycoord:null,object:e}}var C_=new J,w_=new J,T_=class extends x_{constructor(e,t){super(e,t),this.isLineSegments=!0,this.type=`LineSegments`}computeLineDistances(){let e=this.geometry;if(e.index===null){let t=e.attributes.position,n=[];for(let e=0,r=t.count;e0){let n=e[t[0]];if(n!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=n.length;ei.far)return;a.push({distance:c,distanceToRay:Math.sqrt(s),point:n,index:t,face:null,faceIndex:null,barycoord:null,object:o})}}var P_=class extends Em{constructor(e=[],t=301,n,r,i,a,o,s,c,l){super(e,t,n,r,i,a,o,s,c,l),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(e){this.image=e}},F_=class extends Em{constructor(e,t,n,r,i,a,o,s,c){super(e,t,n,r,i,a,o,s,c),this.isCanvasTexture=!0,this.needsUpdate=!0}},I_=class extends Em{constructor(e,t,n=of,r,i,a,o=Jd,s=Jd,c,l=_f,u=1){if(l!==1026&&l!==1027)throw Error(`THREE.DepthTexture: format must be either THREE.DepthFormat or THREE.DepthStencilFormat`);super({width:e,height:t,depth:u},r,i,a,o,s,l,n,c),this.isDepthTexture=!0,this.flipY=!1,this.generateMipmaps=!1,this.compareFunction=null}copy(e){return super.copy(e),this.source=new Sm(Object.assign({},e.image)),this.compareFunction=e.compareFunction,this}toJSON(e){let t=super.toJSON(e);return t.compareFunction=this.compareFunction,t}},L_=class extends I_{constructor(e,t=of,n=301,r,i,a=Jd,o=Jd,s,c=_f){let l={width:e,height:e,depth:1},u=[l,l,l,l,l,l];super(e,e,t,n,r,i,a,o,s,c),this.image=u,this.isCubeDepthTexture=!0,this.isCubeTexture=!0}get images(){return this.image}set images(e){this.image=e}},R_=class extends Em{constructor(e=null){super(),this.sourceTexture=e,this.isExternalTexture=!0}copy(e){return super.copy(e),this.sourceTexture=e.sourceTexture,this}},z_=class e extends lg{constructor(e=1,t=1,n=1,r=1,i=1,a=1){super(),this.type=`BoxGeometry`,this.parameters={width:e,height:t,depth:n,widthSegments:r,heightSegments:i,depthSegments:a};let o=this;r=Math.floor(r),i=Math.floor(i),a=Math.floor(a);let s=[],c=[],l=[],u=[],d=0,f=0;p(`z`,`y`,`x`,-1,-1,n,t,e,a,i,0),p(`z`,`y`,`x`,1,-1,n,t,-e,a,i,1),p(`x`,`z`,`y`,1,1,e,n,t,r,a,2),p(`x`,`z`,`y`,1,-1,e,n,-t,r,a,3),p(`x`,`y`,`z`,1,-1,e,t,n,r,i,4),p(`x`,`y`,`z`,-1,-1,e,t,-n,r,i,5),this.setIndex(s),this.setAttribute(`position`,new Zh(c,3)),this.setAttribute(`normal`,new Zh(l,3)),this.setAttribute(`uv`,new Zh(u,2));function p(e,t,n,r,i,a,p,m,h,g,_){let v=a/h,y=p/g,b=a/2,x=p/2,S=m/2,C=h+1,w=g+1,T=0,E=0,D=new J;for(let a=0;a0?1:-1,l.push(D.x,D.y,D.z),u.push(s/h),u.push(1-a/g),T+=1}for(let e=0;e0){let e=(_-1)*m;for(let t=0;t0&&v(!0),t>0&&v(!1)),this.setIndex(l),this.setAttribute(`position`,new Zh(u,3)),this.setAttribute(`normal`,new Zh(d,3)),this.setAttribute(`uv`,new Zh(f,2));function _(){let a=new J,_=new J,v=0,y=(t-e)/n;for(let c=0;c<=i;c++){let l=[],g=c/i,v=g*(t-e)+e;for(let e=0;e<=r;e++){let t=e/r,i=t*s+o,c=Math.sin(i),m=Math.cos(i);_.x=v*c,_.y=-g*n+h,_.z=v*m,u.push(_.x,_.y,_.z),a.set(c,y,m).normalize(),d.push(a.x,a.y,a.z),f.push(t,1-g),l.push(p++)}m.push(l)}for(let n=0;n0||r!==0)&&(l.push(a,o,c),v+=3),(t>0||r!==i-1)&&(l.push(o,s,c),v+=3)}c.addGroup(g,v,0),g+=v}function v(n){let i=p,a=new q,m=new J,_=0,v=n===!0?e:t,y=n===!0?1:-1;for(let e=1;e<=r;e++)u.push(0,h*y,0),d.push(0,y,0),f.push(.5,.5),p++;let b=p;for(let e=0;e<=r;e++){let t=e/r*s+o,n=Math.cos(t),i=Math.sin(t);m.x=v*i,m.y=h*y,m.z=v*n,u.push(m.x,m.y,m.z),d.push(0,y,0),a.x=n*.5+.5,a.y=i*.5*y+.5,f.push(a.x,a.y),p++}for(let e=0;e.9&&Math.min(t,n,r)<.1&&(t<.2&&(a[e+0]+=1),n<.2&&(a[e+2]+=1),r<.2&&(a[e+4]+=1))}}function d(e){i.push(e.x,e.y,e.z)}function f(t,n){let r=t*3;n.x=e[r+0],n.y=e[r+1],n.z=e[r+2]}function p(){let e=new J,t=new J,n=new J,r=new J,o=new q,s=new q,c=new q;for(let l=0,u=0;l0)s=r-1;else{s=r;break}if(r=s,n[r]===a)return r/(i-1);let l=n[r],u=n[r+1]-l,d=(a-l)/u;return(r+d)/(i-1)}getTangent(e,t){let n=1e-4,r=e-n,i=e+n;r<0&&(r=0),i>1&&(i=1);let a=this.getPoint(r),o=this.getPoint(i),s=t||(a.isVector2?new q:new J);return s.copy(o).sub(a).normalize(),s}getTangentAt(e,t){let n=this.getUtoTmapping(e);return this.getTangent(n,t)}computeFrenetFrames(e,t=!1){let n=new J,r=[],i=[],a=[],o=new J,s=new Mm;for(let t=0;t<=e;t++){let n=t/e;r[t]=this.getTangentAt(n,new J)}i[0]=new J,a[0]=new J;let c=Number.MAX_VALUE,l=Math.abs(r[0].x),u=Math.abs(r[0].y),d=Math.abs(r[0].z);l<=c&&(c=l,n.set(1,0,0)),u<=c&&(c=u,n.set(0,1,0)),d<=c&&n.set(0,0,1),o.crossVectors(r[0],n).normalize(),i[0].crossVectors(r[0],o),a[0].crossVectors(r[0],i[0]);for(let t=1;t<=e;t++){if(i[t]=i[t-1].clone(),a[t]=a[t-1].clone(),o.crossVectors(r[t-1],r[t]),o.length()>2**-52){o.normalize();let e=Math.acos(Vp(r[t-1].dot(r[t]),-1,1));i[t].applyMatrix4(s.makeRotationAxis(o,e))}a[t].crossVectors(r[t],i[t])}if(t===!0){let t=Math.acos(Vp(i[0].dot(i[e]),-1,1));t/=e,r[0].dot(o.crossVectors(i[0],i[e]))>0&&(t=-t);for(let n=1;n<=e;n++)i[n].applyMatrix4(s.makeRotationAxis(r[n],t*n)),a[n].crossVectors(r[n],i[n])}return{tangents:r,normals:i,binormals:a}}clone(){return new this.constructor().copy(this)}copy(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}toJSON(){let e={metadata:{version:4.7,type:`Curve`,generator:`Curve.toJSON`}};return e.arcLengthDivisions=this.arcLengthDivisions,e.type=this.type,e}fromJSON(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}},K_=class extends G_{constructor(e=0,t=0,n=1,r=1,i=0,a=Math.PI*2,o=!1,s=0){super(),this.isEllipseCurve=!0,this.type=`EllipseCurve`,this.aX=e,this.aY=t,this.xRadius=n,this.yRadius=r,this.aStartAngle=i,this.aEndAngle=a,this.aClockwise=o,this.aRotation=s}getPoint(e,t=new q){let n=t,r=Math.PI*2,i=this.aEndAngle-this.aStartAngle,a=Math.abs(i)<2**-52;for(;i<0;)i+=r;for(;i>r;)i-=r;i<2**-52&&(i=a?0:r),this.aClockwise===!0&&!a&&(i===r?i=-r:i-=r);let o=this.aStartAngle+e*i,s=this.aX+this.xRadius*Math.cos(o),c=this.aY+this.yRadius*Math.sin(o);if(this.aRotation!==0){let e=Math.cos(this.aRotation),t=Math.sin(this.aRotation),n=s-this.aX,r=c-this.aY;s=n*e-r*t+this.aX,c=n*t+r*e+this.aY}return n.set(s,c)}copy(e){return super.copy(e),this.aX=e.aX,this.aY=e.aY,this.xRadius=e.xRadius,this.yRadius=e.yRadius,this.aStartAngle=e.aStartAngle,this.aEndAngle=e.aEndAngle,this.aClockwise=e.aClockwise,this.aRotation=e.aRotation,this}toJSON(){let e=super.toJSON();return e.aX=this.aX,e.aY=this.aY,e.xRadius=this.xRadius,e.yRadius=this.yRadius,e.aStartAngle=this.aStartAngle,e.aEndAngle=this.aEndAngle,e.aClockwise=this.aClockwise,e.aRotation=this.aRotation,e}fromJSON(e){return super.fromJSON(e),this.aX=e.aX,this.aY=e.aY,this.xRadius=e.xRadius,this.yRadius=e.yRadius,this.aStartAngle=e.aStartAngle,this.aEndAngle=e.aEndAngle,this.aClockwise=e.aClockwise,this.aRotation=e.aRotation,this}},q_=class extends K_{constructor(e,t,n,r,i,a){super(e,t,n,n,r,i,a),this.isArcCurve=!0,this.type=`ArcCurve`}};function J_(){let e=0,t=0,n=0,r=0;function i(i,a,o,s){e=i,t=o,n=-3*i+3*a-2*o-s,r=2*i-2*a+o+s}return{initCatmullRom:function(e,t,n,r,a){i(t,n,a*(n-e),a*(r-t))},initNonuniformCatmullRom:function(e,t,n,r,a,o,s){let c=(t-e)/a-(n-e)/(a+o)+(n-t)/o,l=(n-t)/o-(r-t)/(o+s)+(r-n)/s;c*=o,l*=o,i(t,n,c,l)},calc:function(i){let a=i*i,o=a*i;return e+t*i+n*a+r*o}}}var Y_=new J,X_=new J,Z_=new J_,Q_=new J_,$_=new J_,ev=class extends G_{constructor(e=[],t=!1,n=`centripetal`,r=.5){super(),this.isCatmullRomCurve3=!0,this.type=`CatmullRomCurve3`,this.points=e,this.closed=t,this.curveType=n,this.tension=r}getPoint(e,t=new J){let n=t,r=this.points,i=r.length,a=(i-+!this.closed)*e,o=Math.floor(a),s=a-o;this.closed?o+=o>0?0:(Math.floor(Math.abs(o)/i)+1)*i:s===0&&o===i-1&&(o=i-2,s=1);let c,l;this.closed||o>0?c=r[(o-1)%i]:(X_.subVectors(r[0],r[1]).add(r[0]),c=X_);let u=r[o%i],d=r[(o+1)%i];if(this.closed||o+2r.length-2?r.length-1:a+1],u=r[a>r.length-3?r.length-1:a+2];return n.set(tv(o,s.x,c.x,l.x,u.x),tv(o,s.y,c.y,l.y,u.y)),n}copy(e){super.copy(e),this.points=[];for(let t=0,n=e.points.length;t0)&&f.push(t,i,c),(e!==n-1||s${uu.map(e=>``).join(``)} +`,e.append(this.root),this.stickZone=this.root.querySelector(`[data-stick]`),this.stickBase=this.root.querySelector(`[data-stick-base]`),this.stickKnob=this.root.querySelector(`[data-stick-knob]`),this.pads.push(...this.root.querySelectorAll(`[data-punch]`)),this.moves.push(...this.root.querySelectorAll(`[data-move]`)),this.bind()}bind(){let e=this.stickZone;e.addEventListener(`pointerdown`,t=>{if(this.stickPointer!==null)return;t.preventDefault(),this.stickPointer=t.pointerId,this.stickOrigin={x:t.clientX,y:t.clientY},e.setPointerCapture(t.pointerId);let n=e.getBoundingClientRect();this.stickBase.style.left=`${t.clientX-n.left}px`,this.stickBase.style.top=`${t.clientY-n.top}px`,this.stickBase.classList.add(`active`),this.updateStick(t.clientX,t.clientY)}),e.addEventListener(`pointermove`,e=>{e.pointerId===this.stickPointer&&(e.preventDefault(),this.updateStick(e.clientX,e.clientY))});let t=e=>{e.pointerId===this.stickPointer&&(this.stickPointer=null,this.moveX=0,this.moveY=0,this.stickKnob.style.transform=`translate(-50%, -50%)`,this.stickBase.classList.remove(`active`),this.heldListener?.())};e.addEventListener(`pointerup`,t),e.addEventListener(`pointercancel`,t);for(let e of this.pads)e.addEventListener(`pointerdown`,t=>{if(!this.enabled)return;t.preventDefault();let n=e.getBoundingClientRect(),r=t.clientX-n.lefte.classList.remove(`pressed`),120)});for(let e of this.moves)e.addEventListener(`pointerdown`,t=>{!this.enabled||this.knockdown||(t.preventDefault(),this.sharedActions.push(`touch`,{kind:e.dataset.move}),e.classList.add(`pressed`),window.setTimeout(()=>e.classList.remove(`pressed`),120))});for(let e of this.root.querySelectorAll(`[data-mod], [data-guard]`)){let t=e.dataset.mod??e.dataset.guard??``,n=n=>{n.preventDefault(),e.setPointerCapture(n.pointerId),this.heldPointers.set(n.pointerId,t),this.syncHeld(),e.classList.add(`pressed`)},r=n=>{this.heldPointers.delete(n.pointerId)&&(this.syncHeld(),e.classList.toggle(`pressed`,[...this.heldPointers.values()].includes(t)))};e.addEventListener(`pointerdown`,n),e.addEventListener(`pointerup`,r),e.addEventListener(`pointercancel`,r)}}syncHeld(){let e=[...this.heldPointers.values()];this.body=e.includes(`body`),this.power=e.includes(`power`);let t=e.findLast(e=>e===`guard_high`||e===`guard_low`)??`none`,n=t!==this.guard;this.guard=t,n&&this.heldListener?.()}get powerHeld(){return this.enabled&&this.power}onHeldChange(e){this.heldListener=e}updateStick(e,t){let n=e-this.stickOrigin.x,r=t-this.stickOrigin.y,i=Math.hypot(n,r);i>56&&(n=n/i*56,r=r/i*56),this.stickKnob.style.transform=`translate(calc(-50% + ${n}px), calc(-50% + ${r}px))`;let a=Math.min(1,i/56),o=a<.15?0:(a-.15)/.85,s=i>0?n/Math.max(i,1e-6):0,c=i>0?r/Math.max(i,1e-6):0;this.moveX=Math.round(s*o*1e3)||0,this.moveY=Math.round(-c*o*1e3)||0,this.heldListener?.()}setKnockdown(e){if(this.knockdown!==e){this.knockdown=e,this.root.classList.toggle(`knockdown`,e);for(let[t,n]of this.pads.entries()){let r=n.querySelector(`.touch-pad-label`);r!==null&&(r.textContent=e?t%2==0?`GET UP`:`RHYTHM`:uu[t].label)}}}setEnabled(e,t=e){this.enabled=e,this.root.classList.toggle(`disabled`,!t),this.root.classList.toggle(`resting`,t&&!e),t?e||this.sharedActions.clearSource(`touch`):this.reset()}frame(){return this.enabled?{moveX:this.moveX,moveY:this.moveY,defense:this.guard,actions:[]}:{moveX:0,moveY:0,defense:`none`,actions:[]}}reset(){this.stickPointer=null,this.moveX=0,this.moveY=0,this.body=!1,this.power=!1,this.guard=`none`,this.heldPointers.clear(),this.stickBase.classList.remove(`active`);for(let e of this.root.querySelectorAll(`.pressed`))e.classList.remove(`pressed`);this.sharedActions.clearSource(`touch`)}destroy(){this.reset(),this.root.remove()}},pu={block:[55,.12,.22],hit:[85,.3,.42],counter_hit:[105,.38,.5],stun:[125,.42,.55],knockdown:[180,.62,.65],parry:[60,.18,.4],body_collapse:[170,.55,.3]},mu=class{settings;constructor(e){this.settings=e}event(e,t=!1){if(!this.settings().haptics)return;let n=pu[e.kind];if(n===void 0)return;let r=t?[n[0]*1.6,n[1]+.2,n[2]+.15]:n,i=this.padActuator();if(i===null){this.vibrate(r[0]);return}try{Promise.resolve(i.playEffect(`dual-rumble`,{duration:Math.min(180,Math.max(0,r[0])),strongMagnitude:Math.min(.65,Math.max(0,r[1])),weakMagnitude:Math.min(.65,Math.max(0,r[2]))})).catch(()=>void 0)}catch{}}padActuator(){if(typeof navigator.getGamepads!=`function`)return null;let e;try{e=[...navigator.getGamepads.call(navigator)]}catch{return null}let t=e.find(e=>e!==null&&e.connected&&`vibrationActuator`in e)?.vibrationActuator;return t==null||typeof t.playEffect!=`function`?null:t}vibrate(e){if(!(!lu()||typeof navigator.vibrate!=`function`))try{navigator.vibrate(Math.min(180,Math.max(0,e)))}catch{}}},hu={KeyF:[`left`,`jab`],KeyJ:[`right`,`jab`],KeyR:[`left`,`straight`],KeyU:[`right`,`straight`],KeyG:[`left`,`hook`],KeyH:[`right`,`hook`],KeyT:[`left`,`uppercut`],KeyY:[`right`,`uppercut`]},gu={KeyZ:{kind:`slip_left`},KeyX:{kind:`slip_right`},KeyC:{kind:`weave`},KeyV:{kind:`pull`},KeyB:{kind:`clinch`},KeyN:{kind:`switch_stance`},KeyM:{kind:`taunt`},Digit1:{kind:`foul`,foul:`low_blow`},Digit2:{kind:`foul`,foul:`headbutt`},ArrowLeft:{kind:`get_up_left`},ArrowRight:{kind:`get_up_right`}},_u=new Set([...Object.keys(hu),...Object.keys(gu),`KeyW`,`KeyA`,`KeyS`,`KeyD`,`KeyQ`,`KeyE`,`ShiftLeft`,`ShiftRight`,`AltLeft`,`AltRight`]),vu=[`Move: W up · S down · A left · D right`,`High / low guard: Q / E`,`Left/right jab: F / J`,`Left/right straight: R / U`,`Left/right hook: G / H`,`Left/right uppercut: T / Y`,`Body: Shift · Power: hold Alt (Option ⌥ on a Mac) with the punch, slower to throw and far heavier`,`Slip: Z / X · Weave: C · Pull: V`,`Clinch: B · Stance: N · Taunt: M · Fouls (on purpose): Shift+1 low blow / Shift+2 headbutt`,`Get-up rhythm: ← / →`,`Camera: K cycles broadcast, close and over the shoulder (behind your fighter, W walks at the opponent and A / D circle him).`,`Style pick before the bout: arrow keys choose · Enter settles · 1–5 settle on that card at once.`,`Controller move: left stick. High / low guard: left / right shoulder (independent of punches).`,`Controller face classes: bottom jab · right straight · left hook · top uppercut.`,`Controller face hand: hold D-pad left for left hand or D-pad right for right hand, then press a face punch; otherwise punches use the right hand. A direction used for a punch is consumed and does not evade.`,`Controller modifiers: left trigger body · right trigger power.`,`Controller actions: left stick press clinch · right stick press switch stance · hold right trigger + right stick press to taunt · D-pad up weave · D-pad down pull · tap and release D-pad left/right to slip; while down, D-pad left/right performs the private get-up rhythm immediately.`,`Controller fouls: View/Back low blow · Menu/Start headbutt.`,`Controller style pick: D-pad or left stick to choose · bottom face button settles.`,`Right-stick gesture: horizontal 0–22.5° hook · 22.5–45° jab · 45–70° straight · 70–90° uppercut; left/right direction selects hand.`,`Between rounds, tell your corner what to work on: 1 close the cut · 2 bring down the swelling · 3 catch your breath (controller: left, top or right face button; or tap).`,`Touch: drag the left side to move · tap a punch pad's left or right half for that hand · hold BODY, POWER, GUARD or LOW · tap ◀ SLIP, SLIP ▶, WEAVE, PULL or CLINCH.`],yu=`Move WASD · Jab F/J · Straight R/U · Hook G/H · Uppercut T/Y · Guard Q/E · Body Shift · Power Alt/Option ⌥`,bu=`Drag on the left to move · Tap the pads to punch, L or R hand · Hold BODY, POWER or GUARD · Tap SLIP, WEAVE, PULL or CLINCH`,xu=`Drag left to move · Tap pads to punch · Hold GUARD`,Su=(e,t)=>e?t<480?xu:bu:yu,Cu=[{title:`Keyboard`,items:vu.filter(e=>!e.startsWith(`Controller`)&&!e.startsWith(`Right-stick`)&&!e.startsWith(`Between rounds`)&&!e.startsWith(`Touch`))},{title:`Between rounds`,items:vu.filter(e=>e.startsWith(`Between rounds`))},{title:`Controller`,items:vu.filter(e=>e.startsWith(`Controller`)||e.startsWith(`Right-stick`))},{title:`Touch`,items:vu.filter(e=>e.startsWith(`Touch`))}];function wu(e,t){return e.kind===t.kind?e.kind===`punch`&&t.kind===`punch`?e.hand===t.hand&&e.class===t.class&&e.target===t.target&&e.power===t.power:e.kind===`foul`&&t.kind===`foul`?e.foul===t.foul:!0:!1}function Tu(e,t,n){if(n<1||e.length>0&&wu(e.at(-1),t))return;let r=e.length-n+1;r>0&&e.splice(0,r),e.push(t)}var Eu=class{maximum;queue=[];counter=0;listener=null;constructor(e=1){this.maximum=e}setListener(e){this.listener=e}push(e,t){if(this.maximum<1)return;let n=this.queue.at(-1);if(n!==void 0&&wu(n.action,t)){n.source=e;return}let r={...t,id:`c${this.counter+=1}`},i=this.queue.length-this.maximum+1;i>0&&this.queue.splice(0,i),this.queue.push({action:r,source:e}),this.listener?.(r)}clear(){this.queue.length=0}clearSource(e){let t=this.queue.filter(t=>t.source!==e);this.queue.splice(0,this.queue.length,...t)}drain(e){return this.queue.splice(0,e).map(e=>e.action)}};function Du(e,t,n=.18){let r=Math.hypot(e,t);if(!Number.isFinite(r)||r<=n)return{x:0,y:0};let i=(Math.min(1,r)-n)/(1-n);return{x:e/r*i,y:t/r*i}}var Ou=(e,t)=>{let n=Math.atan2(Math.abs(t),Math.abs(e))*180/Math.PI;return n<22.5?`hook`:n<45?`jab`:n<70?`straight`:`uppercut`},ku=class{active=!1;hand=`right`;target=`head`;power=`normal`;peak={x:0,y:0};peakMagnitude=0;update(e,t,n,r){let i=Math.hypot(e,t);if(!this.active&&i>=.55&&Math.abs(e)>=.12)return this.active=!0,this.hand=e<0?`left`:`right`,this.target=n?`body`:`head`,this.power=r?`power`:`normal`,this.peak={x:e,y:t},this.peakMagnitude=i,null;if(!this.active)return null;if(i>this.peakMagnitude&&(this.peak={x:e,y:t},this.peakMagnitude=i),i<=.25){let e={kind:`punch`,hand:this.hand,class:Ou(this.peak.x,this.peak.y),target:this.target,power:this.power};return this.reset(),e}return null}reset(){this.active=!1,this.peak={x:0,y:0},this.peakMagnitude=0}},Au=[`jab`,`straight`,`hook`,`uppercut`],ju=(e,t)=>e.buttons[t]?.pressed===!0;function Mu(){let e=navigator.getGamepads;if(typeof e!=`function`)return null;try{return[...e.call(navigator)].find(e=>e!==null&&e.connected&&e.mapping===`standard`)??null}catch{return null}}var Nu=class{maximumQueue;sharedActions;gesture=new ku;queue=[];previous=new Set;selectorConsumed=new Map;raf=0;currentId=null;moveX=0;moveY=0;defense=`none`;knockdown=!1;enabled=!0;trigger=!1;heldListener=null;disconnect=e=>{e.gamepad.id===this.currentId&&this.reset()};constructor(e=1,t){this.maximumQueue=e,this.sharedActions=t,window.addEventListener(`gamepaddisconnected`,this.disconnect),this.raf=requestAnimationFrame(()=>this.poll())}onHeldChange(e){this.heldListener=e}push(e){this.sharedActions===void 0?Tu(this.queue,e,this.maximumQueue):this.sharedActions.push(`gamepad`,e)}poll(){if(!this.enabled){this.reset(),this.schedulePoll();return}let e=Mu();if(e===null){this.currentId!==null&&this.reset(),this.schedulePoll();return}this.currentId!==null&&this.currentId!==e.id&&this.reset(),this.currentId=e.id;let t=Du(e.axes[0]??0,e.axes[1]??0),n=Math.round(t.x*1e3),r=Math.round(-t.y*1e3),i=ju(e,4)?`guard_high`:ju(e,5)?`guard_low`:`none`,a=n!==this.moveX||r!==this.moveY||i!==this.defense;this.moveX=n,this.moveY=r,this.defense=i,a&&this.heldListener?.(),this.trigger=ju(e,7);let o=this.gesture.update(e.axes[2]??0,e.axes[3]??0,ju(e,6),this.trigger);o!==null&&this.push(o);let s=Au.some((t,n)=>ju(e,n)&&!this.previous.has(n));for(let t of[14,15]){let n=ju(e,t),r=this.previous.has(t);this.knockdown?(n&&!r&&this.push({kind:t===14?`get_up_left`:`get_up_right`}),this.selectorConsumed.delete(t)):n?(r||this.selectorConsumed.set(t,!1),s&&this.selectorConsumed.set(t,!0)):r&&(this.selectorConsumed.get(t)===!1&&this.push({kind:t===14?`slip_left`:`slip_right`}),this.selectorConsumed.delete(t))}for(let t=0;tthis.poll())}setKnockdown(e){this.knockdown=e}get powerHeld(){return this.enabled&&this.trigger}setEnabled(e){this.enabled=e,e||this.reset()}frame(e=4){let t=this.sharedActions===void 0?this.queue.splice(0,e):[];return{moveX:this.moveX,moveY:this.moveY,defense:this.defense,actions:t}}reset(){this.currentId=null,this.moveX=this.moveY=0,this.defense=`none`,this.trigger=!1,this.queue.length=0,this.sharedActions?.clearSource(`gamepad`),this.previous.clear(),this.selectorConsumed.clear(),this.gesture.reset()}destroy(){cancelAnimationFrame(this.raf),window.removeEventListener(`gamepaddisconnected`,this.disconnect),this.reset()}},Pu=new Set([`KeyW`,`KeyA`,`KeyS`,`KeyD`,`KeyQ`,`KeyE`]),Fu=new Set([`ShiftLeft`,`ShiftRight`,`AltLeft`,`AltRight`]),Iu=class{target;maximumQueue;sharedActions;held=new Set;queue=[];enabled=!0;altFlag=!1;heldListener=null;keydown=e=>{if(this.altFlag=e.altKey,!_u.has(e.code))return;if(!this.enabled){this.hold(e.code,e.repeat);return}if(e.preventDefault(),this.hold(e.code,e.repeat),e.repeat)return;let t=hu[e.code];if(t!==void 0)this.push({kind:`punch`,hand:t[0],class:t[1],target:this.hasShift(e)?`body`:`head`,power:this.alt?`power`:`normal`});else{let t=gu[e.code];t!==void 0&&(t.kind!==`foul`||this.hasShift(e))&&this.push(t)}};keyup=e=>{if(this.altFlag=e.altKey,e.code===`MetaLeft`||e.code===`MetaRight`){this.letGo(e=>!Fu.has(e));return}_u.has(e.code)&&(this.enabled&&e.preventDefault(),this.letGo(t=>t===e.code))};visibility=()=>{document.hidden&&this.reset()};blur=()=>this.reset();constructor(e=window,t=1,n){this.target=e,this.maximumQueue=t,this.sharedActions=n,e.addEventListener(`keydown`,this.keydown),e.addEventListener(`keyup`,this.keyup),e.addEventListener(`blur`,this.blur),document.addEventListener(`visibilitychange`,this.visibility)}onHeldChange(e){this.heldListener=e}hold(e,t){t&&this.held.has(e)||(this.held.delete(e),this.held.add(e),Pu.has(e)&&this.heldListener?.())}letGo(e){let t=!1;for(let n of this.held)e(n)&&(this.held.delete(n),t||=Pu.has(n));t&&this.heldListener?.()}axis(e,t){let n=0;for(let r of this.held)r===e?n=1:r===t&&(n=-1);return n}hasShift(e){return e.shiftKey||this.held.has(`ShiftLeft`)||this.held.has(`ShiftRight`)}get alt(){return this.altFlag||this.held.has(`AltLeft`)||this.held.has(`AltRight`)}get powerHeld(){return this.enabled&&this.alt}push(e){this.sharedActions===void 0?Tu(this.queue,e,this.maximumQueue):this.sharedActions.push(`keyboard`,e)}setEnabled(e){this.enabled=e,e||(this.queue.length=0,this.sharedActions?.clearSource(`keyboard`))}frame(e=4){if(!this.enabled)return{moveX:0,moveY:0,defense:`none`,actions:[]};let t=this.axis(`KeyD`,`KeyA`)*1e3,n=this.axis(`KeyW`,`KeyS`)*1e3;t!==0&&n!==0&&(t=Math.sign(t)*707,n=Math.sign(n)*707);let r=this.axis(`KeyQ`,`KeyE`);return{moveX:t,moveY:n,defense:r>0?`guard_high`:r<0?`guard_low`:`none`,actions:this.sharedActions===void 0?this.queue.splice(0,e):[]}}reset(){this.letGo(()=>!0),this.altFlag=!1,this.queue.length=0,this.sharedActions?.clearSource(`keyboard`)}destroy(){this.reset(),this.target.removeEventListener(`keydown`,this.keydown),this.target.removeEventListener(`keyup`,this.keyup),this.target.removeEventListener(`blur`,this.blur),document.removeEventListener(`visibilitychange`,this.visibility)}};function Lu(e,t,n,r){let i=e=>Math.max(-1e3,Math.min(1e3,Math.round(e)))||0;return{moveX:i(-r*e+n*t),moveY:i(-n*e-r*t)}}var Ru=(e,t,n,r)=>Math.abs(Math.atan2(e*r-t*n,e*n+t*r)),zu=Math.PI/4-.01,Bu=Math.PI/8,Vu=300,Hu=class{actions=new Eu(1);keyboard;gamepad;touch=null;reset=()=>{this.keyboard.reset(),this.gamepad.reset(),this.touch?.reset(),this.actions.clear(),this.gamepad.setKnockdown(!1)};heldChanged=()=>{let e=this.held(),t=this.sentHeld,n=e.moveX!==0||e.moveY!==0,r=t.moveX!==0||t.moveY!==0;(e.defense!==t.defense||n!==r||n&&(Ru(e.moveX,e.moveY,t.moveX,t.moveY)>Bu||Math.abs(Math.hypot(e.moveX,e.moveY)-Math.hypot(t.moveX,t.moveY))>Vu))&&(this.sentHeld=e,this.heldListener?.())};constructor(){this.keyboard=new Iu(window,1,this.actions),this.gamepad=new Nu(1,this.actions),this.keyboard.onHeldChange(this.heldChanged),this.gamepad.onHeldChange(this.heldChanged),window.addEventListener(`blur`,this.reset),document.addEventListener(`visibilitychange`,this.visibility)}visibility=()=>{document.hidden&&this.reset()};attachTouch(e,t=lu()){this.touch!==null||!t||(this.touch=new fu(e,this.actions),this.touch.onHeldChange(this.heldChanged))}setActive(e,t=e){this.keyboard.setEnabled(e),this.gamepad.setEnabled(e),this.touch?.setEnabled(e,t)}setKnockdown(e){this.gamepad.setKnockdown(e),this.touch?.setKnockdown(e)}onAction(e){this.actions.setListener(e)}get powerHeld(){return this.keyboard.powerHeld||this.gamepad.powerHeld||this.touch?.powerHeld===!0}onHeldChange(e){this.heldListener=e}heldListener=null;sentHeld={moveX:0,moveY:0,defense:`none`};setViewForward(e){this.viewForward=e}viewForward=null;latched=null;held(){let e=this.keyboard.frame(0),t=this.gamepad.frame(0),n=this.touch?.frame()??null,r=t.moveX===0?n!==null&&n.moveX!==0?n.moveX:e.moveX:t.moveX,i=t.moveY===0?n!==null&&n.moveY!==0?n.moveY:e.moveY:t.moveY,a=t.defense===`none`?n!==null&&n.defense!==`none`?n.defense:e.defense:t.defense;if(r===0&&i===0)return this.latched=null,{moveX:r,moveY:i,defense:a};let o=this.viewForward?.()??null,s=this.latched;s===null||Ru(r,i,s.moveX,s.moveY)>zu?this.latched={moveX:r,moveY:i,forward:o===null?null:{x:o.x,z:o.z}}:s.forward!==null&&o!==null&&(s.forward.x=o.x,s.forward.z=o.z);let c=this.latched.forward;if(c===null)return{moveX:r,moveY:i,defense:a};let l=Lu(r,i,c.x,c.z);return{moveX:l.moveX,moveY:l.moveY,defense:a}}frame(){return{...this.held(),actions:this.actions.drain(4)}}destroy(){window.removeEventListener(`blur`,this.reset),document.removeEventListener(`visibilitychange`,this.visibility),this.keyboard.destroy(),this.gamepad.destroy(),this.touch?.destroy()}},Uu=(e,t,n)=>e+(t-e)*n,Wu=(e,t,n)=>({...t,x:Uu(e.x,t.x,n),y:Uu(e.y,t.y,n),facing:Uu(e.facing,t.facing,n),facing_x:Uu(e.facing_x,t.facing_x,n),facing_y:Uu(e.facing_y,t.facing_y,n),velocity_x:Uu(e.velocity_x,t.velocity_x,n),velocity_y:Uu(e.velocity_y,t.velocity_y,n),stamina:Uu(e.stamina,t.stamina,n),maximum_stamina:Uu(e.maximum_stamina,t.maximum_stamina,n),conditioning:Uu(e.conditioning,t.conditioning,n),guard:Uu(e.guard,t.guard,n),poise:Uu(e.poise,t.poise,n)}),Gu=(e,t,n)=>({...t,x:Uu(e.x,t.x,n),y:Uu(e.y,t.y,n),facing_x:Uu(e.facing_x,t.facing_x,n),facing_y:Uu(e.facing_y,t.facing_y,n),velocity_x:Uu(e.velocity_x,t.velocity_x,n),velocity_y:Uu(e.velocity_y,t.velocity_y,n)}),Ku=1.5,qu=6,Ju=.5,Yu=2500,Xu=1,Zu=.04,Qu=100,$u=.01,ed=4,td=class{maximum;tickRate;initialDelayTicks;snapshots=[];offsetTicks=null;delayTicks;lastStarvationMs=-1/0;lastFrameMs=null;behindPushes=0;needs=[];constructor(e=8,t=30,n=2){this.maximum=e,this.tickRate=t,this.initialDelayTicks=n,this.delayTicks=n}get interpolationDelayTicks(){return this.delayTicks}push(e,t){let n=this.snapshots.at(-1);if(n!==void 0&&e.tick<=n.tick)return!1;if(this.snapshots.push(e),this.snapshots.length>this.maximum&&this.snapshots.shift(),t!==void 0&&Number.isFinite(t)){let n=e.tick-t*this.tickRate/1e3;this.offsetTicks!==null&&n=ed&&this.restartClock(),this.offsetTicks===null?(this.offsetTicks=n,this.need(t,this.initialDelayTicks)):this.offsetTicks=Math.max(n,this.offsetTicks-$u),this.need(t,this.offsetTicks-n+Xu)}return!0}resync(){this.restartClock()}restartClock(){this.offsetTicks=null,this.delayTicks=this.initialDelayTicks,this.lastStarvationMs=-1/0,this.behindPushes=0,this.needs.length=0}need(e,t){for(;this.needs.length>0&&this.needs.at(-1).ticks<=t;)this.needs.pop();this.needs.push({atMs:e,ticks:t})}recentNeed(e){for(;this.needs.length>0&&this.needs[0].atMs<=e-Yu;)this.needs.shift();return this.needs[0]?.ticks??0}latest(){return this.snapshots.at(-1)??null}renderTick(e){let t=this.latest();if(t===null)return 0;let n=this.snapshots[0].tick;if(this.offsetTicks===null)return Math.max(n,t.tick-1);let r=this.lastFrameMs===null?0:Math.min(Qu,Math.max(0,e-this.lastFrameMs));this.lastFrameMs=e;let i=e*this.tickRate/1e3+this.offsetTicks-this.delayTicks;if(i>t.tick+.25)e-this.lastStarvationMs>250&&(this.lastStarvationMs=e,this.delayTicks=Math.min(qu,this.delayTicks+Ju),this.need(e,this.delayTicks));else{let t=Math.max(Ku,this.recentNeed(e));this.delayTicks>t&&(this.delayTicks=Math.max(t,this.delayTicks-Zu*r*this.tickRate/1e3))}return Math.min(t.tick,Math.max(n,i))}sample(e){let t=this.snapshots.findIndex(t=>t.tick>=e);if(t<=0)return this.snapshots[Math.max(0,t)]??this.latest();let n=this.snapshots[t-1],r=this.snapshots[t];if(n.phase!==r.phase||n.fighters.some((e,t)=>e.knockdowns!==r.fighters[t]?.knockdowns))return r;let i=Math.max(0,Math.min(1,(e-n.tick)/Math.max(1,r.tick-n.tick)));return{...r,fighters:[Wu(n.fighters[0],r.fighters[0],i),Wu(n.fighters[1],r.fighters[1],i)],referee:Gu(n.referee,r.referee,i)}}clear(){this.snapshots.length=0,this.offsetTicks=null}},nd=class{highest=-1;accept(e){let t=new Set,n=e.filter(e=>e.event_id<=this.highest||t.has(e.event_id)?!1:(t.add(e.event_id),!0)).sort((e,t)=>e.event_id-t.event_id);for(let e of n)this.highest=Math.max(this.highest,e.event_id);return n}reset(){this.highest=-1}};function rd(e=window.location){let t=new URL(`/api/hands/ws`,e.origin);if(e.protocol===`https:`)t.protocol=`wss:`;else if(e.protocol===`http:`&&[`localhost`,`127.0.0.1`,`::1`].includes(e.hostname))t.protocol=`ws:`;else throw Error(`insecure_websocket_origin`);return t.search=``,t.hash=``,t.toString()}var id=1,ad={moveX:0,moveY:0,defense:`none`,actions:[]},od=33,sd=8,cd=50,ld=20,ud=10,dd=10,fd=2048;function pd(e){try{return Ze(e)}catch(t){let n;try{let t=ye(e);n=typeof t==`object`&&t&&`version`in t?t.version:void 0}catch{}throw typeof n==`number`&&n!==5?new Yn(`client_outdated`,!0):t}}var md=class{getInput;callbacks;makeSocket;now;socket=null;reconnectTicket;reconnectTimer=null;opponentPauseTimer=null;inputTimer=null;reconnectDeadline=0;opponentPauseDeadline=0;opponentPaused=!1;attempts=0;nextSequence=0;playerId=null;sentAt=new Map;actionSequences=new Map;latencyMs=null;serverTick=0;role=null;active=!1;resting=!1;boutStarted=!1;disposed=!1;terminal=!1;inputSuppressed=!1;pointerFocus=!1;listenersBound=!1;lastInputSentAt=-1/0;sendTimes=[];edgeSendTimes=[];heldSendTimes=[];heldTimer=null;pressWaiting=!1;constructor(e,t,n,r=e=>new WebSocket(e),i=()=>performance.now()){this.getInput=t,this.callbacks=n,this.makeSocket=r,this.now=i,this.reconnectTicket=e}start(){this.disposed||this.listenersBound||(this.bindInputListeners(),this.connect(),!this.disposed&&!this.terminal&&(this.inputTimer=window.setInterval(()=>this.periodicFlush(),od)))}bindInputListeners(){this.listenersBound=!0,window.addEventListener(`blur`,this.onInputLoss),window.addEventListener(`focus`,this.onInputRegain),window.addEventListener(`pointerdown`,this.onPagePointer,!0),document.addEventListener(`visibilitychange`,this.onVisibilityChange)}setActive(e){this.setInputActive(e)}setInputActive(e){let t=this.active;this.active=e,e?this.boutStarted=!0:t&&this.sendInput(ad,!0)}notifyAction(){this.pressWaiting=!0,!(this.now()-(this.edgeSendTimes.at(-1)??-1/0)=ld||this.flushInput()&&this.edgeSendTimes.push(this.lastInputSentAt))}notifyHeld(){let e=sd-(this.now()-Math.max(this.edgeSendTimes.at(-1)??-1/0,this.heldSendTimes.at(-1)??-1/0));if(e>0){this.heldTimer??=window.setTimeout(()=>{this.heldTimer=null,this.notifyHeld()},e);return}this.withinLastSecond(this.heldSendTimes)>=ud||this.sendsInLastSecond()>=cd-dd||this.flushInput()&&this.heldSendTimes.push(this.lastInputSentAt)}periodicFlush(){this.now()-Math.max(this.edgeSendTimes.at(-1)??-1/0,this.heldSendTimes.at(-1)??-1/0)=cd-dd||this.flushInput()}sendsInLastSecond(){return this.withinLastSecond(this.sendTimes)}withinLastSecond(e){let t=this.now()-1e3;for(;e.length>0&&e[0]<=t;)e.shift();return e.length}onInputLoss=()=>{this.inputSuppressed||(this.sendInput(ad,this.boutStarted),this.inputSuppressed=!0,this.pointerFocus=!1)};onInputRegain=()=>{!document.hidden&&document.hasFocus()&&(this.inputSuppressed=!1)};onPagePointer=()=>{if(!document.hidden&&(this.pointerFocus=!0,this.inputSuppressed=!1,!document.hasFocus()))try{window.focus()}catch{}};onVisibilityChange=()=>{document.hidden?this.onInputLoss():this.onInputRegain()};connect(){if(this.disposed||this.terminal)return;let e=this.reconnectTicket;if(e===null){this.terminal=!0,this.stopInputLifecycle(),this.callbacks.onFreshAuth();return}let t;try{t=this.makeSocket(rd())}catch{this.terminal=!0,this.stopInputLifecycle(),this.callbacks.onFatal(`network_unavailable`);return}this.socket=t,t.binaryType=`arraybuffer`,t.onopen=()=>{if(!(this.socket!==t||this.disposed))try{t.send(JSON.stringify({version:5,type:`authenticate`,ticket:e})),this.reconnectTicket=null}catch{this.handleClose(t)}},t.onmessage=e=>this.handleMessage(t,e),t.onerror=()=>void 0,t.onclose=()=>this.handleClose(t)}handleMessage(e,t){if(!(this.socket!==e||this.disposed||this.terminal))try{if(typeof t.data!=`string`&&!(t.data instanceof ArrayBuffer))throw Error(`unsupported_frame`);let n=pd(t.data);if(this.applyMessage(n),n.type===`ticket`){try{e.send(JSON.stringify({version:5,type:`ticket_ack`,refresh_id:n.refresh_id}))}catch{this.handleClose(e)}return}this.callbacks.onMessage(n),n.type===`error`?this.terminate(n.code,e):n.type===`final`&&(this.terminal=!0,this.clearTransportReconnect(!0),this.clearOpponentPause(!0),this.stopInputLifecycle(),this.socket===e&&(this.socket=null),e.onopen=e.onmessage=e.onclose=e.onerror=null,e.close(1e3,`complete`))}catch(e){this.callbacks.onFatal(tr(e)),this.dispose()}}applyMessage(e){if(e.type===`welcome`){if(e.reconnect_ticket===void 0)throw Error(`missing_reconnect_ticket`);this.reconnectTicket=e.reconnect_ticket,this.serverTick=e.server_tick;let t=this.role===`spectator`&&e.role===`fighter`;this.role=e.role,this.playerId=e.role===`fighter`?e.player_id:null,this.sentAt.clear(),e.role===`fighter`?this.nextSequence=Math.max(this.nextSequence,e.next_sequence):this.stopInputLifecycle(),t&&(this.listenersBound||this.bindInputListeners(),this.inputTimer??=window.setInterval(()=>this.periodicFlush(),od)),this.attempts=0,this.clearTransportReconnect(!0)}else e.type===`ticket`?this.reconnectTicket=e.reconnect_ticket:e.type===`snapshot`?(this.serverTick=Math.max(this.serverTick,e.payload.tick),this.setInputActive([`countdown`,`fight`,`knockdown`,`foul_recovery`,`referee_down`].includes(e.payload.phase)),this.resting=e.payload.phase===`rest`,this.observeAcknowledgement(e.payload)):e.type===`paused`?(this.setInputActive(!1),this.startOpponentPause(e.grace_ms)):e.type===`resumed`?(this.setInputActive(!0),this.attempts=0,this.clearOpponentPause(!0)):e.type===`select`?this.clearOpponentPause(!0):e.type===`ready`?(this.clearOpponentPause(!0),this.setInputActive(!0)):e.type===`waiting`?(this.clearOpponentPause(!0),this.setInputActive(!1)):(e.type===`final`||e.type===`error`)&&(this.active=!1,this.clearOpponentPause(!0))}terminate(e,t){this.terminal=!0,this.active=!1,this.clearTransportReconnect(!0),this.clearOpponentPause(!0),this.stopInputLifecycle(),this.callbacks.onFatal(e),this.socket===t&&(this.socket=null,t.onopen=t.onmessage=t.onclose=t.onerror=null,t.close(1e3,`terminal`))}handleClose(e){if(this.socket!==e||(this.socket=null,this.active=!1,this.disposed||this.terminal))return;if(this.reconnectTicket===null){this.terminal=!0,this.stopInputLifecycle(),this.callbacks.onFreshAuth();return}this.clearOpponentPause(!1),this.reconnectDeadline===0&&(this.reconnectDeadline=this.now()+2e4);let t=Math.max(0,this.reconnectDeadline-this.now());if(this.callbacks.onReconnect(t),t<=0){this.terminal=!0,this.stopInputLifecycle(),this.callbacks.onFreshAuth();return}let n=Math.min(3e3,250*2**Math.min(this.attempts,4),t);this.attempts+=1,this.reconnectTimer=window.setTimeout(()=>{this.reconnectTimer=null,this.callbacks.onReconnect(Math.max(0,this.reconnectDeadline-this.now())),this.connect()},n)}requestCpu(e){let t=this.socket;if(this.role!==`fighter`||this.disposed||this.terminal||t?.readyState!==id)return!1;try{return t.send(rt(e)),!0}catch{return this.handleClose(t),!1}}chooseStyle(e,t){let n=this.socket;if(this.role!==`fighter`||this.disposed||this.terminal||n?.readyState!==id)return!1;try{return n.send(tt(e,t)),!0}catch{return this.handleClose(n),!1}}get inputLatencyMs(){return this.latencyMs}sequenceOf(e){return this.actionSequences.get(e)??null}observeAcknowledgement(e){if(this.playerId===null)return;let t=e.fighters.find(e=>e.player_id===this.playerId);if(t===void 0||t.last_input_sequence<0)return;let n=this.sentAt.get(t.last_input_sequence);if(n!==void 0){let e=Math.max(0,this.now()-n);this.latencyMs=this.latencyMs===null?e:this.latencyMs*.8+e*.2}for(let e of this.sentAt.keys())e<=t.last_input_sequence&&this.sentAt.delete(e)}sendInput(e,t=!1){return(this.active||t)&&this.transmit(e)}sendCornerChoice(e){return this.resting?this.transmit({moveX:0,moveY:0,defense:`none`,actions:[{kind:e}]}):!1}transmit(e){let t=this.socket;if(this.role!==`fighter`||this.disposed||this.terminal||t?.readyState!==id)return!1;try{let n=e.actions.slice(0,4);t.send(et(this.nextSequence,this.serverTick,{...e,actions:n})),this.sentAt.set(this.nextSequence,this.now()),this.sentAt.size>128&&this.sentAt.delete(this.sentAt.keys().next().value);for(let e of n)e.id!==void 0&&this.actionSequences.set(e.id,this.nextSequence);for(;this.actionSequences.size>64;)this.actionSequences.delete(this.actionSequences.keys().next().value);return this.nextSequence+=1,this.lastInputSentAt=this.now(),this.sendTimes.push(this.lastInputSentAt),!0}catch{return this.handleClose(t),!1}}flushInput(){return this.inputSuppressed||document.hidden||!(this.pointerFocus||document.hasFocus())||this.sendsInLastSecond()>=cd||(this.socket?.bufferedAmount??0)>fd||!this.sendInput(this.getInput())?!1:(this.pressWaiting=!1,!0)}startOpponentPause(e){this.clearOpponentPause(!1),this.opponentPaused=!0,this.opponentPauseDeadline=this.now()+e,this.callbacks.onReconnect(e),e>0&&this.scheduleOpponentPauseTick()}scheduleOpponentPauseTick(){let e=Math.max(0,this.opponentPauseDeadline-this.now());if(e<=0){this.opponentPauseDeadline=0,this.callbacks.onReconnect(0);return}this.opponentPauseTimer=window.setTimeout(()=>{this.opponentPauseTimer=null;let e=Math.max(0,this.opponentPauseDeadline-this.now());this.callbacks.onReconnect(e),e>0?this.scheduleOpponentPauseTick():this.opponentPauseDeadline=0},Math.min(250,e))}clearOpponentPause(e){let t=this.opponentPaused;this.opponentPaused=!1,this.opponentPauseDeadline=0,this.opponentPauseTimer!==null&&(clearTimeout(this.opponentPauseTimer),this.opponentPauseTimer=null),e&&t&&this.callbacks.onReconnect(0)}cancelReconnect(){this.reconnectTimer!==null&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null)}clearTransportReconnect(e){let t=this.reconnectDeadline!==0;this.reconnectDeadline=0,this.cancelReconnect(),e&&t&&this.callbacks.onReconnect(0)}stopInputLifecycle(){this.inputTimer!==null&&(clearInterval(this.inputTimer),this.inputTimer=null),this.heldTimer!==null&&(clearTimeout(this.heldTimer),this.heldTimer=null),this.listenersBound&&=(window.removeEventListener(`blur`,this.onInputLoss),window.removeEventListener(`focus`,this.onInputRegain),window.removeEventListener(`pointerdown`,this.onPagePointer,!0),document.removeEventListener(`visibilitychange`,this.onVisibilityChange),!1)}dispose(){if(this.disposed)return;this.disposed=!0,this.active=!1,this.reconnectTicket=null,this.clearTransportReconnect(!0),this.clearOpponentPause(!0),this.stopInputLifecycle();let e=this.socket;this.socket=null,e!==null&&(e.onopen=e.onmessage=e.onclose=e.onerror=null,e.close(1e3,`teardown`))}},hd={play:`CALLAHAN`,colour:`OKAFOR`,announcer:`RING ANNOUNCER`},gd=.3,_d=.9,vd=.25,yd=2.6,bd=4.5,xd=.8,Sd=6,Cd=9,wd=6,Td=42,Ed=8,Dd=15,Od=10,kd=[60,480,640],Ad=500,jd=.2,Md=.3,Nd=120,Pd={knockdown:[`Down goes {b}!`,`{a} drops {b}!`,`{b} is down! What a shot from {a}!`,`Down goes {b}! {a} found the chin!`],knockdownAgain:[`{b} is down again!`,`Down for the second time! {b} is in deep trouble!`,`{a} puts {b} down again!`],knockdownCounter:[`Down goes {b}, off a perfect counter!`,`{a} times it, and {b} is down!`],struggle:[`{b} is struggling to get up...`,`{b} is trying to beat the count...`,`Can {b} get up?`],upLate:[`{b} beats the count at {n}!`,`Up at {n}! {b} is still in this!`,`{b} makes it up at {n}, but the legs look heavy.`],upEarly:[`{b} is up at {n}.`,`{b} is back up at the count of {n}.`,`Up at {n}. {b} wants to keep fighting.`],finishCall:[`{a} has to go for the finish now.`,`{b} needs to survive the next minute.`,`{b} has to hold and clear the head.`],hurt:[`{b} is hurt!`,`{a} has {b} in trouble!`,`{b}'s legs just buckled!`,`Big shot! {b} is wobbled!`,`{b} is rocked! Keep the pressure on, {a}!`],hurtBadly:[`{b} is out on their feet!`,`{b} is in all sorts of trouble!`,`{b} is badly hurt!`],guardBreak:[`{a} blasts right through the guard!`,`The guard is gone! {b} can't keep those hands up!`,`{a} breaks the guard down!`],counter:[`What a counter from {a}!`,`{a} times it perfectly! A {punch} on the counter!`,`{b} walked right into that {punch}!`,`Counter {punch} from {a}! Beautiful timing.`],bigShot:[`Big {punch} from {a}!`,`{a} lands a thudding {punch}!`,`That {punch} landed flush!`,`Huge {punch}! {b} felt that one.`],cut:[`{b} is cut over the {side} eye.`,`There's blood now. A cut over {b}'s {side} eye.`,`That's opened a cut over the {side} eye of {b}.`],cutWorse:[`That cut over {b}'s {side} eye is getting worse.`,`The blood is pouring from that {side} eye now.`,`{b} is bleeding badly from the {side} eye.`],cutGushing:[`That cut is gushing now! {b} is covered in it.`,`{b}'s face is a crimson mask, and nobody is stopping this!`],eyeSwelling:[`{b}'s {side} eye is swelling badly.`,`{b} is having trouble seeing out of that {side} eye.`],eyeShut:[`{b}'s {side} eye has closed completely!`,`That {side} eye is shut! {b} can't see them coming from that side.`,`{b} is fighting with one eye now.`],blindSide:[`{a} is working the blind side.`,`{b} never saw that one. Nothing is getting through that {side} eye.`,`Smart from {a}, punching where {b} can't see.`],parried:[`{a} picks it off and {b} is wide open!`,`Beautiful parry from {a}! {b} is off balance.`,`{a} slaps it away and {b} is left stranded.`],bodyCollapse:[`Body shot! {b} is going down!`,`{a} digs to the body and {b} is folding!`,`Oh, that body shot! {b} is in agony!`],knockdownBody:[`Down goes {b} from the body shot!`,`{b} takes a knee! That body shot took everything out!`,`{a} goes downstairs and {b} can't take it!`],cornerCut:[`{a}'s cutman is working on that cut.`,`They're working hard on the cut in {a}'s corner.`],cornerSwelling:[`{a}'s corner is getting the swelling down.`,`Ice and the enswell on that eye in {a}'s corner.`],cornerBreath:[`{a}'s corner wants the breath back first. Big drink of water.`,`{a} is told to breathe and settle down.`],combo:[`A three-punch combination from {a}!`,`{a} puts it together beautifully.`,`Lovely combination from {a}!`],unanswered:[`Five unanswered punches from {a}!`,`{a} is unloading! {b} has to fire back!`,`{b} is just covering up as {a} lets the hands go!`],jab:[`{a}'s jab is finding a home.`,`Stiff jab from {a}, and another.`,`{a} keeps popping that jab in {b}'s face.`],body:[`{a} is going to work on the body.`,`{a} keeps digging to the body.`,`Another one downstairs from {a}.`],payoff:[`The body work is paying off. {b} is slowing down.`,`Those body shots are taking it out of {b}.`,`{a} has invested in the body, and {b} is paying for it now.`],tiring:[`{b} is running on empty.`,`{b} is breathing hard. Those punches have nothing on them.`,`{b} has punched out. The tank is empty.`],takeover:[`{a} is taking over this round.`,`This is all {a} right now.`,`{a} is in complete control.`],clinch:[`{a} ties {b} up.`,`{a} grabs hold.`,`They're tied up in the clinch.`],holdingOn:[`{a} is hurt and holding on!`,`{a} grabs on for dear life!`,`Smart from {a}, holding on to clear the head.`],refBreak:[`The referee breaks them.`,`The referee steps in to separate them.`,`Break! The referee pulls them apart.`],refHit:[`{a} just tagged the referee!`,`Oh no, {a} has caught the referee!`,`That one landed on the referee!`],refDown:[`The referee is down! {a} has killed the referee!`,`Oh my goodness, the referee isn't moving! I think he's dead!`,`{a} has flattened the official for good! Absolute chaos!`],refBledOut:[`The referee has collapsed! He's bled out right there in the ring!`,`The referee goes down! He's lost too much blood!`],noRef:[`Nobody left to break them up!`,`No referee to part them, so they just let go.`],taunt:[`{a} drops the hands and invites {b} in!`,`Showboating from {a}! The crowd loves it.`,`{a} is taunting {b} now!`,`{a} sticks the chin out. Come and get it!`],lowBlow:[`Low blow from {a}! The referee steps in.`,`That's below the belt! {b} is doubled over.`,`{a} goes low, and the referee calls time.`],headbutt:[`Headbutt from {a}! The referee calls time.`,`{a} leads with the head! That's a foul.`],warning:[`A warning for {a}. One more and it costs a point.`,`The referee warns {a}. That can't happen again.`],deduction:[`The referee takes a point from {a}!`,`That costs {a} a point!`,`Point deduction! {a} has been warned enough.`],resume:[`And we're back underway.`,`Time in. Let's box.`],box:[`The referee waves them on. {b} has to survive now.`,`Box! {a} will be looking to finish it.`,`{b} has convinced the referee. Here comes {a}.`],evade:[`{a} slips it! Lovely head movement.`,`{b} misses, and {a} was never there.`,`Great defence from {a}.`],parry:[`{a} picks that off with the gloves.`,`{a} parries it away.`,`Tight defence from {a}.`],whiff:[`{a} misses wildly with the {punch}.`,`Big swing and a miss from {a}.`,`{a} throws everything into that {punch} and hits nothing but air.`],southpaw:[`{a} switches to southpaw.`,`{a} turns southpaw now.`],orthodox:[`{a} goes back to orthodox.`,`{a} switches back to orthodox.`],roundStart:[`Round {r}. Here we go.`,`We're underway in round {r}.`,`Round {r} is on.`],roundEnd:[`That's the bell to end round {r}.`,`The bell ends round {r}.`,`And that's round {r} in the books.`],savedByBell:[`Saved by the bell! {b} was in real trouble.`,`{b} is saved by the bell!`,`The bell rescues {b}!`],finalBell:[`That's the final bell!`,`The final bell! We go to the scorecards.`],summary:[`Round {r}: {a} landed {x} of {y}, {b} {z} of {w}.`],roundFor:[`I had that round for {a}.`,`{a} took that round.`,`That was {a}'s round.`],roundBig:[`The knockdown makes that a big round for {a}.`,`{a} wins that round big with the knockdown.`],roundClose:[`Close round. That one could go either way.`,`Tough round to score.`,`Nothing between them in that round.`],pullingAway:[`{a} is pulling away on the cards.`,`{b} needs something big. {a} is building a lead.`],ko:[`It's all over! {a} wins by knockout!`,`{b} can't beat the count! {a} wins it!`,`That's it! {a} has knocked out {b}!`],flashKo:[`Lights out! {b} is out cold!`,`One punch, and it's over! {a} wins!`,`Good night! {a} ends it with one shot!`],tko:[`Three knockdowns, and it's over! {a} wins!`,`The referee waves it off! {a} wins by stoppage!`],disqualified:[`{b} is disqualified!`,`That's it! {b} has been thrown out!`],forfeit:[`{b} has left the ring. {a} wins by forfeit.`],replay:[`Here it is again.`,`Let's see that one more time.`,`Watch {a} set it up...`]},Fd={ko:`ko`,flash_ko:`flashKo`,tko:`tko`,disqualification:`disqualified`,forfeit:`forfeit`},Id={struggle:new Set([`knockdown`])},Ld=`struggle`,Rd=new Set([`countdown`]),zd=3.2,Bd=new Set([`knockdown`,`knockdownAgain`,`knockdownCounter`,`knockdownBody`,`bodyCollapse`,`upLate`,`upEarly`,`hurt`,`hurtBadly`,`lowBlow`,`headbutt`,`deduction`,`ko`,`flashKo`,`tko`,`disqualified`,`forfeit`,`replay`,`refDown`,`refBledOut`,`savedByBell`,`finalBell`,`roundEnd`,`roundStart`]),Vd=new Set([`lowBlow`,`headbutt`,`warning`,`deduction`,`box`,`tko`]),Hd={ko:98,flashKo:98,tko:98,disqualified:98,forfeit:98,refDown:97,refBledOut:97,refHit:72,knockdown:95,knockdownAgain:95,knockdownCounter:95,knockdownBody:95,bodyCollapse:86,upLate:90,upEarly:90,replay:88,deduction:84,lowBlow:82,headbutt:82,hurt:80,box:78,hurtBadly:80,holdingOn:76,savedByBell:74,finalBell:72,struggle:70,guardBreak:65,eyeShut:62,counter:60,parried:58,bigShot:55,roundEnd:52,cut:50,cutWorse:50,summary:50,cutGushing:48,eyeSwelling:48,cornerCut:47,cornerSwelling:47,cornerBreath:47,blindSide:42,roundFor:46,roundBig:46,roundClose:46,pullingAway:46,unanswered:45,finishCall:44,warning:42,combo:40,payoff:40,takeover:38,body:35,jab:30,tiring:30,roundStart:28,taunt:25,parry:22,evade:20,clinch:20,whiff:18,refBreak:12,noRef:12,southpaw:10,orthodox:10,resume:10},Ud={finishCall:`colour`,payoff:`colour`,tiring:`colour`,takeover:`colour`,holdingOn:`colour`,taunt:`colour`,parry:`colour`,evade:`colour`,warning:`colour`,blindSide:`colour`,cornerCut:`colour`,cornerSwelling:`colour`,cornerBreath:`colour`,roundFor:`colour`,roundBig:`colour`,roundClose:`colour`,pullingAway:`colour`,cutGushing:`colour`,noRef:`colour`,jab:`colour`},Wd={combo:6,jab:20,body:18,evade:12,parry:15,parried:8,blindSide:20,whiff:12,clinch:15,refBreak:20,taunt:10,southpaw:15,orthodox:15,bigShot:4,counter:3,unanswered:15,takeover:25},Gd=[`zero`,`one`,`two`,`three`,`four`,`five`,`six`,`seven`,`eight`,`nine`,`ten`,`eleven`,`twelve`,`thirteen`,`fourteen`,`fifteen`],Kd=e=>Gd[e]??String(e),qd=[...Gd,`sixteen`,`seventeen`,`eighteen`,`nineteen`],Jd=[``,``,`twenty`,`thirty`,`forty`,`fifty`,`sixty`,`seventy`,`eighty`,`ninety`];function Yd(e){return!Number.isInteger(e)||e<0||e>=1e3?String(e):e<20?qd[e]:e<100?`${Jd[Math.floor(e/10)]}${e%10==0?``:`-${qd[e%10]}`}`:`${qd[Math.floor(e/100)]} hundred${e%100==0?``:` and ${Yd(e%100)}`}`}function Xd(e,t=!0){if(me(e))return`making a pro debut`;let n=e.draws>0?`${Yd(e.wins)}, ${Yd(e.losses)} and ${Yd(e.draws)}`:`${Yd(e.wins)} and ${e.losses===0?`oh`:Yd(e.losses)}`;return t&&e.knockouts>0?`${n}, ${Yd(e.knockouts)} by knockout`:n}function Zd(e){return .85+e.length*.077+(e.split(`...`).length-1)*.35}var Qd=.3;function $d(e,t){let n=t-Qd,r=[e=>[e.record===void 0?null:Xd(e.record),ut(e.style)],e=>[ut(e.style)],()=>[]];for(let t of r){let r=e.map((e,n)=>{let r=n===0?`In the blue corner`:`And in the red corner`,i=t(e).filter(e=>e!==null);return i.length===0?`${r}, ${e.name}!`:`${r}, ${i.join(`, `)}... ${e.name}!`});if(r.reduce((e,t)=>e+Zd(t),0)<=n)return r}let i=`${e[0].name}... versus ${e[1].name}!`;return Zd(i)<=n?[i]:[]}function ef(e,t){let n=e.replace(/\{(a|b|n|side|punch|r|x|y|z|w)\}/gu,(e,n)=>String(t[n]??``));return n.charAt(0).toUpperCase()+n.slice(1)}var tf=(e,t)=>{let n=Math.imul((e|0)^Math.imul(t,2654435761),2246822507);return n^=n>>>13,n=Math.imul(n,3266489909),(n^n>>>16)>>>0};function nf(e){let t=e.split(`:`);return[t.at(-2),t.at(-1)]}function rf(e,t){let[n=`punch`,r=`head`]=nf(e),i=t!==void 0&&t.action===n?t.action_hand:null,a=n===`jab`?`jab`:n===`straight`?i===null?`straight`:`${i} hand`:i===null?n:`${i} ${n}`;return r===`body`?`${a} to the body`:a}function af(e){if(e.phase===`knockdown`){let t=Math.max(...e.fighters.map(e=>e.get_up_count));return Math.min(1,.3+t*.07)}if(e.phase!==`fight`)return 0;let t=0;for(let[n,r]of e.fighters.entries()){let i=e.fighters[1-n];r.is_downed||(r.stunned_ticks>0?t=Math.max(t,.75):r.poise<150&&(t=Math.max(t,.45)),(Math.max(Math.abs(r.x),Math.abs(r.y))>400||Math.abs(r.x)+Math.abs(r.y)>640)&&Math.hypot(r.x-i.x,r.y-i.y)<150&&(t=Math.max(t,.4)))}return t}var of=()=>({thrown:0,landed:0,damage:0,knockdowns:0,body:0}),sf=()=>({jabs:[],window:[],evasions:[],run:0,runTick:-1e3,unanswered:0,stunnedAt:-1e3,knockedDownAt:-1e5,lowSince:null,tiredRound:0,takeoverRound:0,payoffRound:0,cutMarks:[0,0],eyeShut:[!1,!1],eyeSwelling:[!1,!1],rounds:0}),cf=class{hooks;queue=[];showing=null;lastEnd=-1/0;lastChoice=new Map;cooldowns=new Map;notes=new Map;tallies=new Map;players={};fighters=null;tickRate=30;introduced=!1;lastPhase=null;round=0;roundLength=null;fightRemaining=0;struggleCalled=-1;lastKnockdown=null;refereeDead=!1;final=null;verdictGiven=!1;resultCalled=!1;caption={line:null,opacity:0,entering:0};constructor(e={}){this.hooks=e}observe(e,t,n,r,i){this.players=n,this.fighters=e.fighters,this.refereeDead=e.referee?.alive===!1,this.tickRate=r,this.trackClock(e),this.introduced||(this.introduced=!0,e.phase===`countdown`&&e.round_number===1&&this.introduce(e,i));let a=t.find(e=>e.kind===`result`)??null;for(let n of t)this.consider(n,e,a,i);this.inspect(e,i),this.lastPhase=e.phase,this.dropOutOfPhase(e.phase,i)}dropOutOfPhase(e,t){for(let t=this.queue.length-1;t>=0;--t){let n=this.queue[t].phases;n!==null&&!n.has(e)&&this.queue.splice(t,1)}let n=this.showing;n!==null&&n.phases!==null&&!n.phases.has(e)&&(n.end=Math.min(n.end,t+vd))}finish(e,t,n,r){this.players=t,this.final=e,n&&(this.enqueue(this.announcement(`Ladies and gentlemen, we go to the scorecards.`,{kicker:`LADIES AND GENTLEMEN`,title:`WE GO TO THE SCORECARDS`,detail:``,corner:null},wd,99),r,null,30),this.hooks.speak?.([`Ladies and gentlemen, we go to the scorecards.`])),e.method===`forfeit`&&!this.resultCalled&&e.winner_id!==null&&(this.resultCalled=!0,this.say(`forfeit`,e.round,r,{a:this.nameOf(e.winner_id),b:this.nameOf(this.otherId(e.winner_id))},`result`,0))}verdict(e){let t=this.final;if(t===null||this.verdictGiven)return;this.verdictGiven=!0;let n=fn(t);if(t.winner_id===null){let r=`After ${Kd(t.round)} rounds, this bout is scored a ${n.toLowerCase()}.`;this.enqueue(this.announcement(r,{kicker:`AFTER ${Kd(t.round).toUpperCase()} ROUNDS`,title:n,detail:``,corner:null},Cd,100),e,`verdict`,30),this.hooks.speak?.([r]);return}let r=this.nameOf(t.winner_id),i=n.toLowerCase();this.enqueue(this.announcement(`The winner, by ${i}: ${r}!`,{kicker:`THE WINNER, BY ${n}`,title:r.toUpperCase(),detail:``,corner:this.seatOf(t.winner_id)},Cd,100),e,`verdict`,30),this.hooks.speak?.([`And the winner, by ${i}... ${r}!`])}resultShown(e){let t=this.final;if(t===null||this.verdictGiven)return;if(t.method===`decision`||t.method===`draw`){this.verdict(e);return}if(this.verdictGiven=!0,t.winner_id===null)return;let n=this.nameOf(t.winner_id),r={ko:`knockout`,flash_ko:`knockout`,tko:`technical knockout`,disqualification:`disqualification`,forfeit:`forfeit`}[t.method]??t.method.replaceAll(`_`,` `),i=this.stoppageClock(t.round),a=t.method===`ko`||t.method===`flash_ko`||t.method===`tko`,o=a&&i!==null?`STOPPED AT ${i} OF ROUND ${t.round}`:`ROUND ${t.round}`,s=a&&i!==null?`${n} wins by ${r} at ${i} of round ${t.round}.`:`${n} wins by ${r} in round ${t.round}.`;this.enqueue(this.announcement(s,{kicker:o,title:n.toUpperCase(),detail:`WINS BY ${r.toUpperCase()}`,corner:this.seatOf(t.winner_id)},Cd,100),e,`verdict`,30);let c=this.refereeDead?`With the referee dead on the canvas, it is over`:`The referee stops the contest`,l=a&&i!==null?`${c} at ${i} of round ${Kd(t.round)}. `:``;this.hooks.speak?.([`${l}Your winner, by ${r}... ${n}!`])}replay(e,t=null){let n=t?.kind===`referee_down`?{actor:t.actor_id,target:null,tick:t.tick}:this.lastKnockdown;this.say(`replay`,n?.tick??0,e,{a:this.nameOf(n?.actor??null),b:this.nameOf(n?.target??null)},`replay`,.6,6)}current(e){for(let t=this.queue.length-1;t>=0;--t)this.queue[t].expires<=e&&this.queue.splice(t,1);this.showing!==null&&e>=this.showing.end&&(this.lastEnd=this.showing.end,this.showing=null);let t=null;for(let n of this.queue)n.at>e||(t===null||n.line.priority>t.line.priority||n.line.priority===t.line.priority&&n.at=this.lastEnd+_d:t.line.urgent&&t.line.priority>n.line.priority&&e-n.start>=xd)&&(this.queue.splice(this.queue.indexOf(t),1),this.showing={line:t.line,start:e,end:e+t.line.hold,moment:t.moment,phases:t.phases},t.spoken!==null&&this.hooks.speak?.([t.spoken]))}let n=this.showing;return n===null?null:(this.caption.line=n.line,this.caption.opacity=Math.max(0,Math.min(1,(e-n.start)/vd,(n.end-e)/vd)),this.caption.entering=Math.max(0,1-(e-n.start)/vd),this.caption)}trackClock(e){e.phase===`fight`&&((this.lastPhase===`countdown`||this.lastPhase===`rest`)&&(this.roundLength={round:e.round_number,ticks:e.phase_ticks_remaining+1}),this.fightRemaining=e.phase_ticks_remaining),e.round_number!==this.round&&(this.round=e.round_number,this.tallies.clear())}stoppageClock(e){let t=this.roundLength;if(t===null||t.round!==e)return null;let n=Math.max(0,Math.floor((t.ticks-this.fightRemaining)/this.tickRate));return`${Math.floor(n/60)}:${String(n%60).padStart(2,`0`)}`}introduce(e,t){let n=e.phase_ticks_remaining/this.tickRate;if(n<1.2)return;let r=e.fighters.map(e=>this.nameOf(e.player_id)),i=e.fighters.map((e,t)=>({name:r[t],record:this.players[e.player_id]?.record,style:e.style})),a=$d([i[0],i[1]],n),o=Math.max(1.4,a.length===2?Zd(a[0]):n/2),s=[o,Math.max(1.4,n-o)];for(let n of[0,1]){let i=n===0?`blue`:`red`,c=this.players[e.fighters[n].player_id],l=lt(e.fighters[n].style),u=c===void 0?``:`${l===null?``:`${l} · `}${c.record===void 0?``:`${he(c.record)} · `}${c.cpu===!0?`COMPUTER`:`RATED ${c.rating}`}`;this.enqueue(this.announcement(`In the ${i} corner, ${r[n]}.`,{kicker:`IN THE ${i.toUpperCase()} CORNER`,title:r[n].toUpperCase(),detail:u,corner:n},s[n],97),t+n*o,null,30,Rd,a[n]??null)}}consider(e,t,n,r){let i=e.actor_id,a=e.target_id,o=`${e.tick}:${a??i??``}`,s={a:this.nameOf(i),b:this.nameOf(a)};switch(e.kind){case`punch_start`:i!==null&&(this.tally(i).thrown+=1);return;case`hit`:case`counter_hit`:i!==null&&a!==null&&!un(e,t.events)&&this.landed(e,i,a,t,r);return;case`stun`:{if(a===null)return;this.notesFor(a).stunnedAt=e.tick;let t=this.fighter(a),n=t!==void 0&&(t.poise=A-6);this.say(n?`hurtBadly`:`hurt`,e.event_id,r,s,o);return}case`guard_break`:this.say(`guardBreak`,e.event_id,r,s,o);return;case`knockdown`:{if(a===null||(this.lastKnockdown={actor:i,target:a,tick:e.tick},this.notesFor(a).knockedDownAt=e.tick,i!==null&&(this.tally(i).knockdowns+=1),n!==null))return;let c=t.events.some(t=>t.kind===`counter_hit`&&t.tick===e.tick&&t.target_id===a);this.say(e.amount>=2?`knockdownAgain`:e.detail===`body`?`knockdownBody`:c?`knockdownCounter`:`knockdown`,e.event_id,r,s,o);return}case`body_collapse`:this.say(`bodyCollapse`,e.event_id,r,s,o);return;case`parry`:this.say(`parried`,e.event_id,r,s,o,gd,void 0,i);return;case`eye_shut`:if(a===null||e.detail!==`left`&&e.detail!==`right`)return;this.notesFor(a).eyeShut[e.detail===`left`?0:1]=!0,this.say(`eyeShut`,e.event_id,r,{...s,side:e.detail},o);return;case`blind_side`:if(e.detail!==`left`&&e.detail!==`right`)return;this.say(`blindSide`,e.event_id,r,{...s,side:e.detail},null,gd,void 0,i);return;case`corner`:{let t=e.detail===`cut`?`cornerCut`:e.detail===`swelling`?`cornerSwelling`:e.detail===`breath`?`cornerBreath`:null;t!==null&&this.say(t,e.event_id,r,s,null,gd,void 0,i);return}case`count`:e.amount>=6&&this.struggleCalled!==this.lastKnockdown?.tick&&this.fighter(a)?.is_downed===!0&&(this.struggleCalled=this.lastKnockdown?.tick??e.tick,this.say(`struggle`,e.event_id,r,{a:this.nameOf(this.otherId(a)),b:this.nameOf(a)},Ld));return;case`get_up`:{for(let e=this.queue.length-1;e>=0;--e)this.queue[e].moment===Ld&&this.queue.splice(e,1);this.showing?.moment===Ld&&(this.showing.end=Math.min(this.showing.end,r+vd));let t={a:this.nameOf(this.otherId(i)),b:this.nameOf(i),n:Kd(e.amount)};this.say(e.amount>=8?`upLate`:`upEarly`,e.event_id,r,t,o),this.say(`finishCall`,e.event_id,r,t,null,3.4,4);return}case`perfect_block`:this.say(`parry`,e.event_id,r,s,o,gd,void 0,i);return;case`evade`:{if(i===null)return;let t=this.notesFor(i);t.evasions=t.evasions.filter(t=>t>e.tick-Od*this.tickRate),t.evasions.push(e.tick),(this.fighter(a)?.action_power===`power`||t.evasions.length>=3)&&this.say(`evade`,e.event_id,r,s,o,gd,void 0,i)&&(t.evasions.length=0);return}case`whiff`:{let t=this.fighter(i);if(t?.action_power!==`power`||t.action===null)return;this.say(`whiff`,e.event_id,r,{...s,punch:rf(`${t.action}:${t.action_target??`head`}`,t)},o,gd,void 0,i);return}case`clinch`:{if(i===null)return;let t=this.fighter(i),n=e.tick-this.notesFor(i).stunnedAt<=3*this.tickRate||t!==void 0&&t.poise<150;this.say(n?`holdingOn`:`clinch`,e.event_id,r,s,o,gd,void 0,i);return}case`referee_break`:this.say(`refBreak`,e.event_id,r,s,null,gd,void 0,`referee`);return;case`referee_hit`:this.say(`refHit`,e.event_id,r,s,o,gd,void 0,i);return;case`referee_down`:this.say(e.action_id===null?`refBledOut`:`refDown`,e.event_id,r,s,o);return;case`clinch_break`:this.say(`noRef`,e.event_id,r,s,null,gd);return;case`taunt`:this.say(`taunt`,e.event_id,r,{a:s.a,b:this.nameOf(this.otherId(i))},o,gd,void 0,i);return;case`foul`:this.say(e.detail===`headbutt`?`headbutt`:`lowBlow`,e.event_id,r,s,o),this.fighter(i)?.warnings===1&&this.say(`warning`,e.event_id,r,s,null,3.6,4);return;case`point_deduction`:this.say(`deduction`,e.event_id,r,s,`deduction:${e.tick}`);return;case`resume`:this.say(`resume`,e.event_id,r,s,null);return;case`box`:this.say(`box`,e.event_id,r,{a:this.nameOf(this.otherId(a)),b:this.nameOf(a)},o);return;case`stance`:this.say(e.detail===`southpaw`?`southpaw`:`orthodox`,e.event_id,r,s,null,gd,void 0,i);return;case`exhausted`:i!==null&&this.tired(i,e.event_id,r);return;case`bell`:e.detail===`round_start`?(this.tallies.clear(),t.round_number>=2&&this.say(`roundStart`,e.event_id,r,{r:t.round_number},null,gd,zd)):e.detail===`round_end`&&this.roundEnded(e,t,n,r);return;case`result`:this.resulted(e,r);return;default:return}}landed(e,t,n,r,i){let[a,o]=nf(e.detail),s=this.tally(t);s.landed+=1,s.damage+=e.amount,o===`body`&&(s.body+=1);let c=this.notesFor(t),l=this.notesFor(n);l.run=0,l.unanswered=0,c.run=e.tick-c.runTick<=Td?c.run+1:1,c.runTick=e.tick,c.unanswered+=1,c.window=c.window.filter(t=>t>e.tick-Dd*this.tickRate),c.window.push(e.tick);let u=`${e.tick}:${n}`,d=r.fighters.find(e=>e.player_id===t),f={a:this.nameOf(t),b:this.nameOf(n),punch:rf(e.detail,d)},p=d?.action_power===`power`&&d.action===a;if(e.kind===`counter_hit`&&e.amount>=40?this.say(`counter`,e.event_id,i,f,u,gd,void 0,t):(e.amount>=85||p&&o===`head`&&e.amount>=60)&&this.say(`bigShot`,e.event_id,i,f,u,gd,void 0,t),c.unanswered===5?this.say(`unanswered`,e.event_id,i,f,u,gd,void 0,t):c.run===3&&this.say(`combo`,e.event_id,i,f,u,gd,void 0,t),a===`jab`&&(c.jabs=c.jabs.filter(t=>t>e.tick-Ed*this.tickRate),c.jabs.push(e.tick),c.jabs.length>=3&&this.say(`jab`,e.event_id,i,f,null,gd,void 0,t)&&(c.jabs.length=0)),o===`body`){let a=this.fighter(n);a!==void 0&&s.body>=5&&a.staminat>e.tick-Dd*this.tickRate).length;c.window.length>=7&&m<=2&&c.takeoverRound!==r.round_number&&(c.takeoverRound=r.round_number,this.say(`takeover`,e.event_id,i,f,null,gd,void 0,t)&&this.hooks.cue?.(`chant`))}roundEnded(e,t,n,r){let i=t.round_number;if(n!==null){(n.detail===`decision`||n.detail===`draw`)&&this.say(`finalBell`,e.event_id,r,{},`bell`,gd,zd);return}let a=t.fighters.find(t=>{let n=this.notesFor(t.player_id);return t.stunned_ticks>0||t.poise({id:e.player_id,tally:this.tally(e.player_id)})),[c,l]=o.tally.landed>=s.tally.landed?[o,s]:[s,o];c.tally.thrown+l.tally.thrown>0&&this.sayAt(`summary`,e.event_id,r+2.4,{r:i,a:this.nameOf(c.id),x:c.tally.landed,y:c.tally.thrown,b:this.nameOf(l.id),z:l.tally.landed,w:l.tally.thrown},5);let u=(o.tally.knockdowns-s.tally.knockdowns)*1e3+(o.tally.damage-s.tally.damage)+6*(o.tally.landed-s.tally.landed),d=Math.abs(u)0?o:s;d!==null&&(this.notesFor(d.id).rounds+=1);let f=d===null?null:d===o?s:o,p=d===null||f===null?0:this.notesFor(d.id).rounds-this.notesFor(f.id).rounds,m=d===null?`roundClose`:o.tally.knockdowns===s.tally.knockdowns?i>=2&&p>=2?`pullingAway`:`roundFor`:`roundBig`;this.sayAt(m,e.event_id,r+6.4,{a:this.nameOf(d?.id??null),b:this.nameOf(f?.id??null)},5)}resulted(e,t){let n=Fd[e.detail];if(n===void 0||this.resultCalled)return;this.resultCalled=!0;let r=e.actor_id;this.say(n,e.event_id,t,{a:this.nameOf(r),b:this.nameOf(this.otherId(r))},`result`,0)}inspect(e,t){if(e.phase===`fight`)for(let n of e.fighters){let r=this.notesFor(n.player_id),i={a:this.nameOf(this.otherId(n.player_id)),b:this.nameOf(n.player_id)};for(let[a,o]of[[0,`left`],[1,`right`]]){let s=a===0?n.trauma.left_cut:n.trauma.right_cut,c=r.cutMarks[a];c=kd[c]&&(r.cutMarks[a]=kd.filter(e=>s>=e).length,this.say(c===0?`cut`:c===1?`cutWorse`:`cutGushing`,e.tick+a,t,{...i,side:o},null));let l=a===0?n.trauma.left_eye:n.trauma.right_eye;!r.eyeSwelling[a]&&!r.eyeShut[a]&&l>=Ad&&(r.eyeSwelling[a]=!0,this.say(`eyeSwelling`,e.tick+a,t,{...i,side:o},null))}let a=n.stamina/Math.max(1,n.maximum_stamina);a=2*this.tickRate&&this.tired(n.player_id,e.tick,t)):a>=Md&&(r.lowSince=null)}}tired(e,t,n){let r=this.notesFor(e);r.tiredRound!==this.round&&(r.tiredRound=this.round,this.say(`tiring`,t,n,{a:this.nameOf(this.otherId(e)),b:this.nameOf(e)},null))}say(e,t,n,r,i,a=gd,o,s){let c=Wd[e],l=`${e}:${s??``}`;if(c!==void 0){if(n<(this.cooldowns.get(l)??-1/0))return!1;this.cooldowns.set(l,n+c)}let u=ef(this.choose(e,t),r),d={speaker:Ud[e]??`play`,text:u,priority:Hd[e],urgent:Bd.has(e),hold:lf(u),card:null};return this.enqueue(d,n+a,i,o,Id[e]??null)}sayAt(e,t,n,r,i){let a=ef(this.choose(e,t),r);this.enqueue({speaker:Ud[e]??`play`,text:a,priority:Hd[e],urgent:Bd.has(e),hold:lf(a),card:null},n,null,i)}announcement(e,t,n,r){return{speaker:`announcer`,text:e,priority:r,urgent:!0,hold:n,card:t}}choose(e,t){let n=Pd[e],r=this.refereeDead&&Vd.has(e)?n.filter(e=>!/referee/iu.test(e)):n,i=tf(t,e.length*31+e.charCodeAt(0))%r.length;return r.length>1&&this.lastChoice.get(e)===i&&(i=(i+1)%r.length),this.lastChoice.set(e,i),r[i]}enqueue(e,t,n,r,i=null,a=null){if(n!==null){if(this.queue.some(t=>t.moment===n&&t.line.priority>=e.priority)||this.showing?.moment===n&&this.showing.line.priority>=e.priority)return!1;for(let e=this.queue.length-1;e>=0;--e)this.queue[e].moment===n&&this.queue.splice(e,1)}if(this.queue.push({line:e,at:t,expires:t+(r??(e.urgent?bd:yd)),moment:n,phases:i,spoken:a}),this.queue.length>Sd){let e=0;for(let t=1;tt.player_id===e)}otherId(e){let t=this.fighters;return t===null||e===null?null:t[0].player_id===e?t[1].player_id:t[1].player_id===e?t[0].player_id:null}seatOf(e){let t=this.fighters?.findIndex(t=>t.player_id===e)??-1;return t===0||t===1?t:null}nameOf(e){if(e===null)return`the fighter`;let t=this.players[e]?.name;if(t!==void 0&&t.trim().length>0)return t.trim();let n=this.seatOf(e);return n===0?`the blue corner`:n===1?`the red corner`:`the fighter`}};function lf(e){return Math.min(5.2,Math.max(2.2,1.4+e.length*.05))}var uf=`attached`,df=1e3,ff=1001,pf=1002,mf=1003,hf=1004,gf=1005,_f=1006,vf=1007,yf=1008,bf=1009,xf=1010,Sf=1011,Cf=1012,wf=1013,Tf=1014,Ef=1015,Df=1016,Of=1017,kf=1018,Af=1020,jf=35902,Mf=35899,Nf=1021,Pf=1022,Ff=1023,If=1026,Lf=1027,Rf=1028,zf=1029,Bf=1030,Vf=1031,Hf=1033,Uf=33776,Wf=33777,Gf=33778,Kf=33779,qf=35840,Jf=35841,Yf=35842,Xf=35843,Zf=36196,Qf=37492,$f=37496,ep=37488,tp=37489,np=37490,rp=37491,ip=37808,ap=37809,op=37810,sp=37811,cp=37812,lp=37813,up=37814,dp=37815,fp=37816,pp=37817,mp=37818,hp=37819,gp=37820,_p=37821,vp=36492,yp=36494,bp=36495,xp=36283,Sp=36284,Cp=36285,wp=36286,Tp=2300,Ep=2301,Dp=2302,Op=2303,kp=2400,Ap=2401,jp=2402,Mp=2500,Np=3200,Pp=`srgb`,Fp=`srgb-linear`,Ip=`linear`,Lp=`srgb`,Rp=7680,zp=35044,Bp=35048,Vp=2e3;function Hp(e){for(let t=e.length-1;t>=0;--t)if(e[t]>=65535)return!0;return!1}function Up(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function Wp(e){return document.createElementNS(`http://www.w3.org/1999/xhtml`,e)}function Gp(){let e=Wp(`canvas`);return e.style.display=`block`,e}var Kp={};function qp(...e){let t=`THREE.`+e.shift();console.log(t,...e)}function Jp(e){let t=e[0];if(typeof t==`string`&&t.startsWith(`TSL:`)){let t=e[1];t&&t.isStackTrace?e[0]+=` `+t.getLocation():e[1]=`Stack trace not available. Enable "THREE.Node.captureStackTrace" to capture stack traces.`}return e}function Yp(...e){e=Jp(e);let t=`THREE.`+e.shift();{let n=e[0];n&&n.isStackTrace?console.warn(n.getError(t)):console.warn(t,...e)}}function Xp(...e){e=Jp(e);let t=`THREE.`+e.shift();{let n=e[0];n&&n.isStackTrace?console.error(n.getError(t)):console.error(t,...e)}}function Zp(...e){let t=e.join(` `);t in Kp||(Kp[t]=!0,Yp(...e))}function Qp(e,t,n){return new Promise(function(r,i){function a(){switch(e.clientWaitSync(t,e.SYNC_FLUSH_COMMANDS_BIT,0)){case e.WAIT_FAILED:i();break;case e.TIMEOUT_EXPIRED:setTimeout(a,n);break;default:r()}}setTimeout(a,n)})}var $p={0:1,2:6,4:7,3:5,1:0,6:2,7:4,5:3},em=class{addEventListener(e,t){this._listeners===void 0&&(this._listeners={});let n=this._listeners;n[e]===void 0&&(n[e]=[]),n[e].indexOf(t)===-1&&n[e].push(t)}hasEventListener(e,t){let n=this._listeners;return n!==void 0&&n[e]!==void 0&&n[e].indexOf(t)!==-1}removeEventListener(e,t){let n=this._listeners;if(n===void 0)return;let r=n[e];if(r!==void 0){let e=r.indexOf(t);e!==-1&&r.splice(e,1)}}dispatchEvent(e){let t=this._listeners;if(t===void 0)return;let n=t[e.type];if(n!==void 0){e.target=this;let t=n.slice(0);for(let n=0,r=t.length;n>8&255]+tm[e>>16&255]+tm[e>>24&255]+`-`+tm[t&255]+tm[t>>8&255]+`-`+tm[t>>16&15|64]+tm[t>>24&255]+`-`+tm[n&63|128]+tm[n>>8&255]+`-`+tm[n>>16&255]+tm[n>>24&255]+tm[r&255]+tm[r>>8&255]+tm[r>>16&255]+tm[r>>24&255]).toLowerCase()}function om(e,t,n){return Math.max(t,Math.min(n,e))}function sm(e,t){return(e%t+t)%t}function cm(e,t,n,r,i){return r+(e-t)*(i-r)/(n-t)}function lm(e,t,n){return e===t?0:(n-e)/(t-e)}function um(e,t,n){return(1-n)*e+n*t}function dm(e,t,n,r){return um(e,t,1-Math.exp(-n*r))}function fm(e,t=1){return t-Math.abs(sm(e,t*2)-t)}function pm(e,t,n){return e<=t?0:e>=n?1:(e=(e-t)/(n-t),e*e*(3-2*e))}function mm(e,t,n){return e<=t?0:e>=n?1:(e=(e-t)/(n-t),e*e*e*(e*(e*6-15)+10))}function hm(e,t){return e+Math.floor(Math.random()*(t-e+1))}function gm(e,t){return e+Math.random()*(t-e)}function _m(e){return e*(.5-Math.random())}function vm(e){e!==void 0&&(nm=e);let t=nm+=1831565813;return t=Math.imul(t^t>>>15,t|1),t^=t+Math.imul(t^t>>>7,t|61),((t^t>>>14)>>>0)/4294967296}function ym(e){return e*rm}function bm(e){return e*im}function xm(e){return e>0&&Number.isInteger(e)&&2**Math.round(Math.log2(e))===e}function Sm(e){return 2**Math.ceil(Math.log(e)/Math.LN2)}function Cm(e){return 2**Math.floor(Math.log(e)/Math.LN2)}function wm(e,t,n,r,i){let a=Math.cos,o=Math.sin,s=a(n/2),c=o(n/2),l=a((t+r)/2),u=o((t+r)/2),d=a((t-r)/2),f=o((t-r)/2),p=a((r-t)/2),m=o((r-t)/2);switch(i){case`XYX`:e.set(s*u,c*d,c*f,s*l);break;case`YZY`:e.set(c*f,s*u,c*d,s*l);break;case`ZXZ`:e.set(c*d,c*f,s*u,s*l);break;case`XZX`:e.set(s*u,c*m,c*p,s*l);break;case`YXY`:e.set(c*p,s*u,c*m,s*l);break;case`ZYZ`:e.set(c*m,c*p,s*u,s*l);break;default:Yp(`MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: `+i)}}function Tm(e,t){switch(t.constructor){case Float32Array:return e;case Uint32Array:return e/4294967295;case Uint16Array:return e/65535;case Uint8Array:case Uint8ClampedArray:return e/255;case Int32Array:return Math.max(e/2147483647,-1);case Int16Array:return Math.max(e/32767,-1);case Int8Array:return Math.max(e/127,-1);default:throw Error(`THREE.MathUtils: Invalid component type.`)}}function Em(e,t){switch(t.constructor){case Float32Array:return e;case Uint32Array:return Math.round(e*4294967295);case Uint16Array:return Math.round(e*65535);case Uint8Array:case Uint8ClampedArray:return Math.round(e*255);case Int32Array:return Math.round(e*2147483647);case Int16Array:return Math.round(e*32767);case Int8Array:return Math.round(e*127);default:throw Error(`THREE.MathUtils: Invalid component type.`)}}var K={DEG2RAD:rm,RAD2DEG:im,generateUUID:am,clamp:om,euclideanModulo:sm,mapLinear:cm,inverseLerp:lm,lerp:um,damp:dm,pingpong:fm,smoothstep:pm,smootherstep:mm,randInt:hm,randFloat:gm,randFloatSpread:_m,seededRandom:vm,degToRad:ym,radToDeg:bm,isPowerOfTwo:xm,ceilPowerOfTwo:Sm,floorPowerOfTwo:Cm,setQuaternionFromProperEuler:wm,normalize:Em,denormalize:Tm},q=class e{static{e.prototype.isVector2=!0}constructor(e=0,t=0){this.x=e,this.y=t}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,t){return this.x=e,this.y=t,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw Error(`THREE.Vector2: index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw Error(`THREE.Vector2: index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){let t=this.x,n=this.y,r=e.elements;return this.x=r[0]*t+r[3]*n+r[6],this.y=r[1]*t+r[4]*n+r[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,t){return this.x=om(this.x,e.x,t.x),this.y=om(this.y,e.y,t.y),this}clampScalar(e,t){return this.x=om(this.x,e,t),this.y=om(this.y,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(om(n,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let n=this.dot(e)/t;return Math.acos(om(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y;return t*t+n*n}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this}rotateAround(e,t){let n=Math.cos(t),r=Math.sin(t),i=this.x-e.x,a=this.y-e.y;return this.x=i*n-a*r+e.x,this.y=i*r+a*n+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}},Dm=class{constructor(e=0,t=0,n=0,r=1){this.isQuaternion=!0,this._x=e,this._y=t,this._z=n,this._w=r}static slerpFlat(e,t,n,r,i,a,o){let s=n[r+0],c=n[r+1],l=n[r+2],u=n[r+3],d=i[a+0],f=i[a+1],p=i[a+2],m=i[a+3];if(u!==m||s!==d||c!==f||l!==p){let e=s*d+c*f+l*p+u*m;e<0&&(d=-d,f=-f,p=-p,m=-m,e=-e);let t=1-o;if(e<.9995){let n=Math.acos(e),r=Math.sin(n);t=Math.sin(t*n)/r,o=Math.sin(o*n)/r,s=s*t+d*o,c=c*t+f*o,l=l*t+p*o,u=u*t+m*o}else{s=s*t+d*o,c=c*t+f*o,l=l*t+p*o,u=u*t+m*o;let e=1/Math.sqrt(s*s+c*c+l*l+u*u);s*=e,c*=e,l*=e,u*=e}}e[t]=s,e[t+1]=c,e[t+2]=l,e[t+3]=u}static multiplyQuaternionsFlat(e,t,n,r,i,a){let o=n[r],s=n[r+1],c=n[r+2],l=n[r+3],u=i[a],d=i[a+1],f=i[a+2],p=i[a+3];return e[t]=o*p+l*u+s*f-c*d,e[t+1]=s*p+l*d+c*u-o*f,e[t+2]=c*p+l*f+o*d-s*u,e[t+3]=l*p-o*u-s*d-c*f,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,t,n,r){return this._x=e,this._y=t,this._z=n,this._w=r,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,t=!0){let n=e._x,r=e._y,i=e._z,a=e._order,o=Math.cos,s=Math.sin,c=o(n/2),l=o(r/2),u=o(i/2),d=s(n/2),f=s(r/2),p=s(i/2);switch(a){case`XYZ`:this._x=d*l*u+c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u-d*f*p;break;case`YXZ`:this._x=d*l*u+c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u+d*f*p;break;case`ZXY`:this._x=d*l*u-c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u-d*f*p;break;case`ZYX`:this._x=d*l*u-c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u+d*f*p;break;case`YZX`:this._x=d*l*u+c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u-d*f*p;break;case`XZY`:this._x=d*l*u-c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u+d*f*p;break;default:Yp(`Quaternion: .setFromEuler() encountered an unknown order: `+a)}return t===!0&&this._onChangeCallback(),this}setFromAxisAngle(e,t){let n=t/2,r=Math.sin(n);return this._x=e.x*r,this._y=e.y*r,this._z=e.z*r,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(e){let t=e.elements,n=t[0],r=t[4],i=t[8],a=t[1],o=t[5],s=t[9],c=t[2],l=t[6],u=t[10],d=n+o+u;if(d>0){let e=.5/Math.sqrt(d+1);this._w=.25/e,this._x=(l-s)*e,this._y=(i-c)*e,this._z=(a-r)*e}else if(n>o&&n>u){let e=2*Math.sqrt(1+n-o-u);this._w=(l-s)/e,this._x=.25*e,this._y=(r+a)/e,this._z=(i+c)/e}else if(o>u){let e=2*Math.sqrt(1+o-n-u);this._w=(i-c)/e,this._x=(r+a)/e,this._y=.25*e,this._z=(s+l)/e}else{let e=2*Math.sqrt(1+u-n-o);this._w=(a-r)/e,this._x=(i+c)/e,this._y=(s+l)/e,this._z=.25*e}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let n=e.dot(t)+1;return n<1e-8?(n=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=n):(this._x=0,this._y=-e.z,this._z=e.y,this._w=n)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x,this._w=n),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(om(this.dot(e),-1,1)))}rotateTowards(e,t){let n=this.angleTo(e);if(n===0)return this;let r=Math.min(1,t/n);return this.slerp(e,r),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return e===0?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x*=e,this._y*=e,this._z*=e,this._w*=e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){let n=e._x,r=e._y,i=e._z,a=e._w,o=t._x,s=t._y,c=t._z,l=t._w;return this._x=n*l+a*o+r*c-i*s,this._y=r*l+a*s+i*o-n*c,this._z=i*l+a*c+n*s-r*o,this._w=a*l-n*o-r*s-i*c,this._onChangeCallback(),this}slerp(e,t){let n=e._x,r=e._y,i=e._z,a=e._w,o=this.dot(e);o<0&&(n=-n,r=-r,i=-i,a=-a,o=-o);let s=1-t;if(o<.9995){let e=Math.acos(o),c=Math.sin(e);s=Math.sin(s*e)/c,t=Math.sin(t*e)/c,this._x=this._x*s+n*t,this._y=this._y*s+r*t,this._z=this._z*s+i*t,this._w=this._w*s+a*t,this._onChangeCallback()}else this._x=this._x*s+n*t,this._y=this._y*s+r*t,this._z=this._z*s+i*t,this._w=this._w*s+a*t,this.normalize();return this}slerpQuaternions(e,t,n){return this.copy(e).slerp(t,n)}random(){let e=2*Math.PI*Math.random(),t=2*Math.PI*Math.random(),n=Math.random(),r=Math.sqrt(1-n),i=Math.sqrt(n);return this.set(r*Math.sin(e),r*Math.cos(e),i*Math.sin(t),i*Math.cos(t))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}fromBufferAttribute(e,t){return this._x=e.getX(t),this._y=e.getY(t),this._z=e.getZ(t),this._w=e.getW(t),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}},J=class e{static{e.prototype.isVector3=!0}constructor(e=0,t=0,n=0){this.x=e,this.y=t,this.z=n}set(e,t,n){return n===void 0&&(n=this.z),this.x=e,this.y=t,this.z=n,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw Error(`THREE.Vector3: index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error(`THREE.Vector3: index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return this.applyQuaternion(km.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(km.setFromAxisAngle(e,t))}applyMatrix3(e){let t=this.x,n=this.y,r=this.z,i=e.elements;return this.x=i[0]*t+i[3]*n+i[6]*r,this.y=i[1]*t+i[4]*n+i[7]*r,this.z=i[2]*t+i[5]*n+i[8]*r,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){let t=this.x,n=this.y,r=this.z,i=e.elements,a=1/(i[3]*t+i[7]*n+i[11]*r+i[15]);return this.x=(i[0]*t+i[4]*n+i[8]*r+i[12])*a,this.y=(i[1]*t+i[5]*n+i[9]*r+i[13])*a,this.z=(i[2]*t+i[6]*n+i[10]*r+i[14])*a,this}applyQuaternion(e){let t=this.x,n=this.y,r=this.z,i=e.x,a=e.y,o=e.z,s=e.w,c=2*(a*r-o*n),l=2*(o*t-i*r),u=2*(i*n-a*t);return this.x=t+s*c+a*u-o*l,this.y=n+s*l+o*c-i*u,this.z=r+s*u+i*l-a*c,this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){let t=this.x,n=this.y,r=this.z,i=e.elements;return this.x=i[0]*t+i[4]*n+i[8]*r,this.y=i[1]*t+i[5]*n+i[9]*r,this.z=i[2]*t+i[6]*n+i[10]*r,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=om(this.x,e.x,t.x),this.y=om(this.y,e.y,t.y),this.z=om(this.z,e.z,t.z),this}clampScalar(e,t){return this.x=om(this.x,e,t),this.y=om(this.y,e,t),this.z=om(this.z,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(om(n,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this.z=e.z+(t.z-e.z)*n,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){let n=e.x,r=e.y,i=e.z,a=t.x,o=t.y,s=t.z;return this.x=r*s-i*o,this.y=i*a-n*s,this.z=n*o-r*a,this}projectOnVector(e){let t=e.lengthSq();if(t===0)return this.set(0,0,0);let n=e.dot(this)/t;return this.copy(e).multiplyScalar(n)}projectOnPlane(e){return Om.copy(this).projectOnVector(e),this.sub(Om)}reflect(e){return this.sub(Om.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let n=this.dot(e)/t;return Math.acos(om(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y,r=this.z-e.z;return t*t+n*n+r*r}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,t,n){let r=Math.sin(t)*e;return this.x=r*Math.sin(n),this.y=Math.cos(t)*e,this.z=r*Math.cos(n),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,n){return this.x=e*Math.sin(t),this.y=n,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){let t=this.setFromMatrixColumn(e,0).length(),n=this.setFromMatrixColumn(e,1).length(),r=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=n,this.z=r,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,t*4)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,t*3)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}setFromColor(e){return this.x=e.r,this.y=e.g,this.z=e.b,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){let e=Math.random()*Math.PI*2,t=Math.random()*2-1,n=Math.sqrt(1-t*t);return this.x=n*Math.cos(e),this.y=t,this.z=n*Math.sin(e),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}},Om=new J,km=new Dm,Am=class e{static{e.prototype.isMatrix3=!0}constructor(e,t,n,r,i,a,o,s,c){this.elements=[1,0,0,0,1,0,0,0,1],e!==void 0&&this.set(e,t,n,r,i,a,o,s,c)}set(e,t,n,r,i,a,o,s,c){let l=this.elements;return l[0]=e,l[1]=r,l[2]=o,l[3]=t,l[4]=i,l[5]=s,l[6]=n,l[7]=a,l[8]=c,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){let t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],this}extractBasis(e,t,n){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(e){let t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let n=e.elements,r=t.elements,i=this.elements,a=n[0],o=n[3],s=n[6],c=n[1],l=n[4],u=n[7],d=n[2],f=n[5],p=n[8],m=r[0],h=r[3],g=r[6],_=r[1],v=r[4],y=r[7],b=r[2],x=r[5],S=r[8];return i[0]=a*m+o*_+s*b,i[3]=a*h+o*v+s*x,i[6]=a*g+o*y+s*S,i[1]=c*m+l*_+u*b,i[4]=c*h+l*v+u*x,i[7]=c*g+l*y+u*S,i[2]=d*m+f*_+p*b,i[5]=d*h+f*v+p*x,i[8]=d*g+f*y+p*S,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this}determinant(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8];return t*a*l-t*o*c-n*i*l+n*o*s+r*i*c-r*a*s}invert(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8],u=l*a-o*c,d=o*s-l*i,f=c*i-a*s,p=t*u+n*d+r*f;if(p===0)return this.set(0,0,0,0,0,0,0,0,0);let m=1/p;return e[0]=u*m,e[1]=(r*c-l*n)*m,e[2]=(o*n-r*a)*m,e[3]=d*m,e[4]=(l*t-r*s)*m,e[5]=(r*i-o*t)*m,e[6]=f*m,e[7]=(n*s-c*t)*m,e[8]=(a*t-n*i)*m,this}transpose(){let e,t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){let t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this}setUvTransform(e,t,n,r,i,a,o){let s=Math.cos(i),c=Math.sin(i);return this.set(n*s,n*c,-n*(s*a+c*o)+a+e,-r*c,r*s,-r*(-c*a+s*o)+o+t,0,0,1),this}scale(e,t){return Zp(`Matrix3: .scale() is deprecated. Use .makeScale() instead.`),this.premultiply(jm.makeScale(e,t)),this}rotate(e){return Zp(`Matrix3: .rotate() is deprecated. Use .makeRotation() instead.`),this.premultiply(jm.makeRotation(-e)),this}translate(e,t){return Zp(`Matrix3: .translate() is deprecated. Use .makeTranslation() instead.`),this.premultiply(jm.makeTranslation(e,t)),this}makeTranslation(e,t){return e.isVector2?this.set(1,0,e.x,0,1,e.y,0,0,1):this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,n,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}equals(e){let t=this.elements,n=e.elements;for(let e=0;e<9;e++)if(t[e]!==n[e])return!1;return!0}fromArray(e,t=0){for(let n=0;n<9;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){let n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e}clone(){return new this.constructor().fromArray(this.elements)}},jm=new Am,Mm=new Am().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),Nm=new Am().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function Pm(){let e={enabled:!0,workingColorSpace:Fp,spaces:{},convert:function(e,t,n){return this.enabled===!1||t===n||!t||!n?e:(this.spaces[t].transfer===`srgb`&&(e.r=Im(e.r),e.g=Im(e.g),e.b=Im(e.b)),this.spaces[t].primaries!==this.spaces[n].primaries&&(e.applyMatrix3(this.spaces[t].toXYZ),e.applyMatrix3(this.spaces[n].fromXYZ)),this.spaces[n].transfer===`srgb`&&(e.r=Lm(e.r),e.g=Lm(e.g),e.b=Lm(e.b)),e)},workingToColorSpace:function(e,t){return this.convert(e,this.workingColorSpace,t)},colorSpaceToWorking:function(e,t){return this.convert(e,t,this.workingColorSpace)},getPrimaries:function(e){return this.spaces[e].primaries},getTransfer:function(e){return e===``?Ip:this.spaces[e].transfer},getToneMappingMode:function(e){return this.spaces[e].outputColorSpaceConfig.toneMappingMode||`standard`},getLuminanceCoefficients:function(e,t=this.workingColorSpace){return e.fromArray(this.spaces[t].luminanceCoefficients)},define:function(e){Object.assign(this.spaces,e)},_getMatrix:function(e,t,n){return e.copy(this.spaces[t].toXYZ).multiply(this.spaces[n].fromXYZ)},_getDrawingBufferColorSpace:function(e){return this.spaces[e].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(e=this.workingColorSpace){return this.spaces[e].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(t,n){return Zp(`ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace().`),e.workingToColorSpace(t,n)},toWorkingColorSpace:function(t,n){return Zp(`ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking().`),e.colorSpaceToWorking(t,n)}},t=[.64,.33,.3,.6,.15,.06],n=[.2126,.7152,.0722],r=[.3127,.329];return e.define({[Fp]:{primaries:t,whitePoint:r,transfer:Ip,toXYZ:Mm,fromXYZ:Nm,luminanceCoefficients:n,workingColorSpaceConfig:{unpackColorSpace:Pp},outputColorSpaceConfig:{drawingBufferColorSpace:Pp}},[Pp]:{primaries:t,whitePoint:r,transfer:Lp,toXYZ:Mm,fromXYZ:Nm,luminanceCoefficients:n,outputColorSpaceConfig:{drawingBufferColorSpace:Pp}}}),e}var Fm=Pm();function Im(e){return e<.04045?e*.0773993808:(e*.9478672986+.0521327014)**2.4}function Lm(e){return e<.0031308?e*12.92:1.055*e**.41666-.055}var Rm,zm=class{static getDataURL(e,t=`image/png`){if(/^data:/i.test(e.src)||typeof HTMLCanvasElement>`u`)return e.src;let n;if(e instanceof HTMLCanvasElement)n=e;else{Rm===void 0&&(Rm=Wp(`canvas`)),Rm.width=e.width,Rm.height=e.height;let t=Rm.getContext(`2d`);e instanceof ImageData?t.putImageData(e,0,0):t.drawImage(e,0,0,e.width,e.height),n=Rm}return n.toDataURL(t)}static sRGBToLinear(e){if(typeof HTMLImageElement<`u`&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<`u`&&e instanceof HTMLCanvasElement||typeof ImageBitmap<`u`&&e instanceof ImageBitmap){let t=Wp(`canvas`);t.width=e.width,t.height=e.height;let n=t.getContext(`2d`);n.drawImage(e,0,0,e.width,e.height);let r=n.getImageData(0,0,e.width,e.height),i=r.data;for(let e=0;e1),this.pmremVersion=0,this.normalized=!1}get width(){return this.source.getSize(Wm).x}get height(){return this.source.getSize(Wm).y}get depth(){return this.source.getSize(Wm).z}get image(){return this.source.data}set image(e){this.source.data=e}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return new this.constructor().copy(this)}copy(e){return this.name=e.name,this.source=e.source,this.mipmaps=e.mipmaps.slice(0),this.mapping=e.mapping,this.channel=e.channel,this.wrapS=e.wrapS,this.wrapT=e.wrapT,this.magFilter=e.magFilter,this.minFilter=e.minFilter,this.anisotropy=e.anisotropy,this.format=e.format,this.internalFormat=e.internalFormat,this.type=e.type,this.normalized=e.normalized,this.offset.copy(e.offset),this.repeat.copy(e.repeat),this.center.copy(e.center),this.rotation=e.rotation,this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrix.copy(e.matrix),this.generateMipmaps=e.generateMipmaps,this.premultiplyAlpha=e.premultiplyAlpha,this.flipY=e.flipY,this.unpackAlignment=e.unpackAlignment,this.colorSpace=e.colorSpace,this.renderTarget=e.renderTarget,this.isRenderTargetTexture=e.isRenderTargetTexture,this.isArrayTexture=e.isArrayTexture,this.userData=JSON.parse(JSON.stringify(e.userData)),this.needsUpdate=!0,this}setValues(e){for(let t in e){let n=e[t];if(n===void 0){Yp(`Texture.setValues(): parameter '${t}' has value of undefined.`);continue}let r=this[t];if(r===void 0){Yp(`Texture.setValues(): property '${t}' does not exist.`);continue}r&&n&&r.isVector2&&n.isVector2||r&&n&&r.isVector3&&n.isVector3||r&&n&&r.isMatrix3&&n.isMatrix3?r.copy(n):this[t]=n}}toJSON(e){let t=e===void 0||typeof e==`string`;if(!t&&e.textures[this.uuid]!==void 0)return e.textures[this.uuid];let n={metadata:{version:4.7,type:`Texture`,generator:`Texture.toJSON`},uuid:this.uuid,name:this.name,image:this.source.toJSON(e).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,normalized:this.normalized,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(n.userData=this.userData),t||(e.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:`dispose`})}transformUv(e){if(this.mapping!==300)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case df:e.x-=Math.floor(e.x);break;case ff:e.x=e.x<0?0:1;break;case pf:Math.abs(Math.floor(e.x)%2)===1?e.x=Math.ceil(e.x)-e.x:e.x-=Math.floor(e.x);break}if(e.y<0||e.y>1)switch(this.wrapT){case df:e.y-=Math.floor(e.y);break;case ff:e.y=e.y<0?0:1;break;case pf:Math.abs(Math.floor(e.y)%2)===1?e.y=Math.ceil(e.y)-e.y:e.y-=Math.floor(e.y);break}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){e===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(e){e===!0&&this.pmremVersion++}};Gm.DEFAULT_IMAGE=null,Gm.DEFAULT_MAPPING=300,Gm.DEFAULT_ANISOTROPY=1;var Km=class e{static{e.prototype.isVector4=!0}constructor(e=0,t=0,n=0,r=1){this.x=e,this.y=t,this.z=n,this.w=r}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,t,n,r){return this.x=e,this.y=t,this.z=n,this.w=r,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw Error(`THREE.Vector4: index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error(`THREE.Vector4: index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w===void 0?1:e.w,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){let t=this.x,n=this.y,r=this.z,i=this.w,a=e.elements;return this.x=a[0]*t+a[4]*n+a[8]*r+a[12]*i,this.y=a[1]*t+a[5]*n+a[9]*r+a[13]*i,this.z=a[2]*t+a[6]*n+a[10]*r+a[14]*i,this.w=a[3]*t+a[7]*n+a[11]*r+a[15]*i,this}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this.w/=e.w,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);let t=Math.sqrt(1-e.w*e.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t),this}setAxisAngleFromRotationMatrix(e){let t,n,r,i,a=.01,o=.1,s=e.elements,c=s[0],l=s[4],u=s[8],d=s[1],f=s[5],p=s[9],m=s[2],h=s[6],g=s[10];if(Math.abs(l-d)s&&e>_?e_?s1);this.dispose()}this.viewport.set(0,0,e,t),this.scissor.set(0,0,e,t)}clone(){return new this.constructor().copy(this)}copy(e){this.width=e.width,this.height=e.height,this.depth=e.depth,this.scissor.copy(e.scissor),this.scissorTest=e.scissorTest,this.viewport.copy(e.viewport),this.textures.length=0;for(let t=0,n=e.textures.length;t>>0}enable(e){this.mask|=1<1){for(let e=0;e1){for(let e=0;e0&&(r.userData=this.userData),r.layers=this.layers.mask,r.matrix=this.matrix.toArray(),r.up=this.up.toArray(),this.pivot!==null&&(r.pivot=this.pivot.toArray()),this.morphTargetDictionary!==void 0&&(r.morphTargetDictionary=Object.assign({},this.morphTargetDictionary)),this.morphTargetInfluences!==void 0&&(r.morphTargetInfluences=this.morphTargetInfluences.slice()),this.isInstancedMesh&&(r.type=`InstancedMesh`,r.count=this.count,r.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(r.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(r.type=`BatchedMesh`,r.perObjectFrustumCulled=this.perObjectFrustumCulled,r.sortObjects=this.sortObjects,r.drawRanges=this._drawRanges,r.reservedRanges=this._reservedRanges,r.geometryInfo=this._geometryInfo.map(e=>({...e,boundingBox:e.boundingBox?e.boundingBox.toJSON():void 0,boundingSphere:e.boundingSphere?e.boundingSphere.toJSON():void 0})),r.instanceInfo=this._instanceInfo.map(e=>({...e})),r.availableInstanceIds=this._availableInstanceIds.slice(),r.availableGeometryIds=this._availableGeometryIds.slice(),r.nextIndexStart=this._nextIndexStart,r.nextVertexStart=this._nextVertexStart,r.geometryCount=this._geometryCount,r.maxInstanceCount=this._maxInstanceCount,r.maxVertexCount=this._maxVertexCount,r.maxIndexCount=this._maxIndexCount,r.geometryInitialized=this._geometryInitialized,r.matricesTexture=this._matricesTexture.toJSON(e),r.indirectTexture=this._indirectTexture.toJSON(e),this._colorsTexture!==null&&(r.colorsTexture=this._colorsTexture.toJSON(e)),this.boundingSphere!==null&&(r.boundingSphere=this.boundingSphere.toJSON()),this.boundingBox!==null&&(r.boundingBox=this.boundingBox.toJSON()));function i(t,n){return t[n.uuid]===void 0&&(t[n.uuid]=n.toJSON(e)),n.uuid}if(this.isScene)this.background&&(this.background.isColor?r.background=this.background.toJSON():this.background.isTexture&&(r.background=this.background.toJSON(e).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(r.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){r.geometry=i(e.geometries,this.geometry);let t=this.geometry.parameters;if(t!==void 0&&t.shapes!==void 0){let n=t.shapes;if(Array.isArray(n))for(let t=0,r=n.length;t0){r.children=[];for(let t=0;t0){r.animations=[];for(let t=0;t0&&(n.geometries=t),r.length>0&&(n.materials=r),i.length>0&&(n.textures=i),o.length>0&&(n.images=o),s.length>0&&(n.shapes=s),c.length>0&&(n.skeletons=c),l.length>0&&(n.animations=l),u.length>0&&(n.nodes=u)}return n.object=r,n;function a(e){let t=[];for(let n in e){let r=e[n];delete r.metadata,t.push(r)}return t}}clone(e){return new this.constructor().copy(this,e)}copy(e,t=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.pivot=e.pivot===null?null:e.pivot.clone(),this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.static=e.static,this.animations=e.animations.slice(),this.userData=JSON.parse(JSON.stringify(e.userData)),t===!0)for(let t=0;t.025?(c.inputState.pinching=!1,this.dispatchEvent({type:`pinchend`,handedness:e.handedness,target:this})):!c.inputState.pinching&&o<=.015&&(c.inputState.pinching=!0,this.dispatchEvent({type:`pinchstart`,handedness:e.handedness,target:this}))}else s!==null&&e.gripSpace&&(i=t.getPose(e.gripSpace,n),i!==null&&(s.matrix.fromArray(i.transform.matrix),s.matrix.decompose(s.position,s.rotation,s.scale),s.matrixWorldNeedsUpdate=!0,i.linearVelocity?(s.hasLinearVelocity=!0,s.linearVelocity.copy(i.linearVelocity)):s.hasLinearVelocity=!1,i.angularVelocity?(s.hasAngularVelocity=!0,s.angularVelocity.copy(i.angularVelocity)):s.hasAngularVelocity=!1,s.eventsEnabled&&s.dispatchEvent({type:`gripUpdated`,data:e,target:this})));o!==null&&(r=t.getPose(e.targetRaySpace,n),r===null&&i!==null&&(r=i),r!==null&&(o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.matrixWorldNeedsUpdate=!0,r.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(r.linearVelocity)):o.hasLinearVelocity=!1,r.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(r.angularVelocity)):o.hasAngularVelocity=!1,this.dispatchEvent(Eh)))}return o!==null&&(o.visible=r!==null),s!==null&&(s.visible=i!==null),c!==null&&(c.visible=a!==null),this}_getHandJoint(e,t){if(e.joints[t.jointName]===void 0){let n=new Th;n.matrixAutoUpdate=!1,n.visible=!1,e.joints[t.jointName]=n,e.add(n)}return e.joints[t.jointName]}},Oh={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},kh={h:0,s:0,l:0},Ah={h:0,s:0,l:0};function jh(e,t,n){return n<0&&(n+=1),n>1&&--n,n<1/6?e+(t-e)*6*n:n<1/2?t:n<2/3?e+(t-e)*6*(2/3-n):e}var Y=class{constructor(e,t,n){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(e,t,n)}set(e,t,n){if(t===void 0&&n===void 0){let t=e;t&&t.isColor?this.copy(t):typeof t==`number`?this.setHex(t):typeof t==`string`&&this.setStyle(t)}else this.setRGB(e,t,n);return this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,t=Pp){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(e&255)/255,Fm.colorSpaceToWorking(this,t),this}setRGB(e,t,n,r=Fm.workingColorSpace){return this.r=e,this.g=t,this.b=n,Fm.colorSpaceToWorking(this,r),this}setHSL(e,t,n,r=Fm.workingColorSpace){if(e=sm(e,1),t=om(t,0,1),n=om(n,0,1),t===0)this.r=this.g=this.b=n;else{let r=n<=.5?n*(1+t):n+t-n*t,i=2*n-r;this.r=jh(i,r,e+1/3),this.g=jh(i,r,e),this.b=jh(i,r,e-1/3)}return Fm.colorSpaceToWorking(this,r),this}setStyle(e,t=Pp){function n(t){t!==void 0&&parseFloat(t)<1&&Yp(`Color: Alpha component of `+e+` will be ignored.`)}let r;if(r=/^(\w+)\(([^\)]*)\)/.exec(e)){let i,a=r[1],o=r[2];switch(a){case`rgb`:case`rgba`:if(i=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(i[4]),this.setRGB(Math.min(255,parseInt(i[1],10))/255,Math.min(255,parseInt(i[2],10))/255,Math.min(255,parseInt(i[3],10))/255,t);if(i=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(i[4]),this.setRGB(Math.min(100,parseInt(i[1],10))/100,Math.min(100,parseInt(i[2],10))/100,Math.min(100,parseInt(i[3],10))/100,t);break;case`hsl`:case`hsla`:if(i=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(i[4]),this.setHSL(parseFloat(i[1])/360,parseFloat(i[2])/100,parseFloat(i[3])/100,t);break;default:Yp(`Color: Unknown color model `+e)}}else if(r=/^\#([A-Fa-f\d]+)$/.exec(e)){let n=r[1],i=n.length;if(i===3)return this.setRGB(parseInt(n.charAt(0),16)/15,parseInt(n.charAt(1),16)/15,parseInt(n.charAt(2),16)/15,t);if(i===6)return this.setHex(parseInt(n,16),t);Yp(`Color: Invalid hex color `+e)}else if(e&&e.length>0)return this.setColorName(e,t);return this}setColorName(e,t=Pp){let n=Oh[e.toLowerCase()];return n===void 0?Yp(`Color: Unknown color `+e):this.setHex(n,t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copySRGBToLinear(e){return this.r=Im(e.r),this.g=Im(e.g),this.b=Im(e.b),this}copyLinearToSRGB(e){return this.r=Lm(e.r),this.g=Lm(e.g),this.b=Lm(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=Pp){return Fm.workingToColorSpace(Mh.copy(this),e),Math.round(om(Mh.r*255,0,255))*65536+Math.round(om(Mh.g*255,0,255))*256+Math.round(om(Mh.b*255,0,255))}getHexString(e=Pp){return(`000000`+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=Fm.workingColorSpace){Fm.workingToColorSpace(Mh.copy(this),t);let n=Mh.r,r=Mh.g,i=Mh.b,a=Math.max(n,r,i),o=Math.min(n,r,i),s,c,l=(o+a)/2;if(o===a)s=0,c=0;else{let e=a-o;switch(c=l<=.5?e/(a+o):e/(2-a-o),a){case n:s=(r-i)/e+(r0?r.multiplyScalar(1/Math.sqrt(i)):r.set(0,0,0)}static getBarycoord(e,t,n,r,i){Fh.subVectors(r,t),Ih.subVectors(n,t),Lh.subVectors(e,t);let a=Fh.dot(Fh),o=Fh.dot(Ih),s=Fh.dot(Lh),c=Ih.dot(Ih),l=Ih.dot(Lh),u=a*c-o*o;if(u===0)return i.set(0,0,0),null;let d=1/u,f=(c*s-o*l)*d,p=(a*l-o*s)*d;return i.set(1-f-p,p,f)}static containsPoint(e,t,n,r){return this.getBarycoord(e,t,n,r,Rh)!==null&&Rh.x>=0&&Rh.y>=0&&Rh.x+Rh.y<=1}static getInterpolation(e,t,n,r,i,a,o,s){return this.getBarycoord(e,t,n,r,Rh)===null?(s.x=0,s.y=0,`z`in s&&(s.z=0),`w`in s&&(s.w=0),null):(s.setScalar(0),s.addScaledVector(i,Rh.x),s.addScaledVector(a,Rh.y),s.addScaledVector(o,Rh.z),s)}static getInterpolatedAttribute(e,t,n,r,i,a){return Gh.setScalar(0),Kh.setScalar(0),qh.setScalar(0),Gh.fromBufferAttribute(e,t),Kh.fromBufferAttribute(e,n),qh.fromBufferAttribute(e,r),a.setScalar(0),a.addScaledVector(Gh,i.x),a.addScaledVector(Kh,i.y),a.addScaledVector(qh,i.z),a}static isFrontFacing(e,t,n,r){return Fh.subVectors(n,t),Ih.subVectors(e,t),Fh.cross(Ih).dot(r)<0}set(e,t,n){return this.a.copy(e),this.b.copy(t),this.c.copy(n),this}setFromPointsAndIndices(e,t,n,r){return this.a.copy(e[t]),this.b.copy(e[n]),this.c.copy(e[r]),this}setFromAttributeAndIndices(e,t,n,r){return this.a.fromBufferAttribute(e,t),this.b.fromBufferAttribute(e,n),this.c.fromBufferAttribute(e,r),this}clone(){return new this.constructor().copy(this)}copy(e){return this.a.copy(e.a),this.b.copy(e.b),this.c.copy(e.c),this}getArea(){return Fh.subVectors(this.c,this.b),Ih.subVectors(this.a,this.b),Fh.cross(Ih).length()*.5}getMidpoint(e){return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return e.getNormal(this.a,this.b,this.c,t)}getPlane(e){return e.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,n){return e.getBarycoord(t,this.a,this.b,this.c,n)}getInterpolation(t,n,r,i,a){return e.getInterpolation(t,this.a,this.b,this.c,n,r,i,a)}containsPoint(t){return e.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return e.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(e){return e.intersectsTriangle(this)}closestPointToPoint(e,t){let n=this.a,r=this.b,i=this.c,a,o;zh.subVectors(r,n),Bh.subVectors(i,n),Hh.subVectors(e,n);let s=zh.dot(Hh),c=Bh.dot(Hh);if(s<=0&&c<=0)return t.copy(n);Uh.subVectors(e,r);let l=zh.dot(Uh),u=Bh.dot(Uh);if(l>=0&&u<=l)return t.copy(r);let d=s*u-l*c;if(d<=0&&s>=0&&l<=0)return a=s/(s-l),t.copy(n).addScaledVector(zh,a);Wh.subVectors(e,i);let f=zh.dot(Wh),p=Bh.dot(Wh);if(p>=0&&f<=p)return t.copy(i);let m=f*c-s*p;if(m<=0&&c>=0&&p<=0)return o=c/(c-p),t.copy(n).addScaledVector(Bh,o);let h=l*p-f*u;if(h<=0&&u-l>=0&&f-p>=0)return Vh.subVectors(i,r),o=(u-l)/(u-l+(f-p)),t.copy(r).addScaledVector(Vh,o);let g=1/(h+m+d);return a=m*g,o=d*g,t.copy(n).addScaledVector(zh,a).addScaledVector(Bh,o)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}},Yh=class{constructor(e=new J(1/0,1/0,1/0),t=new J(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=e,this.max=t}set(e,t){return this.min.copy(e),this.max.copy(t),this}setFromArray(e){this.makeEmpty();for(let t=0,n=e.length;t=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y&&e.z>=this.min.z&&e.z<=this.max.z}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y&&e.max.z>=this.min.z&&e.min.z<=this.max.z}intersectsSphere(e){return this.clampPoint(e.center,Zh),Zh.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let t,n;return e.normal.x>0?(t=e.normal.x*this.min.x,n=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,n=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,n+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,n+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,n+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,n+=e.normal.z*this.min.z),t<=-e.constant&&n>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(ag),og.subVectors(this.max,ag),$h.subVectors(e.a,ag),eg.subVectors(e.b,ag),tg.subVectors(e.c,ag),ng.subVectors(eg,$h),rg.subVectors(tg,eg),ig.subVectors($h,tg);let t=[0,-ng.z,ng.y,0,-rg.z,rg.y,0,-ig.z,ig.y,ng.z,0,-ng.x,rg.z,0,-rg.x,ig.z,0,-ig.x,-ng.y,ng.x,0,-rg.y,rg.x,0,-ig.y,ig.x,0];return!lg(t,$h,eg,tg,og)||(t=[1,0,0,0,1,0,0,0,1],!lg(t,$h,eg,tg,og))?!1:(sg.crossVectors(ng,rg),t=[sg.x,sg.y,sg.z],lg(t,$h,eg,tg,og))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,Zh).distanceTo(e)}getBoundingSphere(e){return this.isEmpty()?e.makeEmpty():(this.getCenter(e.center),e.radius=this.getSize(Zh).length()*.5),e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()?this:(Xh[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),Xh[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),Xh[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),Xh[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),Xh[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),Xh[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),Xh[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),Xh[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(Xh),this)}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(e){return this.min.fromArray(e.min),this.max.fromArray(e.max),this}},Xh=[new J,new J,new J,new J,new J,new J,new J,new J],Zh=new J,Qh=new Yh,$h=new J,eg=new J,tg=new J,ng=new J,rg=new J,ig=new J,ag=new J,og=new J,sg=new J,cg=new J;function lg(e,t,n,r,i){for(let a=0,o=e.length-3;a<=o;a+=3){cg.fromArray(e,a);let o=i.x*Math.abs(cg.x)+i.y*Math.abs(cg.y)+i.z*Math.abs(cg.z),s=t.dot(cg),c=n.dot(cg),l=r.dot(cg);if(Math.max(-Math.max(s,c,l),Math.min(s,c,l))>o)return!1}return!0}var ug=new J,dg=new q,fg=0,pg=class extends em{constructor(e,t,n=!1){if(super(),Array.isArray(e))throw TypeError(`THREE.BufferAttribute: array should be a Typed Array.`);this.isBufferAttribute=!0,Object.defineProperty(this,"id",{value:fg++}),this.name=``,this.array=e,this.itemSize=t,this.count=e===void 0?0:e.length/t,this.normalized=n,this.usage=zp,this.updateRanges=[],this.gpuType=Ef,this.version=0}onUploadCallback(){}set needsUpdate(e){e===!0&&this.version++}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.name=e.name,this.array=new e.array.constructor(e.array),this.itemSize=e.itemSize,this.count=e.count,this.normalized=e.normalized,this.usage=e.usage,this.gpuType=e.gpuType,this}copyAt(e,t,n){e*=this.itemSize,n*=t.itemSize;for(let r=0,i=this.itemSize;rthis.radius*this.radius&&(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center)),t}getBoundingBox(e){return this.isEmpty()?(e.makeEmpty(),e):(e.set(this.center,this.center),e.expandByScalar(this.radius),e)}applyMatrix4(e){return this.center.applyMatrix4(e),this.radius*=e.getMaxScaleOnAxis(),this}translate(e){return this.center.add(e),this}expandByPoint(e){if(this.isEmpty())return this.center.copy(e),this.radius=0,this;vg.subVectors(e,this.center);let t=vg.lengthSq();if(t>this.radius*this.radius){let e=Math.sqrt(t),n=(e-this.radius)*.5;this.center.addScaledVector(vg,n/e),this.radius+=n}return this}union(e){return e.isEmpty()?this:this.isEmpty()?(this.copy(e),this):(this.center.equals(e.center)===!0?this.radius=Math.max(this.radius,e.radius):(yg.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint(vg.copy(e.center).add(yg)),this.expandByPoint(vg.copy(e.center).sub(yg))),this)}equals(e){return e.center.equals(this.center)&&e.radius===this.radius}clone(){return new this.constructor().copy(this)}toJSON(){return{radius:this.radius,center:this.center.toArray()}}fromJSON(e){return this.radius=e.radius,this.center.fromArray(e.center),this}},xg=0,Sg=new Zm,Cg=new wh,wg=new J,Tg=new Yh,Eg=new Yh,Dg=new J,Og=class e extends em{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:xg++}),this.uuid=am(),this.name=``,this.type=`BufferGeometry`,this.index=null,this.indirect=null,this.indirectOffset=0,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={},this._transformed=!1}getIndex(){return this.index}setIndex(e){return Array.isArray(e)?this.index=new(Hp(e)?hg:mg)(e,1):this.index=e,this}setIndirect(e,t=0){return this.indirect=e,this.indirectOffset=t,this}getIndirect(){return this.indirect}getAttribute(e){return this.attributes[e]}setAttribute(e,t){return this.attributes[e]=t,this}deleteAttribute(e){return delete this.attributes[e],this}hasAttribute(e){return this.attributes[e]!==void 0}addGroup(e,t,n=0){this.groups.push({start:e,count:t,materialIndex:n})}clearGroups(){this.groups=[]}setDrawRange(e,t){this.drawRange.start=e,this.drawRange.count=t}applyMatrix4(e){let t=this.attributes.position;t!==void 0&&(t.applyMatrix4(e),t.needsUpdate=!0);let n=this.attributes.normal;if(n!==void 0){let t=new Am().getNormalMatrix(e);n.applyNormalMatrix(t),n.needsUpdate=!0}let r=this.attributes.tangent;return r!==void 0&&(r.transformDirection(e),r.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this._transformed=!0,this}applyQuaternion(e){return Sg.makeRotationFromQuaternion(e),this.applyMatrix4(Sg),this}rotateX(e){return Sg.makeRotationX(e),this.applyMatrix4(Sg),this}rotateY(e){return Sg.makeRotationY(e),this.applyMatrix4(Sg),this}rotateZ(e){return Sg.makeRotationZ(e),this.applyMatrix4(Sg),this}translate(e,t,n){return Sg.makeTranslation(e,t,n),this.applyMatrix4(Sg),this}scale(e,t,n){return Sg.makeScale(e,t,n),this.applyMatrix4(Sg),this}lookAt(e){return Cg.lookAt(e),Cg.updateMatrix(),this.applyMatrix4(Cg.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(wg).negate(),this.translate(wg.x,wg.y,wg.z),this}setFromPoints(e){let t=this.getAttribute(`position`);if(t===void 0){let t=[];for(let n=0,r=e.length;nt.count&&Yp(`BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry.`),t.needsUpdate=!0}return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new Yh);let e=this.attributes.position,t=this.morphAttributes.position;if(e&&e.isGLBufferAttribute){Xp(`BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.`,this),this.boundingBox.set(new J(-1/0,-1/0,-1/0),new J(1/0,1/0,1/0));return}if(e!==void 0){if(this.boundingBox.setFromBufferAttribute(e),t)for(let e=0,n=t.length;e0&&(e.userData=this.userData),this.parameters!==void 0&&this._transformed!==!0){let t=this.parameters;for(let n in t)t[n]!==void 0&&(e[n]=t[n]);return e}e.data={attributes:{}};let t=this.index;t!==null&&(e.data.index={type:t.array.constructor.name,array:Array.prototype.slice.call(t.array)});let n=this.attributes;for(let t in n){let r=n[t];e.data.attributes[t]=r.toJSON(e.data)}let r={},i=!1;for(let t in this.morphAttributes){let n=this.morphAttributes[t],a=[];for(let t=0,r=n.length;t0&&(r[t]=a,i=!0)}i&&(e.data.morphAttributes=r,e.data.morphTargetsRelative=this.morphTargetsRelative);let a=this.groups;a.length>0&&(e.data.groups=JSON.parse(JSON.stringify(a)));let o=this.boundingSphere;return o!==null&&(e.data.boundingSphere=o.toJSON()),e}clone(){return new this.constructor().copy(this)}copy(e){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;let t={};this.name=e.name;let n=e.index;n!==null&&this.setIndex(n.clone());let r=e.attributes;for(let e in r){let n=r[e];this.setAttribute(e,n.clone(t))}let i=e.morphAttributes;for(let e in i){let n=[],r=i[e];for(let e=0,i=r.length;e1)?null:t.copy(e.start).addScaledVector(r,a)}intersectsLine(e){let t=this.distanceToPoint(e.start),n=this.distanceToPoint(e.end);return t<0&&n>0||n<0&&t>0}intersectsBox(e){return e.intersectsPlane(this)}intersectsSphere(e){return e.intersectsPlane(this)}coplanarPoint(e){return e.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(e,t){let n=t||Pg.getNormalMatrix(e),r=this.coplanarPoint(Mg).applyMatrix4(e),i=this.normal.applyMatrix3(n).normalize();return this.constant=-r.dot(i),this}translate(e){return this.constant-=e.dot(this.normal),this}equals(e){return e.normal.equals(this.normal)&&e.constant===this.constant}clone(){return new this.constructor().copy(this)}toJSON(){return{normal:this.normal.toArray(),constant:this.constant}}fromJSON(e){return this.normal.fromArray(e.normal),this.constant=e.constant,this}},Ig=0,Lg=class extends em{constructor(){super(),this.isMaterial=!0,Object.defineProperty(this,"id",{value:Ig++}),this.uuid=am(),this.name=``,this.type=`Material`,this.blending=1,this.side=0,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.alphaHash=!1,this.blendSrc=204,this.blendDst=205,this.blendEquation=100,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.blendColor=new Y(0,0,0),this.blendAlpha=0,this.depthFunc=3,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=519,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=Rp,this.stencilZFail=Rp,this.stencilZPass=Rp,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.forceSinglePass=!1,this.allowOverride=!0,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(e){this._alphaTest>0!=e>0&&this.version++,this._alphaTest=e}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(e){if(e!==void 0)for(let t in e){let n=e[t];if(n===void 0){Yp(`Material: parameter '${t}' has value of undefined.`);continue}let r=this[t];if(r===void 0){Yp(`Material: '${t}' is not a property of THREE.${this.type}.`);continue}r&&r.isColor?r.set(n):r&&r.isVector2&&n&&n.isVector2||r&&r.isEuler&&n&&n.isEuler||r&&r.isVector3&&n&&n.isVector3?r.copy(n):this[t]=n}}toJSON(e){let t=e===void 0||typeof e==`string`;t&&(e={textures:{},images:{}});let n={metadata:{version:4.7,type:`Material`,generator:`Material.toJSON`}};n.uuid=this.uuid,n.type=this.type,n.blending=this.blending,n.side=this.side,n.shadowSide=this.shadowSide,n.vertexColors=this.vertexColors,n.opacity=this.opacity,n.transparent=this.transparent,n.blendSrc=this.blendSrc,n.blendDst=this.blendDst,n.blendEquation=this.blendEquation,n.blendSrcAlpha=this.blendSrcAlpha,n.blendDstAlpha=this.blendDstAlpha,n.blendEquationAlpha=this.blendEquationAlpha,n.blendColor=this.blendColor.getHex(),n.blendAlpha=this.blendAlpha,n.depthFunc=this.depthFunc,n.depthTest=this.depthTest,n.depthWrite=this.depthWrite,n.colorWrite=this.colorWrite,n.clipIntersection=this.clipIntersection,n.clipShadows=this.clipShadows,n.stencilWriteMask=this.stencilWriteMask,n.stencilFunc=this.stencilFunc,n.stencilRef=this.stencilRef,n.stencilFuncMask=this.stencilFuncMask,n.stencilFail=this.stencilFail,n.stencilZFail=this.stencilZFail,n.stencilZPass=this.stencilZPass,n.stencilWrite=this.stencilWrite,n.polygonOffset=this.polygonOffset,n.polygonOffsetFactor=this.polygonOffsetFactor,n.polygonOffsetUnits=this.polygonOffsetUnits,n.dithering=this.dithering,n.alphaTest=this.alphaTest,n.alphaHash=this.alphaHash,n.alphaToCoverage=this.alphaToCoverage,n.premultipliedAlpha=this.premultipliedAlpha,n.forceSinglePass=this.forceSinglePass,n.allowOverride=this.allowOverride,n.visible=this.visible,n.toneMapped=this.toneMapped,n.name=this.name,this.color&&this.color.isColor&&(n.color=this.color.getHex()),this.roughness!==void 0&&(n.roughness=this.roughness),this.metalness!==void 0&&(n.metalness=this.metalness),this.sheen!==void 0&&(n.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(n.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0&&(n.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(n.emissive=this.emissive.getHex()),this.emissiveIntensity!==void 0&&(n.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(n.specular=this.specular.getHex()),this.specularIntensity!==void 0&&(n.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(n.specularColor=this.specularColor.getHex()),this.shininess!==void 0&&(n.shininess=this.shininess),this.clearcoat!==void 0&&(n.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0&&(n.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(n.clearcoatMap=this.clearcoatMap.toJSON(e).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(n.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(e).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(n.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(e).uuid,n.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.sheenColorMap&&this.sheenColorMap.isTexture&&(n.sheenColorMap=this.sheenColorMap.toJSON(e).uuid),this.sheenRoughnessMap&&this.sheenRoughnessMap.isTexture&&(n.sheenRoughnessMap=this.sheenRoughnessMap.toJSON(e).uuid),this.dispersion!==void 0&&(n.dispersion=this.dispersion),this.retroreflectivity!==void 0&&(n.retroreflectivity=this.retroreflectivity),this.iridescence!==void 0&&(n.iridescence=this.iridescence),this.iridescenceIOR!==void 0&&(n.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0&&(n.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(n.iridescenceMap=this.iridescenceMap.toJSON(e).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(n.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(e).uuid),this.anisotropy!==void 0&&(n.anisotropy=this.anisotropy),this.anisotropyRotation!==void 0&&(n.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(n.anisotropyMap=this.anisotropyMap.toJSON(e).uuid),this.map&&this.map.isTexture&&(n.map=this.map.toJSON(e).uuid),this.matcap&&this.matcap.isTexture&&(n.matcap=this.matcap.toJSON(e).uuid),this.alphaMap&&this.alphaMap.isTexture&&(n.alphaMap=this.alphaMap.toJSON(e).uuid),this.lightMap&&this.lightMap.isTexture&&(n.lightMap=this.lightMap.toJSON(e).uuid,n.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(n.aoMap=this.aoMap.toJSON(e).uuid,n.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(n.bumpMap=this.bumpMap.toJSON(e).uuid,n.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(n.normalMap=this.normalMap.toJSON(e).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(n.displacementMap=this.displacementMap.toJSON(e).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(n.roughnessMap=this.roughnessMap.toJSON(e).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(n.metalnessMap=this.metalnessMap.toJSON(e).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(n.emissiveMap=this.emissiveMap.toJSON(e).uuid),this.specularMap&&this.specularMap.isTexture&&(n.specularMap=this.specularMap.toJSON(e).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(n.specularIntensityMap=this.specularIntensityMap.toJSON(e).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(n.specularColorMap=this.specularColorMap.toJSON(e).uuid),this.envMap&&this.envMap.isTexture&&(n.envMap=this.envMap.toJSON(e).uuid,this.combine!==void 0&&(n.combine=this.combine)),this.envMapRotation!==void 0&&(n.envMapRotation=this.envMapRotation.toArray()),this.envMapIntensity!==void 0&&(n.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0&&(n.reflectivity=this.reflectivity),this.refractionRatio!==void 0&&(n.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(n.gradientMap=this.gradientMap.toJSON(e).uuid),this.transmission!==void 0&&(n.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(n.transmissionMap=this.transmissionMap.toJSON(e).uuid),this.thickness!==void 0&&(n.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(n.thicknessMap=this.thicknessMap.toJSON(e).uuid),this.attenuationDistance!==void 0&&(n.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0&&(n.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0&&(n.size=this.size),this.sizeAttenuation!==void 0&&(n.sizeAttenuation=this.sizeAttenuation),Array.isArray(this.clippingPlanes)&&this.clippingPlanes.length>0&&(n.clippingPlanes=this.clippingPlanes.map(e=>e.toJSON())),this.rotation!==void 0&&(n.rotation=this.rotation),this.depthPacking!==void 0&&(n.depthPacking=this.depthPacking),this.linewidth!==void 0&&(n.linewidth=this.linewidth),this.linecap!==void 0&&(n.linecap=this.linecap),this.linejoin!==void 0&&(n.linejoin=this.linejoin),this.dashSize!==void 0&&(n.dashSize=this.dashSize),this.gapSize!==void 0&&(n.gapSize=this.gapSize),this.scale!==void 0&&(n.scale=this.scale),this.wireframe!==void 0&&(n.wireframe=this.wireframe),this.wireframeLinewidth!==void 0&&(n.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!==void 0&&(n.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!==void 0&&(n.wireframeLinejoin=this.wireframeLinejoin),this.flatShading!==void 0&&(n.flatShading=this.flatShading),this.fog!==void 0&&(n.fog=this.fog),Object.keys(this.userData).length>0&&(n.userData=this.userData);function r(e){let t=[];for(let n in e){let r=e[n];delete r.metadata,t.push(r)}return t}if(t){let t=r(e.textures),i=r(e.images);t.length>0&&(n.textures=t),i.length>0&&(n.images=i)}return n}fromJSON(e,t){if(e.uuid!==void 0&&(this.uuid=e.uuid),e.name!==void 0&&(this.name=e.name),e.color!==void 0&&this.color!==void 0&&this.color.setHex(e.color),e.roughness!==void 0&&(this.roughness=e.roughness),e.metalness!==void 0&&(this.metalness=e.metalness),e.sheen!==void 0&&(this.sheen=e.sheen),e.sheenColor!==void 0&&(this.sheenColor=new Y().setHex(e.sheenColor)),e.sheenRoughness!==void 0&&(this.sheenRoughness=e.sheenRoughness),e.emissive!==void 0&&this.emissive!==void 0&&this.emissive.setHex(e.emissive),e.specular!==void 0&&this.specular!==void 0&&this.specular.setHex(e.specular),e.specularIntensity!==void 0&&(this.specularIntensity=e.specularIntensity),e.specularColor!==void 0&&this.specularColor!==void 0&&this.specularColor.setHex(e.specularColor),e.shininess!==void 0&&(this.shininess=e.shininess),e.clearcoat!==void 0&&(this.clearcoat=e.clearcoat),e.clearcoatRoughness!==void 0&&(this.clearcoatRoughness=e.clearcoatRoughness),e.dispersion!==void 0&&(this.dispersion=e.dispersion),e.retroreflectivity!==void 0&&(this.retroreflectivity=e.retroreflectivity),e.iridescence!==void 0&&(this.iridescence=e.iridescence),e.iridescenceIOR!==void 0&&(this.iridescenceIOR=e.iridescenceIOR),e.iridescenceThicknessRange!==void 0&&(this.iridescenceThicknessRange=e.iridescenceThicknessRange),e.transmission!==void 0&&(this.transmission=e.transmission),e.thickness!==void 0&&(this.thickness=e.thickness),e.attenuationDistance!==void 0&&(this.attenuationDistance=e.attenuationDistance),e.attenuationColor!==void 0&&this.attenuationColor!==void 0&&this.attenuationColor.setHex(e.attenuationColor),e.anisotropy!==void 0&&(this.anisotropy=e.anisotropy),e.anisotropyRotation!==void 0&&(this.anisotropyRotation=e.anisotropyRotation),e.fog!==void 0&&(this.fog=e.fog),e.flatShading!==void 0&&(this.flatShading=e.flatShading),e.blending!==void 0&&(this.blending=e.blending),e.combine!==void 0&&(this.combine=e.combine),e.side!==void 0&&(this.side=e.side),e.shadowSide!==void 0&&(this.shadowSide=e.shadowSide),e.opacity!==void 0&&(this.opacity=e.opacity),e.transparent!==void 0&&(this.transparent=e.transparent),e.alphaTest!==void 0&&(this.alphaTest=e.alphaTest),e.alphaHash!==void 0&&(this.alphaHash=e.alphaHash),e.depthFunc!==void 0&&(this.depthFunc=e.depthFunc),e.depthTest!==void 0&&(this.depthTest=e.depthTest),e.depthWrite!==void 0&&(this.depthWrite=e.depthWrite),e.colorWrite!==void 0&&(this.colorWrite=e.colorWrite),e.clippingPlanes!==void 0&&(this.clippingPlanes=e.clippingPlanes.map(e=>new Fg().fromJSON(e))),e.clipIntersection!==void 0&&(this.clipIntersection=e.clipIntersection),e.clipShadows!==void 0&&(this.clipShadows=e.clipShadows),e.depthPacking!==void 0&&(this.depthPacking=e.depthPacking),e.blendSrc!==void 0&&(this.blendSrc=e.blendSrc),e.blendDst!==void 0&&(this.blendDst=e.blendDst),e.blendEquation!==void 0&&(this.blendEquation=e.blendEquation),e.blendSrcAlpha!==void 0&&(this.blendSrcAlpha=e.blendSrcAlpha),e.blendDstAlpha!==void 0&&(this.blendDstAlpha=e.blendDstAlpha),e.blendEquationAlpha!==void 0&&(this.blendEquationAlpha=e.blendEquationAlpha),e.blendColor!==void 0&&this.blendColor!==void 0&&this.blendColor.setHex(e.blendColor),e.blendAlpha!==void 0&&(this.blendAlpha=e.blendAlpha),e.stencilWriteMask!==void 0&&(this.stencilWriteMask=e.stencilWriteMask),e.stencilFunc!==void 0&&(this.stencilFunc=e.stencilFunc),e.stencilRef!==void 0&&(this.stencilRef=e.stencilRef),e.stencilFuncMask!==void 0&&(this.stencilFuncMask=e.stencilFuncMask),e.stencilFail!==void 0&&(this.stencilFail=e.stencilFail),e.stencilZFail!==void 0&&(this.stencilZFail=e.stencilZFail),e.stencilZPass!==void 0&&(this.stencilZPass=e.stencilZPass),e.stencilWrite!==void 0&&(this.stencilWrite=e.stencilWrite),e.wireframe!==void 0&&(this.wireframe=e.wireframe),e.wireframeLinewidth!==void 0&&(this.wireframeLinewidth=e.wireframeLinewidth),e.wireframeLinecap!==void 0&&(this.wireframeLinecap=e.wireframeLinecap),e.wireframeLinejoin!==void 0&&(this.wireframeLinejoin=e.wireframeLinejoin),e.rotation!==void 0&&(this.rotation=e.rotation),e.linewidth!==void 0&&(this.linewidth=e.linewidth),e.linecap!==void 0&&(this.linecap=e.linecap),e.linejoin!==void 0&&(this.linejoin=e.linejoin),e.dashSize!==void 0&&(this.dashSize=e.dashSize),e.gapSize!==void 0&&(this.gapSize=e.gapSize),e.scale!==void 0&&(this.scale=e.scale),e.polygonOffset!==void 0&&(this.polygonOffset=e.polygonOffset),e.polygonOffsetFactor!==void 0&&(this.polygonOffsetFactor=e.polygonOffsetFactor),e.polygonOffsetUnits!==void 0&&(this.polygonOffsetUnits=e.polygonOffsetUnits),e.dithering!==void 0&&(this.dithering=e.dithering),e.alphaToCoverage!==void 0&&(this.alphaToCoverage=e.alphaToCoverage),e.premultipliedAlpha!==void 0&&(this.premultipliedAlpha=e.premultipliedAlpha),e.forceSinglePass!==void 0&&(this.forceSinglePass=e.forceSinglePass),e.allowOverride!==void 0&&(this.allowOverride=e.allowOverride),e.visible!==void 0&&(this.visible=e.visible),e.toneMapped!==void 0&&(this.toneMapped=e.toneMapped),e.userData!==void 0&&(this.userData=e.userData),e.vertexColors!==void 0&&(typeof e.vertexColors==`number`?this.vertexColors=e.vertexColors>0:this.vertexColors=e.vertexColors),e.size!==void 0&&(this.size=e.size),e.sizeAttenuation!==void 0&&(this.sizeAttenuation=e.sizeAttenuation),e.map!==void 0&&(this.map=t[e.map]||null),e.matcap!==void 0&&(this.matcap=t[e.matcap]||null),e.alphaMap!==void 0&&(this.alphaMap=t[e.alphaMap]||null),e.bumpMap!==void 0&&(this.bumpMap=t[e.bumpMap]||null),e.bumpScale!==void 0&&(this.bumpScale=e.bumpScale),e.normalMap!==void 0&&(this.normalMap=t[e.normalMap]||null),e.normalMapType!==void 0&&(this.normalMapType=e.normalMapType),e.normalScale!==void 0){let t=e.normalScale;Array.isArray(t)===!1&&(t=[t,t]),this.normalScale=new q().fromArray(t)}return e.displacementMap!==void 0&&(this.displacementMap=t[e.displacementMap]||null),e.displacementScale!==void 0&&(this.displacementScale=e.displacementScale),e.displacementBias!==void 0&&(this.displacementBias=e.displacementBias),e.roughnessMap!==void 0&&(this.roughnessMap=t[e.roughnessMap]||null),e.metalnessMap!==void 0&&(this.metalnessMap=t[e.metalnessMap]||null),e.emissiveMap!==void 0&&(this.emissiveMap=t[e.emissiveMap]||null),e.emissiveIntensity!==void 0&&(this.emissiveIntensity=e.emissiveIntensity),e.specularMap!==void 0&&(this.specularMap=t[e.specularMap]||null),e.specularIntensityMap!==void 0&&(this.specularIntensityMap=t[e.specularIntensityMap]||null),e.specularColorMap!==void 0&&(this.specularColorMap=t[e.specularColorMap]||null),e.envMap!==void 0&&(this.envMap=t[e.envMap]||null),e.envMapRotation!==void 0&&this.envMapRotation.fromArray(e.envMapRotation),e.envMapIntensity!==void 0&&(this.envMapIntensity=e.envMapIntensity),e.reflectivity!==void 0&&(this.reflectivity=e.reflectivity),e.refractionRatio!==void 0&&(this.refractionRatio=e.refractionRatio),e.lightMap!==void 0&&(this.lightMap=t[e.lightMap]||null),e.lightMapIntensity!==void 0&&(this.lightMapIntensity=e.lightMapIntensity),e.aoMap!==void 0&&(this.aoMap=t[e.aoMap]||null),e.aoMapIntensity!==void 0&&(this.aoMapIntensity=e.aoMapIntensity),e.gradientMap!==void 0&&(this.gradientMap=t[e.gradientMap]||null),e.clearcoatMap!==void 0&&(this.clearcoatMap=t[e.clearcoatMap]||null),e.clearcoatRoughnessMap!==void 0&&(this.clearcoatRoughnessMap=t[e.clearcoatRoughnessMap]||null),e.clearcoatNormalMap!==void 0&&(this.clearcoatNormalMap=t[e.clearcoatNormalMap]||null),e.clearcoatNormalScale!==void 0&&(this.clearcoatNormalScale=new q().fromArray(e.clearcoatNormalScale)),e.iridescenceMap!==void 0&&(this.iridescenceMap=t[e.iridescenceMap]||null),e.iridescenceThicknessMap!==void 0&&(this.iridescenceThicknessMap=t[e.iridescenceThicknessMap]||null),e.transmissionMap!==void 0&&(this.transmissionMap=t[e.transmissionMap]||null),e.thicknessMap!==void 0&&(this.thicknessMap=t[e.thicknessMap]||null),e.anisotropyMap!==void 0&&(this.anisotropyMap=t[e.anisotropyMap]||null),e.sheenColorMap!==void 0&&(this.sheenColorMap=t[e.sheenColorMap]||null),e.sheenRoughnessMap!==void 0&&(this.sheenRoughnessMap=t[e.sheenRoughnessMap]||null),this}clone(){return new this.constructor().copy(this)}copy(e){this.name=e.name,this.blending=e.blending,this.side=e.side,this.vertexColors=e.vertexColors,this.opacity=e.opacity,this.transparent=e.transparent,this.blendSrc=e.blendSrc,this.blendDst=e.blendDst,this.blendEquation=e.blendEquation,this.blendSrcAlpha=e.blendSrcAlpha,this.blendDstAlpha=e.blendDstAlpha,this.blendEquationAlpha=e.blendEquationAlpha,this.blendColor.copy(e.blendColor),this.blendAlpha=e.blendAlpha,this.depthFunc=e.depthFunc,this.depthTest=e.depthTest,this.depthWrite=e.depthWrite,this.stencilWriteMask=e.stencilWriteMask,this.stencilFunc=e.stencilFunc,this.stencilRef=e.stencilRef,this.stencilFuncMask=e.stencilFuncMask,this.stencilFail=e.stencilFail,this.stencilZFail=e.stencilZFail,this.stencilZPass=e.stencilZPass,this.stencilWrite=e.stencilWrite;let t=e.clippingPlanes,n=null;if(t!==null){let e=t.length;n=Array(e);for(let r=0;r!==e;++r)n[r]=t[r].clone()}return this.clippingPlanes=n,this.clipIntersection=e.clipIntersection,this.clipShadows=e.clipShadows,this.shadowSide=e.shadowSide,this.colorWrite=e.colorWrite,this.precision=e.precision,this.polygonOffset=e.polygonOffset,this.polygonOffsetFactor=e.polygonOffsetFactor,this.polygonOffsetUnits=e.polygonOffsetUnits,this.dithering=e.dithering,this.alphaTest=e.alphaTest,this.alphaHash=e.alphaHash,this.alphaToCoverage=e.alphaToCoverage,this.premultipliedAlpha=e.premultipliedAlpha,this.forceSinglePass=e.forceSinglePass,this.allowOverride=e.allowOverride,this.visible=e.visible,this.toneMapped=e.toneMapped,this.userData=JSON.parse(JSON.stringify(e.userData)),this}dispose(){this.dispatchEvent({type:`dispose`})}set needsUpdate(e){e===!0&&this.version++}},Rg=new J,zg=new J,Bg=new J,Vg=new J,Hg=class{constructor(e=new J,t=new J(0,0,-1)){this.origin=e,this.direction=t}set(e,t){return this.origin.copy(e),this.direction.copy(t),this}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this}at(e,t){return t.copy(this.origin).addScaledVector(this.direction,e)}lookAt(e){return this.direction.copy(e).sub(this.origin).normalize(),this}recast(e){return this.origin.copy(this.at(e,Rg)),this}closestPointToPoint(e,t){t.subVectors(e,this.origin);let n=t.dot(this.direction);return n<0?t.copy(this.origin):t.copy(this.origin).addScaledVector(this.direction,n)}distanceToPoint(e){return Math.sqrt(this.distanceSqToPoint(e))}distanceSqToPoint(e){let t=Rg.subVectors(e,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(e):(Rg.copy(this.origin).addScaledVector(this.direction,t),Rg.distanceToSquared(e))}distanceSqToSegment(e,t,n,r){zg.copy(e).add(t).multiplyScalar(.5),Bg.copy(t).sub(e).normalize(),Vg.copy(this.origin).sub(zg);let i=e.distanceTo(t)*.5,a=-this.direction.dot(Bg),o=Vg.dot(this.direction),s=-Vg.dot(Bg),c=Vg.lengthSq(),l=Math.abs(1-a*a),u,d,f,p;if(l>0)if(u=a*s-o,d=a*o-s,p=i*l,u>=0)if(d>=-p)if(d<=p){let e=1/l;u*=e,d*=e,f=u*(u+a*d+2*o)+d*(a*u+d+2*s)+c}else d=i,u=Math.max(0,-(a*d+o)),f=-u*u+d*(d+2*s)+c;else d=-i,u=Math.max(0,-(a*d+o)),f=-u*u+d*(d+2*s)+c;else d<=-p?(u=Math.max(0,-(-a*i+o)),d=u>0?-i:Math.min(Math.max(-i,-s),i),f=-u*u+d*(d+2*s)+c):d<=p?(u=0,d=Math.min(Math.max(-i,-s),i),f=d*(d+2*s)+c):(u=Math.max(0,-(a*i+o)),d=u>0?i:Math.min(Math.max(-i,-s),i),f=-u*u+d*(d+2*s)+c);else d=a>0?-i:i,u=Math.max(0,-(a*d+o)),f=-u*u+d*(d+2*s)+c;return n&&n.copy(this.origin).addScaledVector(this.direction,u),r&&r.copy(zg).addScaledVector(Bg,d),f}intersectSphere(e,t){if(e.radius<0)return null;Rg.subVectors(e.center,this.origin);let n=Rg.dot(this.direction),r=Rg.dot(Rg)-n*n,i=e.radius*e.radius;if(r>i)return null;let a=Math.sqrt(i-r),o=n-a,s=n+a;return s<0?null:o<0?this.at(s,t):this.at(o,t)}intersectsSphere(e){return e.radius<0?!1:this.distanceSqToPoint(e.center)<=e.radius*e.radius}distanceToPlane(e){let t=e.normal.dot(this.direction);if(t===0)return e.distanceToPoint(this.origin)===0?0:null;let n=-(this.origin.dot(e.normal)+e.constant)/t;return n>=0?n:null}intersectPlane(e,t){let n=this.distanceToPlane(e);return n===null?null:this.at(n,t)}intersectsPlane(e){let t=e.distanceToPoint(this.origin);return t===0||e.normal.dot(this.direction)*t<0}intersectBox(e,t){let n,r,i,a,o,s,c=1/this.direction.x,l=1/this.direction.y,u=1/this.direction.z,d=this.origin;return c>=0?(n=(e.min.x-d.x)*c,r=(e.max.x-d.x)*c):(n=(e.max.x-d.x)*c,r=(e.min.x-d.x)*c),l>=0?(i=(e.min.y-d.y)*l,a=(e.max.y-d.y)*l):(i=(e.max.y-d.y)*l,a=(e.min.y-d.y)*l),n>a||i>r||((i>n||isNaN(n))&&(n=i),(a=0?(o=(e.min.z-d.z)*u,s=(e.max.z-d.z)*u):(o=(e.max.z-d.z)*u,s=(e.min.z-d.z)*u),n>s||o>r)||((o>n||n!==n)&&(n=o),(s=0?n:r,t)}intersectsBox(e){return this.intersectBox(e,Rg)!==null}intersectTriangle(e,t,n,r,i){let a=this.origin,o=this.direction,s=o.x,c=o.y,l=o.z,u=e.x-a.x,d=e.y-a.y,f=e.z-a.z,p=t.x-a.x,m=t.y-a.y,h=t.z-a.z,g=n.x-a.x,_=n.y-a.y,v=n.z-a.z,y=Math.abs(s),b=Math.abs(c),x=Math.abs(l),S,C,w,T,E,D,O,k,A,j,ee,te;if(y>=b&&y>=x?(w=s,D=u,A=p,te=g,s>=0?(S=c,C=l,T=d,E=f,O=m,k=h,j=_,ee=v):(S=l,C=c,T=f,E=d,O=h,k=m,j=v,ee=_)):b>=x?(w=c,D=d,A=m,te=_,c>=0?(S=l,C=s,T=f,E=u,O=h,k=p,j=v,ee=g):(S=s,C=l,T=u,E=f,O=p,k=h,j=g,ee=v)):(w=l,D=f,A=h,te=v,l>=0?(S=s,C=c,T=u,E=d,O=p,k=m,j=g,ee=_):(S=c,C=s,T=d,E=u,O=m,k=p,j=_,ee=g)),w===0)return null;let ne=S/w,re=C/w,ie=1/w,ae=T-ne*D,M=E-re*D,oe=O-ne*A,se=k-re*A,ce=j-ne*te,le=ee-re*te,ue=ce*se-le*oe,N=ae*le-M*ce,de=oe*M-se*ae;if(r){if(ue<0||N<0||de<0)return null}else if((ue<0||N<0||de<0)&&(ue>0||N>0||de>0))return null;let fe=ue+N+de;if(fe===0)return null;let pe=ie*(ue*D+N*A+de*te);return(fe>0?pe<0:pe>0)?null:this.at(pe/fe,i)}applyMatrix4(e){return this.origin.applyMatrix4(e),this.direction.transformDirection(e),this}equals(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}},Ug=class extends Lg{constructor(e){super(),this.isMeshBasicMaterial=!0,this.type=`MeshBasicMaterial`,this.color=new Y(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new sh,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=`round`,this.wireframeLinejoin=`round`,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}},Wg=new Zm,Gg=new Hg,Kg=new bg,qg=new J,Jg=new J,Yg=new J,Xg=new J,Zg=new J,Qg=new J,$g=new J,e_=new J,t_=class extends wh{constructor(e=new Og,t=new Ug){super(),this.isMesh=!0,this.type=`Mesh`,this.geometry=e,this.material=t,this.morphTargetDictionary=void 0,this.morphTargetInfluences=void 0,this.count=1,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),e.morphTargetInfluences!==void 0&&(this.morphTargetInfluences=e.morphTargetInfluences.slice()),e.morphTargetDictionary!==void 0&&(this.morphTargetDictionary=Object.assign({},e.morphTargetDictionary)),this.material=Array.isArray(e.material)?e.material.slice():e.material,this.geometry=e.geometry,this}updateMorphTargets(){let e=this.geometry.morphAttributes,t=Object.keys(e);if(t.length>0){let n=e[t[0]];if(n!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=n.length;e(e.far-e.near)**2))&&(Wg.copy(i).invert(),Gg.copy(e.ray).applyMatrix4(Wg),!(n.boundingBox!==null&&Gg.intersectsBox(n.boundingBox)===!1)&&this._computeIntersections(e,t,Gg)))}_computeIntersections(e,t,n){let r,i=this.geometry,a=this.material,o=i.index,s=i.attributes.position,c=i.attributes.uv,l=i.attributes.uv1,u=i.attributes.normal,d=i.groups,f=i.drawRange;if(o!==null)if(Array.isArray(a))for(let i=0,s=d.length;in.far?null:{distance:l,point:e_.clone(),object:e}}function r_(e,t,n,r,i,a,o,s,c,l){e.getVertexPosition(s,Jg),e.getVertexPosition(c,Yg),e.getVertexPosition(l,Xg);let u=n_(e,t,n,r,Jg,Yg,Xg,$g);if(u){let e=new J;Jh.getBarycoord($g,Jg,Yg,Xg,e),i&&(u.uv=Jh.getInterpolatedAttribute(i,s,c,l,e,new q)),a&&(u.uv1=Jh.getInterpolatedAttribute(a,s,c,l,e,new q)),o&&(u.normal=Jh.getInterpolatedAttribute(o,s,c,l,e,new J),u.normal.dot(r.direction)>0&&u.normal.multiplyScalar(-1));let t={a:s,b:c,c:l,normal:new J,materialIndex:0};Jh.getNormal(Jg,Yg,Xg,t.normal),u.face=t,u.barycoord=e}return u}var i_=new Km,a_=new Km,o_=new Km,s_=new Km,c_=new Zm,l_=new J,u_=new bg,d_=new Zm,f_=new Hg,p_=class extends t_{constructor(e,t){super(e,t),this.isSkinnedMesh=!0,this.type=`SkinnedMesh`,this.bindMode=uf,this.bindMatrix=new Zm,this.bindMatrixInverse=new Zm,this.boundingBox=null,this.boundingSphere=null}computeBoundingBox(){let e=this.geometry;this.boundingBox===null&&(this.boundingBox=new Yh),this.boundingBox.makeEmpty();let t=e.getAttribute(`position`);for(let e=0;e0?e.max.x:e.min.x,A_.y=r.normal.y>0?e.max.y:e.min.y,A_.z=r.normal.z>0?e.max.z:e.min.z,r.distanceToPoint(A_)<0)return!1}return!0}containsPoint(e){let t=this.planes;for(let n=0;n<6;n++)if(t[n].distanceToPoint(e)<0)return!1;return!0}clone(){return new this.constructor().copy(this)}},M_=class extends Lg{constructor(e){super(),this.isLineBasicMaterial=!0,this.type=`LineBasicMaterial`,this.color=new Y(16777215),this.map=null,this.linewidth=1,this.linecap=`round`,this.linejoin=`round`,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.linewidth=e.linewidth,this.linecap=e.linecap,this.linejoin=e.linejoin,this.fog=e.fog,this}},N_=new J,P_=new J,F_=new Zm,I_=new Hg,L_=new bg,R_=new J,z_=new J,B_=class extends wh{constructor(e=new Og,t=new M_){super(),this.isLine=!0,this.type=`Line`,this.geometry=e,this.material=t,this.morphTargetDictionary=void 0,this.morphTargetInfluences=void 0,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),this.material=Array.isArray(e.material)?e.material.slice():e.material,this.geometry=e.geometry,this}computeLineDistances(){let e=this.geometry;if(e.index===null){let t=e.attributes.position,n=[0];for(let e=1,r=t.count;e0){let n=e[t[0]];if(n!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=n.length;er)return;R_.applyMatrix4(e.matrixWorld);let c=t.ray.origin.distanceTo(R_);if(!(ct.far))return{distance:c,point:z_.clone().applyMatrix4(e.matrixWorld),index:o,face:null,faceIndex:null,barycoord:null,object:e}}var H_=new J,U_=new J,W_=class extends B_{constructor(e,t){super(e,t),this.isLineSegments=!0,this.type=`LineSegments`}computeLineDistances(){let e=this.geometry;if(e.index===null){let t=e.attributes.position,n=[];for(let e=0,r=t.count;e0){let n=e[t[0]];if(n!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=n.length;ei.far)return;a.push({distance:c,distanceToRay:Math.sqrt(s),point:n,index:t,face:null,faceIndex:null,barycoord:null,object:o})}}var $_=class extends Gm{constructor(e=[],t=301,n,r,i,a,o,s,c,l){super(e,t,n,r,i,a,o,s,c,l),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(e){this.image=e}},ev=class extends Gm{constructor(e,t,n,r,i,a,o,s,c){super(e,t,n,r,i,a,o,s,c),this.isCanvasTexture=!0,this.needsUpdate=!0}},tv=class extends Gm{constructor(e,t,n=Tf,r,i,a,o=mf,s=mf,c,l=If,u=1){if(l!==1026&&l!==1027)throw Error(`THREE.DepthTexture: format must be either THREE.DepthFormat or THREE.DepthStencilFormat`);super({width:e,height:t,depth:u},r,i,a,o,s,l,n,c),this.isDepthTexture=!0,this.flipY=!1,this.generateMipmaps=!1,this.compareFunction=null}copy(e){return super.copy(e),this.source=new Vm(Object.assign({},e.image)),this.compareFunction=e.compareFunction,this}toJSON(e){let t=super.toJSON(e);return t.compareFunction=this.compareFunction,t}},nv=class extends tv{constructor(e,t=Tf,n=301,r,i,a=mf,o=mf,s,c=If){let l={width:e,height:e,depth:1},u=[l,l,l,l,l,l];super(e,e,t,n,r,i,a,o,s,c),this.image=u,this.isCubeDepthTexture=!0,this.isCubeTexture=!0}get images(){return this.image}set images(e){this.image=e}},rv=class extends Gm{constructor(e=null){super(),this.sourceTexture=e,this.isExternalTexture=!0}copy(e){return super.copy(e),this.sourceTexture=e.sourceTexture,this}},iv=class e extends Og{constructor(e=1,t=1,n=1,r=1,i=1,a=1){super(),this.type=`BoxGeometry`,this.parameters={width:e,height:t,depth:n,widthSegments:r,heightSegments:i,depthSegments:a};let o=this;r=Math.floor(r),i=Math.floor(i),a=Math.floor(a);let s=[],c=[],l=[],u=[],d=0,f=0;p(`z`,`y`,`x`,-1,-1,n,t,e,a,i,0),p(`z`,`y`,`x`,1,-1,n,t,-e,a,i,1),p(`x`,`z`,`y`,1,1,e,n,t,r,a,2),p(`x`,`z`,`y`,1,-1,e,n,-t,r,a,3),p(`x`,`y`,`z`,1,-1,e,t,n,r,i,4),p(`x`,`y`,`z`,-1,-1,e,t,-n,r,i,5),this.setIndex(s),this.setAttribute(`position`,new gg(c,3)),this.setAttribute(`normal`,new gg(l,3)),this.setAttribute(`uv`,new gg(u,2));function p(e,t,n,r,i,a,p,m,h,g,_){let v=a/h,y=p/g,b=a/2,x=p/2,S=m/2,C=h+1,w=g+1,T=0,E=0,D=new J;for(let a=0;a0?1:-1,l.push(D.x,D.y,D.z),u.push(s/h),u.push(1-a/g),T+=1}for(let e=0;e0){let e=(_-1)*m;for(let t=0;t0&&v(!0),t>0&&v(!1)),this.setIndex(l),this.setAttribute(`position`,new gg(u,3)),this.setAttribute(`normal`,new gg(d,3)),this.setAttribute(`uv`,new gg(f,2));function _(){let a=new J,_=new J,v=0,y=(t-e)/n;for(let c=0;c<=i;c++){let l=[],g=c/i,v=g*(t-e)+e;for(let e=0;e<=r;e++){let t=e/r,i=t*s+o,c=Math.sin(i),m=Math.cos(i);_.x=v*c,_.y=-g*n+h,_.z=v*m,u.push(_.x,_.y,_.z),a.set(c,y,m).normalize(),d.push(a.x,a.y,a.z),f.push(t,1-g),l.push(p++)}m.push(l)}for(let n=0;n0||r!==0)&&(l.push(a,o,c),v+=3),(t>0||r!==i-1)&&(l.push(o,s,c),v+=3)}c.addGroup(g,v,0),g+=v}function v(n){let i=p,a=new q,m=new J,_=0,v=n===!0?e:t,y=n===!0?1:-1;for(let e=1;e<=r;e++)u.push(0,h*y,0),d.push(0,y,0),f.push(.5,.5),p++;let b=p;for(let e=0;e<=r;e++){let t=e/r*s+o,n=Math.cos(t),i=Math.sin(t);m.x=v*i,m.y=h*y,m.z=v*n,u.push(m.x,m.y,m.z),d.push(0,y,0),a.x=n*.5+.5,a.y=i*.5*y+.5,f.push(a.x,a.y),p++}for(let e=0;e.9&&Math.min(t,n,r)<.1&&(t<.2&&(a[e+0]+=1),n<.2&&(a[e+2]+=1),r<.2&&(a[e+4]+=1))}}function d(e){i.push(e.x,e.y,e.z)}function f(t,n){let r=t*3;n.x=e[r+0],n.y=e[r+1],n.z=e[r+2]}function p(){let e=new J,t=new J,n=new J,r=new J,o=new q,s=new q,c=new q;for(let l=0,u=0;l0)s=r-1;else{s=r;break}if(r=s,n[r]===a)return r/(i-1);let l=n[r],u=n[r+1]-l,d=(a-l)/u;return(r+d)/(i-1)}getTangent(e,t){let n=1e-4,r=e-n,i=e+n;r<0&&(r=0),i>1&&(i=1);let a=this.getPoint(r),o=this.getPoint(i),s=t||(a.isVector2?new q:new J);return s.copy(o).sub(a).normalize(),s}getTangentAt(e,t){let n=this.getUtoTmapping(e);return this.getTangent(n,t)}computeFrenetFrames(e,t=!1){let n=new J,r=[],i=[],a=[],o=new J,s=new Zm;for(let t=0;t<=e;t++){let n=t/e;r[t]=this.getTangentAt(n,new J)}i[0]=new J,a[0]=new J;let c=Number.MAX_VALUE,l=Math.abs(r[0].x),u=Math.abs(r[0].y),d=Math.abs(r[0].z);l<=c&&(c=l,n.set(1,0,0)),u<=c&&(c=u,n.set(0,1,0)),d<=c&&n.set(0,0,1),o.crossVectors(r[0],n).normalize(),i[0].crossVectors(r[0],o),a[0].crossVectors(r[0],i[0]);for(let t=1;t<=e;t++){if(i[t]=i[t-1].clone(),a[t]=a[t-1].clone(),o.crossVectors(r[t-1],r[t]),o.length()>2**-52){o.normalize();let e=Math.acos(om(r[t-1].dot(r[t]),-1,1));i[t].applyMatrix4(s.makeRotationAxis(o,e))}a[t].crossVectors(r[t],i[t])}if(t===!0){let t=Math.acos(om(i[0].dot(i[e]),-1,1));t/=e,r[0].dot(o.crossVectors(i[0],i[e]))>0&&(t=-t);for(let n=1;n<=e;n++)i[n].applyMatrix4(s.makeRotationAxis(r[n],t*n)),a[n].crossVectors(r[n],i[n])}return{tangents:r,normals:i,binormals:a}}clone(){return new this.constructor().copy(this)}copy(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}toJSON(){let e={metadata:{version:4.7,type:`Curve`,generator:`Curve.toJSON`}};return e.arcLengthDivisions=this.arcLengthDivisions,e.type=this.type,e}fromJSON(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}},dv=class extends uv{constructor(e=0,t=0,n=1,r=1,i=0,a=Math.PI*2,o=!1,s=0){super(),this.isEllipseCurve=!0,this.type=`EllipseCurve`,this.aX=e,this.aY=t,this.xRadius=n,this.yRadius=r,this.aStartAngle=i,this.aEndAngle=a,this.aClockwise=o,this.aRotation=s}getPoint(e,t=new q){let n=t,r=Math.PI*2,i=this.aEndAngle-this.aStartAngle,a=Math.abs(i)<2**-52;for(;i<0;)i+=r;for(;i>r;)i-=r;i<2**-52&&(i=a?0:r),this.aClockwise===!0&&!a&&(i===r?i=-r:i-=r);let o=this.aStartAngle+e*i,s=this.aX+this.xRadius*Math.cos(o),c=this.aY+this.yRadius*Math.sin(o);if(this.aRotation!==0){let e=Math.cos(this.aRotation),t=Math.sin(this.aRotation),n=s-this.aX,r=c-this.aY;s=n*e-r*t+this.aX,c=n*t+r*e+this.aY}return n.set(s,c)}copy(e){return super.copy(e),this.aX=e.aX,this.aY=e.aY,this.xRadius=e.xRadius,this.yRadius=e.yRadius,this.aStartAngle=e.aStartAngle,this.aEndAngle=e.aEndAngle,this.aClockwise=e.aClockwise,this.aRotation=e.aRotation,this}toJSON(){let e=super.toJSON();return e.aX=this.aX,e.aY=this.aY,e.xRadius=this.xRadius,e.yRadius=this.yRadius,e.aStartAngle=this.aStartAngle,e.aEndAngle=this.aEndAngle,e.aClockwise=this.aClockwise,e.aRotation=this.aRotation,e}fromJSON(e){return super.fromJSON(e),this.aX=e.aX,this.aY=e.aY,this.xRadius=e.xRadius,this.yRadius=e.yRadius,this.aStartAngle=e.aStartAngle,this.aEndAngle=e.aEndAngle,this.aClockwise=e.aClockwise,this.aRotation=e.aRotation,this}},fv=class extends dv{constructor(e,t,n,r,i,a){super(e,t,n,n,r,i,a),this.isArcCurve=!0,this.type=`ArcCurve`}};function pv(){let e=0,t=0,n=0,r=0;function i(i,a,o,s){e=i,t=o,n=-3*i+3*a-2*o-s,r=2*i-2*a+o+s}return{initCatmullRom:function(e,t,n,r,a){i(t,n,a*(n-e),a*(r-t))},initNonuniformCatmullRom:function(e,t,n,r,a,o,s){let c=(t-e)/a-(n-e)/(a+o)+(n-t)/o,l=(n-t)/o-(r-t)/(o+s)+(r-n)/s;c*=o,l*=o,i(t,n,c,l)},calc:function(i){let a=i*i,o=a*i;return e+t*i+n*a+r*o}}}var mv=new J,hv=new J,gv=new pv,_v=new pv,vv=new pv,yv=class extends uv{constructor(e=[],t=!1,n=`centripetal`,r=.5){super(),this.isCatmullRomCurve3=!0,this.type=`CatmullRomCurve3`,this.points=e,this.closed=t,this.curveType=n,this.tension=r}getPoint(e,t=new J){let n=t,r=this.points,i=r.length,a=(i-+!this.closed)*e,o=Math.floor(a),s=a-o;this.closed?o+=o>0?0:(Math.floor(Math.abs(o)/i)+1)*i:s===0&&o===i-1&&(o=i-2,s=1);let c,l;this.closed||o>0?c=r[(o-1)%i]:(hv.subVectors(r[0],r[1]).add(r[0]),c=hv);let u=r[o%i],d=r[(o+1)%i];if(this.closed||o+2r.length-2?r.length-1:a+1],u=r[a>r.length-3?r.length-1:a+2];return n.set(bv(o,s.x,c.x,l.x,u.x),bv(o,s.y,c.y,l.y,u.y)),n}copy(e){super.copy(e),this.points=[];for(let t=0,n=e.points.length;t0)&&f.push(t,i,c),(e!==n-1||s0&&(t.defines=this.defines),t.vertexShader=this.vertexShader,t.fragmentShader=this.fragmentShader,t.lights=this.lights,t.clipping=this.clipping;let n={};for(let e in this.extensions)this.extensions[e]===!0&&(n[e]=!0);return Object.keys(n).length>0&&(t.extensions=n),t}fromJSON(e,t){if(super.fromJSON(e,t),e.uniforms!==void 0)for(let n in e.uniforms){let r=e.uniforms[n];switch(this.uniforms[n]={},r.type){case`t`:this.uniforms[n].value=t[r.value]||null;break;case`c`:this.uniforms[n].value=new Y().setHex(r.value);break;case`v2`:this.uniforms[n].value=new q().fromArray(r.value);break;case`v3`:this.uniforms[n].value=new J().fromArray(r.value);break;case`v4`:this.uniforms[n].value=new Dm().fromArray(r.value);break;case`m3`:this.uniforms[n].value=new dm().fromArray(r.value);break;case`m4`:this.uniforms[n].value=new Mm().fromArray(r.value);break;default:this.uniforms[n].value=r.value}}if(e.defines!==void 0&&(this.defines=e.defines),e.vertexShader!==void 0&&(this.vertexShader=e.vertexShader),e.fragmentShader!==void 0&&(this.fragmentShader=e.fragmentShader),e.glslVersion!==void 0&&(this.glslVersion=e.glslVersion),e.extensions!==void 0)for(let t in e.extensions)this.extensions[t]=e.extensions[t];return e.lights!==void 0&&(this.lights=e.lights),e.clipping!==void 0&&(this.clipping=e.clipping),this}},Nv=class extends Mv{constructor(e){super(e),this.isRawShaderMaterial=!0,this.type=`RawShaderMaterial`}},Pv=class extends vg{constructor(e){super(),this.isMeshStandardMaterial=!0,this.type=`MeshStandardMaterial`,this.defines={STANDARD:``},this.color=new Y(16777215),this.roughness=1,this.metalness=0,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Y(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new q(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new Hm,this.envMapIntensity=1,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=`round`,this.wireframeLinejoin=`round`,this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.defines={STANDARD:``},this.color.copy(e.color),this.roughness=e.roughness,this.metalness=e.metalness,this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.roughnessMap=e.roughnessMap,this.metalnessMap=e.metalnessMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.envMapIntensity=e.envMapIntensity,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}},Fv=class extends Pv{constructor(e){super(),this.isMeshPhysicalMaterial=!0,this.defines={STANDARD:``,PHYSICAL:``},this.type=`MeshPhysicalMaterial`,this.anisotropyRotation=0,this.anisotropyMap=null,this.clearcoatMap=null,this.clearcoatRoughness=0,this.clearcoatRoughnessMap=null,this.clearcoatNormalScale=new q(1,1),this.clearcoatNormalMap=null,this.ior=1.5,Object.defineProperty(this,"reflectivity",{get:function(){return Vp(2.5*(this.ior-1)/(this.ior+1),0,1)},set:function(e){this.ior=(1+.4*e)/(1-.4*e)}}),this.iridescenceMap=null,this.iridescenceIOR=1.3,this.iridescenceThicknessRange=[100,400],this.iridescenceThicknessMap=null,this.sheenColor=new Y(0),this.sheenColorMap=null,this.sheenRoughness=1,this.sheenRoughnessMap=null,this.transmissionMap=null,this.thickness=0,this.thicknessMap=null,this.attenuationDistance=1/0,this.attenuationColor=new Y(1,1,1),this.specularIntensity=1,this.specularIntensityMap=null,this.specularColor=new Y(1,1,1),this.specularColorMap=null,this._anisotropy=0,this._clearcoat=0,this._dispersion=0,this._iridescence=0,this._retroreflectivity=0,this._sheen=0,this._transmission=0,this.setValues(e)}get anisotropy(){return this._anisotropy}set anisotropy(e){this._anisotropy>0!=e>0&&this.version++,this._anisotropy=e}get clearcoat(){return this._clearcoat}set clearcoat(e){this._clearcoat>0!=e>0&&this.version++,this._clearcoat=e}get iridescence(){return this._iridescence}set iridescence(e){this._iridescence>0!=e>0&&this.version++,this._iridescence=e}get dispersion(){return this._dispersion}set dispersion(e){this._dispersion>0!=e>0&&this.version++,this._dispersion=e}get retroreflectivity(){return this._retroreflectivity}set retroreflectivity(e){this._retroreflectivity>0!=e>0&&this.version++,this._retroreflectivity=e}get sheen(){return this._sheen}set sheen(e){this._sheen>0!=e>0&&this.version++,this._sheen=e}get transmission(){return this._transmission}set transmission(e){this._transmission>0!=e>0&&this.version++,this._transmission=e}copy(e){return super.copy(e),this.defines={STANDARD:``,PHYSICAL:``},this.anisotropy=e.anisotropy,this.anisotropyRotation=e.anisotropyRotation,this.anisotropyMap=e.anisotropyMap,this.clearcoat=e.clearcoat,this.clearcoatMap=e.clearcoatMap,this.clearcoatRoughness=e.clearcoatRoughness,this.clearcoatRoughnessMap=e.clearcoatRoughnessMap,this.clearcoatNormalMap=e.clearcoatNormalMap,this.clearcoatNormalScale.copy(e.clearcoatNormalScale),this.dispersion=e.dispersion,this.ior=e.ior,this.iridescence=e.iridescence,this.iridescenceMap=e.iridescenceMap,this.iridescenceIOR=e.iridescenceIOR,this.iridescenceThicknessRange=[...e.iridescenceThicknessRange],this.iridescenceThicknessMap=e.iridescenceThicknessMap,this.retroreflectivity=e.retroreflectivity,this.sheen=e.sheen,this.sheenColor.copy(e.sheenColor),this.sheenColorMap=e.sheenColorMap,this.sheenRoughness=e.sheenRoughness,this.sheenRoughnessMap=e.sheenRoughnessMap,this.transmission=e.transmission,this.transmissionMap=e.transmissionMap,this.thickness=e.thickness,this.thicknessMap=e.thicknessMap,this.attenuationDistance=e.attenuationDistance,this.attenuationColor.copy(e.attenuationColor),this.specularIntensity=e.specularIntensity,this.specularIntensityMap=e.specularIntensityMap,this.specularColor.copy(e.specularColor),this.specularColorMap=e.specularColorMap,this}},Iv=class extends vg{constructor(e){super(),this.isMeshDepthMaterial=!0,this.type=`MeshDepthMaterial`,this.depthPacking=mp,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(e)}copy(e){return super.copy(e),this.depthPacking=e.depthPacking,this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this}},Lv=class extends vg{constructor(e){super(),this.isMeshDistanceMaterial=!0,this.type=`MeshDistanceMaterial`,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(e)}copy(e){return super.copy(e),this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this}};function Rv(e,t){return!e||e.constructor===t?e:typeof t.BYTES_PER_ELEMENT==`number`?new t(e):Array.prototype.slice.call(e)}function zv(e){return e!==void 0&&e.inTangents!==void 0&&e.outTangents!==void 0}function Bv(e){function t(t,n){return e[t]-e[n]}let n=e.length,r=Array(n);for(let e=0;e!==n;++e)r[e]=e;return r.sort(t),r}function Vv(e,t,n){let r=e.length,i=new e.constructor(r);for(let a=0,o=0;o!==r;++a){let r=n[a]*t;for(let n=0;n!==t;++n)i[o++]=e[r+n]}return i}function Hv(e,t,n,r){let i=1,a=e[0];for(;a!==void 0&&a[r]===void 0;)a=e[i++];if(a===void 0)return;let o=a[r];if(o!==void 0)if(Array.isArray(o))do o=a[r],o!==void 0&&(t.push(a.time),n.push(...o)),a=e[i++];while(a!==void 0);else if(o.toArray!==void 0)do o=a[r],o!==void 0&&(t.push(a.time),o.toArray(n,n.length)),a=e[i++];while(a!==void 0);else do o=a[r],o!==void 0&&(t.push(a.time),n.push(o)),a=e[i++];while(a!==void 0)}var Uv=class{constructor(e,t,n,r){this.parameterPositions=e,this._cachedIndex=0,this.resultBuffer=r===void 0?new t.constructor(n):r,this.sampleValues=t,this.valueSize=n,this.settings=null,this.DefaultSettings_={}}evaluate(e){let t=this.parameterPositions,n=this._cachedIndex,r=t[n],i=t[n-1];validate_interval:{seek:{let a;linear_scan:{forward_scan:if(!(e=i)){let o=t[1];e=i)break seek}a=n,n=0;break linear_scan}break validate_interval}for(;n>>1;et;)--a;if(++a,i!==0||a!==r){i>=a&&(a=Math.max(a,1),i=a-1);let e=this.getValueSize();this.times=n.slice(i,a),this.values=this.values.slice(i*e,a*e)}return this}validate(){let e=!0,t=this.getValueSize();t-Math.floor(t)!==0&&(jp(`KeyframeTrack: Invalid value size in track.`,this),e=!1);let n=this.times,r=this.values,i=n.length;i===0&&(jp(`KeyframeTrack: Track is empty.`,this),e=!1);let a=null;for(let t=0;t!==i;t++){let r=n[t];if(typeof r==`number`&&isNaN(r)){jp(`KeyframeTrack: Time is not a valid number.`,this,t,r),e=!1;break}if(a!==null&&a>r){jp(`KeyframeTrack: Out of order keys.`,this,t,r,a),e=!1;break}a=r}if(r!==void 0&&wp(r))for(let t=0,n=r.length;t!==n;++t){let n=r[t];if(isNaN(n)){jp(`KeyframeTrack: Value is not a valid number.`,this,t,n),e=!1;break}}return e}optimize(){let e=this.times.slice(),t=this.values.slice(),n=this.getValueSize(),r=this.getInterpolation()===cp,i=e.length-1,a=1;for(let o=1;o0){e[a]=e[i];for(let e=i*n,r=a*n,o=0;o!==n;++o)t[r+o]=t[e+o];++a}return a===e.length?(this.times=e,this.values=t):(this.times=e.slice(0,a),this.values=t.slice(0,a*n)),this}clone(){let e=this.times.slice(),t=this.values.slice(),n=this.constructor,r=new n(this.name,e,t);return r.createInterpolant=this.createInterpolant,zv(this.settings)&&(r.settings={inTangents:this.settings.inTangents.slice(),outTangents:this.settings.outTangents.slice()}),r}};function Qv(e,t){for(let n=0,r=e.length;n!==r;n+=2)e[n]*=t}Zv.prototype.ValueTypeName=``,Zv.prototype.TimeBufferType=Float32Array,Zv.prototype.ValueBufferType=Float32Array,Zv.prototype.DefaultInterpolation=sp;var $v=class extends Zv{constructor(e,t,n){super(e,t,n)}};$v.prototype.ValueTypeName=`bool`,$v.prototype.ValueBufferType=Array,$v.prototype.DefaultInterpolation=op,$v.prototype.InterpolantFactoryMethodLinear=void 0,$v.prototype.InterpolantFactoryMethodSmooth=void 0;var ey=class extends Zv{constructor(e,t,n,r){super(e,t,n,r)}};ey.prototype.ValueTypeName=`color`;var ty=class extends Zv{constructor(e,t,n,r){super(e,t,n,r)}};ty.prototype.ValueTypeName=`number`;var ny=class extends Uv{constructor(e,t,n,r){super(e,t,n,r)}interpolate_(e,t,n,r){let i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=(n-t)/(r-t),c=e*o;for(let e=c+o;c!==e;c+=4)cm.slerpFlat(i,0,a,c-o,a,c,s);return i}},ry=class extends Zv{constructor(e,t,n,r){super(e,t,n,r)}InterpolantFactoryMethodLinear(e){return new ny(this.times,this.values,this.getValueSize(),e)}};ry.prototype.ValueTypeName=`quaternion`,ry.prototype.InterpolantFactoryMethodSmooth=void 0;var iy=class extends Zv{constructor(e,t,n){super(e,t,n)}};iy.prototype.ValueTypeName=`string`,iy.prototype.ValueBufferType=Array,iy.prototype.DefaultInterpolation=op,iy.prototype.InterpolantFactoryMethodLinear=void 0,iy.prototype.InterpolantFactoryMethodSmooth=void 0;var ay=class extends Zv{constructor(e,t,n,r){super(e,t,n,r)}};ay.prototype.ValueTypeName=`vector`;var oy=class{constructor(e=``,t=-1,n=[],r=pp){this.name=e,this.tracks=n,this.duration=t,this.blendMode=r,this.uuid=Bp(),this.userData={},this.duration<0&&this.resetDuration()}static parse(e){let t=[],n=e.tracks,r=1/(e.fps||1);for(let e=0,i=n.length;e!==i;++e)t.push(cy(n[e]).scale(r));let i=new this(e.name,e.duration,t,e.blendMode);return i.uuid=e.uuid,i.userData=JSON.parse(e.userData||`{}`),i}static toJSON(e){let t=[],n=e.tracks,r={name:e.name,duration:e.duration,tracks:t,uuid:e.uuid,blendMode:e.blendMode,userData:JSON.stringify(e.userData)};for(let e=0,r=n.length;e!==r;++e)t.push(Zv.toJSON(n[e]));return r}static CreateFromMorphTargetSequence(e,t,n,r){let i=t.length,a=[];for(let e=0;e1){let e=a[1],t=r[e];t||(r[e]=t=[]),t.push(n)}}let a=[];for(let e in r)a.push(this.CreateFromMorphTargetSequence(e,r[e],t,n));return a}resetDuration(){let e=this.tracks,t=0;for(let n=0,r=e.length;n!==r;++n){let e=this.tracks[n];t=Math.max(t,e.times[e.times.length-1])}return this.duration=t,this}trim(){for(let e=0;e{t&&t(i),this.manager.itemEnd(e)},0);return}if(py[e]!==void 0){py[e].push({onLoad:t,onProgress:n,onError:r});return}py[e]=[],py[e].push({onLoad:t,onProgress:n,onError:r});let a=new Request(e,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?`include`:`same-origin`,signal:typeof AbortSignal.any==`function`?AbortSignal.any([this._abortController.signal,this.manager.abortController.signal]):this._abortController.signal}),o=this.mimeType,s=this.responseType;fetch(a).then(t=>{if(t.status===200||t.status===0){if(t.status===0&&Ap(`FileLoader: HTTP Status 0 received.`),typeof ReadableStream>`u`||t.body===void 0||t.body.getReader===void 0)return t;let n=py[e],r=t.body.getReader(),i=t.headers.get(`X-File-Size`)||t.headers.get(`Content-Length`),a=i?parseInt(i):0,o=a!==0,s=0,c=new ReadableStream({start(e){t();function t(){r.read().then(({done:r,value:i})=>{if(r)e.close();else{s+=i.byteLength;let r=new ProgressEvent(`progress`,{lengthComputable:o,loaded:s,total:a});for(let e=0,t=n.length;e{e.error(t)})}}});return new Response(c)}else throw new my(`fetch for "${t.url}" responded with ${t.status}: ${t.statusText}`,t)}).then(e=>{switch(s){case`arraybuffer`:return e.arrayBuffer();case`blob`:return e.blob();case`document`:return e.text().then(e=>new DOMParser().parseFromString(e,o));case`json`:return e.json();default:if(o===``)return e.text();{let t=/charset="?([^;"\s]*)"?/i.exec(o),n=t&&t[1]?t[1].toLowerCase():void 0,r=new TextDecoder(n);return e.arrayBuffer().then(e=>r.decode(e))}}}).then(t=>{ly.add(`file:${e}`,t);let n=py[e];delete py[e];for(let e=0,r=n.length;e{let n=py[e];if(n===void 0)throw this.manager.itemError(e),t;delete py[e];for(let e=0,r=n.length;e{this.manager.itemEnd(e)}),this.manager.itemStart(e)}setResponseType(e){return this.responseType=e,this}setMimeType(e){return this.mimeType=e,this}abort(){return this._abortController.abort(),this._abortController=new AbortController,this}},gy=new WeakMap,_y=class extends fy{constructor(e){super(e)}load(e,t,n,r){this.path!==void 0&&(e=this.path+e),e=this.manager.resolveURL(e);let i=this,a=ly.get(`image:${e}`);if(a!==void 0){if(a.complete===!0)i.manager.itemStart(e),setTimeout(function(){t&&t(a),i.manager.itemEnd(e)},0);else{let e=gy.get(a);e===void 0&&(e=[],gy.set(a,e)),e.push({onLoad:t,onError:r})}return a}let o=Tp(`img`);function s(){l(),t&&t(this);let n=gy.get(this)||[];for(let e=0;e`u`&&Ap(`ImageBitmapLoader: createImageBitmap() not supported.`),typeof fetch>`u`&&Ap(`ImageBitmapLoader: fetch() not supported.`),this.options={premultiplyAlpha:`none`},this._abortController=new AbortController}setOptions(e){return this.options=e,this}load(e,t,n,r){e===void 0&&(e=``),this.path!==void 0&&(e=this.path+e),e=this.manager.resolveURL(e);let i=this,a=ly.get(`image-bitmap:${e}`);if(a!==void 0){if(i.manager.itemStart(e),a.then){a.then(n=>{Vy.has(a)===!0?(r&&r(Vy.get(a)),i.manager.itemError(e),i.manager.itemEnd(e)):(t&&t(n),i.manager.itemEnd(e))});return}setTimeout(function(){t&&t(a),i.manager.itemEnd(e)},0);return}let o={};o.credentials=this.crossOrigin===`anonymous`?`same-origin`:`include`,o.headers=this.requestHeader,o.signal=typeof AbortSignal.any==`function`?AbortSignal.any([this._abortController.signal,this.manager.abortController.signal]):this._abortController.signal;let s=fetch(e,o).then(function(e){return e.blob()}).then(function(e){return createImageBitmap(e,Object.assign({},i.options,{colorSpaceConversion:`none`}))}).then(function(n){return ly.add(`image-bitmap:${e}`,n),t&&t(n),i.manager.itemEnd(e),n}).catch(function(t){r&&r(t),Vy.set(s,t),ly.remove(`image-bitmap:${e}`),i.manager.itemError(e),i.manager.itemEnd(e)});ly.add(`image-bitmap:${e}`,s),i.manager.itemStart(e)}abort(){return this._abortController.abort(),this._abortController=new AbortController,this}},Uy=-90,Wy=1,Gy=class extends ah{constructor(e,t,n){super(),this.type=`CubeCamera`,this.renderTarget=n,this.coordinateSystem=null,this.activeMipmapLevel=0;let r=new My(Uy,Wy,e,t);r.layers=this.layers,this.add(r);let i=new My(Uy,Wy,e,t);i.layers=this.layers,this.add(i);let a=new My(Uy,Wy,e,t);a.layers=this.layers,this.add(a);let o=new My(Uy,Wy,e,t);o.layers=this.layers,this.add(o);let s=new My(Uy,Wy,e,t);s.layers=this.layers,this.add(s);let c=new My(Uy,Wy,e,t);c.layers=this.layers,this.add(c)}updateCoordinateSystem(){let e=this.coordinateSystem,t=this.children.concat(),[n,r,i,a,o,s]=t;for(let e of t)this.remove(e);if(e===2e3)n.up.set(0,1,0),n.lookAt(1,0,0),r.up.set(0,1,0),r.lookAt(-1,0,0),i.up.set(0,0,-1),i.lookAt(0,1,0),a.up.set(0,0,1),a.lookAt(0,-1,0),o.up.set(0,1,0),o.lookAt(0,0,1),s.up.set(0,1,0),s.lookAt(0,0,-1);else if(e===2001)n.up.set(0,-1,0),n.lookAt(-1,0,0),r.up.set(0,-1,0),r.lookAt(1,0,0),i.up.set(0,0,1),i.lookAt(0,1,0),a.up.set(0,0,-1),a.lookAt(0,-1,0),o.up.set(0,-1,0),o.lookAt(0,0,1),s.up.set(0,-1,0),s.lookAt(0,0,-1);else throw Error(`THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: `+e);for(let e of t)this.add(e),e.updateMatrixWorld()}update(e,t){this.parent===null&&this.updateMatrixWorld();let{renderTarget:n,activeMipmapLevel:r}=this;this.coordinateSystem!==e.coordinateSystem&&(this.coordinateSystem=e.coordinateSystem,this.updateCoordinateSystem());let[i,a,o,s,c,l]=this.children,u=e.getRenderTarget(),d=e.getActiveCubeFace(),f=e.getActiveMipmapLevel(),p=e.xr.enabled;e.xr.enabled=!1;let m=n.texture.generateMipmaps;n.texture.generateMipmaps=!1;let h=!1;h=e.isWebGLRenderer===!0?e.state.buffers.depth.getReversed():e.reversedDepthBuffer,e.setRenderTarget(n,0,r),h&&e.autoClear===!1&&e.clearDepth(),e.render(t,i),e.setRenderTarget(n,1,r),h&&e.autoClear===!1&&e.clearDepth(),e.render(t,a),e.setRenderTarget(n,2,r),h&&e.autoClear===!1&&e.clearDepth(),e.render(t,o),e.setRenderTarget(n,3,r),h&&e.autoClear===!1&&e.clearDepth(),e.render(t,s),e.setRenderTarget(n,4,r),h&&e.autoClear===!1&&e.clearDepth(),e.render(t,c),n.texture.generateMipmaps=m,e.setRenderTarget(n,5,r),h&&e.autoClear===!1&&e.clearDepth(),e.render(t,l),e.setRenderTarget(u,d,f),e.xr.enabled=p,n.texture.needsPMREMUpdate=!0}},Ky=class extends My{constructor(e=[]){super(),this.isArrayCamera=!0,this.isMultiViewCamera=!1,this.cameras=e}},qy=class{constructor(){this._previousTime=0,this._currentTime=0,this._startTime=performance.now(),this._delta=0,this._elapsed=0,this._timescale=1,this._document=null,this._pageVisibilityHandler=null}connect(e){this._document=e,e.hidden!==void 0&&(this._pageVisibilityHandler=Jy.bind(this),e.addEventListener(`visibilitychange`,this._pageVisibilityHandler,!1))}disconnect(){this._pageVisibilityHandler!==null&&(this._document.removeEventListener(`visibilitychange`,this._pageVisibilityHandler),this._pageVisibilityHandler=null),this._document=null}getDelta(){return this._delta/1e3}getElapsed(){return this._elapsed/1e3}getTimescale(){return this._timescale}setTimescale(e){return this._timescale=e,this}reset(){return this._currentTime=performance.now()-this._startTime,this}dispose(){this.disconnect()}update(e){return this._pageVisibilityHandler!==null&&this._document.hidden===!0?this._delta=0:(this._previousTime=this._currentTime,this._currentTime=(e===void 0?performance.now():e)-this._startTime,this._delta=(this._currentTime-this._previousTime)*this._timescale,this._elapsed+=this._delta),this}};function Jy(){this._document.hidden===!1&&this.reset()}var Yy=`\\[\\]\\.:\\/`,Xy=RegExp(`[\\[\\]\\.:\\/]`,`g`),Zy=`[^\\[\\]\\.:\\/]`,Qy=`[^`+Yy.replace(`\\.`,``)+`]`,$y=`((?:WC+[\\/:])*)`.replace(`WC`,Zy),eb=`(WCOD+)?`.replace(`WCOD`,Qy),tb=`(?:\\.(WC+)(?:\\[(.+)\\])?)?`.replace(`WC`,Zy),nb=`\\.(WC+)(?:\\[(.+)\\])?`.replace(`WC`,Zy),rb=RegExp(`^`+$y+eb+tb+nb+`$`),ib=[`material`,`materials`,`bones`,`map`],ab=class{constructor(e,t,n){let r=n||ob.parseTrackName(t);this._targetGroup=e,this._bindings=e.subscribe_(t,r)}getValue(e,t){this.bind();let n=this._targetGroup.nCachedObjects_,r=this._bindings[n];r!==void 0&&r.getValue(e,t)}setValue(e,t){let n=this._bindings;for(let r=this._targetGroup.nCachedObjects_,i=n.length;r!==i;++r)n[r].setValue(e,t)}bind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,n=e.length;t!==n;++t)e[t].bind()}unbind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,n=e.length;t!==n;++t)e[t].unbind()}},ob=class e{constructor(t,n,r){this.path=n,this.parsedPath=r||e.parseTrackName(n),this.node=e.findNode(t,this.parsedPath.nodeName),this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,n,r){return t&&t.isAnimationObjectGroup?new e.Composite(t,n,r):new e(t,n,r)}static sanitizeNodeName(e){return e.replace(/\s/g,`_`).replace(Xy,``)}static parseTrackName(e){let t=rb.exec(e);if(t===null)throw Error(`THREE.PropertyBinding: Cannot parse trackName: `+e);let n={nodeName:t[2],objectName:t[3],objectIndex:t[4],propertyName:t[5],propertyIndex:t[6]},r=n.nodeName&&n.nodeName.lastIndexOf(`.`);if(r!==void 0&&r!==-1){let e=n.nodeName.substring(r+1);ib.indexOf(e)!==-1&&(n.nodeName=n.nodeName.substring(0,r),n.objectName=e)}if(n.propertyName===null||n.propertyName.length===0)throw Error(`THREE.PropertyBinding: can not parse propertyName from trackName: `+e);return n}static findNode(e,t){if(t===void 0||t===``||t===`.`||t===-1||t===e.name||t===e.uuid)return e;if(e.skeleton){let n=e.skeleton.getBoneByName(t);if(n!==void 0)return n}if(e.children){let n=function(e){for(let r=0;r=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,sb).distanceTo(e)}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}},lb=new J,ub=new Mm,db=new Mm,fb=class extends T_{constructor(e){let t=pb(e),n=new lg,r=[],i=[];for(let e=0;ee.start-t.start);let t=0;for(let e=1;e0&&(t.defines=this.defines),t.vertexShader=this.vertexShader,t.fragmentShader=this.fragmentShader,t.lights=this.lights,t.clipping=this.clipping;let n={};for(let e in this.extensions)this.extensions[e]===!0&&(n[e]=!0);return Object.keys(n).length>0&&(t.extensions=n),t}fromJSON(e,t){if(super.fromJSON(e,t),e.uniforms!==void 0)for(let n in e.uniforms){let r=e.uniforms[n];switch(this.uniforms[n]={},r.type){case`t`:this.uniforms[n].value=t[r.value]||null;break;case`c`:this.uniforms[n].value=new Y().setHex(r.value);break;case`v2`:this.uniforms[n].value=new q().fromArray(r.value);break;case`v3`:this.uniforms[n].value=new J().fromArray(r.value);break;case`v4`:this.uniforms[n].value=new Km().fromArray(r.value);break;case`m3`:this.uniforms[n].value=new Am().fromArray(r.value);break;case`m4`:this.uniforms[n].value=new Zm().fromArray(r.value);break;default:this.uniforms[n].value=r.value}}if(e.defines!==void 0&&(this.defines=e.defines),e.vertexShader!==void 0&&(this.vertexShader=e.vertexShader),e.fragmentShader!==void 0&&(this.fragmentShader=e.fragmentShader),e.glslVersion!==void 0&&(this.glslVersion=e.glslVersion),e.extensions!==void 0)for(let t in e.extensions)this.extensions[t]=e.extensions[t];return e.lights!==void 0&&(this.lights=e.lights),e.clipping!==void 0&&(this.clipping=e.clipping),this}},Qv=class extends Zv{constructor(e){super(e),this.isRawShaderMaterial=!0,this.type=`RawShaderMaterial`}},$v=class extends Lg{constructor(e){super(),this.isMeshStandardMaterial=!0,this.type=`MeshStandardMaterial`,this.defines={STANDARD:``},this.color=new Y(16777215),this.roughness=1,this.metalness=0,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Y(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new q(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new sh,this.envMapIntensity=1,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=`round`,this.wireframeLinejoin=`round`,this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.defines={STANDARD:``},this.color.copy(e.color),this.roughness=e.roughness,this.metalness=e.metalness,this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.roughnessMap=e.roughnessMap,this.metalnessMap=e.metalnessMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.envMapIntensity=e.envMapIntensity,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}},ey=class extends $v{constructor(e){super(),this.isMeshPhysicalMaterial=!0,this.defines={STANDARD:``,PHYSICAL:``},this.type=`MeshPhysicalMaterial`,this.anisotropyRotation=0,this.anisotropyMap=null,this.clearcoatMap=null,this.clearcoatRoughness=0,this.clearcoatRoughnessMap=null,this.clearcoatNormalScale=new q(1,1),this.clearcoatNormalMap=null,this.ior=1.5,Object.defineProperty(this,"reflectivity",{get:function(){return om(2.5*(this.ior-1)/(this.ior+1),0,1)},set:function(e){this.ior=(1+.4*e)/(1-.4*e)}}),this.iridescenceMap=null,this.iridescenceIOR=1.3,this.iridescenceThicknessRange=[100,400],this.iridescenceThicknessMap=null,this.sheenColor=new Y(0),this.sheenColorMap=null,this.sheenRoughness=1,this.sheenRoughnessMap=null,this.transmissionMap=null,this.thickness=0,this.thicknessMap=null,this.attenuationDistance=1/0,this.attenuationColor=new Y(1,1,1),this.specularIntensity=1,this.specularIntensityMap=null,this.specularColor=new Y(1,1,1),this.specularColorMap=null,this._anisotropy=0,this._clearcoat=0,this._dispersion=0,this._iridescence=0,this._retroreflectivity=0,this._sheen=0,this._transmission=0,this.setValues(e)}get anisotropy(){return this._anisotropy}set anisotropy(e){this._anisotropy>0!=e>0&&this.version++,this._anisotropy=e}get clearcoat(){return this._clearcoat}set clearcoat(e){this._clearcoat>0!=e>0&&this.version++,this._clearcoat=e}get iridescence(){return this._iridescence}set iridescence(e){this._iridescence>0!=e>0&&this.version++,this._iridescence=e}get dispersion(){return this._dispersion}set dispersion(e){this._dispersion>0!=e>0&&this.version++,this._dispersion=e}get retroreflectivity(){return this._retroreflectivity}set retroreflectivity(e){this._retroreflectivity>0!=e>0&&this.version++,this._retroreflectivity=e}get sheen(){return this._sheen}set sheen(e){this._sheen>0!=e>0&&this.version++,this._sheen=e}get transmission(){return this._transmission}set transmission(e){this._transmission>0!=e>0&&this.version++,this._transmission=e}copy(e){return super.copy(e),this.defines={STANDARD:``,PHYSICAL:``},this.anisotropy=e.anisotropy,this.anisotropyRotation=e.anisotropyRotation,this.anisotropyMap=e.anisotropyMap,this.clearcoat=e.clearcoat,this.clearcoatMap=e.clearcoatMap,this.clearcoatRoughness=e.clearcoatRoughness,this.clearcoatRoughnessMap=e.clearcoatRoughnessMap,this.clearcoatNormalMap=e.clearcoatNormalMap,this.clearcoatNormalScale.copy(e.clearcoatNormalScale),this.dispersion=e.dispersion,this.ior=e.ior,this.iridescence=e.iridescence,this.iridescenceMap=e.iridescenceMap,this.iridescenceIOR=e.iridescenceIOR,this.iridescenceThicknessRange=[...e.iridescenceThicknessRange],this.iridescenceThicknessMap=e.iridescenceThicknessMap,this.retroreflectivity=e.retroreflectivity,this.sheen=e.sheen,this.sheenColor.copy(e.sheenColor),this.sheenColorMap=e.sheenColorMap,this.sheenRoughness=e.sheenRoughness,this.sheenRoughnessMap=e.sheenRoughnessMap,this.transmission=e.transmission,this.transmissionMap=e.transmissionMap,this.thickness=e.thickness,this.thicknessMap=e.thicknessMap,this.attenuationDistance=e.attenuationDistance,this.attenuationColor.copy(e.attenuationColor),this.specularIntensity=e.specularIntensity,this.specularIntensityMap=e.specularIntensityMap,this.specularColor.copy(e.specularColor),this.specularColorMap=e.specularColorMap,this}},ty=class extends Lg{constructor(e){super(),this.isMeshDepthMaterial=!0,this.type=`MeshDepthMaterial`,this.depthPacking=Np,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(e)}copy(e){return super.copy(e),this.depthPacking=e.depthPacking,this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this}},ny=class extends Lg{constructor(e){super(),this.isMeshDistanceMaterial=!0,this.type=`MeshDistanceMaterial`,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(e)}copy(e){return super.copy(e),this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this}};function ry(e,t){return!e||e.constructor===t?e:typeof t.BYTES_PER_ELEMENT==`number`?new t(e):Array.prototype.slice.call(e)}function iy(e){return e!==void 0&&e.inTangents!==void 0&&e.outTangents!==void 0}function ay(e){function t(t,n){return e[t]-e[n]}let n=e.length,r=Array(n);for(let e=0;e!==n;++e)r[e]=e;return r.sort(t),r}function oy(e,t,n){let r=e.length,i=new e.constructor(r);for(let a=0,o=0;o!==r;++a){let r=n[a]*t;for(let n=0;n!==t;++n)i[o++]=e[r+n]}return i}function sy(e,t,n,r){let i=1,a=e[0];for(;a!==void 0&&a[r]===void 0;)a=e[i++];if(a===void 0)return;let o=a[r];if(o!==void 0)if(Array.isArray(o))do o=a[r],o!==void 0&&(t.push(a.time),n.push(...o)),a=e[i++];while(a!==void 0);else if(o.toArray!==void 0)do o=a[r],o!==void 0&&(t.push(a.time),o.toArray(n,n.length)),a=e[i++];while(a!==void 0);else do o=a[r],o!==void 0&&(t.push(a.time),n.push(o)),a=e[i++];while(a!==void 0)}var cy=class{constructor(e,t,n,r){this.parameterPositions=e,this._cachedIndex=0,this.resultBuffer=r===void 0?new t.constructor(n):r,this.sampleValues=t,this.valueSize=n,this.settings=null,this.DefaultSettings_={}}evaluate(e){let t=this.parameterPositions,n=this._cachedIndex,r=t[n],i=t[n-1];validate_interval:{seek:{let a;linear_scan:{forward_scan:if(!(e=i)){let o=t[1];e=i)break seek}a=n,n=0;break linear_scan}break validate_interval}for(;n>>1;et;)--a;if(++a,i!==0||a!==r){i>=a&&(a=Math.max(a,1),i=a-1);let e=this.getValueSize();this.times=n.slice(i,a),this.values=this.values.slice(i*e,a*e)}return this}validate(){let e=!0,t=this.getValueSize();t-Math.floor(t)!==0&&(Xp(`KeyframeTrack: Invalid value size in track.`,this),e=!1);let n=this.times,r=this.values,i=n.length;i===0&&(Xp(`KeyframeTrack: Track is empty.`,this),e=!1);let a=null;for(let t=0;t!==i;t++){let r=n[t];if(typeof r==`number`&&isNaN(r)){Xp(`KeyframeTrack: Time is not a valid number.`,this,t,r),e=!1;break}if(a!==null&&a>r){Xp(`KeyframeTrack: Out of order keys.`,this,t,r,a),e=!1;break}a=r}if(r!==void 0&&Up(r))for(let t=0,n=r.length;t!==n;++t){let n=r[t];if(isNaN(n)){Xp(`KeyframeTrack: Value is not a valid number.`,this,t,n),e=!1;break}}return e}optimize(){let e=this.times.slice(),t=this.values.slice(),n=this.getValueSize(),r=this.getInterpolation()===Dp,i=e.length-1,a=1;for(let o=1;o0){e[a]=e[i];for(let e=i*n,r=a*n,o=0;o!==n;++o)t[r+o]=t[e+o];++a}return a===e.length?(this.times=e,this.values=t):(this.times=e.slice(0,a),this.values=t.slice(0,a*n)),this}clone(){let e=this.times.slice(),t=this.values.slice(),n=this.constructor,r=new n(this.name,e,t);return r.createInterpolant=this.createInterpolant,iy(this.settings)&&(r.settings={inTangents:this.settings.inTangents.slice(),outTangents:this.settings.outTangents.slice()}),r}};function _y(e,t){for(let n=0,r=e.length;n!==r;n+=2)e[n]*=t}gy.prototype.ValueTypeName=``,gy.prototype.TimeBufferType=Float32Array,gy.prototype.ValueBufferType=Float32Array,gy.prototype.DefaultInterpolation=Ep;var vy=class extends gy{constructor(e,t,n){super(e,t,n)}};vy.prototype.ValueTypeName=`bool`,vy.prototype.ValueBufferType=Array,vy.prototype.DefaultInterpolation=Tp,vy.prototype.InterpolantFactoryMethodLinear=void 0,vy.prototype.InterpolantFactoryMethodSmooth=void 0;var yy=class extends gy{constructor(e,t,n,r){super(e,t,n,r)}};yy.prototype.ValueTypeName=`color`;var by=class extends gy{constructor(e,t,n,r){super(e,t,n,r)}};by.prototype.ValueTypeName=`number`;var xy=class extends cy{constructor(e,t,n,r){super(e,t,n,r)}interpolate_(e,t,n,r){let i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=(n-t)/(r-t),c=e*o;for(let e=c+o;c!==e;c+=4)Dm.slerpFlat(i,0,a,c-o,a,c,s);return i}},Sy=class extends gy{constructor(e,t,n,r){super(e,t,n,r)}InterpolantFactoryMethodLinear(e){return new xy(this.times,this.values,this.getValueSize(),e)}};Sy.prototype.ValueTypeName=`quaternion`,Sy.prototype.InterpolantFactoryMethodSmooth=void 0;var Cy=class extends gy{constructor(e,t,n){super(e,t,n)}};Cy.prototype.ValueTypeName=`string`,Cy.prototype.ValueBufferType=Array,Cy.prototype.DefaultInterpolation=Tp,Cy.prototype.InterpolantFactoryMethodLinear=void 0,Cy.prototype.InterpolantFactoryMethodSmooth=void 0;var wy=class extends gy{constructor(e,t,n,r){super(e,t,n,r)}};wy.prototype.ValueTypeName=`vector`;var Ty=class{constructor(e=``,t=-1,n=[],r=Mp){this.name=e,this.tracks=n,this.duration=t,this.blendMode=r,this.uuid=am(),this.userData={},this.duration<0&&this.resetDuration()}static parse(e){let t=[],n=e.tracks,r=1/(e.fps||1);for(let e=0,i=n.length;e!==i;++e)t.push(Dy(n[e]).scale(r));let i=new this(e.name,e.duration,t,e.blendMode);return i.uuid=e.uuid,i.userData=JSON.parse(e.userData||`{}`),i}static toJSON(e){let t=[],n=e.tracks,r={name:e.name,duration:e.duration,tracks:t,uuid:e.uuid,blendMode:e.blendMode,userData:JSON.stringify(e.userData)};for(let e=0,r=n.length;e!==r;++e)t.push(gy.toJSON(n[e]));return r}static CreateFromMorphTargetSequence(e,t,n,r){let i=t.length,a=[];for(let e=0;e1){let e=a[1],t=r[e];t||(r[e]=t=[]),t.push(n)}}let a=[];for(let e in r)a.push(this.CreateFromMorphTargetSequence(e,r[e],t,n));return a}resetDuration(){let e=this.tracks,t=0;for(let n=0,r=e.length;n!==r;++n){let e=this.tracks[n];t=Math.max(t,e.times[e.times.length-1])}return this.duration=t,this}trim(){for(let e=0;e{t&&t(i),this.manager.itemEnd(e)},0);return}if(My[e]!==void 0){My[e].push({onLoad:t,onProgress:n,onError:r});return}My[e]=[],My[e].push({onLoad:t,onProgress:n,onError:r});let a=new Request(e,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?`include`:`same-origin`,signal:typeof AbortSignal.any==`function`?AbortSignal.any([this._abortController.signal,this.manager.abortController.signal]):this._abortController.signal}),o=this.mimeType,s=this.responseType;fetch(a).then(t=>{if(t.status===200||t.status===0){if(t.status===0&&Yp(`FileLoader: HTTP Status 0 received.`),typeof ReadableStream>`u`||t.body===void 0||t.body.getReader===void 0)return t;let n=My[e],r=t.body.getReader(),i=t.headers.get(`X-File-Size`)||t.headers.get(`Content-Length`),a=i?parseInt(i):0,o=a!==0,s=0,c=new ReadableStream({start(e){t();function t(){r.read().then(({done:r,value:i})=>{if(r)e.close();else{s+=i.byteLength;let r=new ProgressEvent(`progress`,{lengthComputable:o,loaded:s,total:a});for(let e=0,t=n.length;e{e.error(t)})}}});return new Response(c)}else throw new Ny(`fetch for "${t.url}" responded with ${t.status}: ${t.statusText}`,t)}).then(e=>{switch(s){case`arraybuffer`:return e.arrayBuffer();case`blob`:return e.blob();case`document`:return e.text().then(e=>new DOMParser().parseFromString(e,o));case`json`:return e.json();default:if(o===``)return e.text();{let t=/charset="?([^;"\s]*)"?/i.exec(o),n=t&&t[1]?t[1].toLowerCase():void 0,r=new TextDecoder(n);return e.arrayBuffer().then(e=>r.decode(e))}}}).then(t=>{Oy.add(`file:${e}`,t);let n=My[e];delete My[e];for(let e=0,r=n.length;e{let n=My[e];if(n===void 0)throw this.manager.itemError(e),t;delete My[e];for(let e=0,r=n.length;e{this.manager.itemEnd(e)}),this.manager.itemStart(e)}setResponseType(e){return this.responseType=e,this}setMimeType(e){return this.mimeType=e,this}abort(){return this._abortController.abort(),this._abortController=new AbortController,this}},Fy=new WeakMap,Iy=class extends jy{constructor(e){super(e)}load(e,t,n,r){this.path!==void 0&&(e=this.path+e),e=this.manager.resolveURL(e);let i=this,a=Oy.get(`image:${e}`);if(a!==void 0){if(a.complete===!0)i.manager.itemStart(e),setTimeout(function(){t&&t(a),i.manager.itemEnd(e)},0);else{let e=Fy.get(a);e===void 0&&(e=[],Fy.set(a,e)),e.push({onLoad:t,onError:r})}return a}let o=Wp(`img`);function s(){l(),t&&t(this);let n=Fy.get(this)||[];for(let e=0;e`u`&&Yp(`ImageBitmapLoader: createImageBitmap() not supported.`),typeof fetch>`u`&&Yp(`ImageBitmapLoader: fetch() not supported.`),this.options={premultiplyAlpha:`none`},this._abortController=new AbortController}setOptions(e){return this.options=e,this}load(e,t,n,r){e===void 0&&(e=``),this.path!==void 0&&(e=this.path+e),e=this.manager.resolveURL(e);let i=this,a=Oy.get(`image-bitmap:${e}`);if(a!==void 0){if(i.manager.itemStart(e),a.then){a.then(n=>{ob.has(a)===!0?(r&&r(ob.get(a)),i.manager.itemError(e),i.manager.itemEnd(e)):(t&&t(n),i.manager.itemEnd(e))});return}setTimeout(function(){t&&t(a),i.manager.itemEnd(e)},0);return}let o={};o.credentials=this.crossOrigin===`anonymous`?`same-origin`:`include`,o.headers=this.requestHeader,o.signal=typeof AbortSignal.any==`function`?AbortSignal.any([this._abortController.signal,this.manager.abortController.signal]):this._abortController.signal;let s=fetch(e,o).then(function(e){return e.blob()}).then(function(e){return createImageBitmap(e,Object.assign({},i.options,{colorSpaceConversion:`none`}))}).then(function(n){return Oy.add(`image-bitmap:${e}`,n),t&&t(n),i.manager.itemEnd(e),n}).catch(function(t){r&&r(t),ob.set(s,t),Oy.remove(`image-bitmap:${e}`),i.manager.itemError(e),i.manager.itemEnd(e)});Oy.add(`image-bitmap:${e}`,s),i.manager.itemStart(e)}abort(){return this._abortController.abort(),this._abortController=new AbortController,this}},cb=-90,lb=1,ub=class extends wh{constructor(e,t,n){super(),this.type=`CubeCamera`,this.renderTarget=n,this.coordinateSystem=null,this.activeMipmapLevel=0;let r=new Zy(cb,lb,e,t);r.layers=this.layers,this.add(r);let i=new Zy(cb,lb,e,t);i.layers=this.layers,this.add(i);let a=new Zy(cb,lb,e,t);a.layers=this.layers,this.add(a);let o=new Zy(cb,lb,e,t);o.layers=this.layers,this.add(o);let s=new Zy(cb,lb,e,t);s.layers=this.layers,this.add(s);let c=new Zy(cb,lb,e,t);c.layers=this.layers,this.add(c)}updateCoordinateSystem(){let e=this.coordinateSystem,t=this.children.concat(),[n,r,i,a,o,s]=t;for(let e of t)this.remove(e);if(e===2e3)n.up.set(0,1,0),n.lookAt(1,0,0),r.up.set(0,1,0),r.lookAt(-1,0,0),i.up.set(0,0,-1),i.lookAt(0,1,0),a.up.set(0,0,1),a.lookAt(0,-1,0),o.up.set(0,1,0),o.lookAt(0,0,1),s.up.set(0,1,0),s.lookAt(0,0,-1);else if(e===2001)n.up.set(0,-1,0),n.lookAt(-1,0,0),r.up.set(0,-1,0),r.lookAt(1,0,0),i.up.set(0,0,1),i.lookAt(0,1,0),a.up.set(0,0,-1),a.lookAt(0,-1,0),o.up.set(0,-1,0),o.lookAt(0,0,1),s.up.set(0,-1,0),s.lookAt(0,0,-1);else throw Error(`THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: `+e);for(let e of t)this.add(e),e.updateMatrixWorld()}update(e,t){this.parent===null&&this.updateMatrixWorld();let{renderTarget:n,activeMipmapLevel:r}=this;this.coordinateSystem!==e.coordinateSystem&&(this.coordinateSystem=e.coordinateSystem,this.updateCoordinateSystem());let[i,a,o,s,c,l]=this.children,u=e.getRenderTarget(),d=e.getActiveCubeFace(),f=e.getActiveMipmapLevel(),p=e.xr.enabled;e.xr.enabled=!1;let m=n.texture.generateMipmaps;n.texture.generateMipmaps=!1;let h=!1;h=e.isWebGLRenderer===!0?e.state.buffers.depth.getReversed():e.reversedDepthBuffer,e.setRenderTarget(n,0,r),h&&e.autoClear===!1&&e.clearDepth(),e.render(t,i),e.setRenderTarget(n,1,r),h&&e.autoClear===!1&&e.clearDepth(),e.render(t,a),e.setRenderTarget(n,2,r),h&&e.autoClear===!1&&e.clearDepth(),e.render(t,o),e.setRenderTarget(n,3,r),h&&e.autoClear===!1&&e.clearDepth(),e.render(t,s),e.setRenderTarget(n,4,r),h&&e.autoClear===!1&&e.clearDepth(),e.render(t,c),n.texture.generateMipmaps=m,e.setRenderTarget(n,5,r),h&&e.autoClear===!1&&e.clearDepth(),e.render(t,l),e.setRenderTarget(u,d,f),e.xr.enabled=p,n.texture.needsPMREMUpdate=!0}},db=class extends Zy{constructor(e=[]){super(),this.isArrayCamera=!0,this.isMultiViewCamera=!1,this.cameras=e}},fb=class{constructor(){this._previousTime=0,this._currentTime=0,this._startTime=performance.now(),this._delta=0,this._elapsed=0,this._timescale=1,this._document=null,this._pageVisibilityHandler=null}connect(e){this._document=e,e.hidden!==void 0&&(this._pageVisibilityHandler=pb.bind(this),e.addEventListener(`visibilitychange`,this._pageVisibilityHandler,!1))}disconnect(){this._pageVisibilityHandler!==null&&(this._document.removeEventListener(`visibilitychange`,this._pageVisibilityHandler),this._pageVisibilityHandler=null),this._document=null}getDelta(){return this._delta/1e3}getElapsed(){return this._elapsed/1e3}getTimescale(){return this._timescale}setTimescale(e){return this._timescale=e,this}reset(){return this._currentTime=performance.now()-this._startTime,this}dispose(){this.disconnect()}update(e){return this._pageVisibilityHandler!==null&&this._document.hidden===!0?this._delta=0:(this._previousTime=this._currentTime,this._currentTime=(e===void 0?performance.now():e)-this._startTime,this._delta=(this._currentTime-this._previousTime)*this._timescale,this._elapsed+=this._delta),this}};function pb(){this._document.hidden===!1&&this.reset()}var mb=`\\[\\]\\.:\\/`,hb=RegExp(`[\\[\\]\\.:\\/]`,`g`),gb=`[^\\[\\]\\.:\\/]`,_b=`[^`+mb.replace(`\\.`,``)+`]`,vb=`((?:WC+[\\/:])*)`.replace(`WC`,gb),yb=`(WCOD+)?`.replace(`WCOD`,_b),bb=`(?:\\.(WC+)(?:\\[(.+)\\])?)?`.replace(`WC`,gb),xb=`\\.(WC+)(?:\\[(.+)\\])?`.replace(`WC`,gb),Sb=RegExp(`^`+vb+yb+bb+xb+`$`),Cb=[`material`,`materials`,`bones`,`map`],wb=class{constructor(e,t,n){let r=n||Tb.parseTrackName(t);this._targetGroup=e,this._bindings=e.subscribe_(t,r)}getValue(e,t){this.bind();let n=this._targetGroup.nCachedObjects_,r=this._bindings[n];r!==void 0&&r.getValue(e,t)}setValue(e,t){let n=this._bindings;for(let r=this._targetGroup.nCachedObjects_,i=n.length;r!==i;++r)n[r].setValue(e,t)}bind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,n=e.length;t!==n;++t)e[t].bind()}unbind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,n=e.length;t!==n;++t)e[t].unbind()}},Tb=class e{constructor(t,n,r){this.path=n,this.parsedPath=r||e.parseTrackName(n),this.node=e.findNode(t,this.parsedPath.nodeName),this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,n,r){return t&&t.isAnimationObjectGroup?new e.Composite(t,n,r):new e(t,n,r)}static sanitizeNodeName(e){return e.replace(/\s/g,`_`).replace(hb,``)}static parseTrackName(e){let t=Sb.exec(e);if(t===null)throw Error(`THREE.PropertyBinding: Cannot parse trackName: `+e);let n={nodeName:t[2],objectName:t[3],objectIndex:t[4],propertyName:t[5],propertyIndex:t[6]},r=n.nodeName&&n.nodeName.lastIndexOf(`.`);if(r!==void 0&&r!==-1){let e=n.nodeName.substring(r+1);Cb.indexOf(e)!==-1&&(n.nodeName=n.nodeName.substring(0,r),n.objectName=e)}if(n.propertyName===null||n.propertyName.length===0)throw Error(`THREE.PropertyBinding: can not parse propertyName from trackName: `+e);return n}static findNode(e,t){if(t===void 0||t===``||t===`.`||t===-1||t===e.name||t===e.uuid)return e;if(e.skeleton){let n=e.skeleton.getBoneByName(t);if(n!==void 0)return n}if(e.children){let n=function(e){for(let r=0;r=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,Eb).distanceTo(e)}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}},Ob=new J,kb=new Zm,Ab=new Zm,jb=class extends W_{constructor(e){let t=Mb(e),n=new Og,r=[],i=[];for(let e=0;ee.start-t.start);let t=0;for(let e=1;e #include #include -}`},X={common:{diffuse:{value:new Y(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new dm},alphaMap:{value:null},alphaMapTransform:{value:new dm},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new dm}},envmap:{envMap:{value:null},envMapRotation:{value:new dm},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98},dfgLUT:{value:null}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new dm}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new dm}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new dm},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new dm},normalScale:{value:new q(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new dm},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new dm}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new dm}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new dm}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new Y(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},sunLights:{value:[],properties:{direction:{},color:{}}},sunLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},sunShadowMatrix:{value:[]},sunShadowCascade:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null},probesSH:{value:null},probesMin:{value:new J},probesMax:{value:new J},probesResolution:{value:new J}},points:{diffuse:{value:new Y(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new dm},alphaTest:{value:0},uvTransform:{value:new dm}},sprite:{diffuse:{value:new Y(16777215)},opacity:{value:1},center:{value:new q(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new dm},alphaMap:{value:null},alphaMapTransform:{value:new dm},alphaTest:{value:0}}},bb={basic:{uniforms:Tv([X.common,X.specularmap,X.envmap,X.aomap,X.lightmap,X.fog]),vertexShader:yb.meshbasic_vert,fragmentShader:yb.meshbasic_frag},lambert:{uniforms:Tv([X.common,X.specularmap,X.envmap,X.aomap,X.lightmap,X.emissivemap,X.bumpmap,X.normalmap,X.displacementmap,X.fog,X.lights,{emissive:{value:new Y(0)},envMapIntensity:{value:1}}]),vertexShader:yb.meshlambert_vert,fragmentShader:yb.meshlambert_frag},phong:{uniforms:Tv([X.common,X.specularmap,X.envmap,X.aomap,X.lightmap,X.emissivemap,X.bumpmap,X.normalmap,X.displacementmap,X.fog,X.lights,{emissive:{value:new Y(0)},specular:{value:new Y(1118481)},shininess:{value:30},envMapIntensity:{value:1}}]),vertexShader:yb.meshphong_vert,fragmentShader:yb.meshphong_frag},standard:{uniforms:Tv([X.common,X.envmap,X.aomap,X.lightmap,X.emissivemap,X.bumpmap,X.normalmap,X.displacementmap,X.roughnessmap,X.metalnessmap,X.fog,X.lights,{emissive:{value:new Y(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:yb.meshphysical_vert,fragmentShader:yb.meshphysical_frag},toon:{uniforms:Tv([X.common,X.aomap,X.lightmap,X.emissivemap,X.bumpmap,X.normalmap,X.displacementmap,X.gradientmap,X.fog,X.lights,{emissive:{value:new Y(0)}}]),vertexShader:yb.meshtoon_vert,fragmentShader:yb.meshtoon_frag},matcap:{uniforms:Tv([X.common,X.bumpmap,X.normalmap,X.displacementmap,X.fog,{matcap:{value:null}}]),vertexShader:yb.meshmatcap_vert,fragmentShader:yb.meshmatcap_frag},points:{uniforms:Tv([X.points,X.fog]),vertexShader:yb.points_vert,fragmentShader:yb.points_frag},dashed:{uniforms:Tv([X.common,X.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:yb.linedashed_vert,fragmentShader:yb.linedashed_frag},depth:{uniforms:Tv([X.common,X.displacementmap]),vertexShader:yb.depth_vert,fragmentShader:yb.depth_frag},normal:{uniforms:Tv([X.common,X.bumpmap,X.normalmap,X.displacementmap,{opacity:{value:1}}]),vertexShader:yb.meshnormal_vert,fragmentShader:yb.meshnormal_frag},sprite:{uniforms:Tv([X.sprite,X.fog]),vertexShader:yb.sprite_vert,fragmentShader:yb.sprite_frag},background:{uniforms:{uvTransform:{value:new dm},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:yb.background_vert,fragmentShader:yb.background_frag},backgroundCube:{uniforms:{envMap:{value:null},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new dm}},vertexShader:yb.backgroundCube_vert,fragmentShader:yb.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:yb.cube_vert,fragmentShader:yb.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:yb.equirect_vert,fragmentShader:yb.equirect_frag},distance:{uniforms:Tv([X.common,X.displacementmap,{referencePosition:{value:new J},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:yb.distance_vert,fragmentShader:yb.distance_frag},shadow:{uniforms:Tv([X.lights,X.fog,{color:{value:new Y(0)},opacity:{value:1}}]),vertexShader:yb.shadow_vert,fragmentShader:yb.shadow_frag}};bb.physical={uniforms:Tv([bb.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new dm},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new dm},clearcoatNormalScale:{value:new q(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new dm},dispersion:{value:0},retroreflectivity:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new dm},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new dm},sheen:{value:0},sheenColor:{value:new Y(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new dm},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new dm},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new dm},transmissionSamplerSize:{value:new q},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new dm},attenuationDistance:{value:0},attenuationColor:{value:new Y(0)},specularColor:{value:new Y(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new dm},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new dm},anisotropyVector:{value:new q},anisotropyMap:{value:null},anisotropyMapTransform:{value:new dm}}]),vertexShader:yb.meshphysical_vert,fragmentShader:yb.meshphysical_frag};var xb={r:0,b:0,g:0},Sb=new Mm,Cb=new dm;Cb.set(-1,0,0,0,1,0,0,0,1);function wb(e,t,n,r,i,a){let o=new Y(0),s=i===!0?0:1,c,l,u=null,d=0,f=null;function p(e){let n=e.isScene===!0?e.background:null;if(n&&n.isTexture){let r=e.backgroundBlurriness>0;n=t.get(n,r)}return n}function m(t){let r=!1,i=p(t);i===null?g(o,s):i&&i.isColor&&(g(i,1),r=!0);let c=e.xr.getEnvironmentBlendMode();c===`additive`?n.buffers.color.setClear(0,0,0,1,a):c===`alpha-blend`&&n.buffers.color.setClear(0,0,0,0,a),(e.autoClear||r)&&(n.buffers.depth.setTest(!0),n.buffers.depth.setMask(!0),n.buffers.color.setMask(!0),e.clear(e.autoClearColor,e.autoClearDepth,e.autoClearStencil))}function h(t,n){let i=p(n);i&&(i.isCubeTexture||i.mapping===306)?(l===void 0&&(l=new Ig(new z_(1,1,1),new Mv({name:`BackgroundCubeMaterial`,uniforms:wv(bb.backgroundCube.uniforms),vertexShader:bb.backgroundCube.vertexShader,fragmentShader:bb.backgroundCube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),l.geometry.deleteAttribute(`normal`),l.geometry.deleteAttribute(`uv`),l.onBeforeRender=function(e,t,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(l.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),r.update(l)),l.material.uniforms.envMap.value=i,l.material.uniforms.backgroundBlurriness.value=n.backgroundBlurriness,l.material.uniforms.backgroundIntensity.value=n.backgroundIntensity,l.material.uniforms.backgroundRotation.value.setFromMatrix4(Sb.makeRotationFromEuler(n.backgroundRotation)).transpose(),i.isCubeTexture&&i.isRenderTargetTexture===!1&&l.material.uniforms.backgroundRotation.value.premultiply(Cb),l.material.toneMapped=gm.getTransfer(i.colorSpace)!==vp,(u!==i||d!==i.version||f!==e.toneMapping)&&(l.material.needsUpdate=!0,u=i,d=i.version,f=e.toneMapping),l.layers.enableAll(),t.unshift(l,l.geometry,l.material,0,0,null)):i&&i.isTexture&&(c===void 0&&(c=new Ig(new bv(2,2),new Mv({name:`BackgroundMaterial`,uniforms:wv(bb.background.uniforms),vertexShader:bb.background.vertexShader,fragmentShader:bb.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),c.geometry.deleteAttribute(`normal`),Object.defineProperty(c.material,"map",{get:function(){return this.uniforms.t2D.value}}),r.update(c)),c.material.uniforms.t2D.value=i,c.material.uniforms.backgroundIntensity.value=n.backgroundIntensity,c.material.toneMapped=gm.getTransfer(i.colorSpace)!==vp,i.matrixAutoUpdate===!0&&i.updateMatrix(),c.material.uniforms.uvTransform.value.copy(i.matrix),(u!==i||d!==i.version||f!==e.toneMapping)&&(c.material.needsUpdate=!0,u=i,d=i.version,f=e.toneMapping),c.layers.enableAll(),t.unshift(c,c.geometry,c.material,0,0,null))}function g(t,r){t.getRGB(xb,Ov(e)),n.buffers.color.setClear(xb.r,xb.g,xb.b,r,a)}function _(){l!==void 0&&(l.geometry.dispose(),l.material.dispose(),l=void 0),c!==void 0&&(c.geometry.dispose(),c.material.dispose(),c=void 0)}return{getClearColor:function(){return o},setClearColor:function(e,t=1){o.set(e),s=t,g(o,s)},getClearAlpha:function(){return s},setClearAlpha:function(e){s=e,g(o,s)},render:m,addToRenderList:h,dispose:_}}function Tb(e,t){let n=e.getParameter(e.MAX_VERTEX_ATTRIBS),r={},i=f(null),a=i,o=!1;function s(n,r,i,s,c){let u=!1,f=d(n,s,i,r);a!==f&&(a=f,l(a.object)),u=p(n,s,i,c),u&&m(n,s,i,c),c!==null&&t.update(c,e.ELEMENT_ARRAY_BUFFER),(u||o)&&(o=!1,b(n,r,i,s),c!==null&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t.get(c).buffer))}function c(){return e.createVertexArray()}function l(t){return e.bindVertexArray(t)}function u(t){return e.deleteVertexArray(t)}function d(e,t,n,i){let a=i.wireframe===!0,o=r[t.id];o===void 0&&(o={},r[t.id]=o);let s=e.isInstancedMesh===!0?e.id:0,l=o[s];l===void 0&&(l={},o[s]=l);let u=l[n.id];u===void 0&&(u={},l[n.id]=u);let d=u[a];return d===void 0&&(d=f(c()),u[a]=d),d}function f(e){let t=[],r=[],i=[];for(let e=0;e=0){let n=i[t],r=o[t];if(r===void 0&&(t===`instanceMatrix`&&e.instanceMatrix&&(r=e.instanceMatrix),t===`instanceColor`&&e.instanceColor&&(r=e.instanceColor)),n===void 0||n.attribute!==r||r&&n.data!==r.data)return!0;s++}return a.attributesNum!==s||a.index!==r}function m(e,t,n,r){let i={},o=t.attributes,s=0,c=n.getAttributes();for(let t in c)if(c[t].location>=0){let n=o[t];n===void 0&&(t===`instanceMatrix`&&e.instanceMatrix&&(n=e.instanceMatrix),t===`instanceColor`&&e.instanceColor&&(n=e.instanceColor));let r={};r.attribute=n,n&&n.data&&(r.data=n.data),i[t]=r,s++}a.attributes=i,a.attributesNum=s,a.index=r}function h(){let e=a.newAttributes;for(let t=0,n=e.length;t=0){let s=o[r];if(s===void 0&&(r===`instanceMatrix`&&n.instanceMatrix&&(s=n.instanceMatrix),r===`instanceColor`&&n.instanceColor&&(s=n.instanceColor)),s!==void 0){let r=s.normalized,o=s.itemSize,c=t.get(s);if(c===void 0)continue;let l=c.buffer,u=c.type,d=c.bytesPerElement,f=u===e.INT||u===e.UNSIGNED_INT||s.gpuType===1013;if(s.isInterleavedBufferAttribute){let t=s.data,c=t.stride,p=s.offset;if(t.isInstancedInterleavedBuffer){for(let e=0;e0&&e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.HIGH_FLOAT).precision>0)return`highp`;t=`mediump`}return t===`mediump`&&e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.MEDIUM_FLOAT).precision>0&&e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.MEDIUM_FLOAT).precision>0?`mediump`:`lowp`}let l=n.precision===void 0?`highp`:n.precision,u=c(l);u!==l&&(Ap(`WebGLRenderer:`,l,`not supported, using`,u,`instead.`),l=u);let d=n.logarithmicDepthBuffer===!0,f=n.reversedDepthBuffer===!0&&t.has(`EXT_clip_control`);n.reversedDepthBuffer===!0&&f===!1&&Ap(`WebGLRenderer: Unable to use reversed depth buffer due to missing EXT_clip_control extension. Fallback to default depth buffer.`);let p=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS),m=e.getParameter(e.MAX_VERTEX_TEXTURE_IMAGE_UNITS),h=e.getParameter(e.MAX_TEXTURE_SIZE),g=e.getParameter(e.MAX_CUBE_MAP_TEXTURE_SIZE),_=e.getParameter(e.MAX_VERTEX_ATTRIBS),v=e.getParameter(e.MAX_VERTEX_UNIFORM_VECTORS),y=e.getParameter(e.MAX_VARYING_VECTORS),b=e.getParameter(e.MAX_FRAGMENT_UNIFORM_VECTORS),x=e.getParameter(e.MAX_SAMPLES),S=e.getParameter(e.SAMPLES);return{isWebGL2:!0,getMaxAnisotropy:a,getMaxPrecision:c,textureFormatReadable:o,textureTypeReadable:s,precision:l,logarithmicDepthBuffer:d,reversedDepthBuffer:f,maxTextures:p,maxVertexTextures:m,maxTextureSize:h,maxCubemapSize:g,maxAttributes:_,maxVertexUniforms:v,maxVaryings:y,maxFragmentUniforms:b,maxSamples:x,samples:S}}function Ob(e){let t=this,n=null,r=0,i=!1,a=!1,o=new gg,s=new dm,c={value:null,needsUpdate:!1};this.uniform=c,this.numPlanes=0,this.numIntersection=0,this.init=function(e,t){let n=e.length!==0||t||r!==0||i;return i=t,r=e.length,n},this.beginShadows=function(){a=!0,u(null)},this.endShadows=function(){a=!1},this.setGlobalState=function(e,t){n=u(e,t,0)},this.setState=function(t,o,s){let d=t.clippingPlanes,f=t.clipIntersection,p=t.clipShadows,m=e.get(t);if(!i||d===null||d.length===0||a&&!p)a?u(null):l();else{let e=a?0:r,t=e*4,i=m.clippingState||null;c.value=i,i=u(d,o,t,s);for(let e=0;e!==t;++e)i[e]=n[e];m.clippingState=i,this.numIntersection=f?this.numPlanes:0,this.numPlanes+=e}};function l(){c.value!==n&&(c.value=n,c.needsUpdate=r>0),t.numPlanes=r,t.numIntersection=0}function u(e,n,r,i){let a=e===null?0:e.length,l=null;if(a!==0){if(l=c.value,i!==!0||l===null){let t=r+a*4,i=n.matrixWorldInverse;s.getNormalMatrix(i),(l===null||l.length0&&this._blur(s,0,0,t),this._applyPMREM(s),this._cleanup(s),s}fromEquirectangular(e,t=null){return this._fromTexture(e,t)}fromCubemap(e,t=null){return this._fromTexture(e,t)}compileCubemapShader(){this._cubemapMaterial===null&&(this._cubemapMaterial=Jb(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){this._equirectMaterial===null&&(this._equirectMaterial=qb(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),this._cubemapMaterial!==null&&this._cubemapMaterial.dispose(),this._equirectMaterial!==null&&this._equirectMaterial.dispose(),this._backgroundBox!==null&&(this._backgroundBox.geometry.dispose(),this._backgroundBox.material.dispose())}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=2**this._lodMax}_dispose(){this._blurMaterial!==null&&this._blurMaterial.dispose(),this._ggxMaterial!==null&&this._ggxMaterial.dispose(),this._pingPongRenderTarget!==null&&this._pingPongRenderTarget.dispose();for(let e=0;e2?l:0,l,l),c.setRenderTarget(r),p&&c.render(d,a),c.render(e,a)}c.toneMapping=u,c.autoClear=l,e.background=m}_textureToCubeUV(e,t){let n=this._renderer,r=e.mapping===301||e.mapping===302;r?(this._cubemapMaterial===null&&(this._cubemapMaterial=Jb()),this._cubemapMaterial.uniforms.flipEnvMap.value=e.isRenderTargetTexture===!1?-1:1):this._equirectMaterial===null&&(this._equirectMaterial=qb());let i=r?this._cubemapMaterial:this._equirectMaterial,a=this._lodMeshes[0];a.material=i;let o=i.uniforms;o.envMap.value=e;let s=this._cubeSize;Wb(t,0,0,3*s,2*s),n.setRenderTarget(t),n.render(a,Nb)}_applyPMREM(e){let t=this._renderer,n=t.autoClear;t.autoClear=!1;let r=this._lodMeshes.length;for(let t=1;td-kb?n-d+kb:0),m=4*(this._cubeSize-f);s.envMap.value=e.texture,s.roughness.value=u,s.mipInt.value=d-t,Wb(i,p,m,3*f,2*f),r.setRenderTarget(i),r.render(o,Nb),s.envMap.value=i.texture,s.roughness.value=0,s.mipInt.value=d-n,Wb(e,p,m,3*f,2*f),r.setRenderTarget(e),r.render(o,Nb)}_blur(e,t,n,r){let i=this._pingPongRenderTarget,a=Math.min(r,Math.PI)/Math.SQRT2;this._blurPass(e,i,t,n,a),this._blurPass(i,e,n,n,a)}_blurPass(e,t,n,r,i){let a=this._renderer,o=this._blurMaterial,s=this._lodMeshes[r];s.material=o;let c=o.uniforms;c.envMap.value=e.texture,c.sigma.value=i,c.mipInt.value=this._lodMax-n;let l=this._sizeLods[r];Wb(t,3*l*(r>this._lodMax-kb?r-this._lodMax+kb:0),4*(this._cubeSize-l),3*l,2*l),a.setRenderTarget(t),a.render(s,Nb)}};function Hb(e){let t=[],n=[],r=e,i=e-kb+1+Ab;for(let e=0;e2?0:-1,r=[t,n,0,t+2/3,n,0,t+2/3,n+1,0,t,n,0,t+2/3,n+1,0,t,n+1,0];c.set(r,18*e);for(let t=0;t<6;t++){let n=s[t*2]*2-1,r=s[t*2+1]*2-1;e===0?Bb.set(1,r,n):e===1?Bb.set(-n,1,-r):e===2?Bb.set(-n,r,1):e===3?Bb.set(-1,r,-n):e===4?Bb.set(-n,-1,r):Bb.set(n,r,-1),Bb.toArray(l,(e*6+t)*3)}}let u=new lg;u.setAttribute(`position`,new Jh(c,3)),u.setAttribute(`outputDirection`,new Jh(l,3)),n.push(new Ig(u,null)),r>kb&&r--}return{lodMeshes:n,sizeLods:t}}function Ub(e,t,n){let r=new km(e,t,n);return r.texture.mapping=306,r.texture.name=`PMREM.cubeUv`,r.scissorTest=!0,r}function Wb(e,t,n,r,i){e.viewport.set(t,n,r,i),e.scissor.set(t,n,r,i)}function Gb(e,t,n){return new Mv({name:`PMREMGGXConvolution`,defines:{GGX_SAMPLES:Mb,CUBEUV_TEXEL_WIDTH:1/t,CUBEUV_TEXEL_HEIGHT:1/n,CUBEUV_MAX_MIP:`${e}.0`},uniforms:{envMap:{value:null},roughness:{value:0},mipInt:{value:0}},vertexShader:Yb(),fragmentShader:` +}`},X={common:{diffuse:{value:new Y(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new Am},alphaMap:{value:null},alphaMapTransform:{value:new Am},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new Am}},envmap:{envMap:{value:null},envMapRotation:{value:new Am},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98},dfgLUT:{value:null}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new Am}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new Am}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new Am},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new Am},normalScale:{value:new q(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new Am},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new Am}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new Am}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new Am}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new Y(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},sunLights:{value:[],properties:{direction:{},color:{}}},sunLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},sunShadowMatrix:{value:[]},sunShadowCascade:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null},probesSH:{value:null},probesMin:{value:new J},probesMax:{value:new J},probesResolution:{value:new J}},points:{diffuse:{value:new Y(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new Am},alphaTest:{value:0},uvTransform:{value:new Am}},sprite:{diffuse:{value:new Y(16777215)},opacity:{value:1},center:{value:new q(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new Am},alphaMap:{value:null},alphaMapTransform:{value:new Am},alphaTest:{value:0}}},zb={basic:{uniforms:Wv([X.common,X.specularmap,X.envmap,X.aomap,X.lightmap,X.fog]),vertexShader:Rb.meshbasic_vert,fragmentShader:Rb.meshbasic_frag},lambert:{uniforms:Wv([X.common,X.specularmap,X.envmap,X.aomap,X.lightmap,X.emissivemap,X.bumpmap,X.normalmap,X.displacementmap,X.fog,X.lights,{emissive:{value:new Y(0)},envMapIntensity:{value:1}}]),vertexShader:Rb.meshlambert_vert,fragmentShader:Rb.meshlambert_frag},phong:{uniforms:Wv([X.common,X.specularmap,X.envmap,X.aomap,X.lightmap,X.emissivemap,X.bumpmap,X.normalmap,X.displacementmap,X.fog,X.lights,{emissive:{value:new Y(0)},specular:{value:new Y(1118481)},shininess:{value:30},envMapIntensity:{value:1}}]),vertexShader:Rb.meshphong_vert,fragmentShader:Rb.meshphong_frag},standard:{uniforms:Wv([X.common,X.envmap,X.aomap,X.lightmap,X.emissivemap,X.bumpmap,X.normalmap,X.displacementmap,X.roughnessmap,X.metalnessmap,X.fog,X.lights,{emissive:{value:new Y(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:Rb.meshphysical_vert,fragmentShader:Rb.meshphysical_frag},toon:{uniforms:Wv([X.common,X.aomap,X.lightmap,X.emissivemap,X.bumpmap,X.normalmap,X.displacementmap,X.gradientmap,X.fog,X.lights,{emissive:{value:new Y(0)}}]),vertexShader:Rb.meshtoon_vert,fragmentShader:Rb.meshtoon_frag},matcap:{uniforms:Wv([X.common,X.bumpmap,X.normalmap,X.displacementmap,X.fog,{matcap:{value:null}}]),vertexShader:Rb.meshmatcap_vert,fragmentShader:Rb.meshmatcap_frag},points:{uniforms:Wv([X.points,X.fog]),vertexShader:Rb.points_vert,fragmentShader:Rb.points_frag},dashed:{uniforms:Wv([X.common,X.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:Rb.linedashed_vert,fragmentShader:Rb.linedashed_frag},depth:{uniforms:Wv([X.common,X.displacementmap]),vertexShader:Rb.depth_vert,fragmentShader:Rb.depth_frag},normal:{uniforms:Wv([X.common,X.bumpmap,X.normalmap,X.displacementmap,{opacity:{value:1}}]),vertexShader:Rb.meshnormal_vert,fragmentShader:Rb.meshnormal_frag},sprite:{uniforms:Wv([X.sprite,X.fog]),vertexShader:Rb.sprite_vert,fragmentShader:Rb.sprite_frag},background:{uniforms:{uvTransform:{value:new Am},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:Rb.background_vert,fragmentShader:Rb.background_frag},backgroundCube:{uniforms:{envMap:{value:null},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new Am}},vertexShader:Rb.backgroundCube_vert,fragmentShader:Rb.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:Rb.cube_vert,fragmentShader:Rb.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:Rb.equirect_vert,fragmentShader:Rb.equirect_frag},distance:{uniforms:Wv([X.common,X.displacementmap,{referencePosition:{value:new J},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:Rb.distance_vert,fragmentShader:Rb.distance_frag},shadow:{uniforms:Wv([X.lights,X.fog,{color:{value:new Y(0)},opacity:{value:1}}]),vertexShader:Rb.shadow_vert,fragmentShader:Rb.shadow_frag}};zb.physical={uniforms:Wv([zb.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new Am},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new Am},clearcoatNormalScale:{value:new q(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new Am},dispersion:{value:0},retroreflectivity:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new Am},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new Am},sheen:{value:0},sheenColor:{value:new Y(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new Am},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new Am},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new Am},transmissionSamplerSize:{value:new q},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new Am},attenuationDistance:{value:0},attenuationColor:{value:new Y(0)},specularColor:{value:new Y(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new Am},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new Am},anisotropyVector:{value:new q},anisotropyMap:{value:null},anisotropyMapTransform:{value:new Am}}]),vertexShader:Rb.meshphysical_vert,fragmentShader:Rb.meshphysical_frag};var Bb={r:0,b:0,g:0},Vb=new Zm,Hb=new Am;Hb.set(-1,0,0,0,1,0,0,0,1);function Ub(e,t,n,r,i,a){let o=new Y(0),s=i===!0?0:1,c,l,u=null,d=0,f=null;function p(e){let n=e.isScene===!0?e.background:null;if(n&&n.isTexture){let r=e.backgroundBlurriness>0;n=t.get(n,r)}return n}function m(t){let r=!1,i=p(t);i===null?g(o,s):i&&i.isColor&&(g(i,1),r=!0);let c=e.xr.getEnvironmentBlendMode();c===`additive`?n.buffers.color.setClear(0,0,0,1,a):c===`alpha-blend`&&n.buffers.color.setClear(0,0,0,0,a),(e.autoClear||r)&&(n.buffers.depth.setTest(!0),n.buffers.depth.setMask(!0),n.buffers.color.setMask(!0),e.clear(e.autoClearColor,e.autoClearDepth,e.autoClearStencil))}function h(t,n){let i=p(n);i&&(i.isCubeTexture||i.mapping===306)?(l===void 0&&(l=new t_(new iv(1,1,1),new Zv({name:`BackgroundCubeMaterial`,uniforms:Uv(zb.backgroundCube.uniforms),vertexShader:zb.backgroundCube.vertexShader,fragmentShader:zb.backgroundCube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),l.geometry.deleteAttribute(`normal`),l.geometry.deleteAttribute(`uv`),l.onBeforeRender=function(e,t,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(l.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),r.update(l)),l.material.uniforms.envMap.value=i,l.material.uniforms.backgroundBlurriness.value=n.backgroundBlurriness,l.material.uniforms.backgroundIntensity.value=n.backgroundIntensity,l.material.uniforms.backgroundRotation.value.setFromMatrix4(Vb.makeRotationFromEuler(n.backgroundRotation)).transpose(),i.isCubeTexture&&i.isRenderTargetTexture===!1&&l.material.uniforms.backgroundRotation.value.premultiply(Hb),l.material.toneMapped=Fm.getTransfer(i.colorSpace)!==Lp,(u!==i||d!==i.version||f!==e.toneMapping)&&(l.material.needsUpdate=!0,u=i,d=i.version,f=e.toneMapping),l.layers.enableAll(),t.unshift(l,l.geometry,l.material,0,0,null)):i&&i.isTexture&&(c===void 0&&(c=new t_(new zv(2,2),new Zv({name:`BackgroundMaterial`,uniforms:Uv(zb.background.uniforms),vertexShader:zb.background.vertexShader,fragmentShader:zb.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),c.geometry.deleteAttribute(`normal`),Object.defineProperty(c.material,"map",{get:function(){return this.uniforms.t2D.value}}),r.update(c)),c.material.uniforms.t2D.value=i,c.material.uniforms.backgroundIntensity.value=n.backgroundIntensity,c.material.toneMapped=Fm.getTransfer(i.colorSpace)!==Lp,i.matrixAutoUpdate===!0&&i.updateMatrix(),c.material.uniforms.uvTransform.value.copy(i.matrix),(u!==i||d!==i.version||f!==e.toneMapping)&&(c.material.needsUpdate=!0,u=i,d=i.version,f=e.toneMapping),c.layers.enableAll(),t.unshift(c,c.geometry,c.material,0,0,null))}function g(t,r){t.getRGB(Bb,qv(e)),n.buffers.color.setClear(Bb.r,Bb.g,Bb.b,r,a)}function _(){l!==void 0&&(l.geometry.dispose(),l.material.dispose(),l=void 0),c!==void 0&&(c.geometry.dispose(),c.material.dispose(),c=void 0)}return{getClearColor:function(){return o},setClearColor:function(e,t=1){o.set(e),s=t,g(o,s)},getClearAlpha:function(){return s},setClearAlpha:function(e){s=e,g(o,s)},render:m,addToRenderList:h,dispose:_}}function Wb(e,t){let n=e.getParameter(e.MAX_VERTEX_ATTRIBS),r={},i=f(null),a=i,o=!1;function s(n,r,i,s,c){let u=!1,f=d(n,s,i,r);a!==f&&(a=f,l(a.object)),u=p(n,s,i,c),u&&m(n,s,i,c),c!==null&&t.update(c,e.ELEMENT_ARRAY_BUFFER),(u||o)&&(o=!1,b(n,r,i,s),c!==null&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t.get(c).buffer))}function c(){return e.createVertexArray()}function l(t){return e.bindVertexArray(t)}function u(t){return e.deleteVertexArray(t)}function d(e,t,n,i){let a=i.wireframe===!0,o=r[t.id];o===void 0&&(o={},r[t.id]=o);let s=e.isInstancedMesh===!0?e.id:0,l=o[s];l===void 0&&(l={},o[s]=l);let u=l[n.id];u===void 0&&(u={},l[n.id]=u);let d=u[a];return d===void 0&&(d=f(c()),u[a]=d),d}function f(e){let t=[],r=[],i=[];for(let e=0;e=0){let n=i[t],r=o[t];if(r===void 0&&(t===`instanceMatrix`&&e.instanceMatrix&&(r=e.instanceMatrix),t===`instanceColor`&&e.instanceColor&&(r=e.instanceColor)),n===void 0||n.attribute!==r||r&&n.data!==r.data)return!0;s++}return a.attributesNum!==s||a.index!==r}function m(e,t,n,r){let i={},o=t.attributes,s=0,c=n.getAttributes();for(let t in c)if(c[t].location>=0){let n=o[t];n===void 0&&(t===`instanceMatrix`&&e.instanceMatrix&&(n=e.instanceMatrix),t===`instanceColor`&&e.instanceColor&&(n=e.instanceColor));let r={};r.attribute=n,n&&n.data&&(r.data=n.data),i[t]=r,s++}a.attributes=i,a.attributesNum=s,a.index=r}function h(){let e=a.newAttributes;for(let t=0,n=e.length;t=0){let s=o[r];if(s===void 0&&(r===`instanceMatrix`&&n.instanceMatrix&&(s=n.instanceMatrix),r===`instanceColor`&&n.instanceColor&&(s=n.instanceColor)),s!==void 0){let r=s.normalized,o=s.itemSize,c=t.get(s);if(c===void 0)continue;let l=c.buffer,u=c.type,d=c.bytesPerElement,f=u===e.INT||u===e.UNSIGNED_INT||s.gpuType===1013;if(s.isInterleavedBufferAttribute){let t=s.data,c=t.stride,p=s.offset;if(t.isInstancedInterleavedBuffer){for(let e=0;e0&&e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.HIGH_FLOAT).precision>0)return`highp`;t=`mediump`}return t===`mediump`&&e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.MEDIUM_FLOAT).precision>0&&e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.MEDIUM_FLOAT).precision>0?`mediump`:`lowp`}let l=n.precision===void 0?`highp`:n.precision,u=c(l);u!==l&&(Yp(`WebGLRenderer:`,l,`not supported, using`,u,`instead.`),l=u);let d=n.logarithmicDepthBuffer===!0,f=n.reversedDepthBuffer===!0&&t.has(`EXT_clip_control`);n.reversedDepthBuffer===!0&&f===!1&&Yp(`WebGLRenderer: Unable to use reversed depth buffer due to missing EXT_clip_control extension. Fallback to default depth buffer.`);let p=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS),m=e.getParameter(e.MAX_VERTEX_TEXTURE_IMAGE_UNITS),h=e.getParameter(e.MAX_TEXTURE_SIZE),g=e.getParameter(e.MAX_CUBE_MAP_TEXTURE_SIZE),_=e.getParameter(e.MAX_VERTEX_ATTRIBS),v=e.getParameter(e.MAX_VERTEX_UNIFORM_VECTORS),y=e.getParameter(e.MAX_VARYING_VECTORS),b=e.getParameter(e.MAX_FRAGMENT_UNIFORM_VECTORS),x=e.getParameter(e.MAX_SAMPLES),S=e.getParameter(e.SAMPLES);return{isWebGL2:!0,getMaxAnisotropy:a,getMaxPrecision:c,textureFormatReadable:o,textureTypeReadable:s,precision:l,logarithmicDepthBuffer:d,reversedDepthBuffer:f,maxTextures:p,maxVertexTextures:m,maxTextureSize:h,maxCubemapSize:g,maxAttributes:_,maxVertexUniforms:v,maxVaryings:y,maxFragmentUniforms:b,maxSamples:x,samples:S}}function qb(e){let t=this,n=null,r=0,i=!1,a=!1,o=new Fg,s=new Am,c={value:null,needsUpdate:!1};this.uniform=c,this.numPlanes=0,this.numIntersection=0,this.init=function(e,t){let n=e.length!==0||t||r!==0||i;return i=t,r=e.length,n},this.beginShadows=function(){a=!0,u(null)},this.endShadows=function(){a=!1},this.setGlobalState=function(e,t){n=u(e,t,0)},this.setState=function(t,o,s){let d=t.clippingPlanes,f=t.clipIntersection,p=t.clipShadows,m=e.get(t);if(!i||d===null||d.length===0||a&&!p)a?u(null):l();else{let e=a?0:r,t=e*4,i=m.clippingState||null;c.value=i,i=u(d,o,t,s);for(let e=0;e!==t;++e)i[e]=n[e];m.clippingState=i,this.numIntersection=f?this.numPlanes:0,this.numPlanes+=e}};function l(){c.value!==n&&(c.value=n,c.needsUpdate=r>0),t.numPlanes=r,t.numIntersection=0}function u(e,n,r,i){let a=e===null?0:e.length,l=null;if(a!==0){if(l=c.value,i!==!0||l===null){let t=r+a*4,i=n.matrixWorldInverse;s.getNormalMatrix(i),(l===null||l.length0&&this._blur(s,0,0,t),this._applyPMREM(s),this._cleanup(s),s}fromEquirectangular(e,t=null){return this._fromTexture(e,t)}fromCubemap(e,t=null){return this._fromTexture(e,t)}compileCubemapShader(){this._cubemapMaterial===null&&(this._cubemapMaterial=px(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){this._equirectMaterial===null&&(this._equirectMaterial=fx(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),this._cubemapMaterial!==null&&this._cubemapMaterial.dispose(),this._equirectMaterial!==null&&this._equirectMaterial.dispose(),this._backgroundBox!==null&&(this._backgroundBox.geometry.dispose(),this._backgroundBox.material.dispose())}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=2**this._lodMax}_dispose(){this._blurMaterial!==null&&this._blurMaterial.dispose(),this._ggxMaterial!==null&&this._ggxMaterial.dispose(),this._pingPongRenderTarget!==null&&this._pingPongRenderTarget.dispose();for(let e=0;e2?l:0,l,l),c.setRenderTarget(r),p&&c.render(d,a),c.render(e,a)}c.toneMapping=u,c.autoClear=l,e.background=m}_textureToCubeUV(e,t){let n=this._renderer,r=e.mapping===301||e.mapping===302;r?(this._cubemapMaterial===null&&(this._cubemapMaterial=px()),this._cubemapMaterial.uniforms.flipEnvMap.value=e.isRenderTargetTexture===!1?-1:1):this._equirectMaterial===null&&(this._equirectMaterial=fx());let i=r?this._cubemapMaterial:this._equirectMaterial,a=this._lodMeshes[0];a.material=i;let o=i.uniforms;o.envMap.value=e;let s=this._cubeSize;lx(t,0,0,3*s,2*s),n.setRenderTarget(t),n.render(a,Qb)}_applyPMREM(e){let t=this._renderer,n=t.autoClear;t.autoClear=!1;let r=this._lodMeshes.length;for(let t=1;td-Jb?n-d+Jb:0),m=4*(this._cubeSize-f);s.envMap.value=e.texture,s.roughness.value=u,s.mipInt.value=d-t,lx(i,p,m,3*f,2*f),r.setRenderTarget(i),r.render(o,Qb),s.envMap.value=i.texture,s.roughness.value=0,s.mipInt.value=d-n,lx(e,p,m,3*f,2*f),r.setRenderTarget(e),r.render(o,Qb)}_blur(e,t,n,r){let i=this._pingPongRenderTarget,a=Math.min(r,Math.PI)/Math.SQRT2;this._blurPass(e,i,t,n,a),this._blurPass(i,e,n,n,a)}_blurPass(e,t,n,r,i){let a=this._renderer,o=this._blurMaterial,s=this._lodMeshes[r];s.material=o;let c=o.uniforms;c.envMap.value=e.texture,c.sigma.value=i,c.mipInt.value=this._lodMax-n;let l=this._sizeLods[r];lx(t,3*l*(r>this._lodMax-Jb?r-this._lodMax+Jb:0),4*(this._cubeSize-l),3*l,2*l),a.setRenderTarget(t),a.render(s,Qb)}};function sx(e){let t=[],n=[],r=e,i=e-Jb+1+Yb;for(let e=0;e2?0:-1,r=[t,n,0,t+2/3,n,0,t+2/3,n+1,0,t,n,0,t+2/3,n+1,0,t,n+1,0];c.set(r,18*e);for(let t=0;t<6;t++){let n=s[t*2]*2-1,r=s[t*2+1]*2-1;e===0?ax.set(1,r,n):e===1?ax.set(-n,1,-r):e===2?ax.set(-n,r,1):e===3?ax.set(-1,r,-n):e===4?ax.set(-n,-1,r):ax.set(n,r,-1),ax.toArray(l,(e*6+t)*3)}}let u=new Og;u.setAttribute(`position`,new pg(c,3)),u.setAttribute(`outputDirection`,new pg(l,3)),n.push(new t_(u,null)),r>Jb&&r--}return{lodMeshes:n,sizeLods:t}}function cx(e,t,n){let r=new Jm(e,t,n);return r.texture.mapping=306,r.texture.name=`PMREM.cubeUv`,r.scissorTest=!0,r}function lx(e,t,n,r,i){e.viewport.set(t,n,r,i),e.scissor.set(t,n,r,i)}function ux(e,t,n){return new Zv({name:`PMREMGGXConvolution`,defines:{GGX_SAMPLES:Zb,CUBEUV_TEXEL_WIDTH:1/t,CUBEUV_TEXEL_HEIGHT:1/n,CUBEUV_MAX_MIP:`${e}.0`},uniforms:{envMap:{value:null},roughness:{value:0},mipInt:{value:0}},vertexShader:mx(),fragmentShader:` precision highp float; precision highp int; @@ -3934,7 +3934,7 @@ void main() { gl_FragColor = vec4(prefilteredColor, 1.0); } - `,blending:0,depthTest:!1,depthWrite:!1})}function Kb(e,t,n){return new Mv({name:`SphericalGaussianBlur`,defines:{SAMPLES:jb,CUBEUV_TEXEL_WIDTH:1/t,CUBEUV_TEXEL_HEIGHT:1/n,CUBEUV_MAX_MIP:`${e}.0`},uniforms:{envMap:{value:null},sigma:{value:0},mipInt:{value:0}},vertexShader:Yb(),fragmentShader:` + `,blending:0,depthTest:!1,depthWrite:!1})}function dx(e,t,n){return new Zv({name:`SphericalGaussianBlur`,defines:{SAMPLES:Xb,CUBEUV_TEXEL_WIDTH:1/t,CUBEUV_TEXEL_HEIGHT:1/n,CUBEUV_MAX_MIP:`${e}.0`},uniforms:{envMap:{value:null},sigma:{value:0},mipInt:{value:0}},vertexShader:mx(),fragmentShader:` precision highp float; precision highp int; @@ -3994,7 +3994,7 @@ void main() { gl_FragColor = vec4( accumColor / accumWeight, 1.0 ); } - `,blending:0,depthTest:!1,depthWrite:!1})}function qb(){return new Mv({name:`EquirectangularToCubeUV`,uniforms:{envMap:{value:null}},vertexShader:Yb(),fragmentShader:` + `,blending:0,depthTest:!1,depthWrite:!1})}function fx(){return new Zv({name:`EquirectangularToCubeUV`,uniforms:{envMap:{value:null}},vertexShader:mx(),fragmentShader:` precision mediump float; precision mediump int; @@ -4013,7 +4013,7 @@ void main() { gl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 ); } - `,blending:0,depthTest:!1,depthWrite:!1})}function Jb(){return new Mv({name:`CubemapToCubeUV`,uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:Yb(),fragmentShader:` + `,blending:0,depthTest:!1,depthWrite:!1})}function px(){return new Zv({name:`CubemapToCubeUV`,uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:mx(),fragmentShader:` precision mediump float; precision mediump int; @@ -4029,7 +4029,7 @@ void main() { gl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) ); } - `,blending:0,depthTest:!1,depthWrite:!1})}function Yb(){return` + `,blending:0,depthTest:!1,depthWrite:!1})}function mx(){return` precision mediump float; precision mediump int; @@ -4044,7 +4044,7 @@ void main() { gl_Position = vec4( position, 1.0 ); } - `}var Xb=class extends km{constructor(e=1,t={}){super(e,e,t),this.isWebGLCubeRenderTarget=!0;let n={width:e,height:e,depth:1},r=[n,n,n,n,n,n];this.texture=new P_(r),this._setTextureOptions(t),this.texture.isRenderTargetTexture=!0}fromEquirectangularTexture(e,t){this.texture.type=t.type,this.texture.colorSpace=t.colorSpace,this.texture.generateMipmaps=t.generateMipmaps,this.texture.minFilter=t.minFilter,this.texture.magFilter=t.magFilter;let n={uniforms:{tEquirect:{value:null}},vertexShader:` + `}var hx=class extends Jm{constructor(e=1,t={}){super(e,e,t),this.isWebGLCubeRenderTarget=!0;let n={width:e,height:e,depth:1},r=[n,n,n,n,n,n];this.texture=new $_(r),this._setTextureOptions(t),this.texture.isRenderTargetTexture=!0}fromEquirectangularTexture(e,t){this.texture.type=t.type,this.texture.colorSpace=t.colorSpace,this.texture.generateMipmaps=t.generateMipmaps,this.texture.minFilter=t.minFilter,this.texture.magFilter=t.magFilter;let n={uniforms:{tEquirect:{value:null}},vertexShader:` varying vec3 vWorldDirection; @@ -4079,7 +4079,7 @@ void main() { gl_FragColor = texture2D( tEquirect, sampleUV ); } - `},r=new z_(5,5,5),i=new Mv({name:`CubemapFromEquirect`,uniforms:wv(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:1,blending:0});i.uniforms.tEquirect.value=t;let a=new Ig(r,i),o=t.minFilter;return t.minFilter===1008&&(t.minFilter=Zd),new Gy(1,10,this).update(e,a),t.minFilter=o,a.geometry.dispose(),a.material.dispose(),this}clear(e,t=!0,n=!0,r=!0){let i=e.getRenderTarget();for(let i=0;i<6;i++)e.setRenderTarget(this,i),e.clear(t,n,r);e.setRenderTarget(i)}};function Zb(e){let t=new WeakMap,n=new WeakMap,r=null;function i(e,t=!1){return e==null?null:t?o(e):a(e)}function a(n){if(n&&n.isTexture){let r=n.mapping;if(r===303||r===304)if(t.has(n)){let e=t.get(n).texture;return s(e,n.mapping)}else{let r=n.image;if(r&&r.height>0){let i=new Xb(r.height);return i.fromEquirectangularTexture(e,n),t.set(n,i),n.addEventListener(`dispose`,l),s(i.texture,n.mapping)}else return null}}return n}function o(t){if(t&&t.isTexture){let i=t.mapping,a=i===303||i===304,o=i===301||i===302;if(a||o){let i=n.get(t),s=i===void 0?0:i.texture.pmremVersion;if(t.isRenderTargetTexture&&t.pmremVersion!==s)return r===null&&(r=new Vb(e)),i=a?r.fromEquirectangular(t,i):r.fromCubemap(t,i),i.texture.pmremVersion=t.pmremVersion,n.set(t,i),i.texture;if(i!==void 0)return i.texture;{let s=t.image;return a&&s&&s.height>0||o&&s&&c(s)?(r===null&&(r=new Vb(e)),i=a?r.fromEquirectangular(t):r.fromCubemap(t),i.texture.pmremVersion=t.pmremVersion,n.set(t,i),t.addEventListener(`dispose`,u),i.texture):null}}}return t}function s(e,t){return t===303?e.mapping=301:t===304&&(e.mapping=302),e}function c(e){let t=0;for(let n=0;n<6;n++)e[n]!==void 0&&t++;return t===6}function l(e){let n=e.target;n.removeEventListener(`dispose`,l);let r=t.get(n);r!==void 0&&(t.delete(n),r.dispose())}function u(e){let t=e.target;t.removeEventListener(`dispose`,u);let r=n.get(t);r!==void 0&&(n.delete(t),r.dispose())}function d(){t=new WeakMap,n=new WeakMap,r!==null&&(r.dispose(),r=null)}return{get:i,dispose:d}}function Qb(e){let t={};function n(n){if(t[n]!==void 0)return t[n];let r=e.getExtension(n);return t[n]=r,r}return{has:function(e){return n(e)!==null},init:function(){n(`EXT_color_buffer_float`),n(`WEBGL_clip_cull_distance`),n(`OES_texture_float_linear`),n(`EXT_color_buffer_half_float`),n(`WEBGL_multisampled_render_to_texture`),n(`WEBGL_render_shared_exponent`)},get:function(e){let t=n(e);return t===null&&Mp(`WebGLRenderer: `+e+` extension not supported.`),t}}}function $b(e,t,n,r){let i={},a=new WeakMap;function o(e){let s=e.target;s.index!==null&&t.remove(s.index);for(let e in s.attributes)t.remove(s.attributes[e]);s.removeEventListener(`dispose`,o),delete i[s.id];let c=a.get(s);c&&(t.remove(c),a.delete(s)),r.releaseStatesOfGeometry(s),s.isInstancedBufferGeometry===!0&&delete s._maxInstanceCount,n.memory.geometries--}function s(e,t){return i[t.id]===!0?t:(t.addEventListener(`dispose`,o),i[t.id]=!0,n.memory.geometries++,t)}function c(n){let r=n.attributes;for(let n in r)t.update(r[n],e.ARRAY_BUFFER)}function l(e){let n=[],r=e.index,i=e.attributes.position,o=0;if(i===void 0)return;if(r!==null){let e=r.array;o=r.version;for(let t=0,r=e.length;t=65535?Xh:Yh)(n,1);s.version=o;let c=a.get(e);c&&t.remove(c),a.set(e,s)}function u(e){let t=a.get(e);if(t){let n=e.index;n!==null&&t.versiont.maxTextureSize&&(m=Math.ceil(p/t.maxTextureSize),p=t.maxTextureSize);let h=new Float32Array(p*m*4*u),g=new Am(h,p,m,u);g.type=sf,g.needsUpdate=!0;let _=f*4;for(let t=0;t0){let i=new hx(r.height);return i.fromEquirectangularTexture(e,n),t.set(n,i),n.addEventListener(`dispose`,l),s(i.texture,n.mapping)}else return null}}return n}function o(t){if(t&&t.isTexture){let i=t.mapping,a=i===303||i===304,o=i===301||i===302;if(a||o){let i=n.get(t),s=i===void 0?0:i.texture.pmremVersion;if(t.isRenderTargetTexture&&t.pmremVersion!==s)return r===null&&(r=new ox(e)),i=a?r.fromEquirectangular(t,i):r.fromCubemap(t,i),i.texture.pmremVersion=t.pmremVersion,n.set(t,i),i.texture;if(i!==void 0)return i.texture;{let s=t.image;return a&&s&&s.height>0||o&&s&&c(s)?(r===null&&(r=new ox(e)),i=a?r.fromEquirectangular(t):r.fromCubemap(t),i.texture.pmremVersion=t.pmremVersion,n.set(t,i),t.addEventListener(`dispose`,u),i.texture):null}}}return t}function s(e,t){return t===303?e.mapping=301:t===304&&(e.mapping=302),e}function c(e){let t=0;for(let n=0;n<6;n++)e[n]!==void 0&&t++;return t===6}function l(e){let n=e.target;n.removeEventListener(`dispose`,l);let r=t.get(n);r!==void 0&&(t.delete(n),r.dispose())}function u(e){let t=e.target;t.removeEventListener(`dispose`,u);let r=n.get(t);r!==void 0&&(n.delete(t),r.dispose())}function d(){t=new WeakMap,n=new WeakMap,r!==null&&(r.dispose(),r=null)}return{get:i,dispose:d}}function _x(e){let t={};function n(n){if(t[n]!==void 0)return t[n];let r=e.getExtension(n);return t[n]=r,r}return{has:function(e){return n(e)!==null},init:function(){n(`EXT_color_buffer_float`),n(`WEBGL_clip_cull_distance`),n(`OES_texture_float_linear`),n(`EXT_color_buffer_half_float`),n(`WEBGL_multisampled_render_to_texture`),n(`WEBGL_render_shared_exponent`)},get:function(e){let t=n(e);return t===null&&Zp(`WebGLRenderer: `+e+` extension not supported.`),t}}}function vx(e,t,n,r){let i={},a=new WeakMap;function o(e){let s=e.target;s.index!==null&&t.remove(s.index);for(let e in s.attributes)t.remove(s.attributes[e]);s.removeEventListener(`dispose`,o),delete i[s.id];let c=a.get(s);c&&(t.remove(c),a.delete(s)),r.releaseStatesOfGeometry(s),s.isInstancedBufferGeometry===!0&&delete s._maxInstanceCount,n.memory.geometries--}function s(e,t){return i[t.id]===!0?t:(t.addEventListener(`dispose`,o),i[t.id]=!0,n.memory.geometries++,t)}function c(n){let r=n.attributes;for(let n in r)t.update(r[n],e.ARRAY_BUFFER)}function l(e){let n=[],r=e.index,i=e.attributes.position,o=0;if(i===void 0)return;if(r!==null){let e=r.array;o=r.version;for(let t=0,r=e.length;t=65535?hg:mg)(n,1);s.version=o;let c=a.get(e);c&&t.remove(c),a.set(e,s)}function u(e){let t=a.get(e);if(t){let n=e.index;n!==null&&t.versiont.maxTextureSize&&(m=Math.ceil(p/t.maxTextureSize),p=t.maxTextureSize);let h=new Float32Array(p*m*4*u),g=new Ym(h,p,m,u);g.type=Ef,g.needsUpdate=!0;let _=f*4;for(let t=0;t0&&v[0].isRenderPass===!0;let t=o.width,n=o.height;v.length>0&&s===null&&(s=new km(t,n,{type:cf,depthBuffer:!1,stencilBuffer:!1}),c=new km(t,n,{type:cf,depthBuffer:!1,stencilBuffer:!1}));for(let e=0;e0)return e;let i=t*n,a=dx[i];if(a===void 0&&(a=new Float32Array(i),dx[i]=a),t!==0){r.toArray(a,0);for(let r=1,i=0;r!==t;++r)i+=n,e[r].toArray(a,i)}return a}function _x(e,t){if(e.length!==t.length)return!1;for(let n=0,r=e.length;n0&&(this.seq=r.concat(i))}setValue(e,t,n,r){let i=this.map[t];i!==void 0&&i.setValue(e,n,r)}setOptional(e,t,n){let r=t[n];r!==void 0&&this.setValue(e,n,r)}static upload(e,t,n,r){for(let i=0,a=t.length;i!==a;++i){let a=t[i],o=n[a.id];o.needsUpdate!==!1&&a.setValue(e,o.value,r)}}static seqWithValue(e,t){let n=[];for(let r=0,i=e.length;r!==i;++r){let i=e[r];i.id in t&&n.push(i)}return n}};function pS(e,t,n){let r=e.createShader(t);return e.shaderSource(r,n),e.compileShader(r),r}var mS=37297,hS=0;function gS(e,t){let n=e.split(` + }`,depthTest:!1,depthWrite:!1}),d=new t_(l,u),f=new nb(-1,1,1,-1,0,1),p=null,m=null,h=!1,g,_=null,v=[],y=!1;this.setSize=function(e,t){o.setSize(e,t),s!==null&&s.setSize(e,t),c!==null&&c.setSize(e,t);for(let n=0;n0&&v[0].isRenderPass===!0;let t=o.width,n=o.height;v.length>0&&s===null&&(s=new Jm(t,n,{type:Df,depthBuffer:!1,stencilBuffer:!1}),c=new Jm(t,n,{type:Df,depthBuffer:!1,stencilBuffer:!1}));for(let e=0;e0)return e;let i=t*n,a=Ax[i];if(a===void 0&&(a=new Float32Array(i),Ax[i]=a),t!==0){r.toArray(a,0);for(let r=1,i=0;r!==t;++r)i+=n,e[r].toArray(a,i)}return a}function Ix(e,t){if(e.length!==t.length)return!1;for(let n=0,r=e.length;n0&&(this.seq=r.concat(i))}setValue(e,t,n,r){let i=this.map[t];i!==void 0&&i.setValue(e,n,r)}setOptional(e,t,n){let r=t[n];r!==void 0&&this.setValue(e,n,r)}static upload(e,t,n,r){for(let i=0,a=t.length;i!==a;++i){let a=t[i],o=n[a.id];o.needsUpdate!==!1&&a.setValue(e,o.value,r)}}static seqWithValue(e,t){let n=[];for(let r=0,i=e.length;r!==i;++r){let i=e[r];i.id in t&&n.push(i)}return n}};function MS(e,t,n){let r=e.createShader(t);return e.shaderSource(r,n),e.compileShader(r),r}var NS=37297,PS=0;function FS(e,t){let n=e.split(` `),r=[],i=Math.max(t-6,0),a=Math.min(t+6,n.length);for(let e=i;e`:` `} ${i}: ${n[e]}`)}return r.join(` -`)}var _S=new dm;function vS(e){gm._getMatrix(_S,gm.workingColorSpace,e);let t=`mat3( ${_S.elements.map(e=>e.toFixed(4))} )`;switch(gm.getTransfer(e)){case _p:return[t,`LinearTransferOETF`];case vp:return[t,`sRGBTransferOETF`];default:return Ap(`WebGLProgram: Unsupported color space: `,e),[t,`LinearTransferOETF`]}}function yS(e,t,n){let r=e.getShaderParameter(t,e.COMPILE_STATUS),i=(e.getShaderInfoLog(t)||``).trim();if(r&&i===``)return``;let a=/ERROR: 0:(\d+)/.exec(i);if(a){let r=parseInt(a[1]);return n.toUpperCase()+` +`)}var IS=new Am;function LS(e){Fm._getMatrix(IS,Fm.workingColorSpace,e);let t=`mat3( ${IS.elements.map(e=>e.toFixed(4))} )`;switch(Fm.getTransfer(e)){case Ip:return[t,`LinearTransferOETF`];case Lp:return[t,`sRGBTransferOETF`];default:return Yp(`WebGLProgram: Unsupported color space: `,e),[t,`LinearTransferOETF`]}}function RS(e,t,n){let r=e.getShaderParameter(t,e.COMPILE_STATUS),i=(e.getShaderInfoLog(t)||``).trim();if(r&&i===``)return``;let a=/ERROR: 0:(\d+)/.exec(i);if(a){let r=parseInt(a[1]);return n.toUpperCase()+` `+i+` -`+gS(e.getShaderSource(t),r)}else return i}function bS(e,t){let n=vS(t);return[`vec4 ${e}( vec4 value ) {`,` return ${n[1]}( vec4( value.rgb * ${n[0]}, value.a ) );`,`}`].join(` -`)}var xS={1:`Linear`,2:`Reinhard`,3:`Cineon`,4:`ACESFilmic`,6:`AgX`,7:`Neutral`,5:`Custom`};function SS(e,t){let n=xS[t];return n===void 0?(Ap(`WebGLProgram: Unsupported toneMapping:`,t),`vec3 `+e+`( vec3 color ) { return LinearToneMapping( color ); }`):`vec3 `+e+`( vec3 color ) { return `+n+`ToneMapping( color ); }`}var CS=new J;function wS(){return gm.getLuminanceCoefficients(CS),[`float luminance( const in vec3 rgb ) {`,` const vec3 weights = vec3( ${CS.x.toFixed(4)}, ${CS.y.toFixed(4)}, ${CS.z.toFixed(4)} );`,` return dot( weights, rgb );`,`}`].join(` -`)}function TS(e){return[e.extensionClipCullDistance?`#extension GL_ANGLE_clip_cull_distance : require`:``,e.extensionMultiDraw?`#extension GL_ANGLE_multi_draw : require`:``].filter(OS).join(` -`)}function ES(e){let t=[];for(let n in e){let r=e[n];r!==!1&&t.push(`#define `+n+` `+r)}return t.join(` -`)}function DS(e,t){let n={},r=e.getProgramParameter(t,e.ACTIVE_ATTRIBUTES);for(let i=0;i/gm;function MS(e){return e.replace(jS,PS)}var NS=new Map;function PS(e,t){let n=yb[t];if(n===void 0){let e=NS.get(t);if(e!==void 0)n=yb[e],Ap(`WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.`,t,e);else throw Error(`THREE.WebGLProgram: Can not resolve #include <`+t+`>`)}return MS(n)}var FS=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function IS(e){return e.replace(FS,LS)}function LS(e,t,n,r){let i=``;for(let e=parseInt(t);e/gm;function ZS(e){return e.replace(XS,$S)}var QS=new Map;function $S(e,t){let n=Rb[t];if(n===void 0){let e=QS.get(t);if(e!==void 0)n=Rb[e],Yp(`WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.`,t,e);else throw Error(`THREE.WebGLProgram: Can not resolve #include <`+t+`>`)}return ZS(n)}var eC=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function tC(e){return e.replace(eC,nC)}function nC(e,t,n,r){let i=``;for(let e=parseInt(t);e0&&(g+=` -`),_=[`#define SHADER_TYPE `+n.shaderType,`#define SHADER_NAME `+n.shaderName,m].filter(OS).join(` +`),_=[`#define SHADER_TYPE `+n.shaderType,`#define SHADER_NAME `+n.shaderName,m].filter(qS).join(` `),_.length>0&&(_+=` -`)):(g=[RS(n),`#define SHADER_TYPE `+n.shaderType,`#define SHADER_NAME `+n.shaderName,m,n.extensionClipCullDistance?`#define USE_CLIP_DISTANCE`:``,n.batching?`#define USE_BATCHING`:``,n.batchingColor?`#define USE_BATCHING_COLOR`:``,n.instancing?`#define USE_INSTANCING`:``,n.instancingColor?`#define USE_INSTANCING_COLOR`:``,n.instancingMorph?`#define USE_INSTANCING_MORPH`:``,n.useFog&&n.fog?`#define USE_FOG`:``,n.useFog&&n.fogExp2?`#define FOG_EXP2`:``,n.map?`#define USE_MAP`:``,n.envMap?`#define USE_ENVMAP`:``,n.envMap?`#define `+u:``,n.lightMap?`#define USE_LIGHTMAP`:``,n.aoMap?`#define USE_AOMAP`:``,n.bumpMap?`#define USE_BUMPMAP`:``,n.normalMap?`#define USE_NORMALMAP`:``,n.normalMapObjectSpace?`#define USE_NORMALMAP_OBJECTSPACE`:``,n.normalMapTangentSpace?`#define USE_NORMALMAP_TANGENTSPACE`:``,n.displacementMap?`#define USE_DISPLACEMENTMAP`:``,n.emissiveMap?`#define USE_EMISSIVEMAP`:``,n.anisotropy?`#define USE_ANISOTROPY`:``,n.anisotropyMap?`#define USE_ANISOTROPYMAP`:``,n.clearcoatMap?`#define USE_CLEARCOATMAP`:``,n.clearcoatRoughnessMap?`#define USE_CLEARCOAT_ROUGHNESSMAP`:``,n.clearcoatNormalMap?`#define USE_CLEARCOAT_NORMALMAP`:``,n.iridescenceMap?`#define USE_IRIDESCENCEMAP`:``,n.iridescenceThicknessMap?`#define USE_IRIDESCENCE_THICKNESSMAP`:``,n.specularMap?`#define USE_SPECULARMAP`:``,n.specularColorMap?`#define USE_SPECULAR_COLORMAP`:``,n.specularIntensityMap?`#define USE_SPECULAR_INTENSITYMAP`:``,n.roughnessMap?`#define USE_ROUGHNESSMAP`:``,n.metalnessMap?`#define USE_METALNESSMAP`:``,n.alphaMap?`#define USE_ALPHAMAP`:``,n.alphaHash?`#define USE_ALPHAHASH`:``,n.transmission?`#define USE_TRANSMISSION`:``,n.transmissionMap?`#define USE_TRANSMISSIONMAP`:``,n.thicknessMap?`#define USE_THICKNESSMAP`:``,n.sheenColorMap?`#define USE_SHEEN_COLORMAP`:``,n.sheenRoughnessMap?`#define USE_SHEEN_ROUGHNESSMAP`:``,n.mapUv?`#define MAP_UV `+n.mapUv:``,n.alphaMapUv?`#define ALPHAMAP_UV `+n.alphaMapUv:``,n.lightMapUv?`#define LIGHTMAP_UV `+n.lightMapUv:``,n.aoMapUv?`#define AOMAP_UV `+n.aoMapUv:``,n.emissiveMapUv?`#define EMISSIVEMAP_UV `+n.emissiveMapUv:``,n.bumpMapUv?`#define BUMPMAP_UV `+n.bumpMapUv:``,n.normalMapUv?`#define NORMALMAP_UV `+n.normalMapUv:``,n.displacementMapUv?`#define DISPLACEMENTMAP_UV `+n.displacementMapUv:``,n.metalnessMapUv?`#define METALNESSMAP_UV `+n.metalnessMapUv:``,n.roughnessMapUv?`#define ROUGHNESSMAP_UV `+n.roughnessMapUv:``,n.anisotropyMapUv?`#define ANISOTROPYMAP_UV `+n.anisotropyMapUv:``,n.clearcoatMapUv?`#define CLEARCOATMAP_UV `+n.clearcoatMapUv:``,n.clearcoatNormalMapUv?`#define CLEARCOAT_NORMALMAP_UV `+n.clearcoatNormalMapUv:``,n.clearcoatRoughnessMapUv?`#define CLEARCOAT_ROUGHNESSMAP_UV `+n.clearcoatRoughnessMapUv:``,n.iridescenceMapUv?`#define IRIDESCENCEMAP_UV `+n.iridescenceMapUv:``,n.iridescenceThicknessMapUv?`#define IRIDESCENCE_THICKNESSMAP_UV `+n.iridescenceThicknessMapUv:``,n.sheenColorMapUv?`#define SHEEN_COLORMAP_UV `+n.sheenColorMapUv:``,n.sheenRoughnessMapUv?`#define SHEEN_ROUGHNESSMAP_UV `+n.sheenRoughnessMapUv:``,n.specularMapUv?`#define SPECULARMAP_UV `+n.specularMapUv:``,n.specularColorMapUv?`#define SPECULAR_COLORMAP_UV `+n.specularColorMapUv:``,n.specularIntensityMapUv?`#define SPECULAR_INTENSITYMAP_UV `+n.specularIntensityMapUv:``,n.transmissionMapUv?`#define TRANSMISSIONMAP_UV `+n.transmissionMapUv:``,n.thicknessMapUv?`#define THICKNESSMAP_UV `+n.thicknessMapUv:``,n.vertexTangents&&n.flatShading===!1?`#define USE_TANGENT`:``,n.vertexNormals?`#define HAS_NORMAL`:``,n.vertexColors?`#define USE_COLOR`:``,n.vertexAlphas?`#define USE_COLOR_ALPHA`:``,n.vertexUv1s?`#define USE_UV1`:``,n.vertexUv2s?`#define USE_UV2`:``,n.vertexUv3s?`#define USE_UV3`:``,n.pointsUvs?`#define USE_POINTS_UV`:``,n.flatShading?`#define FLAT_SHADED`:``,n.skinning?`#define USE_SKINNING`:``,n.morphTargets?`#define USE_MORPHTARGETS`:``,n.morphNormals&&n.flatShading===!1?`#define USE_MORPHNORMALS`:``,n.morphColors?`#define USE_MORPHCOLORS`:``,n.morphTargetsCount>0?`#define MORPHTARGETS_TEXTURE_STRIDE `+n.morphTextureStride:``,n.morphTargetsCount>0?`#define MORPHTARGETS_COUNT `+n.morphTargetsCount:``,n.doubleSided?`#define DOUBLE_SIDED`:``,n.flipSided?`#define FLIP_SIDED`:``,n.shadowMapEnabled?`#define USE_SHADOWMAP`:``,n.shadowMapEnabled?`#define `+c:``,n.sizeAttenuation?`#define USE_SIZEATTENUATION`:``,n.numLightProbes>0?`#define USE_LIGHT_PROBES`:``,n.logarithmicDepthBuffer?`#define USE_LOGARITHMIC_DEPTH_BUFFER`:``,n.reversedDepthBuffer?`#define USE_REVERSED_DEPTH_BUFFER`:``,`uniform mat4 modelMatrix;`,`uniform mat4 modelViewMatrix;`,`uniform mat4 projectionMatrix;`,`uniform mat4 viewMatrix;`,`uniform mat3 normalMatrix;`,`uniform vec3 cameraPosition;`,`uniform bool isOrthographic;`,`#ifdef USE_INSTANCING`,` attribute mat4 instanceMatrix;`,`#endif`,`#ifdef USE_INSTANCING_COLOR`,` attribute vec3 instanceColor;`,`#endif`,`#ifdef USE_INSTANCING_MORPH`,` uniform sampler2D morphTexture;`,`#endif`,`attribute vec3 position;`,`attribute vec3 normal;`,`attribute vec2 uv;`,`#ifdef USE_UV1`,` attribute vec2 uv1;`,`#endif`,`#ifdef USE_UV2`,` attribute vec2 uv2;`,`#endif`,`#ifdef USE_UV3`,` attribute vec2 uv3;`,`#endif`,`#ifdef USE_TANGENT`,` attribute vec4 tangent;`,`#endif`,`#if defined( USE_COLOR_ALPHA )`,` attribute vec4 color;`,`#elif defined( USE_COLOR )`,` attribute vec3 color;`,`#endif`,`#ifdef USE_SKINNING`,` attribute vec4 skinIndex;`,` attribute vec4 skinWeight;`,`#endif`,` -`].filter(OS).join(` -`),_=[RS(n),`#define SHADER_TYPE `+n.shaderType,`#define SHADER_NAME `+n.shaderName,m,n.useFog&&n.fog?`#define USE_FOG`:``,n.useFog&&n.fogExp2?`#define FOG_EXP2`:``,n.alphaToCoverage?`#define ALPHA_TO_COVERAGE`:``,n.map?`#define USE_MAP`:``,n.matcap?`#define USE_MATCAP`:``,n.envMap?`#define USE_ENVMAP`:``,n.envMap?`#define `+l:``,n.envMap?`#define `+u:``,n.envMap?`#define `+d:``,f?`#define CUBEUV_TEXEL_WIDTH `+f.texelWidth:``,f?`#define CUBEUV_TEXEL_HEIGHT `+f.texelHeight:``,f?`#define CUBEUV_MAX_MIP `+f.maxMip+`.0`:``,n.lightMap?`#define USE_LIGHTMAP`:``,n.aoMap?`#define USE_AOMAP`:``,n.bumpMap?`#define USE_BUMPMAP`:``,n.normalMap?`#define USE_NORMALMAP`:``,n.normalMapObjectSpace?`#define USE_NORMALMAP_OBJECTSPACE`:``,n.normalMapTangentSpace?`#define USE_NORMALMAP_TANGENTSPACE`:``,n.packedNormalMap?`#define USE_PACKED_NORMALMAP`:``,n.emissiveMap?`#define USE_EMISSIVEMAP`:``,n.anisotropy?`#define USE_ANISOTROPY`:``,n.anisotropyMap?`#define USE_ANISOTROPYMAP`:``,n.clearcoat?`#define USE_CLEARCOAT`:``,n.clearcoatMap?`#define USE_CLEARCOATMAP`:``,n.clearcoatRoughnessMap?`#define USE_CLEARCOAT_ROUGHNESSMAP`:``,n.clearcoatNormalMap?`#define USE_CLEARCOAT_NORMALMAP`:``,n.dispersion?`#define USE_DISPERSION`:``,n.retroreflection?`#define USE_RETROREFLECTION`:``,n.iridescence?`#define USE_IRIDESCENCE`:``,n.iridescenceMap?`#define USE_IRIDESCENCEMAP`:``,n.iridescenceThicknessMap?`#define USE_IRIDESCENCE_THICKNESSMAP`:``,n.specularMap?`#define USE_SPECULARMAP`:``,n.specularColorMap?`#define USE_SPECULAR_COLORMAP`:``,n.specularIntensityMap?`#define USE_SPECULAR_INTENSITYMAP`:``,n.roughnessMap?`#define USE_ROUGHNESSMAP`:``,n.metalnessMap?`#define USE_METALNESSMAP`:``,n.alphaMap?`#define USE_ALPHAMAP`:``,n.alphaTest?`#define USE_ALPHATEST`:``,n.alphaHash?`#define USE_ALPHAHASH`:``,n.sheen?`#define USE_SHEEN`:``,n.sheenColorMap?`#define USE_SHEEN_COLORMAP`:``,n.sheenRoughnessMap?`#define USE_SHEEN_ROUGHNESSMAP`:``,n.transmission?`#define USE_TRANSMISSION`:``,n.transmissionMap?`#define USE_TRANSMISSIONMAP`:``,n.thicknessMap?`#define USE_THICKNESSMAP`:``,n.vertexTangents&&n.flatShading===!1?`#define USE_TANGENT`:``,n.vertexColors||n.instancingColor?`#define USE_COLOR`:``,n.vertexAlphas||n.batchingColor?`#define USE_COLOR_ALPHA`:``,n.vertexUv1s?`#define USE_UV1`:``,n.vertexUv2s?`#define USE_UV2`:``,n.vertexUv3s?`#define USE_UV3`:``,n.pointsUvs?`#define USE_POINTS_UV`:``,n.gradientMap?`#define USE_GRADIENTMAP`:``,n.flatShading?`#define FLAT_SHADED`:``,n.doubleSided?`#define DOUBLE_SIDED`:``,n.flipSided?`#define FLIP_SIDED`:``,n.shadowMapEnabled?`#define USE_SHADOWMAP`:``,n.shadowMapEnabled?`#define `+c:``,n.premultipliedAlpha?`#define PREMULTIPLIED_ALPHA`:``,n.numLightProbes>0?`#define USE_LIGHT_PROBES`:``,n.numLightProbeGrids>0?`#define USE_LIGHT_PROBES_GRID`:``,n.decodeVideoTexture?`#define DECODE_VIDEO_TEXTURE`:``,n.decodeVideoTextureEmissive?`#define DECODE_VIDEO_TEXTURE_EMISSIVE`:``,n.logarithmicDepthBuffer?`#define USE_LOGARITHMIC_DEPTH_BUFFER`:``,n.reversedDepthBuffer?`#define USE_REVERSED_DEPTH_BUFFER`:``,`uniform mat4 viewMatrix;`,`uniform vec3 cameraPosition;`,`uniform bool isOrthographic;`,n.toneMapping===0?``:`#define TONE_MAPPING`,n.toneMapping===0?``:yb.tonemapping_pars_fragment,n.toneMapping===0?``:SS(`toneMapping`,n.toneMapping),n.dithering?`#define DITHERING`:``,n.opaque?`#define OPAQUE`:``,yb.colorspace_pars_fragment,bS(`linearToOutputTexel`,n.outputColorSpace),wS(),n.useDepthPacking?`#define DEPTH_PACKING `+n.depthPacking:``,` -`].filter(OS).join(` -`)),o=MS(o),o=kS(o,n),o=AS(o,n),s=MS(s),s=kS(s,n),s=AS(s,n),o=IS(o),s=IS(s),n.isRawShaderMaterial!==!0&&(v=`#version 300 es +`)):(g=[rC(n),`#define SHADER_TYPE `+n.shaderType,`#define SHADER_NAME `+n.shaderName,m,n.extensionClipCullDistance?`#define USE_CLIP_DISTANCE`:``,n.batching?`#define USE_BATCHING`:``,n.batchingColor?`#define USE_BATCHING_COLOR`:``,n.instancing?`#define USE_INSTANCING`:``,n.instancingColor?`#define USE_INSTANCING_COLOR`:``,n.instancingMorph?`#define USE_INSTANCING_MORPH`:``,n.useFog&&n.fog?`#define USE_FOG`:``,n.useFog&&n.fogExp2?`#define FOG_EXP2`:``,n.map?`#define USE_MAP`:``,n.envMap?`#define USE_ENVMAP`:``,n.envMap?`#define `+u:``,n.lightMap?`#define USE_LIGHTMAP`:``,n.aoMap?`#define USE_AOMAP`:``,n.bumpMap?`#define USE_BUMPMAP`:``,n.normalMap?`#define USE_NORMALMAP`:``,n.normalMapObjectSpace?`#define USE_NORMALMAP_OBJECTSPACE`:``,n.normalMapTangentSpace?`#define USE_NORMALMAP_TANGENTSPACE`:``,n.displacementMap?`#define USE_DISPLACEMENTMAP`:``,n.emissiveMap?`#define USE_EMISSIVEMAP`:``,n.anisotropy?`#define USE_ANISOTROPY`:``,n.anisotropyMap?`#define USE_ANISOTROPYMAP`:``,n.clearcoatMap?`#define USE_CLEARCOATMAP`:``,n.clearcoatRoughnessMap?`#define USE_CLEARCOAT_ROUGHNESSMAP`:``,n.clearcoatNormalMap?`#define USE_CLEARCOAT_NORMALMAP`:``,n.iridescenceMap?`#define USE_IRIDESCENCEMAP`:``,n.iridescenceThicknessMap?`#define USE_IRIDESCENCE_THICKNESSMAP`:``,n.specularMap?`#define USE_SPECULARMAP`:``,n.specularColorMap?`#define USE_SPECULAR_COLORMAP`:``,n.specularIntensityMap?`#define USE_SPECULAR_INTENSITYMAP`:``,n.roughnessMap?`#define USE_ROUGHNESSMAP`:``,n.metalnessMap?`#define USE_METALNESSMAP`:``,n.alphaMap?`#define USE_ALPHAMAP`:``,n.alphaHash?`#define USE_ALPHAHASH`:``,n.transmission?`#define USE_TRANSMISSION`:``,n.transmissionMap?`#define USE_TRANSMISSIONMAP`:``,n.thicknessMap?`#define USE_THICKNESSMAP`:``,n.sheenColorMap?`#define USE_SHEEN_COLORMAP`:``,n.sheenRoughnessMap?`#define USE_SHEEN_ROUGHNESSMAP`:``,n.mapUv?`#define MAP_UV `+n.mapUv:``,n.alphaMapUv?`#define ALPHAMAP_UV `+n.alphaMapUv:``,n.lightMapUv?`#define LIGHTMAP_UV `+n.lightMapUv:``,n.aoMapUv?`#define AOMAP_UV `+n.aoMapUv:``,n.emissiveMapUv?`#define EMISSIVEMAP_UV `+n.emissiveMapUv:``,n.bumpMapUv?`#define BUMPMAP_UV `+n.bumpMapUv:``,n.normalMapUv?`#define NORMALMAP_UV `+n.normalMapUv:``,n.displacementMapUv?`#define DISPLACEMENTMAP_UV `+n.displacementMapUv:``,n.metalnessMapUv?`#define METALNESSMAP_UV `+n.metalnessMapUv:``,n.roughnessMapUv?`#define ROUGHNESSMAP_UV `+n.roughnessMapUv:``,n.anisotropyMapUv?`#define ANISOTROPYMAP_UV `+n.anisotropyMapUv:``,n.clearcoatMapUv?`#define CLEARCOATMAP_UV `+n.clearcoatMapUv:``,n.clearcoatNormalMapUv?`#define CLEARCOAT_NORMALMAP_UV `+n.clearcoatNormalMapUv:``,n.clearcoatRoughnessMapUv?`#define CLEARCOAT_ROUGHNESSMAP_UV `+n.clearcoatRoughnessMapUv:``,n.iridescenceMapUv?`#define IRIDESCENCEMAP_UV `+n.iridescenceMapUv:``,n.iridescenceThicknessMapUv?`#define IRIDESCENCE_THICKNESSMAP_UV `+n.iridescenceThicknessMapUv:``,n.sheenColorMapUv?`#define SHEEN_COLORMAP_UV `+n.sheenColorMapUv:``,n.sheenRoughnessMapUv?`#define SHEEN_ROUGHNESSMAP_UV `+n.sheenRoughnessMapUv:``,n.specularMapUv?`#define SPECULARMAP_UV `+n.specularMapUv:``,n.specularColorMapUv?`#define SPECULAR_COLORMAP_UV `+n.specularColorMapUv:``,n.specularIntensityMapUv?`#define SPECULAR_INTENSITYMAP_UV `+n.specularIntensityMapUv:``,n.transmissionMapUv?`#define TRANSMISSIONMAP_UV `+n.transmissionMapUv:``,n.thicknessMapUv?`#define THICKNESSMAP_UV `+n.thicknessMapUv:``,n.vertexTangents&&n.flatShading===!1?`#define USE_TANGENT`:``,n.vertexNormals?`#define HAS_NORMAL`:``,n.vertexColors?`#define USE_COLOR`:``,n.vertexAlphas?`#define USE_COLOR_ALPHA`:``,n.vertexUv1s?`#define USE_UV1`:``,n.vertexUv2s?`#define USE_UV2`:``,n.vertexUv3s?`#define USE_UV3`:``,n.pointsUvs?`#define USE_POINTS_UV`:``,n.flatShading?`#define FLAT_SHADED`:``,n.skinning?`#define USE_SKINNING`:``,n.morphTargets?`#define USE_MORPHTARGETS`:``,n.morphNormals&&n.flatShading===!1?`#define USE_MORPHNORMALS`:``,n.morphColors?`#define USE_MORPHCOLORS`:``,n.morphTargetsCount>0?`#define MORPHTARGETS_TEXTURE_STRIDE `+n.morphTextureStride:``,n.morphTargetsCount>0?`#define MORPHTARGETS_COUNT `+n.morphTargetsCount:``,n.doubleSided?`#define DOUBLE_SIDED`:``,n.flipSided?`#define FLIP_SIDED`:``,n.shadowMapEnabled?`#define USE_SHADOWMAP`:``,n.shadowMapEnabled?`#define `+c:``,n.sizeAttenuation?`#define USE_SIZEATTENUATION`:``,n.numLightProbes>0?`#define USE_LIGHT_PROBES`:``,n.logarithmicDepthBuffer?`#define USE_LOGARITHMIC_DEPTH_BUFFER`:``,n.reversedDepthBuffer?`#define USE_REVERSED_DEPTH_BUFFER`:``,`uniform mat4 modelMatrix;`,`uniform mat4 modelViewMatrix;`,`uniform mat4 projectionMatrix;`,`uniform mat4 viewMatrix;`,`uniform mat3 normalMatrix;`,`uniform vec3 cameraPosition;`,`uniform bool isOrthographic;`,`#ifdef USE_INSTANCING`,` attribute mat4 instanceMatrix;`,`#endif`,`#ifdef USE_INSTANCING_COLOR`,` attribute vec3 instanceColor;`,`#endif`,`#ifdef USE_INSTANCING_MORPH`,` uniform sampler2D morphTexture;`,`#endif`,`attribute vec3 position;`,`attribute vec3 normal;`,`attribute vec2 uv;`,`#ifdef USE_UV1`,` attribute vec2 uv1;`,`#endif`,`#ifdef USE_UV2`,` attribute vec2 uv2;`,`#endif`,`#ifdef USE_UV3`,` attribute vec2 uv3;`,`#endif`,`#ifdef USE_TANGENT`,` attribute vec4 tangent;`,`#endif`,`#if defined( USE_COLOR_ALPHA )`,` attribute vec4 color;`,`#elif defined( USE_COLOR )`,` attribute vec3 color;`,`#endif`,`#ifdef USE_SKINNING`,` attribute vec4 skinIndex;`,` attribute vec4 skinWeight;`,`#endif`,` +`].filter(qS).join(` +`),_=[rC(n),`#define SHADER_TYPE `+n.shaderType,`#define SHADER_NAME `+n.shaderName,m,n.useFog&&n.fog?`#define USE_FOG`:``,n.useFog&&n.fogExp2?`#define FOG_EXP2`:``,n.alphaToCoverage?`#define ALPHA_TO_COVERAGE`:``,n.map?`#define USE_MAP`:``,n.matcap?`#define USE_MATCAP`:``,n.envMap?`#define USE_ENVMAP`:``,n.envMap?`#define `+l:``,n.envMap?`#define `+u:``,n.envMap?`#define `+d:``,f?`#define CUBEUV_TEXEL_WIDTH `+f.texelWidth:``,f?`#define CUBEUV_TEXEL_HEIGHT `+f.texelHeight:``,f?`#define CUBEUV_MAX_MIP `+f.maxMip+`.0`:``,n.lightMap?`#define USE_LIGHTMAP`:``,n.aoMap?`#define USE_AOMAP`:``,n.bumpMap?`#define USE_BUMPMAP`:``,n.normalMap?`#define USE_NORMALMAP`:``,n.normalMapObjectSpace?`#define USE_NORMALMAP_OBJECTSPACE`:``,n.normalMapTangentSpace?`#define USE_NORMALMAP_TANGENTSPACE`:``,n.packedNormalMap?`#define USE_PACKED_NORMALMAP`:``,n.emissiveMap?`#define USE_EMISSIVEMAP`:``,n.anisotropy?`#define USE_ANISOTROPY`:``,n.anisotropyMap?`#define USE_ANISOTROPYMAP`:``,n.clearcoat?`#define USE_CLEARCOAT`:``,n.clearcoatMap?`#define USE_CLEARCOATMAP`:``,n.clearcoatRoughnessMap?`#define USE_CLEARCOAT_ROUGHNESSMAP`:``,n.clearcoatNormalMap?`#define USE_CLEARCOAT_NORMALMAP`:``,n.dispersion?`#define USE_DISPERSION`:``,n.retroreflection?`#define USE_RETROREFLECTION`:``,n.iridescence?`#define USE_IRIDESCENCE`:``,n.iridescenceMap?`#define USE_IRIDESCENCEMAP`:``,n.iridescenceThicknessMap?`#define USE_IRIDESCENCE_THICKNESSMAP`:``,n.specularMap?`#define USE_SPECULARMAP`:``,n.specularColorMap?`#define USE_SPECULAR_COLORMAP`:``,n.specularIntensityMap?`#define USE_SPECULAR_INTENSITYMAP`:``,n.roughnessMap?`#define USE_ROUGHNESSMAP`:``,n.metalnessMap?`#define USE_METALNESSMAP`:``,n.alphaMap?`#define USE_ALPHAMAP`:``,n.alphaTest?`#define USE_ALPHATEST`:``,n.alphaHash?`#define USE_ALPHAHASH`:``,n.sheen?`#define USE_SHEEN`:``,n.sheenColorMap?`#define USE_SHEEN_COLORMAP`:``,n.sheenRoughnessMap?`#define USE_SHEEN_ROUGHNESSMAP`:``,n.transmission?`#define USE_TRANSMISSION`:``,n.transmissionMap?`#define USE_TRANSMISSIONMAP`:``,n.thicknessMap?`#define USE_THICKNESSMAP`:``,n.vertexTangents&&n.flatShading===!1?`#define USE_TANGENT`:``,n.vertexColors||n.instancingColor?`#define USE_COLOR`:``,n.vertexAlphas||n.batchingColor?`#define USE_COLOR_ALPHA`:``,n.vertexUv1s?`#define USE_UV1`:``,n.vertexUv2s?`#define USE_UV2`:``,n.vertexUv3s?`#define USE_UV3`:``,n.pointsUvs?`#define USE_POINTS_UV`:``,n.gradientMap?`#define USE_GRADIENTMAP`:``,n.flatShading?`#define FLAT_SHADED`:``,n.doubleSided?`#define DOUBLE_SIDED`:``,n.flipSided?`#define FLIP_SIDED`:``,n.shadowMapEnabled?`#define USE_SHADOWMAP`:``,n.shadowMapEnabled?`#define `+c:``,n.premultipliedAlpha?`#define PREMULTIPLIED_ALPHA`:``,n.numLightProbes>0?`#define USE_LIGHT_PROBES`:``,n.numLightProbeGrids>0?`#define USE_LIGHT_PROBES_GRID`:``,n.decodeVideoTexture?`#define DECODE_VIDEO_TEXTURE`:``,n.decodeVideoTextureEmissive?`#define DECODE_VIDEO_TEXTURE_EMISSIVE`:``,n.logarithmicDepthBuffer?`#define USE_LOGARITHMIC_DEPTH_BUFFER`:``,n.reversedDepthBuffer?`#define USE_REVERSED_DEPTH_BUFFER`:``,`uniform mat4 viewMatrix;`,`uniform vec3 cameraPosition;`,`uniform bool isOrthographic;`,n.toneMapping===0?``:`#define TONE_MAPPING`,n.toneMapping===0?``:Rb.tonemapping_pars_fragment,n.toneMapping===0?``:VS(`toneMapping`,n.toneMapping),n.dithering?`#define DITHERING`:``,n.opaque?`#define OPAQUE`:``,Rb.colorspace_pars_fragment,zS(`linearToOutputTexel`,n.outputColorSpace),US(),n.useDepthPacking?`#define DEPTH_PACKING `+n.depthPacking:``,` +`].filter(qS).join(` +`)),o=ZS(o),o=JS(o,n),o=YS(o,n),s=ZS(s),s=JS(s,n),s=YS(s,n),o=tC(o),s=tC(s),n.isRawShaderMaterial!==!0&&(v=`#version 300 es `,g=[p,`#define attribute in`,`#define varying out`,`#define texture2D texture`].join(` `)+` `+g,_=[`#define varying in`,n.glslVersion===`300 es`?``:`layout(location = 0) out highp vec4 pc_fragColor;`,n.glslVersion===`300 es`?``:`#define gl_FragColor pc_fragColor`,`#define gl_FragDepthEXT gl_FragDepth`,`#define texture2D texture`,`#define textureCube texture`,`#define texture2DProj textureProj`,`#define texture2DLodEXT textureLod`,`#define texture2DProjLodEXT textureProjLod`,`#define textureCubeLodEXT textureLod`,`#define texture2DGradEXT textureGrad`,`#define texture2DProjGradEXT textureProjGrad`,`#define textureCubeGradEXT textureGrad`].join(` `)+` -`+_);let y=v+g+o,b=v+_+s,x=pS(i,i.VERTEX_SHADER,y),S=pS(i,i.FRAGMENT_SHADER,b);i.attachShader(h,x),i.attachShader(h,S),n.index0AttributeName===void 0?n.hasPositionAttribute===!0&&i.bindAttribLocation(h,0,`position`):i.bindAttribLocation(h,0,n.index0AttributeName),i.linkProgram(h);function C(t){if(e.debug.checkShaderErrors){let n=i.getProgramInfoLog(h)||``,r=i.getShaderInfoLog(x)||``,a=i.getShaderInfoLog(S)||``,o=n.trim(),s=r.trim(),c=a.trim(),l=!0,u=!0;if(i.getProgramParameter(h,i.LINK_STATUS)===!1)if(l=!1,typeof e.debug.onShaderError==`function`)e.debug.onShaderError(i,h,x,S);else{let e=yS(i,x,`vertex`),n=yS(i,S,`fragment`);jp(`WebGLProgram: Shader Error `+i.getError()+` - VALIDATE_STATUS `+i.getProgramParameter(h,i.VALIDATE_STATUS)+` +`+_);let y=v+g+o,b=v+_+s,x=MS(i,i.VERTEX_SHADER,y),S=MS(i,i.FRAGMENT_SHADER,b);i.attachShader(h,x),i.attachShader(h,S),n.index0AttributeName===void 0?n.hasPositionAttribute===!0&&i.bindAttribLocation(h,0,`position`):i.bindAttribLocation(h,0,n.index0AttributeName),i.linkProgram(h);function C(t){if(e.debug.checkShaderErrors){let n=i.getProgramInfoLog(h)||``,r=i.getShaderInfoLog(x)||``,a=i.getShaderInfoLog(S)||``,o=n.trim(),s=r.trim(),c=a.trim(),l=!0,u=!0;if(i.getProgramParameter(h,i.LINK_STATUS)===!1)if(l=!1,typeof e.debug.onShaderError==`function`)e.debug.onShaderError(i,h,x,S);else{let e=RS(i,x,`vertex`),n=RS(i,S,`fragment`);Xp(`WebGLProgram: Shader Error `+i.getError()+` - VALIDATE_STATUS `+i.getProgramParameter(h,i.VALIDATE_STATUS)+` Material Name: `+t.name+` Material Type: `+t.type+` Program Info Log: `+o+` `+e+` -`+n)}else o===``?(s===``||c===``)&&(u=!1):Ap(`WebGLProgram: Program Info Log:`,o);u&&(t.diagnostics={runnable:l,programLog:o,vertexShader:{log:s,prefix:g},fragmentShader:{log:c,prefix:_}})}i.deleteShader(x),i.deleteShader(S),w=new fS(i,h),T=DS(i,h)}let w;this.getUniforms=function(){return w===void 0&&C(this),w};let T;this.getAttributes=function(){return T===void 0&&C(this),T};let E=n.rendererExtensionParallelShaderCompile===!1;return this.isReady=function(){return E===!1&&(E=i.getProgramParameter(h,mS)),E},this.destroy=function(){r.releaseStatesOfProgram(this),i.deleteProgram(h),this.program=void 0},this.type=n.shaderType,this.name=n.shaderName,this.id=hS++,this.cacheKey=t,this.usedTimes=1,this.program=h,this.vertexShader=x,this.fragmentShader=S,this}var YS=0,XS=class{constructor(){this.shaderCache=new Map,this.materialCache=new Map}update(e,t,n){let r=this._getShaderCacheForMaterial(e);return r.has(t)===!1&&(r.add(t),t.usedTimes++),r.has(n)===!1&&(r.add(n),n.usedTimes++),this}remove(e){let t=this.materialCache.get(e);for(let e of t)e.usedTimes--,e.usedTimes===0&&this.shaderCache.delete(e.code);return this.materialCache.delete(e),this}getVertexShaderStage(e){return this._getShaderStage(e.vertexShader)}getFragmentShaderStage(e){return this._getShaderStage(e.fragmentShader)}dispose(){this.shaderCache.clear(),this.materialCache.clear()}_getShaderCacheForMaterial(e){let t=this.materialCache,n=t.get(e);return n===void 0&&(n=new Set,t.set(e,n)),n}_getShaderStage(e){let t=this.shaderCache,n=t.get(e);return n===void 0&&(n=new ZS(e),t.set(e,n)),n}},ZS=class{constructor(e){this.id=YS++,this.code=e,this.usedTimes=0}};function QS(e){return e===1030||e===37490||e===36285}function $S(e,t,n,r,i,a){let o=new Um,s=new XS,c=new Set,l=[],u=new Map,d=r.logarithmicDepthBuffer,f=r.precision,p={MeshDepthMaterial:`depth`,MeshDistanceMaterial:`distance`,MeshNormalMaterial:`normal`,MeshBasicMaterial:`basic`,MeshLambertMaterial:`lambert`,MeshPhongMaterial:`phong`,MeshToonMaterial:`toon`,MeshStandardMaterial:`physical`,MeshPhysicalMaterial:`physical`,MeshMatcapMaterial:`matcap`,LineBasicMaterial:`basic`,LineDashedMaterial:`dashed`,PointsMaterial:`points`,ShadowMaterial:`shadow`,SpriteMaterial:`sprite`};function m(e){return c.add(e),e===0?`uv`:`uv${e}`}function h(i,o,l,u,h,g){let _=u.fog,v=h.geometry,y=i.isMeshStandardMaterial||i.isMeshLambertMaterial||i.isMeshPhongMaterial?u.environment:null,b=i.isMeshStandardMaterial||i.isMeshLambertMaterial&&!i.envMap||i.isMeshPhongMaterial&&!i.envMap,x=t.get(i.envMap||y,b),S=x&&x.mapping===306?x.image.height:null,C=p[i.type];i.precision!==null&&(f=r.getMaxPrecision(i.precision),f!==i.precision&&Ap(`WebGLProgram.getParameters:`,i.precision,`not supported, using`,f,`instead.`));let w=v.morphAttributes.position||v.morphAttributes.normal||v.morphAttributes.color,T=w===void 0?0:w.length,E=0;v.morphAttributes.position!==void 0&&(E=1),v.morphAttributes.normal!==void 0&&(E=2),v.morphAttributes.color!==void 0&&(E=3);let D,O,ee,te;if(C){let e=bb[C];D=e.vertexShader,O=e.fragmentShader}else{D=i.vertexShader,O=i.fragmentShader;let e=s.getVertexShaderStage(i),t=s.getFragmentShaderStage(i);s.update(i,e,t),ee=e.id,te=t.id}let k=e.getRenderTarget(),ne=e.state.buffers.depth.getReversed(),A=h.isInstancedMesh===!0,re=h.isBatchedMesh===!0,ie=!!i.map,ae=!!i.matcap,oe=!!x,j=!!i.aoMap,se=!!i.lightMap,ce=!!i.bumpMap&&i.wireframe===!1,le=!!i.normalMap,ue=!!i.displacementMap,M=!!i.emissiveMap,N=!!i.metalnessMap,de=!!i.roughnessMap,fe=i.anisotropy>0,pe=i.clearcoat>0,me=i.dispersion>0,P=i.retroreflectivity>0,F=i.iridescence>0,he=i.sheen>0,ge=i.transmission>0,_e=fe&&!!i.anisotropyMap,ve=pe&&!!i.clearcoatMap,ye=pe&&!!i.clearcoatNormalMap,be=pe&&!!i.clearcoatRoughnessMap,xe=F&&!!i.iridescenceMap,I=F&&!!i.iridescenceThicknessMap,Se=he&&!!i.sheenColorMap,Ce=he&&!!i.sheenRoughnessMap,we=!!i.specularMap,L=!!i.specularColorMap,Te=!!i.specularIntensityMap,Ee=ge&&!!i.transmissionMap,De=ge&&!!i.thicknessMap,Oe=!!i.gradientMap,ke=!!i.alphaMap,Ae=i.alphaTest>0,je=!!i.alphaHash,Me=!!i.extensions,Ne=0;i.toneMapped&&(k===null||k.isXRRenderTarget===!0)&&(Ne=e.toneMapping);let Pe={shaderID:C,shaderType:i.type,shaderName:i.name,vertexShader:D,fragmentShader:O,defines:i.defines,customVertexShaderID:ee,customFragmentShaderID:te,isRawShaderMaterial:i.isRawShaderMaterial===!0,glslVersion:i.glslVersion,precision:f,batching:re,batchingColor:re&&h._colorsTexture!==null,instancing:A,instancingColor:A&&h.instanceColor!==null,instancingMorph:A&&h.morphTexture!==null,outputColorSpace:k===null?e.outputColorSpace:k.isXRRenderTarget===!0?k.texture.colorSpace:gm.workingColorSpace,alphaToCoverage:!!i.alphaToCoverage,map:ie,matcap:ae,envMap:oe,envMapMode:oe&&x.mapping,envMapCubeUVHeight:S,aoMap:j,lightMap:se,bumpMap:ce,normalMap:le,displacementMap:ue,emissiveMap:M,normalMapObjectSpace:le&&i.normalMapType===1,normalMapTangentSpace:le&&i.normalMapType===0,packedNormalMap:le&&i.normalMapType===0&&QS(i.normalMap.format),metalnessMap:N,roughnessMap:de,anisotropy:fe,anisotropyMap:_e,clearcoat:pe,clearcoatMap:ve,clearcoatNormalMap:ye,clearcoatRoughnessMap:be,dispersion:me,retroreflection:P,iridescence:F,iridescenceMap:xe,iridescenceThicknessMap:I,sheen:he,sheenColorMap:Se,sheenRoughnessMap:Ce,specularMap:we,specularColorMap:L,specularIntensityMap:Te,transmission:ge,transmissionMap:Ee,thicknessMap:De,gradientMap:Oe,opaque:i.transparent===!1&&i.blending===1&&i.alphaToCoverage===!1,alphaMap:ke,alphaTest:Ae,alphaHash:je,combine:i.combine,mapUv:ie&&m(i.map.channel),aoMapUv:j&&m(i.aoMap.channel),lightMapUv:se&&m(i.lightMap.channel),bumpMapUv:ce&&m(i.bumpMap.channel),normalMapUv:le&&m(i.normalMap.channel),displacementMapUv:ue&&m(i.displacementMap.channel),emissiveMapUv:M&&m(i.emissiveMap.channel),metalnessMapUv:N&&m(i.metalnessMap.channel),roughnessMapUv:de&&m(i.roughnessMap.channel),anisotropyMapUv:_e&&m(i.anisotropyMap.channel),clearcoatMapUv:ve&&m(i.clearcoatMap.channel),clearcoatNormalMapUv:ye&&m(i.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:be&&m(i.clearcoatRoughnessMap.channel),iridescenceMapUv:xe&&m(i.iridescenceMap.channel),iridescenceThicknessMapUv:I&&m(i.iridescenceThicknessMap.channel),sheenColorMapUv:Se&&m(i.sheenColorMap.channel),sheenRoughnessMapUv:Ce&&m(i.sheenRoughnessMap.channel),specularMapUv:we&&m(i.specularMap.channel),specularColorMapUv:L&&m(i.specularColorMap.channel),specularIntensityMapUv:Te&&m(i.specularIntensityMap.channel),transmissionMapUv:Ee&&m(i.transmissionMap.channel),thicknessMapUv:De&&m(i.thicknessMap.channel),alphaMapUv:ke&&m(i.alphaMap.channel),vertexTangents:!!v.attributes.tangent&&(le||fe),vertexNormals:!!v.attributes.normal,vertexColors:i.vertexColors,vertexAlphas:i.vertexColors===!0&&!!v.attributes.color&&v.attributes.color.itemSize===4,pointsUvs:h.isPoints===!0&&!!v.attributes.uv&&(ie||ke),fog:!!_,useFog:i.fog===!0,fogExp2:!!_&&_.isFogExp2,flatShading:i.wireframe===!1&&(i.flatShading===!0||v.attributes.normal===void 0&&le===!1&&(i.isMeshLambertMaterial||i.isMeshPhongMaterial||i.isMeshStandardMaterial||i.isMeshPhysicalMaterial)),sizeAttenuation:i.sizeAttenuation===!0,logarithmicDepthBuffer:d,reversedDepthBuffer:ne,skinning:h.isSkinnedMesh===!0,hasPositionAttribute:v.attributes.position!==void 0,morphTargets:v.morphAttributes.position!==void 0,morphNormals:v.morphAttributes.normal!==void 0,morphColors:v.morphAttributes.color!==void 0,morphTargetsCount:T,morphTextureStride:E,numSunLights:o.sun.length,numDirLights:o.directional.length,numPointLights:o.point.length,numSpotLights:o.spot.length,numSpotLightMaps:o.spotLightMap.length,numRectAreaLights:o.rectArea.length,numHemiLights:o.hemi.length,numSunLightShadows:o.sunShadowMap.length,numDirLightShadows:o.directionalShadowMap.length,numPointLightShadows:o.pointShadowMap.length,numSpotLightShadows:o.spotShadowMap.length,numSpotLightShadowsWithMaps:o.numSpotLightShadowsWithMaps,numLightProbes:o.numLightProbes,numLightProbeGrids:g.length,numClippingPlanes:a.numPlanes,numClipIntersection:a.numIntersection,dithering:i.dithering,shadowMapEnabled:e.shadowMap.enabled&&l.length>0,shadowMapType:e.shadowMap.type,toneMapping:Ne,decodeVideoTexture:ie&&i.map.isVideoTexture===!0&&gm.getTransfer(i.map.colorSpace)===`srgb`,decodeVideoTextureEmissive:M&&i.emissiveMap.isVideoTexture===!0&&gm.getTransfer(i.emissiveMap.colorSpace)===`srgb`,premultipliedAlpha:i.premultipliedAlpha,doubleSided:i.side===2,flipSided:i.side===1,useDepthPacking:i.depthPacking>=0,depthPacking:i.depthPacking||0,index0AttributeName:i.index0AttributeName,extensionClipCullDistance:Me&&i.extensions.clipCullDistance===!0&&n.has(`WEBGL_clip_cull_distance`),extensionMultiDraw:(Me&&i.extensions.multiDraw===!0||re)&&n.has(`WEBGL_multi_draw`),rendererExtensionParallelShaderCompile:n.has(`KHR_parallel_shader_compile`),customProgramCacheKey:i.customProgramCacheKey()};return Pe.vertexUv1s=c.has(1),Pe.vertexUv2s=c.has(2),Pe.vertexUv3s=c.has(3),c.clear(),Pe}function g(t){let n=[];if(t.shaderID?n.push(t.shaderID):(n.push(t.customVertexShaderID),n.push(t.customFragmentShaderID)),t.defines!==void 0)for(let e in t.defines)n.push(e),n.push(t.defines[e]);return t.isRawShaderMaterial===!1&&(_(n,t),v(n,t),n.push(e.outputColorSpace)),n.push(t.customProgramCacheKey),n.join()}function _(e,t){e.push(t.precision),e.push(t.outputColorSpace),e.push(t.envMapMode),e.push(t.envMapCubeUVHeight),e.push(t.mapUv),e.push(t.alphaMapUv),e.push(t.lightMapUv),e.push(t.aoMapUv),e.push(t.bumpMapUv),e.push(t.normalMapUv),e.push(t.displacementMapUv),e.push(t.emissiveMapUv),e.push(t.metalnessMapUv),e.push(t.roughnessMapUv),e.push(t.anisotropyMapUv),e.push(t.clearcoatMapUv),e.push(t.clearcoatNormalMapUv),e.push(t.clearcoatRoughnessMapUv),e.push(t.iridescenceMapUv),e.push(t.iridescenceThicknessMapUv),e.push(t.sheenColorMapUv),e.push(t.sheenRoughnessMapUv),e.push(t.specularMapUv),e.push(t.specularColorMapUv),e.push(t.specularIntensityMapUv),e.push(t.transmissionMapUv),e.push(t.thicknessMapUv),e.push(t.combine),e.push(t.fogExp2),e.push(t.sizeAttenuation),e.push(t.morphTargetsCount),e.push(t.morphAttributeCount),e.push(t.numSunLights),e.push(t.numDirLights),e.push(t.numPointLights),e.push(t.numSpotLights),e.push(t.numSpotLightMaps),e.push(t.numHemiLights),e.push(t.numRectAreaLights),e.push(t.numSunLightShadows),e.push(t.numDirLightShadows),e.push(t.numPointLightShadows),e.push(t.numSpotLightShadows),e.push(t.numSpotLightShadowsWithMaps),e.push(t.numLightProbes),e.push(t.shadowMapType),e.push(t.toneMapping),e.push(t.numClippingPlanes),e.push(t.numClipIntersection),e.push(t.depthPacking)}function v(e,t){o.disableAll(),t.instancing&&o.enable(0),t.instancingColor&&o.enable(1),t.instancingMorph&&o.enable(2),t.matcap&&o.enable(3),t.envMap&&o.enable(4),t.normalMapObjectSpace&&o.enable(5),t.normalMapTangentSpace&&o.enable(6),t.clearcoat&&o.enable(7),t.iridescence&&o.enable(8),t.alphaTest&&o.enable(9),t.vertexColors&&o.enable(10),t.vertexAlphas&&o.enable(11),t.vertexUv1s&&o.enable(12),t.vertexUv2s&&o.enable(13),t.vertexUv3s&&o.enable(14),t.vertexTangents&&o.enable(15),t.anisotropy&&o.enable(16),t.alphaHash&&o.enable(17),t.batching&&o.enable(18),t.dispersion&&o.enable(19),t.retroreflection&&o.enable(24),t.batchingColor&&o.enable(20),t.gradientMap&&o.enable(21),t.packedNormalMap&&o.enable(22),t.vertexNormals&&o.enable(23),e.push(o.mask),o.disableAll(),t.fog&&o.enable(0),t.useFog&&o.enable(1),t.flatShading&&o.enable(2),t.logarithmicDepthBuffer&&o.enable(3),t.reversedDepthBuffer&&o.enable(4),t.skinning&&o.enable(5),t.morphTargets&&o.enable(6),t.morphNormals&&o.enable(7),t.morphColors&&o.enable(8),t.premultipliedAlpha&&o.enable(9),t.shadowMapEnabled&&o.enable(10),t.doubleSided&&o.enable(11),t.flipSided&&o.enable(12),t.useDepthPacking&&o.enable(13),t.dithering&&o.enable(14),t.transmission&&o.enable(15),t.sheen&&o.enable(16),t.opaque&&o.enable(17),t.pointsUvs&&o.enable(18),t.decodeVideoTexture&&o.enable(19),t.decodeVideoTextureEmissive&&o.enable(20),t.alphaToCoverage&&o.enable(21),t.numLightProbeGrids>0&&o.enable(22),t.hasPositionAttribute&&o.enable(23),e.push(o.mask)}function y(e){let t=p[e.type],n;if(t){let e=bb[t];n=kv.clone(e.uniforms)}else n=e.uniforms;return n}function b(t,n){let r=u.get(n);return r===void 0?(r=new JS(e,n,t,i),l.push(r),u.set(n,r)):++r.usedTimes,r}function x(e){if(--e.usedTimes===0){let t=l.indexOf(e);l[t]=l[l.length-1],l.pop(),u.delete(e.cacheKey),e.destroy()}}function S(e){s.remove(e)}function C(){s.dispose()}return{getParameters:h,getProgramCacheKey:g,getUniforms:y,acquireProgram:b,releaseProgram:x,releaseShaderCache:S,programs:l,dispose:C}}function eC(){let e=new WeakMap;function t(t){return e.has(t)}function n(t){let n=e.get(t);return n===void 0&&(n={},e.set(t,n)),n}function r(t){e.delete(t)}function i(t,n,r){e.get(t)[n]=r}function a(){e=new WeakMap}return{has:t,get:n,remove:r,update:i,dispose:a}}function tC(e,t){return e.groupOrder===t.groupOrder?e.renderOrder===t.renderOrder?e.material.id===t.material.id?e.materialVariant===t.materialVariant?e.z===t.z?e.id-t.id:e.z-t.z:e.materialVariant-t.materialVariant:e.material.id-t.material.id:e.renderOrder-t.renderOrder:e.groupOrder-t.groupOrder}function nC(e,t){return e.groupOrder===t.groupOrder?e.renderOrder===t.renderOrder?e.z===t.z?e.id-t.id:t.z-e.z:e.renderOrder-t.renderOrder:e.groupOrder-t.groupOrder}function rC(){let e=[],t=0,n=[],r=[],i=[];function a(){t=0,n.length=0,r.length=0,i.length=0}function o(e){let t=0;return e.isInstancedMesh&&(t+=2),e.isSkinnedMesh&&(t+=1),t}function s(n,r,i,a,s,c){let l=e[t];return l===void 0?(l={id:n.id,object:n,geometry:r,material:i,materialVariant:o(n),groupOrder:a,renderOrder:n.renderOrder,z:s,group:c},e[t]=l):(l.id=n.id,l.object=n,l.geometry=r,l.material=i,l.materialVariant=o(n),l.groupOrder=a,l.renderOrder=n.renderOrder,l.z=s,l.group=c),t++,l}function c(e,t,a,o,c,l,u){u.reversedDepth===!0&&(c=-c);let d=s(e,t,a,o,c,l);a.transmission>0?r.push(d):a.transparent===!0?i.push(d):n.push(d)}function l(e,t,a,o,c,l){let u=s(e,t,a,o,c,l);a.transmission>0?r.unshift(u):a.transparent===!0?i.unshift(u):n.unshift(u)}function u(e,t){n.length>1&&n.sort(e||tC),r.length>1&&r.sort(t||nC),i.length>1&&i.sort(t||nC)}function d(){for(let n=t,r=e.length;n=r.length?(i=new rC,r.push(i)):i=r[n],i}function n(){e=new WeakMap}return{get:t,dispose:n}}function aC(){let e={};return{get:function(t){if(e[t.id]!==void 0)return e[t.id];let n;switch(t.type){case`SunLight`:case`DirectionalLight`:n={direction:new J,color:new Y};break;case`SpotLight`:n={position:new J,direction:new J,color:new Y,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case`PointLight`:n={position:new J,color:new Y,distance:0,decay:0};break;case`HemisphereLight`:n={direction:new J,skyColor:new Y,groundColor:new Y};break;case`RectAreaLight`:n={color:new Y,position:new J,halfWidth:new J,halfHeight:new J};break}return e[t.id]=n,n}}}function oC(){let e={};return{get:function(t){if(e[t.id]!==void 0)return e[t.id];let n;switch(t.type){case`SunLight`:case`DirectionalLight`:n={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new q};break;case`SpotLight`:n={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new q};break;case`PointLight`:n={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new q,shadowCameraNear:1,shadowCameraFar:1e3};break}return e[t.id]=n,n}}}var sC=0;function cC(e,t){return(t.castShadow?2:0)-(e.castShadow?2:0)+ +!!t.map-!!e.map}function lC(e){let t=new aC,n=oC(),r={version:0,hash:{sunLength:-1,directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numSunShadows:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1,numLightProbes:-1},ambient:[0,0,0],probe:[],sun:[],sunShadow:[],sunShadowMap:[],sunShadowMatrix:[],sunShadowCascade:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0,numLightProbes:0};for(let e=0;e<9;e++)r.probe.push(new J);let i=new J,a=new Mm,o=new Mm;function s(i){let a=0,o=0,s=0;for(let e=0;e<9;e++)r.probe[e].set(0,0,0);let c=0,l=0,u=0,d=0,f=0,p=0,m=0,h=0,g=0,_=0,v=0,y=0,b=0,x=0;i.sort(cC);for(let e=0,S=i.length;e0&&(e.has(`OES_texture_float_linear`)===!0?(r.rectAreaLTC1=X.LTC_FLOAT_1,r.rectAreaLTC2=X.LTC_FLOAT_2):(r.rectAreaLTC1=X.LTC_HALF_1,r.rectAreaLTC2=X.LTC_HALF_2)),r.ambient[0]=a,r.ambient[1]=o,r.ambient[2]=s;let S=r.hash;(S.sunLength!==c||S.directionalLength!==d||S.pointLength!==f||S.spotLength!==p||S.rectAreaLength!==m||S.hemiLength!==h||S.numSunShadows!==l||S.numDirectionalShadows!==g||S.numPointShadows!==_||S.numSpotShadows!==v||S.numSpotMaps!==y||S.numLightProbes!==x)&&(r.sun.length=c,r.directional.length=d,r.spot.length=p,r.rectArea.length=m,r.point.length=f,r.hemi.length=h,r.sunShadow.length=l,r.sunShadowMap.length=l,r.sunShadowMatrix.length=u,r.sunShadowCascade.length=u,r.directionalShadow.length=g,r.directionalShadowMap.length=g,r.directionalShadowMatrix.length=g,r.pointShadow.length=_,r.pointShadowMap.length=_,r.pointShadowMatrix.length=_,r.spotShadow.length=v,r.spotShadowMap.length=v,r.spotLightMatrix.length=v+y-b,r.spotLightMap.length=y,r.numSpotLightShadowsWithMaps=b,r.numLightProbes=x,S.sunLength=c,S.directionalLength=d,S.pointLength=f,S.spotLength=p,S.rectAreaLength=m,S.hemiLength=h,S.numSunShadows=l,S.numDirectionalShadows=g,S.numPointShadows=_,S.numSpotShadows=v,S.numSpotMaps=y,S.numLightProbes=x,r.version=sC++)}function c(e,t){let n=0,s=0,c=0,l=0,u=0,d=0,f=t.matrixWorldInverse;for(let t=0,p=e.length;t=i.length?(a=new uC(e),i.push(a)):a=i[r],a}function r(){t=new WeakMap}return{get:n,dispose:r}}var fC=`void main() { +`+n)}else o===``?(s===``||c===``)&&(u=!1):Yp(`WebGLProgram: Program Info Log:`,o);u&&(t.diagnostics={runnable:l,programLog:o,vertexShader:{log:s,prefix:g},fragmentShader:{log:c,prefix:_}})}i.deleteShader(x),i.deleteShader(S),w=new jS(i,h),T=KS(i,h)}let w;this.getUniforms=function(){return w===void 0&&C(this),w};let T;this.getAttributes=function(){return T===void 0&&C(this),T};let E=n.rendererExtensionParallelShaderCompile===!1;return this.isReady=function(){return E===!1&&(E=i.getProgramParameter(h,NS)),E},this.destroy=function(){r.releaseStatesOfProgram(this),i.deleteProgram(h),this.program=void 0},this.type=n.shaderType,this.name=n.shaderName,this.id=PS++,this.cacheKey=t,this.usedTimes=1,this.program=h,this.vertexShader=x,this.fragmentShader=S,this}var mC=0,hC=class{constructor(){this.shaderCache=new Map,this.materialCache=new Map}update(e,t,n){let r=this._getShaderCacheForMaterial(e);return r.has(t)===!1&&(r.add(t),t.usedTimes++),r.has(n)===!1&&(r.add(n),n.usedTimes++),this}remove(e){let t=this.materialCache.get(e);for(let e of t)e.usedTimes--,e.usedTimes===0&&this.shaderCache.delete(e.code);return this.materialCache.delete(e),this}getVertexShaderStage(e){return this._getShaderStage(e.vertexShader)}getFragmentShaderStage(e){return this._getShaderStage(e.fragmentShader)}dispose(){this.shaderCache.clear(),this.materialCache.clear()}_getShaderCacheForMaterial(e){let t=this.materialCache,n=t.get(e);return n===void 0&&(n=new Set,t.set(e,n)),n}_getShaderStage(e){let t=this.shaderCache,n=t.get(e);return n===void 0&&(n=new gC(e),t.set(e,n)),n}},gC=class{constructor(e){this.id=mC++,this.code=e,this.usedTimes=0}};function _C(e){return e===1030||e===37490||e===36285}function vC(e,t,n,r,i,a){let o=new ch,s=new hC,c=new Set,l=[],u=new Map,d=r.logarithmicDepthBuffer,f=r.precision,p={MeshDepthMaterial:`depth`,MeshDistanceMaterial:`distance`,MeshNormalMaterial:`normal`,MeshBasicMaterial:`basic`,MeshLambertMaterial:`lambert`,MeshPhongMaterial:`phong`,MeshToonMaterial:`toon`,MeshStandardMaterial:`physical`,MeshPhysicalMaterial:`physical`,MeshMatcapMaterial:`matcap`,LineBasicMaterial:`basic`,LineDashedMaterial:`dashed`,PointsMaterial:`points`,ShadowMaterial:`shadow`,SpriteMaterial:`sprite`};function m(e){return c.add(e),e===0?`uv`:`uv${e}`}function h(i,o,l,u,h,g){let _=u.fog,v=h.geometry,y=i.isMeshStandardMaterial||i.isMeshLambertMaterial||i.isMeshPhongMaterial?u.environment:null,b=i.isMeshStandardMaterial||i.isMeshLambertMaterial&&!i.envMap||i.isMeshPhongMaterial&&!i.envMap,x=t.get(i.envMap||y,b),S=x&&x.mapping===306?x.image.height:null,C=p[i.type];i.precision!==null&&(f=r.getMaxPrecision(i.precision),f!==i.precision&&Yp(`WebGLProgram.getParameters:`,i.precision,`not supported, using`,f,`instead.`));let w=v.morphAttributes.position||v.morphAttributes.normal||v.morphAttributes.color,T=w===void 0?0:w.length,E=0;v.morphAttributes.position!==void 0&&(E=1),v.morphAttributes.normal!==void 0&&(E=2),v.morphAttributes.color!==void 0&&(E=3);let D,O,k,A;if(C){let e=zb[C];D=e.vertexShader,O=e.fragmentShader}else{D=i.vertexShader,O=i.fragmentShader;let e=s.getVertexShaderStage(i),t=s.getFragmentShaderStage(i);s.update(i,e,t),k=e.id,A=t.id}let j=e.getRenderTarget(),ee=e.state.buffers.depth.getReversed(),te=h.isInstancedMesh===!0,ne=h.isBatchedMesh===!0,re=!!i.map,ie=!!i.matcap,ae=!!x,M=!!i.aoMap,oe=!!i.lightMap,se=!!i.bumpMap&&i.wireframe===!1,ce=!!i.normalMap,le=!!i.displacementMap,ue=!!i.emissiveMap,N=!!i.metalnessMap,de=!!i.roughnessMap,fe=i.anisotropy>0,pe=i.clearcoat>0,me=i.dispersion>0,he=i.retroreflectivity>0,P=i.iridescence>0,ge=i.sheen>0,_e=i.transmission>0,ve=fe&&!!i.anisotropyMap,ye=pe&&!!i.clearcoatMap,be=pe&&!!i.clearcoatNormalMap,xe=pe&&!!i.clearcoatRoughnessMap,F=P&&!!i.iridescenceMap,I=P&&!!i.iridescenceThicknessMap,L=ge&&!!i.sheenColorMap,Se=ge&&!!i.sheenRoughnessMap,Ce=!!i.specularMap,R=!!i.specularColorMap,we=!!i.specularIntensityMap,Te=_e&&!!i.transmissionMap,Ee=_e&&!!i.thicknessMap,De=!!i.gradientMap,Oe=!!i.alphaMap,ke=i.alphaTest>0,Ae=!!i.alphaHash,je=!!i.extensions,Me=0;i.toneMapped&&(j===null||j.isXRRenderTarget===!0)&&(Me=e.toneMapping);let Ne={shaderID:C,shaderType:i.type,shaderName:i.name,vertexShader:D,fragmentShader:O,defines:i.defines,customVertexShaderID:k,customFragmentShaderID:A,isRawShaderMaterial:i.isRawShaderMaterial===!0,glslVersion:i.glslVersion,precision:f,batching:ne,batchingColor:ne&&h._colorsTexture!==null,instancing:te,instancingColor:te&&h.instanceColor!==null,instancingMorph:te&&h.morphTexture!==null,outputColorSpace:j===null?e.outputColorSpace:j.isXRRenderTarget===!0?j.texture.colorSpace:Fm.workingColorSpace,alphaToCoverage:!!i.alphaToCoverage,map:re,matcap:ie,envMap:ae,envMapMode:ae&&x.mapping,envMapCubeUVHeight:S,aoMap:M,lightMap:oe,bumpMap:se,normalMap:ce,displacementMap:le,emissiveMap:ue,normalMapObjectSpace:ce&&i.normalMapType===1,normalMapTangentSpace:ce&&i.normalMapType===0,packedNormalMap:ce&&i.normalMapType===0&&_C(i.normalMap.format),metalnessMap:N,roughnessMap:de,anisotropy:fe,anisotropyMap:ve,clearcoat:pe,clearcoatMap:ye,clearcoatNormalMap:be,clearcoatRoughnessMap:xe,dispersion:me,retroreflection:he,iridescence:P,iridescenceMap:F,iridescenceThicknessMap:I,sheen:ge,sheenColorMap:L,sheenRoughnessMap:Se,specularMap:Ce,specularColorMap:R,specularIntensityMap:we,transmission:_e,transmissionMap:Te,thicknessMap:Ee,gradientMap:De,opaque:i.transparent===!1&&i.blending===1&&i.alphaToCoverage===!1,alphaMap:Oe,alphaTest:ke,alphaHash:Ae,combine:i.combine,mapUv:re&&m(i.map.channel),aoMapUv:M&&m(i.aoMap.channel),lightMapUv:oe&&m(i.lightMap.channel),bumpMapUv:se&&m(i.bumpMap.channel),normalMapUv:ce&&m(i.normalMap.channel),displacementMapUv:le&&m(i.displacementMap.channel),emissiveMapUv:ue&&m(i.emissiveMap.channel),metalnessMapUv:N&&m(i.metalnessMap.channel),roughnessMapUv:de&&m(i.roughnessMap.channel),anisotropyMapUv:ve&&m(i.anisotropyMap.channel),clearcoatMapUv:ye&&m(i.clearcoatMap.channel),clearcoatNormalMapUv:be&&m(i.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:xe&&m(i.clearcoatRoughnessMap.channel),iridescenceMapUv:F&&m(i.iridescenceMap.channel),iridescenceThicknessMapUv:I&&m(i.iridescenceThicknessMap.channel),sheenColorMapUv:L&&m(i.sheenColorMap.channel),sheenRoughnessMapUv:Se&&m(i.sheenRoughnessMap.channel),specularMapUv:Ce&&m(i.specularMap.channel),specularColorMapUv:R&&m(i.specularColorMap.channel),specularIntensityMapUv:we&&m(i.specularIntensityMap.channel),transmissionMapUv:Te&&m(i.transmissionMap.channel),thicknessMapUv:Ee&&m(i.thicknessMap.channel),alphaMapUv:Oe&&m(i.alphaMap.channel),vertexTangents:!!v.attributes.tangent&&(ce||fe),vertexNormals:!!v.attributes.normal,vertexColors:i.vertexColors,vertexAlphas:i.vertexColors===!0&&!!v.attributes.color&&v.attributes.color.itemSize===4,pointsUvs:h.isPoints===!0&&!!v.attributes.uv&&(re||Oe),fog:!!_,useFog:i.fog===!0,fogExp2:!!_&&_.isFogExp2,flatShading:i.wireframe===!1&&(i.flatShading===!0||v.attributes.normal===void 0&&ce===!1&&(i.isMeshLambertMaterial||i.isMeshPhongMaterial||i.isMeshStandardMaterial||i.isMeshPhysicalMaterial)),sizeAttenuation:i.sizeAttenuation===!0,logarithmicDepthBuffer:d,reversedDepthBuffer:ee,skinning:h.isSkinnedMesh===!0,hasPositionAttribute:v.attributes.position!==void 0,morphTargets:v.morphAttributes.position!==void 0,morphNormals:v.morphAttributes.normal!==void 0,morphColors:v.morphAttributes.color!==void 0,morphTargetsCount:T,morphTextureStride:E,numSunLights:o.sun.length,numDirLights:o.directional.length,numPointLights:o.point.length,numSpotLights:o.spot.length,numSpotLightMaps:o.spotLightMap.length,numRectAreaLights:o.rectArea.length,numHemiLights:o.hemi.length,numSunLightShadows:o.sunShadowMap.length,numDirLightShadows:o.directionalShadowMap.length,numPointLightShadows:o.pointShadowMap.length,numSpotLightShadows:o.spotShadowMap.length,numSpotLightShadowsWithMaps:o.numSpotLightShadowsWithMaps,numLightProbes:o.numLightProbes,numLightProbeGrids:g.length,numClippingPlanes:a.numPlanes,numClipIntersection:a.numIntersection,dithering:i.dithering,shadowMapEnabled:e.shadowMap.enabled&&l.length>0,shadowMapType:e.shadowMap.type,toneMapping:Me,decodeVideoTexture:re&&i.map.isVideoTexture===!0&&Fm.getTransfer(i.map.colorSpace)===`srgb`,decodeVideoTextureEmissive:ue&&i.emissiveMap.isVideoTexture===!0&&Fm.getTransfer(i.emissiveMap.colorSpace)===`srgb`,premultipliedAlpha:i.premultipliedAlpha,doubleSided:i.side===2,flipSided:i.side===1,useDepthPacking:i.depthPacking>=0,depthPacking:i.depthPacking||0,index0AttributeName:i.index0AttributeName,extensionClipCullDistance:je&&i.extensions.clipCullDistance===!0&&n.has(`WEBGL_clip_cull_distance`),extensionMultiDraw:(je&&i.extensions.multiDraw===!0||ne)&&n.has(`WEBGL_multi_draw`),rendererExtensionParallelShaderCompile:n.has(`KHR_parallel_shader_compile`),customProgramCacheKey:i.customProgramCacheKey()};return Ne.vertexUv1s=c.has(1),Ne.vertexUv2s=c.has(2),Ne.vertexUv3s=c.has(3),c.clear(),Ne}function g(t){let n=[];if(t.shaderID?n.push(t.shaderID):(n.push(t.customVertexShaderID),n.push(t.customFragmentShaderID)),t.defines!==void 0)for(let e in t.defines)n.push(e),n.push(t.defines[e]);return t.isRawShaderMaterial===!1&&(_(n,t),v(n,t),n.push(e.outputColorSpace)),n.push(t.customProgramCacheKey),n.join()}function _(e,t){e.push(t.precision),e.push(t.outputColorSpace),e.push(t.envMapMode),e.push(t.envMapCubeUVHeight),e.push(t.mapUv),e.push(t.alphaMapUv),e.push(t.lightMapUv),e.push(t.aoMapUv),e.push(t.bumpMapUv),e.push(t.normalMapUv),e.push(t.displacementMapUv),e.push(t.emissiveMapUv),e.push(t.metalnessMapUv),e.push(t.roughnessMapUv),e.push(t.anisotropyMapUv),e.push(t.clearcoatMapUv),e.push(t.clearcoatNormalMapUv),e.push(t.clearcoatRoughnessMapUv),e.push(t.iridescenceMapUv),e.push(t.iridescenceThicknessMapUv),e.push(t.sheenColorMapUv),e.push(t.sheenRoughnessMapUv),e.push(t.specularMapUv),e.push(t.specularColorMapUv),e.push(t.specularIntensityMapUv),e.push(t.transmissionMapUv),e.push(t.thicknessMapUv),e.push(t.combine),e.push(t.fogExp2),e.push(t.sizeAttenuation),e.push(t.morphTargetsCount),e.push(t.morphAttributeCount),e.push(t.numSunLights),e.push(t.numDirLights),e.push(t.numPointLights),e.push(t.numSpotLights),e.push(t.numSpotLightMaps),e.push(t.numHemiLights),e.push(t.numRectAreaLights),e.push(t.numSunLightShadows),e.push(t.numDirLightShadows),e.push(t.numPointLightShadows),e.push(t.numSpotLightShadows),e.push(t.numSpotLightShadowsWithMaps),e.push(t.numLightProbes),e.push(t.shadowMapType),e.push(t.toneMapping),e.push(t.numClippingPlanes),e.push(t.numClipIntersection),e.push(t.depthPacking)}function v(e,t){o.disableAll(),t.instancing&&o.enable(0),t.instancingColor&&o.enable(1),t.instancingMorph&&o.enable(2),t.matcap&&o.enable(3),t.envMap&&o.enable(4),t.normalMapObjectSpace&&o.enable(5),t.normalMapTangentSpace&&o.enable(6),t.clearcoat&&o.enable(7),t.iridescence&&o.enable(8),t.alphaTest&&o.enable(9),t.vertexColors&&o.enable(10),t.vertexAlphas&&o.enable(11),t.vertexUv1s&&o.enable(12),t.vertexUv2s&&o.enable(13),t.vertexUv3s&&o.enable(14),t.vertexTangents&&o.enable(15),t.anisotropy&&o.enable(16),t.alphaHash&&o.enable(17),t.batching&&o.enable(18),t.dispersion&&o.enable(19),t.retroreflection&&o.enable(24),t.batchingColor&&o.enable(20),t.gradientMap&&o.enable(21),t.packedNormalMap&&o.enable(22),t.vertexNormals&&o.enable(23),e.push(o.mask),o.disableAll(),t.fog&&o.enable(0),t.useFog&&o.enable(1),t.flatShading&&o.enable(2),t.logarithmicDepthBuffer&&o.enable(3),t.reversedDepthBuffer&&o.enable(4),t.skinning&&o.enable(5),t.morphTargets&&o.enable(6),t.morphNormals&&o.enable(7),t.morphColors&&o.enable(8),t.premultipliedAlpha&&o.enable(9),t.shadowMapEnabled&&o.enable(10),t.doubleSided&&o.enable(11),t.flipSided&&o.enable(12),t.useDepthPacking&&o.enable(13),t.dithering&&o.enable(14),t.transmission&&o.enable(15),t.sheen&&o.enable(16),t.opaque&&o.enable(17),t.pointsUvs&&o.enable(18),t.decodeVideoTexture&&o.enable(19),t.decodeVideoTextureEmissive&&o.enable(20),t.alphaToCoverage&&o.enable(21),t.numLightProbeGrids>0&&o.enable(22),t.hasPositionAttribute&&o.enable(23),e.push(o.mask)}function y(e){let t=p[e.type],n;if(t){let e=zb[t];n=Jv.clone(e.uniforms)}else n=e.uniforms;return n}function b(t,n){let r=u.get(n);return r===void 0?(r=new pC(e,n,t,i),l.push(r),u.set(n,r)):++r.usedTimes,r}function x(e){if(--e.usedTimes===0){let t=l.indexOf(e);l[t]=l[l.length-1],l.pop(),u.delete(e.cacheKey),e.destroy()}}function S(e){s.remove(e)}function C(){s.dispose()}return{getParameters:h,getProgramCacheKey:g,getUniforms:y,acquireProgram:b,releaseProgram:x,releaseShaderCache:S,programs:l,dispose:C}}function yC(){let e=new WeakMap;function t(t){return e.has(t)}function n(t){let n=e.get(t);return n===void 0&&(n={},e.set(t,n)),n}function r(t){e.delete(t)}function i(t,n,r){e.get(t)[n]=r}function a(){e=new WeakMap}return{has:t,get:n,remove:r,update:i,dispose:a}}function bC(e,t){return e.groupOrder===t.groupOrder?e.renderOrder===t.renderOrder?e.material.id===t.material.id?e.materialVariant===t.materialVariant?e.z===t.z?e.id-t.id:e.z-t.z:e.materialVariant-t.materialVariant:e.material.id-t.material.id:e.renderOrder-t.renderOrder:e.groupOrder-t.groupOrder}function xC(e,t){return e.groupOrder===t.groupOrder?e.renderOrder===t.renderOrder?e.z===t.z?e.id-t.id:t.z-e.z:e.renderOrder-t.renderOrder:e.groupOrder-t.groupOrder}function SC(){let e=[],t=0,n=[],r=[],i=[];function a(){t=0,n.length=0,r.length=0,i.length=0}function o(e){let t=0;return e.isInstancedMesh&&(t+=2),e.isSkinnedMesh&&(t+=1),t}function s(n,r,i,a,s,c){let l=e[t];return l===void 0?(l={id:n.id,object:n,geometry:r,material:i,materialVariant:o(n),groupOrder:a,renderOrder:n.renderOrder,z:s,group:c},e[t]=l):(l.id=n.id,l.object=n,l.geometry=r,l.material=i,l.materialVariant=o(n),l.groupOrder=a,l.renderOrder=n.renderOrder,l.z=s,l.group=c),t++,l}function c(e,t,a,o,c,l,u){u.reversedDepth===!0&&(c=-c);let d=s(e,t,a,o,c,l);a.transmission>0?r.push(d):a.transparent===!0?i.push(d):n.push(d)}function l(e,t,a,o,c,l){let u=s(e,t,a,o,c,l);a.transmission>0?r.unshift(u):a.transparent===!0?i.unshift(u):n.unshift(u)}function u(e,t){n.length>1&&n.sort(e||bC),r.length>1&&r.sort(t||xC),i.length>1&&i.sort(t||xC)}function d(){for(let n=t,r=e.length;n=r.length?(i=new SC,r.push(i)):i=r[n],i}function n(){e=new WeakMap}return{get:t,dispose:n}}function wC(){let e={};return{get:function(t){if(e[t.id]!==void 0)return e[t.id];let n;switch(t.type){case`SunLight`:case`DirectionalLight`:n={direction:new J,color:new Y};break;case`SpotLight`:n={position:new J,direction:new J,color:new Y,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case`PointLight`:n={position:new J,color:new Y,distance:0,decay:0};break;case`HemisphereLight`:n={direction:new J,skyColor:new Y,groundColor:new Y};break;case`RectAreaLight`:n={color:new Y,position:new J,halfWidth:new J,halfHeight:new J};break}return e[t.id]=n,n}}}function TC(){let e={};return{get:function(t){if(e[t.id]!==void 0)return e[t.id];let n;switch(t.type){case`SunLight`:case`DirectionalLight`:n={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new q};break;case`SpotLight`:n={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new q};break;case`PointLight`:n={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new q,shadowCameraNear:1,shadowCameraFar:1e3};break}return e[t.id]=n,n}}}var EC=0;function DC(e,t){return(t.castShadow?2:0)-(e.castShadow?2:0)+ +!!t.map-!!e.map}function OC(e){let t=new wC,n=TC(),r={version:0,hash:{sunLength:-1,directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numSunShadows:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1,numLightProbes:-1},ambient:[0,0,0],probe:[],sun:[],sunShadow:[],sunShadowMap:[],sunShadowMatrix:[],sunShadowCascade:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0,numLightProbes:0};for(let e=0;e<9;e++)r.probe.push(new J);let i=new J,a=new Zm,o=new Zm;function s(i){let a=0,o=0,s=0;for(let e=0;e<9;e++)r.probe[e].set(0,0,0);let c=0,l=0,u=0,d=0,f=0,p=0,m=0,h=0,g=0,_=0,v=0,y=0,b=0,x=0;i.sort(DC);for(let e=0,S=i.length;e0&&(e.has(`OES_texture_float_linear`)===!0?(r.rectAreaLTC1=X.LTC_FLOAT_1,r.rectAreaLTC2=X.LTC_FLOAT_2):(r.rectAreaLTC1=X.LTC_HALF_1,r.rectAreaLTC2=X.LTC_HALF_2)),r.ambient[0]=a,r.ambient[1]=o,r.ambient[2]=s;let S=r.hash;(S.sunLength!==c||S.directionalLength!==d||S.pointLength!==f||S.spotLength!==p||S.rectAreaLength!==m||S.hemiLength!==h||S.numSunShadows!==l||S.numDirectionalShadows!==g||S.numPointShadows!==_||S.numSpotShadows!==v||S.numSpotMaps!==y||S.numLightProbes!==x)&&(r.sun.length=c,r.directional.length=d,r.spot.length=p,r.rectArea.length=m,r.point.length=f,r.hemi.length=h,r.sunShadow.length=l,r.sunShadowMap.length=l,r.sunShadowMatrix.length=u,r.sunShadowCascade.length=u,r.directionalShadow.length=g,r.directionalShadowMap.length=g,r.directionalShadowMatrix.length=g,r.pointShadow.length=_,r.pointShadowMap.length=_,r.pointShadowMatrix.length=_,r.spotShadow.length=v,r.spotShadowMap.length=v,r.spotLightMatrix.length=v+y-b,r.spotLightMap.length=y,r.numSpotLightShadowsWithMaps=b,r.numLightProbes=x,S.sunLength=c,S.directionalLength=d,S.pointLength=f,S.spotLength=p,S.rectAreaLength=m,S.hemiLength=h,S.numSunShadows=l,S.numDirectionalShadows=g,S.numPointShadows=_,S.numSpotShadows=v,S.numSpotMaps=y,S.numLightProbes=x,r.version=EC++)}function c(e,t){let n=0,s=0,c=0,l=0,u=0,d=0,f=t.matrixWorldInverse;for(let t=0,p=e.length;t=i.length?(a=new kC(e),i.push(a)):a=i[r],a}function r(){t=new WeakMap}return{get:n,dispose:r}}var jC=`void main() { gl_Position = vec4( position, 1.0 ); -}`,pC=`uniform sampler2D shadow_pass; +}`,MC=`uniform sampler2D shadow_pass; uniform vec2 resolution; uniform float radius; void main() { @@ -4203,12 +4203,12 @@ void main() { squared_mean = squared_mean / samples; float std_dev = sqrt( max( 0.0, squared_mean - mean * mean ) ); gl_FragColor = vec4( mean, std_dev, 0.0, 1.0 ); -}`,mC=[new J(1,0,0),new J(-1,0,0),new J(0,1,0),new J(0,-1,0),new J(0,0,1),new J(0,0,-1)],hC=[new J(0,-1,0),new J(0,-1,0),new J(0,0,1),new J(0,0,-1),new J(0,-1,0),new J(0,-1,0)],gC=new Mm,_C=new J,vC=new J;function yC(e,t,n){let r=new f_,i=new q,a=new q,o=new Dm,s=new Iv,c=new Lv,l={},u=n.maxTextureSize,d={0:1,1:0,2:2},f=new Mv({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new q},radius:{value:4}},vertexShader:fC,fragmentShader:pC}),p=f.clone();p.defines.HORIZONTAL_PASS=1;let m=new lg;m.setAttribute(`position`,new Jh(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));let h=new Ig(m,f),g=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=1;let _=this.type;this.render=function(t,n,s){if(g.enabled===!1||g.autoUpdate===!1&&g.needsUpdate===!1||t.length===0)return;this.type===2&&(Ap(`WebGLShadowMap: PCFSoftShadowMap has been removed. Using PCFShadowMap instead.`),this.type=1);let c=e.getRenderTarget(),l=e.getActiveCubeFace(),d=e.getActiveMipmapLevel(),f=e.state;f.setBlending(0),f.buffers.depth.getReversed()===!0?f.buffers.color.setClear(0,0,0,0):f.buffers.color.setClear(1,1,1,1),f.buffers.depth.setTest(!0),f.setScissorTest(!1);let p=_!==this.type;p&&n.traverse(function(e){e.material&&(Array.isArray(e.material)?e.material.forEach(e=>e.needsUpdate=!0):e.material.needsUpdate=!0)});for(let c=0,l=t.length;cu||i.y>u)&&(i.x>u&&(a.x=Math.floor(u/m.x),i.x=a.x*m.x,d.mapSize.x=a.x),i.y>u&&(a.y=Math.floor(u/m.y),i.y=a.y*m.y,d.mapSize.y=a.y));let h=e.state.buffers.depth.getReversed();if(d.camera._reversedDepth=h,d.map===null||p===!0){if(d.map!==null&&(d.map.depthTexture!==null&&(d.map.depthTexture.dispose(),d.map.depthTexture=null),d.map.dispose()),this.type===3){if(l.isPointLight){Ap(`WebGLShadowMap: VSM shadow maps are not supported for PointLights. Use PCF or BasicShadowMap instead.`);continue}d.map=new km(i.x,i.y,{format:xf,type:cf,minFilter:Zd,magFilter:Zd,generateMipmaps:!1}),d.map.texture.name=l.name+`.shadowMap`,d.map.depthTexture=new I_(i.x,i.y,sf),d.map.depthTexture.name=l.name+`.shadowMapDepth`,d.map.depthTexture.format=_f,d.map.depthTexture.compareFunction=null,d.map.depthTexture.minFilter=Jd,d.map.depthTexture.magFilter=Jd}else l.isPointLight?(d.map=new Xb(i.x),d.map.depthTexture=new L_(i.x,of)):(d.map=new km(i.x,i.y),d.map.depthTexture=new I_(i.x,i.y,of)),d.map.depthTexture.name=l.name+`.shadowMap`,d.map.depthTexture.format=_f,this.type===1?(d.map.depthTexture.compareFunction=h?518:515,d.map.depthTexture.minFilter=Zd,d.map.depthTexture.magFilter=Zd):(d.map.depthTexture.compareFunction=null,d.map.depthTexture.minFilter=Jd,d.map.depthTexture.magFilter=Jd);d.camera.updateProjectionMatrix()}d.map.isWebGLCubeRenderTarget!==!0&&(d.map.width!==i.x||d.map.height!==i.y)&&d.map.setSize(i.x,i.y);let g=d.map.isWebGLCubeRenderTarget?6:d.getViewportCount();l.isPointLight!==!0&&d.updateMatrices(l,s);for(let t=0;t0||n.map&&n.alphaTest>0||n.alphaToCoverage===!0){let e=a.uuid,t=n.uuid,r=l[e];r===void 0&&(r={},l[e]=r);let i=r[t];i===void 0&&(i=a.clone(),r[t]=i,n.addEventListener(`dispose`,x)),a=i}if(a.visible=n.visible,a.wireframe=n.wireframe,i===3?a.side=n.shadowSide===null?n.side:n.shadowSide:a.side=n.shadowSide===null?d[n.side]:n.shadowSide,a.alphaMap=n.alphaMap,a.alphaTest=n.alphaToCoverage===!0?.5:n.alphaTest,a.map=n.map,a.clipShadows=n.clipShadows,a.clippingPlanes=n.clippingPlanes,a.clipIntersection=n.clipIntersection,a.displacementMap=n.displacementMap,a.displacementScale=n.displacementScale,a.displacementBias=n.displacementBias,a.wireframeLinewidth=n.wireframeLinewidth,a.linewidth=n.linewidth,r.isPointLight===!0&&a.isMeshDistanceMaterial===!0){let t=e.properties.get(a);t.light=r}return a}function b(n,i,a,o,s){if(n.visible===!1)return;if(n.layers.test(i.layers)&&(n.isMesh||n.isLine||n.isPoints)&&(n.castShadow||n.receiveShadow&&s===3)&&(!n.frustumCulled||n.intersectsFrustum(r))){n.modelViewMatrix.multiplyMatrices(a.matrixWorldInverse,n.matrixWorld);let r=t.update(n),c=n.material;if(Array.isArray(c)){let t=r.groups;for(let l=0,u=t.length;l=2):(re=parseFloat(/^WebGL (\d)/.exec(ie)[1]),A=re>=1);let ae=null,oe={},j=e.getParameter(e.SCISSOR_BOX),se=e.getParameter(e.VIEWPORT),ce=new Dm().fromArray(j),le=new Dm().fromArray(se);function ue(t,n,r,i){let a=new Uint8Array(4),o=e.createTexture();e.bindTexture(t,o),e.texParameteri(t,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(t,e.TEXTURE_MAG_FILTER,e.NEAREST);for(let o=0;o`u`?!1:/OculusBrowser/g.test(navigator.userAgent),l=new q,u=new WeakMap,d=new Set,f,p=new WeakMap,m=!1;try{m=typeof OffscreenCanvas<`u`&&new OffscreenCanvas(1,1).getContext(`2d`)!==null}catch{}function h(e,t){return m?new OffscreenCanvas(e,t):Tp(`canvas`)}function g(e,t,n){let r=1,i=we(e);if((i.width>n||i.height>n)&&(r=n/Math.max(i.width,i.height)),r<1)if(typeof HTMLImageElement<`u`&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<`u`&&e instanceof HTMLCanvasElement||typeof ImageBitmap<`u`&&e instanceof ImageBitmap||typeof VideoFrame<`u`&&e instanceof VideoFrame){let n=Math.floor(r*i.width),a=Math.floor(r*i.height);f===void 0&&(f=h(n,a));let o=t?h(n,a):f;return o.width=n,o.height=a,o.getContext(`2d`).drawImage(e,0,0,n,a),Ap(`WebGLRenderer: Texture has been resized from (`+i.width+`x`+i.height+`) to (`+n+`x`+a+`).`),o}else return`data`in e&&Ap(`WebGLRenderer: Image in DataTexture is too big (`+i.width+`x`+i.height+`).`),e;return e}function _(e){return e.generateMipmaps}function v(t){e.generateMipmap(t)}function y(t){return t.isWebGLCubeRenderTarget?e.TEXTURE_CUBE_MAP:t.isWebGL3DRenderTarget?e.TEXTURE_3D:t.isWebGLArrayRenderTarget||t.isCompressedArrayTexture?e.TEXTURE_2D_ARRAY:e.TEXTURE_2D}function b(n,r,i,a,o,s=!1){if(n!==null){if(e[n]!==void 0)return e[n];Ap(`WebGLRenderer: Attempt to use non-existing WebGL internal format '`+n+`'`)}let c;a&&(c=t.get(`EXT_texture_norm16`),c||Ap(`WebGLRenderer: Unable to use normalized textures without EXT_texture_norm16 extension`));let l=r;if(r===e.RED&&(i===e.FLOAT&&(l=e.R32F),i===e.HALF_FLOAT&&(l=e.R16F),i===e.UNSIGNED_BYTE&&(l=e.R8),i===e.UNSIGNED_SHORT&&c&&(l=c.R16_EXT),i===e.SHORT&&c&&(l=c.R16_SNORM_EXT)),r===e.RED_INTEGER&&(i===e.UNSIGNED_BYTE&&(l=e.R8UI),i===e.UNSIGNED_SHORT&&(l=e.R16UI),i===e.UNSIGNED_INT&&(l=e.R32UI),i===e.BYTE&&(l=e.R8I),i===e.SHORT&&(l=e.R16I),i===e.INT&&(l=e.R32I)),r===e.RG&&(i===e.FLOAT&&(l=e.RG32F),i===e.HALF_FLOAT&&(l=e.RG16F),i===e.UNSIGNED_BYTE&&(l=e.RG8),i===e.UNSIGNED_SHORT&&c&&(l=c.RG16_EXT),i===e.SHORT&&c&&(l=c.RG16_SNORM_EXT)),r===e.RG_INTEGER&&(i===e.UNSIGNED_BYTE&&(l=e.RG8UI),i===e.UNSIGNED_SHORT&&(l=e.RG16UI),i===e.UNSIGNED_INT&&(l=e.RG32UI),i===e.BYTE&&(l=e.RG8I),i===e.SHORT&&(l=e.RG16I),i===e.INT&&(l=e.RG32I)),r===e.RGB_INTEGER&&(i===e.UNSIGNED_BYTE&&(l=e.RGB8UI),i===e.UNSIGNED_SHORT&&(l=e.RGB16UI),i===e.UNSIGNED_INT&&(l=e.RGB32UI),i===e.BYTE&&(l=e.RGB8I),i===e.SHORT&&(l=e.RGB16I),i===e.INT&&(l=e.RGB32I)),r===e.RGBA_INTEGER&&(i===e.UNSIGNED_BYTE&&(l=e.RGBA8UI),i===e.UNSIGNED_SHORT&&(l=e.RGBA16UI),i===e.UNSIGNED_INT&&(l=e.RGBA32UI),i===e.BYTE&&(l=e.RGBA8I),i===e.SHORT&&(l=e.RGBA16I),i===e.INT&&(l=e.RGBA32I)),r===e.RGB&&(i===e.UNSIGNED_SHORT&&c&&(l=c.RGB16_EXT),i===e.SHORT&&c&&(l=c.RGB16_SNORM_EXT),i===e.UNSIGNED_INT_5_9_9_9_REV&&(l=e.RGB9_E5),i===e.UNSIGNED_INT_10F_11F_11F_REV&&(l=e.R11F_G11F_B10F)),r===e.RGBA){let t=s?_p:gm.getTransfer(o);i===e.FLOAT&&(l=e.RGBA32F),i===e.HALF_FLOAT&&(l=e.RGBA16F),i===e.UNSIGNED_BYTE&&(l=t===`srgb`?e.SRGB8_ALPHA8:e.RGBA8),i===e.UNSIGNED_SHORT&&c&&(l=c.RGBA16_EXT),i===e.SHORT&&c&&(l=c.RGBA16_SNORM_EXT),i===e.UNSIGNED_SHORT_4_4_4_4&&(l=e.RGBA4),i===e.UNSIGNED_SHORT_5_5_5_1&&(l=e.RGB5_A1)}return(l===e.R16F||l===e.R32F||l===e.RG16F||l===e.RG32F||l===e.RGBA16F||l===e.RGBA32F)&&t.get(`EXT_color_buffer_float`),l}function x(t,n){let r;return t?n===null||n===1014||n===1020?r=e.DEPTH24_STENCIL8:n===1015?r=e.DEPTH32F_STENCIL8:n===1012&&(r=e.DEPTH24_STENCIL8,Ap(`DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.`)):n===null||n===1014||n===1020?r=e.DEPTH_COMPONENT24:n===1015?r=e.DEPTH_COMPONENT32F:n===1012&&(r=e.DEPTH_COMPONENT16),r}function S(e,t){return _(e)===!0||e.isFramebufferTexture&&e.minFilter!==1003&&e.minFilter!==1006?Math.log2(Math.max(t.width,t.height))+1:e.mipmaps!==void 0&&e.mipmaps.length>0?e.mipmaps.length:e.isCompressedTexture&&Array.isArray(e.image)?t.mipmaps.length:1}function C(e){let t=e.target;t.removeEventListener(`dispose`,C),T(t),t.isVideoTexture&&u.delete(t),t.isHTMLTexture&&d.delete(t)}function w(e){let t=e.target;t.removeEventListener(`dispose`,w),D(t)}function T(e){let t=r.get(e);if(t.__webglInit===void 0)return;let n=e.source,i=p.get(n);if(i){let r=i[t.__cacheKey];r.usedTimes--,r.usedTimes===0&&E(e),Object.keys(i).length===0&&p.delete(n)}r.remove(e)}function E(t){let n=r.get(t);e.deleteTexture(n.__webglTexture);let i=t.source,a=p.get(i);delete a[n.__cacheKey],o.memory.textures--}function D(t){let n=r.get(t);if(t.depthTexture&&(t.depthTexture.dispose(),r.remove(t.depthTexture)),t.isWebGLCubeRenderTarget)for(let t=0;t<6;t++){if(Array.isArray(n.__webglFramebuffer[t]))for(let r=0;r=i.maxTextures&&Ap(`WebGLTextures: Trying to use `+(e+1)+` texture units while this GPU supports only `+i.maxTextures),O+=1,e}function A(e){let t=[];return t.push(e.wrapS),t.push(e.wrapT),t.push(e.wrapR||0),t.push(e.magFilter),t.push(e.minFilter),t.push(e.anisotropy),t.push(e.internalFormat),t.push(e.format),t.push(e.type),t.push(e.generateMipmaps),t.push(e.premultiplyAlpha),t.push(e.flipY),t.push(e.unpackAlignment),t.push(e.colorSpace),t.join()}function re(t,i){let a=r.get(t);if(t.isVideoTexture&&Se(t),t.isRenderTargetTexture===!1&&t.isExternalTexture!==!0&&t.version>0&&a.__version!==t.version){let e=t.image;if(e===null)Ap(`WebGLRenderer: Texture marked for update but no image data found.`);else if(e.complete===!1)Ap(`WebGLRenderer: Texture marked for update but image is incomplete`);else{de(a,t,i);return}}else t.isExternalTexture&&(a.__webglTexture=t.sourceTexture?t.sourceTexture:null);n.bindTexture(e.TEXTURE_2D,a.__webglTexture,e.TEXTURE0+i)}function ie(t,i){let a=r.get(t);if(t.isRenderTargetTexture===!1&&t.version>0&&a.__version!==t.version){de(a,t,i);return}else t.isExternalTexture&&(a.__webglTexture=t.sourceTexture?t.sourceTexture:null);n.bindTexture(e.TEXTURE_2D_ARRAY,a.__webglTexture,e.TEXTURE0+i)}function ae(t,i){let a=r.get(t);if(t.isRenderTargetTexture===!1&&t.version>0&&a.__version!==t.version){de(a,t,i);return}n.bindTexture(e.TEXTURE_3D,a.__webglTexture,e.TEXTURE0+i)}function oe(t,i){let a=r.get(t);if(t.isCubeDepthTexture!==!0&&t.version>0&&a.__version!==t.version){fe(a,t,i);return}n.bindTexture(e.TEXTURE_CUBE_MAP,a.__webglTexture,e.TEXTURE0+i)}let j={[Gd]:e.REPEAT,[Kd]:e.CLAMP_TO_EDGE,[qd]:e.MIRRORED_REPEAT},se={[Jd]:e.NEAREST,[Yd]:e.NEAREST_MIPMAP_NEAREST,[Xd]:e.NEAREST_MIPMAP_LINEAR,[Zd]:e.LINEAR,[Qd]:e.LINEAR_MIPMAP_NEAREST,[$d]:e.LINEAR_MIPMAP_LINEAR},ce={512:e.NEVER,519:e.ALWAYS,513:e.LESS,515:e.LEQUAL,514:e.EQUAL,518:e.GEQUAL,516:e.GREATER,517:e.NOTEQUAL};function le(n,a){if(a.type===1015&&t.has(`OES_texture_float_linear`)===!1&&(a.magFilter===1006||a.magFilter===1007||a.magFilter===1005||a.magFilter===1008||a.minFilter===1006||a.minFilter===1007||a.minFilter===1005||a.minFilter===1008)&&Ap(`WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device.`),e.texParameteri(n,e.TEXTURE_WRAP_S,j[a.wrapS]),e.texParameteri(n,e.TEXTURE_WRAP_T,j[a.wrapT]),(n===e.TEXTURE_3D||n===e.TEXTURE_2D_ARRAY)&&e.texParameteri(n,e.TEXTURE_WRAP_R,j[a.wrapR]),e.texParameteri(n,e.TEXTURE_MAG_FILTER,se[a.magFilter]),e.texParameteri(n,e.TEXTURE_MIN_FILTER,se[a.minFilter]),a.compareFunction&&(e.texParameteri(n,e.TEXTURE_COMPARE_MODE,e.COMPARE_REF_TO_TEXTURE),e.texParameteri(n,e.TEXTURE_COMPARE_FUNC,ce[a.compareFunction])),t.has(`EXT_texture_filter_anisotropic`)===!0){if(a.magFilter===1003||a.minFilter!==1005&&a.minFilter!==1008||a.type===1015&&t.has(`OES_texture_float_linear`)===!1)return;if(a.anisotropy>1||r.get(a).__currentAnisotropy){let o=t.get(`EXT_texture_filter_anisotropic`);e.texParameterf(n,o.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(a.anisotropy,i.getMaxAnisotropy())),r.get(a).__currentAnisotropy=a.anisotropy}}}function ue(t,n){let r=!1;t.__webglInit===void 0&&(t.__webglInit=!0,n.addEventListener(`dispose`,C));let i=n.source,a=p.get(i);a===void 0&&(a={},p.set(i,a));let s=A(n);if(s!==t.__cacheKey){a[s]===void 0&&(a[s]={texture:e.createTexture(),usedTimes:0},o.memory.textures++,r=!0),a[s].usedTimes++;let i=a[t.__cacheKey];i!==void 0&&(a[t.__cacheKey].usedTimes--,i.usedTimes===0&&E(n)),t.__cacheKey=s,t.__webglTexture=a[s].texture}return r}function M(e,t,n){return Math.floor(Math.floor(e/n)/t)}function N(t,r,i,a){let o=t.updateRanges;if(o.length===0)n.texSubImage2D(e.TEXTURE_2D,0,0,0,r.width,r.height,i,a,r.data);else{o.sort((e,t)=>e.start-t.start);let s=0;for(let e=1;e0){C&&w&&n.texStorage2D(e.TEXTURE_2D,E,m,y[0].width,y[0].height);for(let t=0,i=y.length;t0){let t=hb(h.width,h.height,o.format,o.type);for(let a of o.layerUpdates){let o=h.data.subarray(a*t/h.data.BYTES_PER_ELEMENT,(a+1)*t/h.data.BYTES_PER_ELEMENT);n.compressedTexSubImage3D(e.TEXTURE_2D_ARRAY,i,0,0,a,h.width,h.height,1,r,o)}}else n.compressedTexSubImage3D(e.TEXTURE_2D_ARRAY,i,0,0,0,h.width,h.height,t.depth,r,h.data)}else n.compressedTexImage3D(e.TEXTURE_2D_ARRAY,i,m,h.width,h.height,t.depth,0,h.data,0,0);else Ap(`WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()`);else C?T&&n.texSubImage3D(e.TEXTURE_2D_ARRAY,i,0,0,0,h.width,h.height,t.depth,r,p,h.data):n.texImage3D(e.TEXTURE_2D_ARRAY,i,m,h.width,h.height,t.depth,0,r,p,h.data);o.layerUpdates.size>0&&o.clearLayerUpdates()}else{C&&w&&n.texStorage2D(e.TEXTURE_2D,E,m,y[0].width,y[0].height);for(let t=0,i=y.length;t0){let i=hb(t.width,t.height,o.format,o.type);for(let a of o.layerUpdates){let o=t.data.subarray(a*i/t.data.BYTES_PER_ELEMENT,(a+1)*i/t.data.BYTES_PER_ELEMENT);n.texSubImage3D(e.TEXTURE_2D_ARRAY,0,0,0,a,t.width,t.height,1,r,p,o)}o.clearLayerUpdates()}else n.texSubImage3D(e.TEXTURE_2D_ARRAY,0,0,0,0,t.width,t.height,t.depth,r,p,t.data)}else n.texImage3D(e.TEXTURE_2D_ARRAY,0,m,t.width,t.height,t.depth,0,r,p,t.data);else if(o.isData3DTexture)C?(w&&n.texStorage3D(e.TEXTURE_3D,E,m,t.width,t.height,t.depth),T&&n.texSubImage3D(e.TEXTURE_3D,0,0,0,0,t.width,t.height,t.depth,r,p,t.data)):n.texImage3D(e.TEXTURE_3D,0,m,t.width,t.height,t.depth,0,r,p,t.data);else if(o.isFramebufferTexture){if(w)if(C)n.texStorage2D(e.TEXTURE_2D,E,m,t.width,t.height);else{let i=t.width,a=t.height;for(let t=0;t>=1,a>>=1}}else if(o.isHTMLTexture){if(`texElementImage2D`in e){let n=e.canvas;if(n.hasAttribute(`layoutsubtree`)||n.setAttribute(`layoutsubtree`,`true`),t.parentNode!==n){n.appendChild(t),d.add(o),n.onpaint=e=>{let t=e.changedElements;for(let e of d)t.includes(e.image)&&(e.needsUpdate=!0)},n.requestPaint();return}if(e.texElementImage2D.length===3)e.texElementImage2D(e.TEXTURE_2D,e.RGBA8,t);else{let n=e.RGBA,r=e.RGBA,i=e.UNSIGNED_BYTE;e.texElementImage2D(e.TEXTURE_2D,0,n,r,i,t)}e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)}}else if(y.length>0){if(C&&w){let t=we(y[0]);n.texStorage2D(e.TEXTURE_2D,E,m,t.width,t.height)}for(let t=0,i=y.length;t0&&D++;let t=we(m[0]);n.texStorage2D(e.TEXTURE_CUBE_MAP,D,C,t.width,t.height)}for(let t=0;t<6;t++)if(p){w?E&&n.texSubImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+t,0,0,0,m[t].width,m[t].height,y,x,m[t].data):n.texImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+t,0,C,m[t].width,m[t].height,0,y,x,m[t].data);for(let r=0;r>u),r=Math.max(1,i.height>>u);l===e.TEXTURE_3D||l===e.TEXTURE_2D_ARRAY?n.texImage3D(l,u,p,t,r,i.depth,0,d,f,null):n.texImage2D(l,u,p,t,r,0,d,f,null)}n.bindFramebuffer(e.FRAMEBUFFER,t),I(i)?s.framebufferTexture2DMultisampleEXT(e.FRAMEBUFFER,c,l,h.__webglTexture,0,xe(i)):(l===e.TEXTURE_2D||l>=e.TEXTURE_CUBE_MAP_POSITIVE_X&&l<=e.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&e.framebufferTexture2D(e.FRAMEBUFFER,c,l,h.__webglTexture,u),n.bindFramebuffer(e.FRAMEBUFFER,null)}function me(t,n,r){if(e.bindRenderbuffer(e.RENDERBUFFER,t),n.depthBuffer){let i=n.depthTexture,a=i&&i.isDepthTexture?i.type:null,o=x(n.stencilBuffer,a),c=n.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT;I(n)?s.renderbufferStorageMultisampleEXT(e.RENDERBUFFER,xe(n),o,n.width,n.height):r?e.renderbufferStorageMultisample(e.RENDERBUFFER,xe(n),o,n.width,n.height):e.renderbufferStorage(e.RENDERBUFFER,o,n.width,n.height),e.framebufferRenderbuffer(e.FRAMEBUFFER,c,e.RENDERBUFFER,t)}else{let t=n.textures;for(let i=0;i{delete i.__boundDepthTexture,delete i.__depthDisposeCallback,e.removeEventListener(`dispose`,t)};e.addEventListener(`dispose`,t),i.__depthDisposeCallback=t}i.__boundDepthTexture=e}if(t.depthTexture&&!i.__autoAllocateDepthBuffer)if(a)for(let e=0;e<6;e++)P(i.__webglFramebuffer[e],t,e);else{let e=t.texture.mipmaps;e&&e.length>0?P(i.__webglFramebuffer[0],t,0):P(i.__webglFramebuffer,t,0)}else if(a){i.__webglDepthbuffer=[];for(let r=0;r<6;r++)if(n.bindFramebuffer(e.FRAMEBUFFER,i.__webglFramebuffer[r]),i.__webglDepthbuffer[r]===void 0)i.__webglDepthbuffer[r]=e.createRenderbuffer(),me(i.__webglDepthbuffer[r],t,!1);else{let n=t.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,a=i.__webglDepthbuffer[r];e.bindRenderbuffer(e.RENDERBUFFER,a),e.framebufferRenderbuffer(e.FRAMEBUFFER,n,e.RENDERBUFFER,a)}}else{let r=t.texture.mipmaps;if(r&&r.length>0?n.bindFramebuffer(e.FRAMEBUFFER,i.__webglFramebuffer[0]):n.bindFramebuffer(e.FRAMEBUFFER,i.__webglFramebuffer),i.__webglDepthbuffer===void 0)i.__webglDepthbuffer=e.createRenderbuffer(),me(i.__webglDepthbuffer,t,!1);else{let n=t.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,r=i.__webglDepthbuffer;e.bindRenderbuffer(e.RENDERBUFFER,r),e.framebufferRenderbuffer(e.FRAMEBUFFER,n,e.RENDERBUFFER,r)}}n.bindFramebuffer(e.FRAMEBUFFER,null)}function he(t,n,i){let a=r.get(t);n!==void 0&&pe(a.__webglFramebuffer,t,t.texture,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,0),i!==void 0&&F(t)}function ge(t){let i=t.texture,s=r.get(t),c=r.get(i);t.addEventListener(`dispose`,w);let l=t.textures,u=t.isWebGLCubeRenderTarget===!0,d=l.length>1;if(d||(c.__webglTexture===void 0&&(c.__webglTexture=e.createTexture()),c.__version=i.version,o.memory.textures++),u){s.__webglFramebuffer=[];for(let t=0;t<6;t++)if(i.mipmaps&&i.mipmaps.length>0){s.__webglFramebuffer[t]=[];for(let n=0;n0){s.__webglFramebuffer=[];for(let t=0;t0&&I(t)===!1){s.__webglMultisampledFramebuffer=e.createFramebuffer(),s.__webglColorRenderbuffer=[],n.bindFramebuffer(e.FRAMEBUFFER,s.__webglMultisampledFramebuffer);for(let n=0;n0)for(let r=0;r0)for(let n=0;n0){if(I(t)===!1){let i=t.textures,a=t.width,o=t.height,s=e.COLOR_BUFFER_BIT,l=t.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,u=r.get(t),d=i.length>1;if(d)for(let t=0;t0?n.bindFramebuffer(e.DRAW_FRAMEBUFFER,u.__webglFramebuffer[0]):n.bindFramebuffer(e.DRAW_FRAMEBUFFER,u.__webglFramebuffer);for(let n=0;n0&&t.has(`WEBGL_multisampled_render_to_texture`)===!0&&n.__useRenderToTexture!==!1}function Se(e){let t=o.render.frame;u.get(e)!==t&&(u.set(e,t),e.update())}function Ce(e,t){let n=e.colorSpace,r=e.format,i=e.type;return e.isCompressedTexture===!0||e.isVideoTexture===!0||n!==`srgb-linear`&&n!==``&&(gm.getTransfer(n)===`srgb`?(r!==1023||i!==1009)&&Ap(`WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType.`):jp(`WebGLTextures: Unsupported texture color space:`,n)),t}function we(e){return typeof HTMLImageElement<`u`&&e instanceof HTMLImageElement?(l.width=e.naturalWidth||e.width,l.height=e.naturalHeight||e.height):typeof VideoFrame<`u`&&e instanceof VideoFrame?(l.width=e.displayWidth,l.height=e.displayHeight):(l.width=e.width,l.height=e.height),l}this.allocateTextureUnit=ne,this.resetTextureUnits=ee,this.getTextureUnits=te,this.setTextureUnits=k,this.setTexture2D=re,this.setTexture2DArray=ie,this.setTexture3D=ae,this.setTextureCube=oe,this.rebindTextures=he,this.setupRenderTarget=ge,this.updateRenderTargetMipmap=_e,this.updateMultisampleRenderTarget=be,this.setupDepthRenderbuffer=F,this.setupFrameBufferTexture=pe,this.useMultisampledRTT=I,this.isReversedDepthBuffer=function(){return n.buffers.depth.getReversed()}}function SC(e,t){function n(n,r=``){let i,a=gm.getTransfer(r);if(n===1009)return e.UNSIGNED_BYTE;if(n===1017)return e.UNSIGNED_SHORT_4_4_4_4;if(n===1018)return e.UNSIGNED_SHORT_5_5_5_1;if(n===35902)return e.UNSIGNED_INT_5_9_9_9_REV;if(n===35899)return e.UNSIGNED_INT_10F_11F_11F_REV;if(n===1010)return e.BYTE;if(n===1011)return e.SHORT;if(n===1012)return e.UNSIGNED_SHORT;if(n===1013)return e.INT;if(n===1014)return e.UNSIGNED_INT;if(n===1015)return e.FLOAT;if(n===1016)return e.HALF_FLOAT;if(n===1021)return e.ALPHA;if(n===1022)return e.RGB;if(n===1023)return e.RGBA;if(n===1026)return e.DEPTH_COMPONENT;if(n===1027)return e.DEPTH_STENCIL;if(n===1028)return e.RED;if(n===1029)return e.RED_INTEGER;if(n===1030)return e.RG;if(n===1031)return e.RG_INTEGER;if(n===1033)return e.RGBA_INTEGER;if(n===33776||n===33777||n===33778||n===33779)if(a===`srgb`)if(i=t.get(`WEBGL_compressed_texture_s3tc_srgb`),i!==null){if(n===33776)return i.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(n===33777)return i.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(n===33778)return i.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(n===33779)return i.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else return null;else if(i=t.get(`WEBGL_compressed_texture_s3tc`),i!==null){if(n===33776)return i.COMPRESSED_RGB_S3TC_DXT1_EXT;if(n===33777)return i.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(n===33778)return i.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(n===33779)return i.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(n===35840||n===35841||n===35842||n===35843)if(i=t.get(`WEBGL_compressed_texture_pvrtc`),i!==null){if(n===35840)return i.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(n===35841)return i.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(n===35842)return i.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(n===35843)return i.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(n===36196||n===37492||n===37496||n===37488||n===37489||n===37490||n===37491)if(i=t.get(`WEBGL_compressed_texture_etc`),i!==null){if(n===36196||n===37492)return a===`srgb`?i.COMPRESSED_SRGB8_ETC2:i.COMPRESSED_RGB8_ETC2;if(n===37496)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:i.COMPRESSED_RGBA8_ETC2_EAC;if(n===37488)return i.COMPRESSED_R11_EAC;if(n===37489)return i.COMPRESSED_SIGNED_R11_EAC;if(n===37490)return i.COMPRESSED_RG11_EAC;if(n===37491)return i.COMPRESSED_SIGNED_RG11_EAC}else return null;if(n===37808||n===37809||n===37810||n===37811||n===37812||n===37813||n===37814||n===37815||n===37816||n===37817||n===37818||n===37819||n===37820||n===37821)if(i=t.get(`WEBGL_compressed_texture_astc`),i!==null){if(n===37808)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:i.COMPRESSED_RGBA_ASTC_4x4_KHR;if(n===37809)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:i.COMPRESSED_RGBA_ASTC_5x4_KHR;if(n===37810)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:i.COMPRESSED_RGBA_ASTC_5x5_KHR;if(n===37811)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:i.COMPRESSED_RGBA_ASTC_6x5_KHR;if(n===37812)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:i.COMPRESSED_RGBA_ASTC_6x6_KHR;if(n===37813)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:i.COMPRESSED_RGBA_ASTC_8x5_KHR;if(n===37814)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:i.COMPRESSED_RGBA_ASTC_8x6_KHR;if(n===37815)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:i.COMPRESSED_RGBA_ASTC_8x8_KHR;if(n===37816)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:i.COMPRESSED_RGBA_ASTC_10x5_KHR;if(n===37817)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:i.COMPRESSED_RGBA_ASTC_10x6_KHR;if(n===37818)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:i.COMPRESSED_RGBA_ASTC_10x8_KHR;if(n===37819)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:i.COMPRESSED_RGBA_ASTC_10x10_KHR;if(n===37820)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:i.COMPRESSED_RGBA_ASTC_12x10_KHR;if(n===37821)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:i.COMPRESSED_RGBA_ASTC_12x12_KHR}else return null;if(n===36492||n===36494||n===36495)if(i=t.get(`EXT_texture_compression_bptc`),i!==null){if(n===36492)return a===`srgb`?i.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:i.COMPRESSED_RGBA_BPTC_UNORM_EXT;if(n===36494)return i.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;if(n===36495)return i.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT}else return null;if(n===36283||n===36284||n===36285||n===36286)if(i=t.get(`EXT_texture_compression_rgtc`),i!==null){if(n===36283)return i.COMPRESSED_RED_RGTC1_EXT;if(n===36284)return i.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(n===36285)return i.COMPRESSED_RED_GREEN_RGTC2_EXT;if(n===36286)return i.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}else return null;return n===1020?e.UNSIGNED_INT_24_8:e[n]===void 0?null:e[n]}return{convert:n}}var CC=` +}`,NC=[new J(1,0,0),new J(-1,0,0),new J(0,1,0),new J(0,-1,0),new J(0,0,1),new J(0,0,-1)],PC=[new J(0,-1,0),new J(0,-1,0),new J(0,0,1),new J(0,0,-1),new J(0,-1,0),new J(0,-1,0)],FC=new Zm,IC=new J,LC=new J;function RC(e,t,n){let r=new j_,i=new q,a=new q,o=new Km,s=new ty,c=new ny,l={},u=n.maxTextureSize,d={0:1,1:0,2:2},f=new Zv({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new q},radius:{value:4}},vertexShader:jC,fragmentShader:MC}),p=f.clone();p.defines.HORIZONTAL_PASS=1;let m=new Og;m.setAttribute(`position`,new pg(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));let h=new t_(m,f),g=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=1;let _=this.type;this.render=function(t,n,s){if(g.enabled===!1||g.autoUpdate===!1&&g.needsUpdate===!1||t.length===0)return;this.type===2&&(Yp(`WebGLShadowMap: PCFSoftShadowMap has been removed. Using PCFShadowMap instead.`),this.type=1);let c=e.getRenderTarget(),l=e.getActiveCubeFace(),d=e.getActiveMipmapLevel(),f=e.state;f.setBlending(0),f.buffers.depth.getReversed()===!0?f.buffers.color.setClear(0,0,0,0):f.buffers.color.setClear(1,1,1,1),f.buffers.depth.setTest(!0),f.setScissorTest(!1);let p=_!==this.type;p&&n.traverse(function(e){e.material&&(Array.isArray(e.material)?e.material.forEach(e=>e.needsUpdate=!0):e.material.needsUpdate=!0)});for(let c=0,l=t.length;cu||i.y>u)&&(i.x>u&&(a.x=Math.floor(u/m.x),i.x=a.x*m.x,d.mapSize.x=a.x),i.y>u&&(a.y=Math.floor(u/m.y),i.y=a.y*m.y,d.mapSize.y=a.y));let h=e.state.buffers.depth.getReversed();if(d.camera._reversedDepth=h,d.map===null||p===!0){if(d.map!==null&&(d.map.depthTexture!==null&&(d.map.depthTexture.dispose(),d.map.depthTexture=null),d.map.dispose()),this.type===3){if(l.isPointLight){Yp(`WebGLShadowMap: VSM shadow maps are not supported for PointLights. Use PCF or BasicShadowMap instead.`);continue}d.map=new Jm(i.x,i.y,{format:Bf,type:Df,minFilter:_f,magFilter:_f,generateMipmaps:!1}),d.map.texture.name=l.name+`.shadowMap`,d.map.depthTexture=new tv(i.x,i.y,Ef),d.map.depthTexture.name=l.name+`.shadowMapDepth`,d.map.depthTexture.format=If,d.map.depthTexture.compareFunction=null,d.map.depthTexture.minFilter=mf,d.map.depthTexture.magFilter=mf}else l.isPointLight?(d.map=new hx(i.x),d.map.depthTexture=new nv(i.x,Tf)):(d.map=new Jm(i.x,i.y),d.map.depthTexture=new tv(i.x,i.y,Tf)),d.map.depthTexture.name=l.name+`.shadowMap`,d.map.depthTexture.format=If,this.type===1?(d.map.depthTexture.compareFunction=h?518:515,d.map.depthTexture.minFilter=_f,d.map.depthTexture.magFilter=_f):(d.map.depthTexture.compareFunction=null,d.map.depthTexture.minFilter=mf,d.map.depthTexture.magFilter=mf);d.camera.updateProjectionMatrix()}d.map.isWebGLCubeRenderTarget!==!0&&(d.map.width!==i.x||d.map.height!==i.y)&&d.map.setSize(i.x,i.y);let g=d.map.isWebGLCubeRenderTarget?6:d.getViewportCount();l.isPointLight!==!0&&d.updateMatrices(l,s);for(let t=0;t0||n.map&&n.alphaTest>0||n.alphaToCoverage===!0){let e=a.uuid,t=n.uuid,r=l[e];r===void 0&&(r={},l[e]=r);let i=r[t];i===void 0&&(i=a.clone(),r[t]=i,n.addEventListener(`dispose`,x)),a=i}if(a.visible=n.visible,a.wireframe=n.wireframe,i===3?a.side=n.shadowSide===null?n.side:n.shadowSide:a.side=n.shadowSide===null?d[n.side]:n.shadowSide,a.alphaMap=n.alphaMap,a.alphaTest=n.alphaToCoverage===!0?.5:n.alphaTest,a.map=n.map,a.clipShadows=n.clipShadows,a.clippingPlanes=n.clippingPlanes,a.clipIntersection=n.clipIntersection,a.displacementMap=n.displacementMap,a.displacementScale=n.displacementScale,a.displacementBias=n.displacementBias,a.wireframeLinewidth=n.wireframeLinewidth,a.linewidth=n.linewidth,r.isPointLight===!0&&a.isMeshDistanceMaterial===!0){let t=e.properties.get(a);t.light=r}return a}function b(n,i,a,o,s){if(n.visible===!1)return;if(n.layers.test(i.layers)&&(n.isMesh||n.isLine||n.isPoints)&&(n.castShadow||n.receiveShadow&&s===3)&&(!n.frustumCulled||n.intersectsFrustum(r))){n.modelViewMatrix.multiplyMatrices(a.matrixWorldInverse,n.matrixWorld);let r=t.update(n),c=n.material;if(Array.isArray(c)){let t=r.groups;for(let l=0,u=t.length;l=2):(ne=parseFloat(/^WebGL (\d)/.exec(re)[1]),te=ne>=1);let ie=null,ae={},M=e.getParameter(e.SCISSOR_BOX),oe=e.getParameter(e.VIEWPORT),se=new Km().fromArray(M),ce=new Km().fromArray(oe);function le(t,n,r,i){let a=new Uint8Array(4),o=e.createTexture();e.bindTexture(t,o),e.texParameteri(t,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(t,e.TEXTURE_MAG_FILTER,e.NEAREST);for(let o=0;o`u`?!1:/OculusBrowser/g.test(navigator.userAgent),l=new q,u=new WeakMap,d=new Set,f,p=new WeakMap,m=!1;try{m=typeof OffscreenCanvas<`u`&&new OffscreenCanvas(1,1).getContext(`2d`)!==null}catch{}function h(e,t){return m?new OffscreenCanvas(e,t):Wp(`canvas`)}function g(e,t,n){let r=1,i=Ce(e);if((i.width>n||i.height>n)&&(r=n/Math.max(i.width,i.height)),r<1)if(typeof HTMLImageElement<`u`&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<`u`&&e instanceof HTMLCanvasElement||typeof ImageBitmap<`u`&&e instanceof ImageBitmap||typeof VideoFrame<`u`&&e instanceof VideoFrame){let n=Math.floor(r*i.width),a=Math.floor(r*i.height);f===void 0&&(f=h(n,a));let o=t?h(n,a):f;return o.width=n,o.height=a,o.getContext(`2d`).drawImage(e,0,0,n,a),Yp(`WebGLRenderer: Texture has been resized from (`+i.width+`x`+i.height+`) to (`+n+`x`+a+`).`),o}else return`data`in e&&Yp(`WebGLRenderer: Image in DataTexture is too big (`+i.width+`x`+i.height+`).`),e;return e}function _(e){return e.generateMipmaps}function v(t){e.generateMipmap(t)}function y(t){return t.isWebGLCubeRenderTarget?e.TEXTURE_CUBE_MAP:t.isWebGL3DRenderTarget?e.TEXTURE_3D:t.isWebGLArrayRenderTarget||t.isCompressedArrayTexture?e.TEXTURE_2D_ARRAY:e.TEXTURE_2D}function b(n,r,i,a,o,s=!1){if(n!==null){if(e[n]!==void 0)return e[n];Yp(`WebGLRenderer: Attempt to use non-existing WebGL internal format '`+n+`'`)}let c;a&&(c=t.get(`EXT_texture_norm16`),c||Yp(`WebGLRenderer: Unable to use normalized textures without EXT_texture_norm16 extension`));let l=r;if(r===e.RED&&(i===e.FLOAT&&(l=e.R32F),i===e.HALF_FLOAT&&(l=e.R16F),i===e.UNSIGNED_BYTE&&(l=e.R8),i===e.UNSIGNED_SHORT&&c&&(l=c.R16_EXT),i===e.SHORT&&c&&(l=c.R16_SNORM_EXT)),r===e.RED_INTEGER&&(i===e.UNSIGNED_BYTE&&(l=e.R8UI),i===e.UNSIGNED_SHORT&&(l=e.R16UI),i===e.UNSIGNED_INT&&(l=e.R32UI),i===e.BYTE&&(l=e.R8I),i===e.SHORT&&(l=e.R16I),i===e.INT&&(l=e.R32I)),r===e.RG&&(i===e.FLOAT&&(l=e.RG32F),i===e.HALF_FLOAT&&(l=e.RG16F),i===e.UNSIGNED_BYTE&&(l=e.RG8),i===e.UNSIGNED_SHORT&&c&&(l=c.RG16_EXT),i===e.SHORT&&c&&(l=c.RG16_SNORM_EXT)),r===e.RG_INTEGER&&(i===e.UNSIGNED_BYTE&&(l=e.RG8UI),i===e.UNSIGNED_SHORT&&(l=e.RG16UI),i===e.UNSIGNED_INT&&(l=e.RG32UI),i===e.BYTE&&(l=e.RG8I),i===e.SHORT&&(l=e.RG16I),i===e.INT&&(l=e.RG32I)),r===e.RGB_INTEGER&&(i===e.UNSIGNED_BYTE&&(l=e.RGB8UI),i===e.UNSIGNED_SHORT&&(l=e.RGB16UI),i===e.UNSIGNED_INT&&(l=e.RGB32UI),i===e.BYTE&&(l=e.RGB8I),i===e.SHORT&&(l=e.RGB16I),i===e.INT&&(l=e.RGB32I)),r===e.RGBA_INTEGER&&(i===e.UNSIGNED_BYTE&&(l=e.RGBA8UI),i===e.UNSIGNED_SHORT&&(l=e.RGBA16UI),i===e.UNSIGNED_INT&&(l=e.RGBA32UI),i===e.BYTE&&(l=e.RGBA8I),i===e.SHORT&&(l=e.RGBA16I),i===e.INT&&(l=e.RGBA32I)),r===e.RGB&&(i===e.UNSIGNED_SHORT&&c&&(l=c.RGB16_EXT),i===e.SHORT&&c&&(l=c.RGB16_SNORM_EXT),i===e.UNSIGNED_INT_5_9_9_9_REV&&(l=e.RGB9_E5),i===e.UNSIGNED_INT_10F_11F_11F_REV&&(l=e.R11F_G11F_B10F)),r===e.RGBA){let t=s?Ip:Fm.getTransfer(o);i===e.FLOAT&&(l=e.RGBA32F),i===e.HALF_FLOAT&&(l=e.RGBA16F),i===e.UNSIGNED_BYTE&&(l=t===`srgb`?e.SRGB8_ALPHA8:e.RGBA8),i===e.UNSIGNED_SHORT&&c&&(l=c.RGBA16_EXT),i===e.SHORT&&c&&(l=c.RGBA16_SNORM_EXT),i===e.UNSIGNED_SHORT_4_4_4_4&&(l=e.RGBA4),i===e.UNSIGNED_SHORT_5_5_5_1&&(l=e.RGB5_A1)}return(l===e.R16F||l===e.R32F||l===e.RG16F||l===e.RG32F||l===e.RGBA16F||l===e.RGBA32F)&&t.get(`EXT_color_buffer_float`),l}function x(t,n){let r;return t?n===null||n===1014||n===1020?r=e.DEPTH24_STENCIL8:n===1015?r=e.DEPTH32F_STENCIL8:n===1012&&(r=e.DEPTH24_STENCIL8,Yp(`DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.`)):n===null||n===1014||n===1020?r=e.DEPTH_COMPONENT24:n===1015?r=e.DEPTH_COMPONENT32F:n===1012&&(r=e.DEPTH_COMPONENT16),r}function S(e,t){return _(e)===!0||e.isFramebufferTexture&&e.minFilter!==1003&&e.minFilter!==1006?Math.log2(Math.max(t.width,t.height))+1:e.mipmaps!==void 0&&e.mipmaps.length>0?e.mipmaps.length:e.isCompressedTexture&&Array.isArray(e.image)?t.mipmaps.length:1}function C(e){let t=e.target;t.removeEventListener(`dispose`,C),T(t),t.isVideoTexture&&u.delete(t),t.isHTMLTexture&&d.delete(t)}function w(e){let t=e.target;t.removeEventListener(`dispose`,w),D(t)}function T(e){let t=r.get(e);if(t.__webglInit===void 0)return;let n=e.source,i=p.get(n);if(i){let r=i[t.__cacheKey];r.usedTimes--,r.usedTimes===0&&E(e),Object.keys(i).length===0&&p.delete(n)}r.remove(e)}function E(t){let n=r.get(t);e.deleteTexture(n.__webglTexture);let i=t.source,a=p.get(i);delete a[n.__cacheKey],o.memory.textures--}function D(t){let n=r.get(t);if(t.depthTexture&&(t.depthTexture.dispose(),r.remove(t.depthTexture)),t.isWebGLCubeRenderTarget)for(let t=0;t<6;t++){if(Array.isArray(n.__webglFramebuffer[t]))for(let r=0;r=i.maxTextures&&Yp(`WebGLTextures: Trying to use `+(e+1)+` texture units while this GPU supports only `+i.maxTextures),O+=1,e}function te(e){let t=[];return t.push(e.wrapS),t.push(e.wrapT),t.push(e.wrapR||0),t.push(e.magFilter),t.push(e.minFilter),t.push(e.anisotropy),t.push(e.internalFormat),t.push(e.format),t.push(e.type),t.push(e.generateMipmaps),t.push(e.premultiplyAlpha),t.push(e.flipY),t.push(e.unpackAlignment),t.push(e.colorSpace),t.join()}function ne(t,i){let a=r.get(t);if(t.isVideoTexture&&L(t),t.isRenderTargetTexture===!1&&t.isExternalTexture!==!0&&t.version>0&&a.__version!==t.version){let e=t.image;if(e===null)Yp(`WebGLRenderer: Texture marked for update but no image data found.`);else if(e.complete===!1)Yp(`WebGLRenderer: Texture marked for update but image is incomplete`);else{de(a,t,i);return}}else t.isExternalTexture&&(a.__webglTexture=t.sourceTexture?t.sourceTexture:null);n.bindTexture(e.TEXTURE_2D,a.__webglTexture,e.TEXTURE0+i)}function re(t,i){let a=r.get(t);if(t.isRenderTargetTexture===!1&&t.version>0&&a.__version!==t.version){de(a,t,i);return}else t.isExternalTexture&&(a.__webglTexture=t.sourceTexture?t.sourceTexture:null);n.bindTexture(e.TEXTURE_2D_ARRAY,a.__webglTexture,e.TEXTURE0+i)}function ie(t,i){let a=r.get(t);if(t.isRenderTargetTexture===!1&&t.version>0&&a.__version!==t.version){de(a,t,i);return}n.bindTexture(e.TEXTURE_3D,a.__webglTexture,e.TEXTURE0+i)}function ae(t,i){let a=r.get(t);if(t.isCubeDepthTexture!==!0&&t.version>0&&a.__version!==t.version){fe(a,t,i);return}n.bindTexture(e.TEXTURE_CUBE_MAP,a.__webglTexture,e.TEXTURE0+i)}let M={[df]:e.REPEAT,[ff]:e.CLAMP_TO_EDGE,[pf]:e.MIRRORED_REPEAT},oe={[mf]:e.NEAREST,[hf]:e.NEAREST_MIPMAP_NEAREST,[gf]:e.NEAREST_MIPMAP_LINEAR,[_f]:e.LINEAR,[vf]:e.LINEAR_MIPMAP_NEAREST,[yf]:e.LINEAR_MIPMAP_LINEAR},se={512:e.NEVER,519:e.ALWAYS,513:e.LESS,515:e.LEQUAL,514:e.EQUAL,518:e.GEQUAL,516:e.GREATER,517:e.NOTEQUAL};function ce(n,a){if(a.type===1015&&t.has(`OES_texture_float_linear`)===!1&&(a.magFilter===1006||a.magFilter===1007||a.magFilter===1005||a.magFilter===1008||a.minFilter===1006||a.minFilter===1007||a.minFilter===1005||a.minFilter===1008)&&Yp(`WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device.`),e.texParameteri(n,e.TEXTURE_WRAP_S,M[a.wrapS]),e.texParameteri(n,e.TEXTURE_WRAP_T,M[a.wrapT]),(n===e.TEXTURE_3D||n===e.TEXTURE_2D_ARRAY)&&e.texParameteri(n,e.TEXTURE_WRAP_R,M[a.wrapR]),e.texParameteri(n,e.TEXTURE_MAG_FILTER,oe[a.magFilter]),e.texParameteri(n,e.TEXTURE_MIN_FILTER,oe[a.minFilter]),a.compareFunction&&(e.texParameteri(n,e.TEXTURE_COMPARE_MODE,e.COMPARE_REF_TO_TEXTURE),e.texParameteri(n,e.TEXTURE_COMPARE_FUNC,se[a.compareFunction])),t.has(`EXT_texture_filter_anisotropic`)===!0){if(a.magFilter===1003||a.minFilter!==1005&&a.minFilter!==1008||a.type===1015&&t.has(`OES_texture_float_linear`)===!1)return;if(a.anisotropy>1||r.get(a).__currentAnisotropy){let o=t.get(`EXT_texture_filter_anisotropic`);e.texParameterf(n,o.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(a.anisotropy,i.getMaxAnisotropy())),r.get(a).__currentAnisotropy=a.anisotropy}}}function le(t,n){let r=!1;t.__webglInit===void 0&&(t.__webglInit=!0,n.addEventListener(`dispose`,C));let i=n.source,a=p.get(i);a===void 0&&(a={},p.set(i,a));let s=te(n);if(s!==t.__cacheKey){a[s]===void 0&&(a[s]={texture:e.createTexture(),usedTimes:0},o.memory.textures++,r=!0),a[s].usedTimes++;let i=a[t.__cacheKey];i!==void 0&&(a[t.__cacheKey].usedTimes--,i.usedTimes===0&&E(n)),t.__cacheKey=s,t.__webglTexture=a[s].texture}return r}function ue(e,t,n){return Math.floor(Math.floor(e/n)/t)}function N(t,r,i,a){let o=t.updateRanges;if(o.length===0)n.texSubImage2D(e.TEXTURE_2D,0,0,0,r.width,r.height,i,a,r.data);else{o.sort((e,t)=>e.start-t.start);let s=0;for(let e=1;e0){C&&w&&n.texStorage2D(e.TEXTURE_2D,E,m,y[0].width,y[0].height);for(let t=0,i=y.length;t0){let t=Pb(h.width,h.height,o.format,o.type);for(let a of o.layerUpdates){let o=h.data.subarray(a*t/h.data.BYTES_PER_ELEMENT,(a+1)*t/h.data.BYTES_PER_ELEMENT);n.compressedTexSubImage3D(e.TEXTURE_2D_ARRAY,i,0,0,a,h.width,h.height,1,r,o)}}else n.compressedTexSubImage3D(e.TEXTURE_2D_ARRAY,i,0,0,0,h.width,h.height,t.depth,r,h.data)}else n.compressedTexImage3D(e.TEXTURE_2D_ARRAY,i,m,h.width,h.height,t.depth,0,h.data,0,0);else Yp(`WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()`);else C?T&&n.texSubImage3D(e.TEXTURE_2D_ARRAY,i,0,0,0,h.width,h.height,t.depth,r,p,h.data):n.texImage3D(e.TEXTURE_2D_ARRAY,i,m,h.width,h.height,t.depth,0,r,p,h.data);o.layerUpdates.size>0&&o.clearLayerUpdates()}else{C&&w&&n.texStorage2D(e.TEXTURE_2D,E,m,y[0].width,y[0].height);for(let t=0,i=y.length;t0){let i=Pb(t.width,t.height,o.format,o.type);for(let a of o.layerUpdates){let o=t.data.subarray(a*i/t.data.BYTES_PER_ELEMENT,(a+1)*i/t.data.BYTES_PER_ELEMENT);n.texSubImage3D(e.TEXTURE_2D_ARRAY,0,0,0,a,t.width,t.height,1,r,p,o)}o.clearLayerUpdates()}else n.texSubImage3D(e.TEXTURE_2D_ARRAY,0,0,0,0,t.width,t.height,t.depth,r,p,t.data)}else n.texImage3D(e.TEXTURE_2D_ARRAY,0,m,t.width,t.height,t.depth,0,r,p,t.data);else if(o.isData3DTexture)C?(w&&n.texStorage3D(e.TEXTURE_3D,E,m,t.width,t.height,t.depth),T&&n.texSubImage3D(e.TEXTURE_3D,0,0,0,0,t.width,t.height,t.depth,r,p,t.data)):n.texImage3D(e.TEXTURE_3D,0,m,t.width,t.height,t.depth,0,r,p,t.data);else if(o.isFramebufferTexture){if(w)if(C)n.texStorage2D(e.TEXTURE_2D,E,m,t.width,t.height);else{let i=t.width,a=t.height;for(let t=0;t>=1,a>>=1}}else if(o.isHTMLTexture){if(`texElementImage2D`in e){let n=e.canvas;if(n.hasAttribute(`layoutsubtree`)||n.setAttribute(`layoutsubtree`,`true`),t.parentNode!==n){n.appendChild(t),d.add(o),n.onpaint=e=>{let t=e.changedElements;for(let e of d)t.includes(e.image)&&(e.needsUpdate=!0)},n.requestPaint();return}if(e.texElementImage2D.length===3)e.texElementImage2D(e.TEXTURE_2D,e.RGBA8,t);else{let n=e.RGBA,r=e.RGBA,i=e.UNSIGNED_BYTE;e.texElementImage2D(e.TEXTURE_2D,0,n,r,i,t)}e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)}}else if(y.length>0){if(C&&w){let t=Ce(y[0]);n.texStorage2D(e.TEXTURE_2D,E,m,t.width,t.height)}for(let t=0,i=y.length;t0&&D++;let t=Ce(m[0]);n.texStorage2D(e.TEXTURE_CUBE_MAP,D,C,t.width,t.height)}for(let t=0;t<6;t++)if(p){w?E&&n.texSubImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+t,0,0,0,m[t].width,m[t].height,y,x,m[t].data):n.texImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+t,0,C,m[t].width,m[t].height,0,y,x,m[t].data);for(let r=0;r>u),r=Math.max(1,i.height>>u);l===e.TEXTURE_3D||l===e.TEXTURE_2D_ARRAY?n.texImage3D(l,u,p,t,r,i.depth,0,d,f,null):n.texImage2D(l,u,p,t,r,0,d,f,null)}n.bindFramebuffer(e.FRAMEBUFFER,t),I(i)?s.framebufferTexture2DMultisampleEXT(e.FRAMEBUFFER,c,l,h.__webglTexture,0,F(i)):(l===e.TEXTURE_2D||l>=e.TEXTURE_CUBE_MAP_POSITIVE_X&&l<=e.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&e.framebufferTexture2D(e.FRAMEBUFFER,c,l,h.__webglTexture,u),n.bindFramebuffer(e.FRAMEBUFFER,null)}function me(t,n,r){if(e.bindRenderbuffer(e.RENDERBUFFER,t),n.depthBuffer){let i=n.depthTexture,a=i&&i.isDepthTexture?i.type:null,o=x(n.stencilBuffer,a),c=n.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT;I(n)?s.renderbufferStorageMultisampleEXT(e.RENDERBUFFER,F(n),o,n.width,n.height):r?e.renderbufferStorageMultisample(e.RENDERBUFFER,F(n),o,n.width,n.height):e.renderbufferStorage(e.RENDERBUFFER,o,n.width,n.height),e.framebufferRenderbuffer(e.FRAMEBUFFER,c,e.RENDERBUFFER,t)}else{let t=n.textures;for(let i=0;i{delete i.__boundDepthTexture,delete i.__depthDisposeCallback,e.removeEventListener(`dispose`,t)};e.addEventListener(`dispose`,t),i.__depthDisposeCallback=t}i.__boundDepthTexture=e}if(t.depthTexture&&!i.__autoAllocateDepthBuffer)if(a)for(let e=0;e<6;e++)he(i.__webglFramebuffer[e],t,e);else{let e=t.texture.mipmaps;e&&e.length>0?he(i.__webglFramebuffer[0],t,0):he(i.__webglFramebuffer,t,0)}else if(a){i.__webglDepthbuffer=[];for(let r=0;r<6;r++)if(n.bindFramebuffer(e.FRAMEBUFFER,i.__webglFramebuffer[r]),i.__webglDepthbuffer[r]===void 0)i.__webglDepthbuffer[r]=e.createRenderbuffer(),me(i.__webglDepthbuffer[r],t,!1);else{let n=t.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,a=i.__webglDepthbuffer[r];e.bindRenderbuffer(e.RENDERBUFFER,a),e.framebufferRenderbuffer(e.FRAMEBUFFER,n,e.RENDERBUFFER,a)}}else{let r=t.texture.mipmaps;if(r&&r.length>0?n.bindFramebuffer(e.FRAMEBUFFER,i.__webglFramebuffer[0]):n.bindFramebuffer(e.FRAMEBUFFER,i.__webglFramebuffer),i.__webglDepthbuffer===void 0)i.__webglDepthbuffer=e.createRenderbuffer(),me(i.__webglDepthbuffer,t,!1);else{let n=t.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,r=i.__webglDepthbuffer;e.bindRenderbuffer(e.RENDERBUFFER,r),e.framebufferRenderbuffer(e.FRAMEBUFFER,n,e.RENDERBUFFER,r)}}n.bindFramebuffer(e.FRAMEBUFFER,null)}function ge(t,n,i){let a=r.get(t);n!==void 0&&pe(a.__webglFramebuffer,t,t.texture,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,0),i!==void 0&&P(t)}function _e(t){let i=t.texture,s=r.get(t),c=r.get(i);t.addEventListener(`dispose`,w);let l=t.textures,u=t.isWebGLCubeRenderTarget===!0,d=l.length>1;if(d||(c.__webglTexture===void 0&&(c.__webglTexture=e.createTexture()),c.__version=i.version,o.memory.textures++),u){s.__webglFramebuffer=[];for(let t=0;t<6;t++)if(i.mipmaps&&i.mipmaps.length>0){s.__webglFramebuffer[t]=[];for(let n=0;n0){s.__webglFramebuffer=[];for(let t=0;t0&&I(t)===!1){s.__webglMultisampledFramebuffer=e.createFramebuffer(),s.__webglColorRenderbuffer=[],n.bindFramebuffer(e.FRAMEBUFFER,s.__webglMultisampledFramebuffer);for(let n=0;n0)for(let r=0;r0)for(let n=0;n0){if(I(t)===!1){let i=t.textures,a=t.width,o=t.height,s=e.COLOR_BUFFER_BIT,l=t.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,u=r.get(t),d=i.length>1;if(d)for(let t=0;t0?n.bindFramebuffer(e.DRAW_FRAMEBUFFER,u.__webglFramebuffer[0]):n.bindFramebuffer(e.DRAW_FRAMEBUFFER,u.__webglFramebuffer);for(let n=0;n0&&t.has(`WEBGL_multisampled_render_to_texture`)===!0&&n.__useRenderToTexture!==!1}function L(e){let t=o.render.frame;u.get(e)!==t&&(u.set(e,t),e.update())}function Se(e,t){let n=e.colorSpace,r=e.format,i=e.type;return e.isCompressedTexture===!0||e.isVideoTexture===!0||n!==`srgb-linear`&&n!==``&&(Fm.getTransfer(n)===`srgb`?(r!==1023||i!==1009)&&Yp(`WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType.`):Xp(`WebGLTextures: Unsupported texture color space:`,n)),t}function Ce(e){return typeof HTMLImageElement<`u`&&e instanceof HTMLImageElement?(l.width=e.naturalWidth||e.width,l.height=e.naturalHeight||e.height):typeof VideoFrame<`u`&&e instanceof VideoFrame?(l.width=e.displayWidth,l.height=e.displayHeight):(l.width=e.width,l.height=e.height),l}this.allocateTextureUnit=ee,this.resetTextureUnits=k,this.getTextureUnits=A,this.setTextureUnits=j,this.setTexture2D=ne,this.setTexture2DArray=re,this.setTexture3D=ie,this.setTextureCube=ae,this.rebindTextures=ge,this.setupRenderTarget=_e,this.updateRenderTargetMipmap=ve,this.updateMultisampleRenderTarget=xe,this.setupDepthRenderbuffer=P,this.setupFrameBufferTexture=pe,this.useMultisampledRTT=I,this.isReversedDepthBuffer=function(){return n.buffers.depth.getReversed()}}function VC(e,t){function n(n,r=``){let i,a=Fm.getTransfer(r);if(n===1009)return e.UNSIGNED_BYTE;if(n===1017)return e.UNSIGNED_SHORT_4_4_4_4;if(n===1018)return e.UNSIGNED_SHORT_5_5_5_1;if(n===35902)return e.UNSIGNED_INT_5_9_9_9_REV;if(n===35899)return e.UNSIGNED_INT_10F_11F_11F_REV;if(n===1010)return e.BYTE;if(n===1011)return e.SHORT;if(n===1012)return e.UNSIGNED_SHORT;if(n===1013)return e.INT;if(n===1014)return e.UNSIGNED_INT;if(n===1015)return e.FLOAT;if(n===1016)return e.HALF_FLOAT;if(n===1021)return e.ALPHA;if(n===1022)return e.RGB;if(n===1023)return e.RGBA;if(n===1026)return e.DEPTH_COMPONENT;if(n===1027)return e.DEPTH_STENCIL;if(n===1028)return e.RED;if(n===1029)return e.RED_INTEGER;if(n===1030)return e.RG;if(n===1031)return e.RG_INTEGER;if(n===1033)return e.RGBA_INTEGER;if(n===33776||n===33777||n===33778||n===33779)if(a===`srgb`)if(i=t.get(`WEBGL_compressed_texture_s3tc_srgb`),i!==null){if(n===33776)return i.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(n===33777)return i.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(n===33778)return i.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(n===33779)return i.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else return null;else if(i=t.get(`WEBGL_compressed_texture_s3tc`),i!==null){if(n===33776)return i.COMPRESSED_RGB_S3TC_DXT1_EXT;if(n===33777)return i.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(n===33778)return i.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(n===33779)return i.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(n===35840||n===35841||n===35842||n===35843)if(i=t.get(`WEBGL_compressed_texture_pvrtc`),i!==null){if(n===35840)return i.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(n===35841)return i.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(n===35842)return i.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(n===35843)return i.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(n===36196||n===37492||n===37496||n===37488||n===37489||n===37490||n===37491)if(i=t.get(`WEBGL_compressed_texture_etc`),i!==null){if(n===36196||n===37492)return a===`srgb`?i.COMPRESSED_SRGB8_ETC2:i.COMPRESSED_RGB8_ETC2;if(n===37496)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:i.COMPRESSED_RGBA8_ETC2_EAC;if(n===37488)return i.COMPRESSED_R11_EAC;if(n===37489)return i.COMPRESSED_SIGNED_R11_EAC;if(n===37490)return i.COMPRESSED_RG11_EAC;if(n===37491)return i.COMPRESSED_SIGNED_RG11_EAC}else return null;if(n===37808||n===37809||n===37810||n===37811||n===37812||n===37813||n===37814||n===37815||n===37816||n===37817||n===37818||n===37819||n===37820||n===37821)if(i=t.get(`WEBGL_compressed_texture_astc`),i!==null){if(n===37808)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:i.COMPRESSED_RGBA_ASTC_4x4_KHR;if(n===37809)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:i.COMPRESSED_RGBA_ASTC_5x4_KHR;if(n===37810)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:i.COMPRESSED_RGBA_ASTC_5x5_KHR;if(n===37811)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:i.COMPRESSED_RGBA_ASTC_6x5_KHR;if(n===37812)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:i.COMPRESSED_RGBA_ASTC_6x6_KHR;if(n===37813)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:i.COMPRESSED_RGBA_ASTC_8x5_KHR;if(n===37814)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:i.COMPRESSED_RGBA_ASTC_8x6_KHR;if(n===37815)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:i.COMPRESSED_RGBA_ASTC_8x8_KHR;if(n===37816)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:i.COMPRESSED_RGBA_ASTC_10x5_KHR;if(n===37817)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:i.COMPRESSED_RGBA_ASTC_10x6_KHR;if(n===37818)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:i.COMPRESSED_RGBA_ASTC_10x8_KHR;if(n===37819)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:i.COMPRESSED_RGBA_ASTC_10x10_KHR;if(n===37820)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:i.COMPRESSED_RGBA_ASTC_12x10_KHR;if(n===37821)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:i.COMPRESSED_RGBA_ASTC_12x12_KHR}else return null;if(n===36492||n===36494||n===36495)if(i=t.get(`EXT_texture_compression_bptc`),i!==null){if(n===36492)return a===`srgb`?i.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:i.COMPRESSED_RGBA_BPTC_UNORM_EXT;if(n===36494)return i.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;if(n===36495)return i.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT}else return null;if(n===36283||n===36284||n===36285||n===36286)if(i=t.get(`EXT_texture_compression_rgtc`),i!==null){if(n===36283)return i.COMPRESSED_RED_RGTC1_EXT;if(n===36284)return i.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(n===36285)return i.COMPRESSED_RED_GREEN_RGTC2_EXT;if(n===36286)return i.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}else return null;return n===1020?e.UNSIGNED_INT_24_8:e[n]===void 0?null:e[n]}return{convert:n}}var HC=` void main() { gl_Position = vec4( position, 1.0 ); -}`,wC=` +}`,UC=` uniform sampler2DArray depthColor; uniform float depthWidth; uniform float depthHeight; @@ -4227,7 +4227,7 @@ void main() { } -}`,TC=class{constructor(){this.texture=null,this.mesh=null,this.depthNear=0,this.depthFar=0}init(e,t){if(this.texture===null){let n=new R_(e.texture);(e.depthNear!==t.depthNear||e.depthFar!==t.depthFar)&&(this.depthNear=e.depthNear,this.depthFar=e.depthFar),this.texture=n}}getMesh(e){if(this.texture!==null&&this.mesh===null){let t=e.cameras[0].viewport,n=new Mv({vertexShader:CC,fragmentShader:wC,uniforms:{depthColor:{value:this.texture},depthWidth:{value:t.z},depthHeight:{value:t.w}}});this.mesh=new Ig(new bv(20,20),n)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}},EC=class extends Fp{constructor(e,t){super();let n=this,r=null,i=1,a=null,o=`local-floor`,s=1,c=null,l=null,u=null,d=null,f=null,p=null,m=typeof XRWebGLBinding<`u`,h=new TC,g={},_=t.getContextAttributes(),v=null,y=null,b=[],x=[],S=new q,C=null,w=null,T=new My;T.viewport=new Dm;let E=new My;E.viewport=new Dm;let D=[T,E],O=new Ky,ee=null,te=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(e){let t=b[e];return t===void 0&&(t=new ch,b[e]=t),t.getTargetRaySpace()},this.getControllerGrip=function(e){let t=b[e];return t===void 0&&(t=new ch,b[e]=t),t.getGripSpace()},this.getHand=function(e){let t=b[e];return t===void 0&&(t=new ch,b[e]=t),t.getHandSpace()};function k(e){let t=x.indexOf(e.inputSource);if(t===-1)return;let n=b[t];n!==void 0&&(n.update(e.inputSource,e.frame,c||a),n.dispatchEvent({type:e.type,data:e.inputSource}))}function ne(){r.removeEventListener(`select`,k),r.removeEventListener(`selectstart`,k),r.removeEventListener(`selectend`,k),r.removeEventListener(`squeeze`,k),r.removeEventListener(`squeezestart`,k),r.removeEventListener(`squeezeend`,k),r.removeEventListener(`end`,ne),r.removeEventListener(`inputsourceschange`,A);for(let e=0;e=0&&(x[r]=null,b[r].disconnect(n))}for(let t=0;t=x.length){x.push(n),r=e;break}else if(x[e]===null){x[e]=n,r=e;break}if(r===-1)break}let i=b[r];i&&i.connect(n)}}let re=new J,ie=new J;function ae(e,t,n){re.setFromMatrixPosition(t.matrixWorld),ie.setFromMatrixPosition(n.matrixWorld);let r=re.distanceTo(ie),i=t.projectionMatrix.elements,a=n.projectionMatrix.elements,o=i[14]/(i[10]-1),s=i[14]/(i[10]+1),c=(i[9]+1)/i[5],l=(i[9]-1)/i[5],u=(i[8]-1)/i[0],d=(a[8]+1)/a[0],f=o*u,p=o*d,m=r/(-u+d),h=m*-u;if(t.matrixWorld.decompose(e.position,e.quaternion,e.scale),e.translateX(h),e.translateZ(m),e.matrixWorld.compose(e.position,e.quaternion,e.scale),e.matrixWorldInverse.copy(e.matrixWorld).invert(),i[10]===-1)e.projectionMatrix.copy(t.projectionMatrix),e.projectionMatrixInverse.copy(t.projectionMatrixInverse);else{let t=o+m,n=s+m,i=f-h,a=p+(r-h),u=c*s/n*t,d=l*s/n*t;e.projectionMatrix.makePerspective(i,a,u,d,t,n),e.projectionMatrixInverse.copy(e.projectionMatrix).invert()}}function oe(e,t){t===null?e.matrixWorld.copy(e.matrix):e.matrixWorld.multiplyMatrices(t.matrixWorld,e.matrix),e.matrixWorldInverse.copy(e.matrixWorld).invert()}this.updateCamera=function(e){if(r===null)return;let t=e.near,n=e.far;h.texture!==null&&(h.depthNear>0&&(t=h.depthNear),h.depthFar>0&&(n=h.depthFar)),O.near=E.near=T.near=t,O.far=E.far=T.far=n,(ee!==O.near||te!==O.far)&&(r.updateRenderState({depthNear:O.near,depthFar:O.far}),ee=O.near,te=O.far),O.layers.mask=e.layers.mask|6,T.layers.mask=O.layers.mask&-5,E.layers.mask=O.layers.mask&-3;let i=e.parent,a=O.cameras;oe(O,i);for(let e=0;e0&&(e.alphaTest.value=r.alphaTest);let i=t.get(r),a=i.envMap,o=i.envMapRotation;a&&(e.envMap.value=a,e.envMapRotation.value.setFromMatrix4(DC.makeRotationFromEuler(o)).transpose(),a.isCubeTexture&&a.isRenderTargetTexture===!1&&e.envMapRotation.value.premultiply(OC),e.reflectivity.value=r.reflectivity,e.ior.value=r.ior,e.refractionRatio.value=r.refractionRatio),r.lightMap&&(e.lightMap.value=r.lightMap,e.lightMapIntensity.value=r.lightMapIntensity,n(r.lightMap,e.lightMapTransform)),r.aoMap&&(e.aoMap.value=r.aoMap,e.aoMapIntensity.value=r.aoMapIntensity,n(r.aoMap,e.aoMapTransform))}function o(e,t){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,t.map&&(e.map.value=t.map,n(t.map,e.mapTransform))}function s(e,t){e.dashSize.value=t.dashSize,e.totalSize.value=t.dashSize+t.gapSize,e.scale.value=t.scale}function c(e,t,r,i){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,e.size.value=t.size*r,e.scale.value=i*.5,t.map&&(e.map.value=t.map,n(t.map,e.uvTransform)),t.alphaMap&&(e.alphaMap.value=t.alphaMap,n(t.alphaMap,e.alphaMapTransform)),t.alphaTest>0&&(e.alphaTest.value=t.alphaTest)}function l(e,t){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,e.rotation.value=t.rotation,t.map&&(e.map.value=t.map,n(t.map,e.mapTransform)),t.alphaMap&&(e.alphaMap.value=t.alphaMap,n(t.alphaMap,e.alphaMapTransform)),t.alphaTest>0&&(e.alphaTest.value=t.alphaTest)}function u(e,t){e.specular.value.copy(t.specular),e.shininess.value=Math.max(t.shininess,1e-4)}function d(e,t){t.gradientMap&&(e.gradientMap.value=t.gradientMap)}function f(e,t){e.metalness.value=t.metalness,t.metalnessMap&&(e.metalnessMap.value=t.metalnessMap,n(t.metalnessMap,e.metalnessMapTransform)),e.roughness.value=t.roughness,t.roughnessMap&&(e.roughnessMap.value=t.roughnessMap,n(t.roughnessMap,e.roughnessMapTransform)),t.envMap&&(e.envMapIntensity.value=t.envMapIntensity)}function p(e,t,r){e.ior.value=t.ior,t.sheen>0&&(e.sheenColor.value.copy(t.sheenColor).multiplyScalar(t.sheen),e.sheenRoughness.value=t.sheenRoughness,t.sheenColorMap&&(e.sheenColorMap.value=t.sheenColorMap,n(t.sheenColorMap,e.sheenColorMapTransform)),t.sheenRoughnessMap&&(e.sheenRoughnessMap.value=t.sheenRoughnessMap,n(t.sheenRoughnessMap,e.sheenRoughnessMapTransform))),t.clearcoat>0&&(e.clearcoat.value=t.clearcoat,e.clearcoatRoughness.value=t.clearcoatRoughness,t.clearcoatMap&&(e.clearcoatMap.value=t.clearcoatMap,n(t.clearcoatMap,e.clearcoatMapTransform)),t.clearcoatRoughnessMap&&(e.clearcoatRoughnessMap.value=t.clearcoatRoughnessMap,n(t.clearcoatRoughnessMap,e.clearcoatRoughnessMapTransform)),t.clearcoatNormalMap&&(e.clearcoatNormalMap.value=t.clearcoatNormalMap,n(t.clearcoatNormalMap,e.clearcoatNormalMapTransform),e.clearcoatNormalScale.value.copy(t.clearcoatNormalScale),t.side===1&&e.clearcoatNormalScale.value.negate())),t.dispersion>0&&(e.dispersion.value=t.dispersion),t.retroreflectivity>0&&(e.retroreflectivity.value=t.retroreflectivity),t.iridescence>0&&(e.iridescence.value=t.iridescence,e.iridescenceIOR.value=t.iridescenceIOR,e.iridescenceThicknessMinimum.value=t.iridescenceThicknessRange[0],e.iridescenceThicknessMaximum.value=t.iridescenceThicknessRange[1],t.iridescenceMap&&(e.iridescenceMap.value=t.iridescenceMap,n(t.iridescenceMap,e.iridescenceMapTransform)),t.iridescenceThicknessMap&&(e.iridescenceThicknessMap.value=t.iridescenceThicknessMap,n(t.iridescenceThicknessMap,e.iridescenceThicknessMapTransform))),t.transmission>0&&(e.transmission.value=t.transmission,e.transmissionSamplerMap.value=r.texture,e.transmissionSamplerSize.value.set(r.width,r.height),t.transmissionMap&&(e.transmissionMap.value=t.transmissionMap,n(t.transmissionMap,e.transmissionMapTransform)),e.thickness.value=t.thickness,t.thicknessMap&&(e.thicknessMap.value=t.thicknessMap,n(t.thicknessMap,e.thicknessMapTransform)),e.attenuationDistance.value=t.attenuationDistance,e.attenuationColor.value.copy(t.attenuationColor)),t.anisotropy>0&&(e.anisotropyVector.value.set(t.anisotropy*Math.cos(t.anisotropyRotation),t.anisotropy*Math.sin(t.anisotropyRotation)),t.anisotropyMap&&(e.anisotropyMap.value=t.anisotropyMap,n(t.anisotropyMap,e.anisotropyMapTransform))),e.specularIntensity.value=t.specularIntensity,e.specularColor.value.copy(t.specularColor),t.specularColorMap&&(e.specularColorMap.value=t.specularColorMap,n(t.specularColorMap,e.specularColorMapTransform)),t.specularIntensityMap&&(e.specularIntensityMap.value=t.specularIntensityMap,n(t.specularIntensityMap,e.specularIntensityMapTransform))}function m(e,t){t.matcap&&(e.matcap.value=t.matcap)}function h(e,n){let r=t.get(n).light;e.referencePosition.value.setFromMatrixPosition(r.matrixWorld),e.nearDistance.value=r.shadow.camera.near,e.farDistance.value=r.shadow.camera.far}return{refreshFogUniforms:r,refreshMaterialUniforms:i}}function AC(e,t,n,r){let i={},a={},o=[],s=e.getParameter(e.MAX_UNIFORM_BUFFER_BINDINGS);function c(e,t){let n=t.program;r.uniformBlockBinding(e,n)}function l(e,n){let o=i[e.id];o===void 0&&(g(e),o=u(e),i[e.id]=o,e.addEventListener(`dispose`,v));let s=n.program;r.updateUBOMapping(e,s);let c=t.render.frame;a[e.id]!==c&&(f(e),a[e.id]=c)}function u(t){let n=d();t.__bindingPointIndex=n;let r=e.createBuffer(),i=t.__size,a=t.usage;return e.bindBuffer(e.UNIFORM_BUFFER,r),e.bufferData(e.UNIFORM_BUFFER,i,a),e.bindBuffer(e.UNIFORM_BUFFER,null),e.bindBufferBase(e.UNIFORM_BUFFER,n,r),r}function d(){for(let e=0;e0&&(n+=16-r),e.__size=n,e.__cache={},this}function _(e){let t={boundary:0,storage:0};return typeof e==`number`||typeof e==`boolean`?(t.boundary=4,t.storage=4):e.isVector2?(t.boundary=8,t.storage=8):e.isVector3||e.isColor?(t.boundary=16,t.storage=12):e.isVector4?(t.boundary=16,t.storage=16):e.isMatrix3?(t.boundary=48,t.storage=48):e.isMatrix4?(t.boundary=64,t.storage=64):e.isTexture?Ap(`WebGLRenderer: Texture samplers can not be part of an uniforms group.`):ArrayBuffer.isView(e)?(t.boundary=16,t.storage=e.byteLength):Ap(`WebGLRenderer: Unsupported uniform value type.`,e),t}function v(t){let n=t.target;n.removeEventListener(`dispose`,v);let r=o.indexOf(n.__bindingPointIndex);o.splice(r,1),e.deleteBuffer(i[n.id]),delete i[n.id],delete a[n.id]}function y(){for(let t in i)e.deleteBuffer(i[t]);o=[],i={},a={}}return{bind:c,update:l,dispose:y}}var jC=new Uint16Array([12469,15057,12620,14925,13266,14620,13807,14376,14323,13990,14545,13625,14713,13328,14840,12882,14931,12528,14996,12233,15039,11829,15066,11525,15080,11295,15085,10976,15082,10705,15073,10495,13880,14564,13898,14542,13977,14430,14158,14124,14393,13732,14556,13410,14702,12996,14814,12596,14891,12291,14937,11834,14957,11489,14958,11194,14943,10803,14921,10506,14893,10278,14858,9960,14484,14039,14487,14025,14499,13941,14524,13740,14574,13468,14654,13106,14743,12678,14818,12344,14867,11893,14889,11509,14893,11180,14881,10751,14852,10428,14812,10128,14765,9754,14712,9466,14764,13480,14764,13475,14766,13440,14766,13347,14769,13070,14786,12713,14816,12387,14844,11957,14860,11549,14868,11215,14855,10751,14825,10403,14782,10044,14729,9651,14666,9352,14599,9029,14967,12835,14966,12831,14963,12804,14954,12723,14936,12564,14917,12347,14900,11958,14886,11569,14878,11247,14859,10765,14828,10401,14784,10011,14727,9600,14660,9289,14586,8893,14508,8533,15111,12234,15110,12234,15104,12216,15092,12156,15067,12010,15028,11776,14981,11500,14942,11205,14902,10752,14861,10393,14812,9991,14752,9570,14682,9252,14603,8808,14519,8445,14431,8145,15209,11449,15208,11451,15202,11451,15190,11438,15163,11384,15117,11274,15055,10979,14994,10648,14932,10343,14871,9936,14803,9532,14729,9218,14645,8742,14556,8381,14461,8020,14365,7603,15273,10603,15272,10607,15267,10619,15256,10631,15231,10614,15182,10535,15118,10389,15042,10167,14963,9787,14883,9447,14800,9115,14710,8665,14615,8318,14514,7911,14411,7507,14279,7198,15314,9675,15313,9683,15309,9712,15298,9759,15277,9797,15229,9773,15166,9668,15084,9487,14995,9274,14898,8910,14800,8539,14697,8234,14590,7790,14479,7409,14367,7067,14178,6621,15337,8619,15337,8631,15333,8677,15325,8769,15305,8871,15264,8940,15202,8909,15119,8775,15022,8565,14916,8328,14804,8009,14688,7614,14569,7287,14448,6888,14321,6483,14088,6171,15350,7402,15350,7419,15347,7480,15340,7613,15322,7804,15287,7973,15229,8057,15148,8012,15046,7846,14933,7611,14810,7357,14682,7069,14552,6656,14421,6316,14251,5948,14007,5528,15356,5942,15356,5977,15353,6119,15348,6294,15332,6551,15302,6824,15249,7044,15171,7122,15070,7050,14949,6861,14818,6611,14679,6349,14538,6067,14398,5651,14189,5311,13935,4958,15359,4123,15359,4153,15356,4296,15353,4646,15338,5160,15311,5508,15263,5829,15188,6042,15088,6094,14966,6001,14826,5796,14678,5543,14527,5287,14377,4985,14133,4586,13869,4257,15360,1563,15360,1642,15358,2076,15354,2636,15341,3350,15317,4019,15273,4429,15203,4732,15105,4911,14981,4932,14836,4818,14679,4621,14517,4386,14359,4156,14083,3795,13808,3437,15360,122,15360,137,15358,285,15355,636,15344,1274,15322,2177,15281,2765,15215,3223,15120,3451,14995,3569,14846,3567,14681,3466,14511,3305,14344,3121,14037,2800,13753,2467,15360,0,15360,1,15359,21,15355,89,15346,253,15325,479,15287,796,15225,1148,15133,1492,15008,1749,14856,1882,14685,1886,14506,1783,14324,1608,13996,1398,13702,1183]),MC=null;function NC(){return MC===null&&(MC=new Xg(jC,16,16,xf,cf),MC.name=`DFG_LUT`,MC.minFilter=Zd,MC.magFilter=Zd,MC.wrapS=Kd,MC.wrapT=Kd,MC.generateMipmaps=!1,MC.needsUpdate=!0),MC}var PC=class{constructor(e={}){let{canvas:t=Ep(),context:n=null,depth:r=!0,stencil:i=!1,alpha:a=!1,antialias:o=!1,premultipliedAlpha:s=!0,preserveDrawingBuffer:c=!1,powerPreference:l=`default`,failIfMajorPerformanceCaveat:u=!1,reversedDepthBuffer:d=!1,outputBufferType:f=ef}=e;this.isWebGLRenderer=!0;let p;if(n!==null){if(typeof WebGLRenderingContext<`u`&&n instanceof WebGLRenderingContext)throw Error(`THREE.WebGLRenderer: WebGL 1 is not supported since r163.`);p=n.getContextAttributes().alpha}else p=a;let m=f,h=new Set([Cf,Sf,bf]),g=new Set([ef,of,rf,df,lf,uf]),_=new Uint32Array(4),v=new Int32Array(4),y=new J,b=null,x=null,S=[],C=[],w=null;this.domElement=t,this.debug={checkShaderErrors:!0,diagnostics:{keywords:!1},onShaderError:null},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.toneMapping=0,this.toneMappingExposure=1,this.transmissionResolutionScale=1;let T=this,E=!1,D=null,O=null,ee=null,te=null;this._outputColorSpace=hp;let k=0,ne=0,A=null,re=-1,ie=null,ae=new Dm,oe=new Dm,j=null,se=new Y(0),ce=0,le=t.width,ue=t.height,M=1,N=null,de=null,fe=new Dm(0,0,le,ue),pe=new Dm(0,0,le,ue),me=!1,P=new f_,F=!1,he=!1,ge=new Mm,_e=new J,ve=new Dm,ye={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0},be=!1;function xe(){return A===null?M:1}let I=n;function Se(e,n){return t.getContext(e,n)}let Ce,we,L,Te,Ee,De,Oe,ke,Ae,je,Me,Ne,Pe,Fe,Ie,Le,Re,ze,Be,Ve,He,Ue,We;try{let e={alpha:!0,depth:r,stencil:i,antialias:o,premultipliedAlpha:s,preserveDrawingBuffer:c,powerPreference:l,failIfMajorPerformanceCaveat:u};if(`setAttribute`in t&&t.setAttribute(`data-engine`,`three.js r186`),t.addEventListener(`webglcontextlost`,qe,!1),t.addEventListener(`webglcontextrestored`,Je,!1),t.addEventListener(`webglcontextcreationerror`,Ye,!1),I===null){let t=`webgl2`;if(I=Se(t,e),I===null)throw Se(t)?Error(`THREE.WebGLRenderer: Error creating WebGL context with your selected attributes.`):Error(`THREE.WebGLRenderer: Error creating WebGL context.`)}Ge()}catch(e){throw t.removeEventListener(`webglcontextlost`,qe,!1),t.removeEventListener(`webglcontextrestored`,Je,!1),t.removeEventListener(`webglcontextcreationerror`,Ye,!1),jp(`WebGLRenderer: `+e.message),e}function Ge(){Ce=new Qb(I),Ce.init(),He=new SC(I,Ce),we=new Db(I,Ce,e,He),L=new bC(I,Ce),we.reversedDepthBuffer&&d&&L.buffers.depth.setReversed(!0),O=I.createFramebuffer(),ee=I.createFramebuffer(),te=I.createFramebuffer(),Te=new tx(I),Ee=new eC,De=new xC(I,Ce,L,Ee,we,He,Te),Oe=new Zb(T),ke=new vb(I),Ue=new Tb(I,ke),Ae=new $b(I,ke,Te,Ue),je=new rx(I,Ae,ke,Ue,Te),ze=new nx(I,we,De),Ie=new Ob(Ee),Me=new $S(T,Oe,Ce,we,Ue,Ie),Ne=new kC(T,Ee),Pe=new iC,Fe=new dC(Ce),Re=new wb(T,Oe,L,je,p,s),Le=new yC(T,je,we),We=new AC(I,Te,we,L),Be=new Eb(I,Ce,Te),Ve=new ex(I,Ce,Te),Te.programs=Me.programs,T.capabilities=we,T.extensions=Ce,T.properties=Ee,T.renderLists=Pe,T.shadowMap=Le,T.state=L,T.info=Te}m!==1009&&(w=new ax(m,t.width,t.height,o,r,i));let Ke=new EC(T,I);this.xr=Ke,this.getContext=function(){return I},this.getContextAttributes=function(){return I.getContextAttributes()},this.forceContextLoss=function(){let e=Ce.get(`WEBGL_lose_context`);e&&e.loseContext()},this.forceContextRestore=function(){let e=Ce.get(`WEBGL_lose_context`);e&&e.restoreContext()},this.getPixelRatio=function(){return M},this.setPixelRatio=function(e){e!==void 0&&(M=e,this.setSize(le,ue,!1))},this.getSize=function(e){return e.set(le,ue)},this.setSize=function(e,n,r=!0){if(Ke.isPresenting){Ap(`WebGLRenderer: Can't change size while VR device is presenting.`);return}le=e,ue=n,t.width=Math.floor(e*M),t.height=Math.floor(n*M),r===!0&&(t.style.width=e+`px`,t.style.height=n+`px`),w!==null&&w.setSize(t.width,t.height),this.setViewport(0,0,e,n)},this.getDrawingBufferSize=function(e){return e.set(le*M,ue*M).floor()},this.setDrawingBufferSize=function(e,n,r){le=e,ue=n,M=r,t.width=Math.floor(e*r),t.height=Math.floor(n*r),this.setViewport(0,0,e,n)},this.setEffects=function(e){if(m===1009){jp(`WebGLRenderer: setEffects() requires outputBufferType set to HalfFloatType or FloatType.`);return}if(e){for(let t=0;t{function n(){if(r.forEach(function(e){let t=Ee.get(e).currentProgram;(t===void 0||t.isReady())&&r.delete(e)}),r.size===0){t(e);return}setTimeout(n,10)}Ce.get(`KHR_parallel_shader_compile`)===null?setTimeout(n,10):n()})};let et=null;function tt(e){et&&et(e)}function nt(){it.stop()}function rt(){it.start()}let it=new _b;it.setAnimationLoop(tt),typeof self<`u`&&it.setContext(self),this.setAnimationLoop=function(e){et=e,Ke.setAnimationLoop(e),e===null?it.stop():it.start()},Ke.addEventListener(`sessionstart`,nt),Ke.addEventListener(`sessionend`,rt),this.render=function(e,t){if(t!==void 0&&t.isCamera!==!0){jp(`WebGLRenderer.render: camera is not an instance of THREE.Camera.`);return}if(E===!0)return;D!==null&&D.renderStart(e,t);let n=Ke.enabled===!0&&Ke.isPresenting===!0,r=w!==null&&(A===null||n)&&w.begin(T,A);if(e.matrixWorldAutoUpdate===!0&&e.updateMatrixWorld(),t.parent===null&&t.matrixWorldAutoUpdate===!0&&t.updateMatrixWorld(),Ke.enabled===!0&&Ke.isPresenting===!0&&(w===null||w.isCompositing()===!1)&&(Ke.cameraAutoUpdate===!0&&Ke.updateCamera(t),t=Ke.getCamera()),e.isScene===!0&&e.onBeforeRender(T,e,t,A),x=Fe.get(e,C.length),x.init(t),x.state.textureUnits=De.getTextureUnits(),C.push(x),ge.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse),P.setFromProjectionMatrix(ge,Sp,t.reversedDepth),he=this.localClippingEnabled,F=Ie.init(this.clippingPlanes,he),b=Pe.get(e,S.length),b.init(),S.push(b),Ke.enabled===!0&&Ke.isPresenting===!0){let e=T.xr.getDepthSensingMesh();e!==null&&at(e,t,-1/0,T.sortObjects)}at(e,t,0,T.sortObjects),b.finish(),D!==null&&D.updateLights(x.state.lightsArray),T.sortObjects===!0&&b.sort(N,de),be=Ke.enabled===!1||Ke.isPresenting===!1||Ke.hasDepthSensing()===!1,be&&Re.addToRenderList(b,e),this.info.render.frame++,this.info.autoReset===!0&&this.info.reset(),F===!0&&Ie.beginShadows();let i=x.state.shadowsArray;if(Le.render(i,e,t),F===!0&&Ie.endShadows(),(r&&w.hasRenderPass())===!1){let n=b.opaque,r=b.transmissive;if(x.setupLights(),t.isArrayCamera){let i=t.cameras;if(r.length>0)for(let t=0,a=i.length;t0&&st(n,r,e,t),be&&Re.render(e),ot(b,e,t)}A!==null&&ne===0&&(De.updateMultisampleRenderTarget(A),De.updateRenderTargetMipmap(A)),r&&w.end(T),e.isScene===!0&&e.onAfterRender(T,e,t),Ue.resetDefaultState(),re=-1,ie=null,C.pop(),C.length>0?(x=C[C.length-1],De.setTextureUnits(x.state.textureUnits),F===!0&&Ie.setGlobalState(T.clippingPlanes,x.state.camera)):x=null,S.pop(),b=S.length>0?S[S.length-1]:null,D!==null&&D.renderEnd()};function at(e,t,n,r){if(e.visible===!1)return;if(e.layers.test(t.layers)){if(e.isGroup)n=e.renderOrder;else if(e.isLOD)e.autoUpdate===!0&&e.update(t);else if(e.isLightProbeGrid)x.pushLightProbeGrid(e);else if(e.isLight)x.pushLight(e),e.castShadow&&x.pushShadow(e);else if(e.isSprite){if(!e.frustumCulled||e.intersectsFrustum(P)){r&&ve.setFromMatrixPosition(e.matrixWorld).applyMatrix4(ge);let i=je.update(e),a=e.material;a.visible&&b.push(e,i,a,n,ve.z,null,t)}}else if((e.isMesh||e.isLine||e.isPoints)&&(!e.frustumCulled||e.intersectsFrustum(P))){let i=je.update(e),a=e.material;if(r&&(e.boundingSphere===void 0?(i.boundingSphere===null&&i.computeBoundingSphere(),ve.copy(i.boundingSphere.center)):(e.boundingSphere===null&&e.computeBoundingSphere(),ve.copy(e.boundingSphere.center)),ve.applyMatrix4(e.matrixWorld).applyMatrix4(ge)),Array.isArray(a)){let r=i.groups;for(let o=0,s=r.length;o0&&ct(i,t,n),a.length>0&&ct(a,t,n),o.length>0&&ct(o,t,n),L.buffers.depth.setTest(!0),L.buffers.depth.setMask(!0),L.buffers.color.setMask(!0),L.setPolygonOffset(!1)}function st(e,t,n,r){if((n.isScene===!0?n.overrideMaterial:null)!==null)return;if(x.state.transmissionRenderTarget[r.id]===void 0){let e=Ce.has(`EXT_color_buffer_half_float`)||Ce.has(`EXT_color_buffer_float`);x.state.transmissionRenderTarget[r.id]=new km(1,1,{generateMipmaps:!0,type:e?cf:ef,minFilter:$d,samples:Math.max(4,we.samples),stencilBuffer:i,resolveDepthBuffer:!1,resolveStencilBuffer:!1,storeMultisampledDepthBuffer:!1,storeMultisampledStencilBuffer:!1,colorSpace:gm.workingColorSpace})}let a=x.state.transmissionRenderTarget[r.id],o=r.viewport||ae;a.setSize(o.z*T.transmissionResolutionScale,o.w*T.transmissionResolutionScale);let s=T.getRenderTarget(),c=T.getActiveCubeFace(),l=T.getActiveMipmapLevel();T.setRenderTarget(a),T.getClearColor(se),ce=T.getClearAlpha(),ce<1&&T.setClearColor(16777215,.5),T.clear(),be&&Re.render(n);let u=T.toneMapping;T.toneMapping=0;let d=r.viewport;if(r.viewport!==void 0&&(r.viewport=void 0),x.setupLightsView(r),F===!0&&Ie.setGlobalState(T.clippingPlanes,r),ct(e,n,r),De.updateMultisampleRenderTarget(a),De.updateRenderTargetMipmap(a),Ce.has(`WEBGL_multisampled_render_to_texture`)===!1){let e=!1;for(let i=0,a=t.length;i0,r.currentProgram=d,r.uniformsList=null,d}function dt(e){if(e.uniformsList===null){let t=e.currentProgram.getUniforms();e.uniformsList=fS.seqWithValue(t.seq,e.uniforms)}return e.uniformsList}function ft(e,t){let n=Ee.get(e);n.outputColorSpace=t.outputColorSpace,n.batching=t.batching,n.batchingColor=t.batchingColor,n.instancing=t.instancing,n.instancingColor=t.instancingColor,n.instancingMorph=t.instancingMorph,n.skinning=t.skinning,n.morphTargets=t.morphTargets,n.morphNormals=t.morphNormals,n.morphColors=t.morphColors,n.morphTargetsCount=t.morphTargetsCount,n.numClippingPlanes=t.numClippingPlanes,n.numIntersection=t.numClipIntersection,n.vertexAlphas=t.vertexAlphas,n.vertexTangents=t.vertexTangents,n.toneMapping=t.toneMapping}function pt(e,t){if(e.length===0)return null;if(e.length===1)return e[0].texture===null?null:e[0];y.setFromMatrixPosition(t.matrixWorld);for(let t=0,n=e.length;t0),f=!!n.morphAttributes.position,p=!!n.morphAttributes.normal,m=!!n.morphAttributes.color,h=0;r.toneMapped&&(A===null||A.isXRRenderTarget===!0)&&(h=T.toneMapping);let g=n.morphAttributes.position||n.morphAttributes.normal||n.morphAttributes.color,_=g===void 0?0:g.length,v=Ee.get(r),y=x.state.lights;if(F===!0&&(he===!0||e!==ie)){let t=e===ie&&r.id===re;Ie.setState(r,e,t)}let b=!1;r.version===v.__version?v.needsLights&&v.lightsStateVersion!==y.state.version?b=!0:v.outputColorSpace===s?i.isBatchedMesh&&v.batching===!1||!i.isBatchedMesh&&v.batching===!0||i.isBatchedMesh&&v.batchingColor===!0&&i._colorsTexture===null||i.isBatchedMesh&&v.batchingColor===!1&&i._colorsTexture!==null||i.isInstancedMesh&&v.instancing===!1||!i.isInstancedMesh&&v.instancing===!0||i.isSkinnedMesh&&v.skinning===!1||!i.isSkinnedMesh&&v.skinning===!0||i.isInstancedMesh&&v.instancingColor===!0&&i.instanceColor===null||i.isInstancedMesh&&v.instancingColor===!1&&i.instanceColor!==null||i.isInstancedMesh&&v.instancingMorph===!0&&i.morphTexture===null||i.isInstancedMesh&&v.instancingMorph===!1&&i.morphTexture!==null?b=!0:v.envMap===l?r.fog===!0&&v.fog!==a||v.numClippingPlanes!==void 0&&(v.numClippingPlanes!==Ie.numPlanes||v.numIntersection!==Ie.numIntersection)?b=!0:v.vertexAlphas===u&&v.vertexTangents===d&&v.morphTargets===f&&v.morphNormals===p&&v.morphColors===m&&v.toneMapping===h&&v.morphTargetsCount===_?!!v.lightProbeGrid!=x.state.lightProbeGridArray.length>0&&(b=!0):b=!0:b=!0:b=!0:(b=!0,v.__version=r.version);let S=v.currentProgram;b===!0&&(S=ut(r,t,i),D&&r.isNodeMaterial&&D.onUpdateProgram(r,S,v));let C=!1,w=!1,E=!1,O=S.getUniforms(),ee=v.uniforms;if(L.useProgram(S.program)&&(C=!0,w=!0,E=!0),r.id!==re&&(re=r.id,w=!0),v.needsLights){let e=pt(x.state.lightProbeGridArray,i);v.lightProbeGrid!==e&&(v.lightProbeGrid=e,w=!0)}if(C||ie!==e){L.buffers.depth.getReversed()&&e.reversedDepth!==!0&&(e._reversedDepth=!0,e.updateProjectionMatrix()),O.setValue(I,`projectionMatrix`,e.projectionMatrix),O.setValue(I,`viewMatrix`,e.matrixWorldInverse);let t=O.map.cameraPosition;t!==void 0&&t.setValue(I,_e.setFromMatrixPosition(e.matrixWorld)),we.logarithmicDepthBuffer&&O.setValue(I,`logDepthBufFC`,2/(Math.log(e.far+1)/Math.LN2)),(r.isMeshPhongMaterial||r.isMeshToonMaterial||r.isMeshLambertMaterial||r.isMeshBasicMaterial||r.isMeshStandardMaterial||r.isShaderMaterial)&&O.setValue(I,`isOrthographic`,e.isOrthographicCamera===!0),ie!==e&&(ie=e,w=!0,E=!0)}if(v.needsLights&&(y.state.sunShadowMap.length>0&&O.setValue(I,`sunShadowMap`,y.state.sunShadowMap,De),y.state.directionalShadowMap.length>0&&O.setValue(I,`directionalShadowMap`,y.state.directionalShadowMap,De),y.state.spotShadowMap.length>0&&O.setValue(I,`spotShadowMap`,y.state.spotShadowMap,De),y.state.pointShadowMap.length>0&&O.setValue(I,`pointShadowMap`,y.state.pointShadowMap,De)),i.isSkinnedMesh){O.setOptional(I,i,`bindMatrix`),O.setOptional(I,i,`bindMatrixInverse`);let e=i.skeleton;e&&(e.boneTexture===null&&e.computeBoneTexture(),O.setValue(I,`boneTexture`,e.boneTexture,De))}i.isBatchedMesh&&(O.setOptional(I,i,`batchingTexture`),O.setValue(I,`batchingTexture`,i._matricesTexture,De),O.setOptional(I,i,`batchingIdTexture`),O.setValue(I,`batchingIdTexture`,i._indirectTexture,De),O.setOptional(I,i,`batchingColorTexture`),i._colorsTexture!==null&&O.setValue(I,`batchingColorTexture`,i._colorsTexture,De));let te=n.morphAttributes;if((te.position!==void 0||te.normal!==void 0||te.color!==void 0)&&ze.update(i,n,S),(w||v.receiveShadow!==i.receiveShadow)&&(v.receiveShadow=i.receiveShadow,O.setValue(I,`receiveShadow`,i.receiveShadow)),(r.isMeshStandardMaterial||r.isMeshLambertMaterial||r.isMeshPhongMaterial)&&r.envMap===null&&t.environment!==null&&(ee.envMapIntensity.value=t.environmentIntensity),ee.dfgLUT!==void 0&&(ee.dfgLUT.value=NC()),w){if(O.setValue(I,`toneMappingExposure`,T.toneMappingExposure),v.needsLights&&ht(ee,E),a&&r.fog===!0&&Ne.refreshFogUniforms(ee,a),Ne.refreshMaterialUniforms(ee,r,M,ue,x.state.transmissionRenderTarget[e.id]),v.needsLights&&v.lightProbeGrid){let e=v.lightProbeGrid;ee.probesSH.value=e.texture,ee.probesMin.value.copy(e.boundingBox.min),ee.probesMax.value.copy(e.boundingBox.max),ee.probesResolution.value.copy(e.resolution)}fS.upload(I,dt(v),ee,De)}if(r.isShaderMaterial&&r.uniformsNeedUpdate===!0&&(fS.upload(I,dt(v),ee,De),r.uniformsNeedUpdate=!1),r.isSpriteMaterial&&O.setValue(I,`center`,i.center),O.setValue(I,`modelViewMatrix`,i.modelViewMatrix),O.setValue(I,`normalMatrix`,i.normalMatrix),O.setValue(I,`modelMatrix`,i.matrixWorld),r.uniformsGroups!==void 0){let e=r.uniformsGroups;for(let t=0,n=e.length;t0&&De.useMultisampledRTT(e)===!1?Ee.get(e).__webglMultisampledFramebuffer:Array.isArray(c)?c[n]:c,ae.copy(e.viewport),oe.copy(e.scissor),j=e.scissorTest}else ae.copy(fe).multiplyScalar(M).floor(),oe.copy(pe).multiplyScalar(M).floor(),j=me;if(n!==0&&(r=O),L.bindFramebuffer(I.FRAMEBUFFER,r)&&L.drawBuffers(e,r),L.viewport(ae),L.scissor(oe),L.setScissorTest(j),i){let r=Ee.get(e.texture);I.framebufferTexture2D(I.FRAMEBUFFER,I.COLOR_ATTACHMENT0,I.TEXTURE_CUBE_MAP_POSITIVE_X+t,r.__webglTexture,n)}else if(a){let r=t;for(let t=0;t1&&I.readBuffer(I.COLOR_ATTACHMENT0+s);let u=_t(o);if(u.__formatReadable===!1){jp(`WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.`);return}if(u.__typeReadable===!1){jp(`WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.`);return}t>=0&&t<=e.width-r&&n>=0&&n<=e.height-i&&I.readPixels(t,n,r,i,He.convert(c),He.convert(l),a)}finally{let e=A===null?null:Ee.get(A).__webglFramebuffer;L.bindFramebuffer(I.FRAMEBUFFER,e)}}},this.readRenderTargetPixelsAsync=async function(e,t,n,r,i,a,o,s=0){if(!(e&&e.isWebGLRenderTarget))throw Error(`THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.`);let c=Ee.get(e).__webglFramebuffer;if(e.isWebGLCubeRenderTarget&&o!==void 0&&(c=c[o]),c)if(t>=0&&t<=e.width-r&&n>=0&&n<=e.height-i){L.bindFramebuffer(I.FRAMEBUFFER,c);let o=e.textures[s],l=o.format,u=o.type;e.textures.length>1&&I.readBuffer(I.COLOR_ATTACHMENT0+s);let d=_t(o);if(d.__formatReadable===!1)throw Error(`THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.`);if(d.__typeReadable===!1)throw Error(`THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.`);let f=I.createBuffer();I.bindBuffer(I.PIXEL_PACK_BUFFER,f),I.bufferData(I.PIXEL_PACK_BUFFER,a.byteLength,I.STREAM_READ),I.readPixels(t,n,r,i,He.convert(l),He.convert(u),0),I.bindBuffer(I.PIXEL_PACK_BUFFER,null);let p=A===null?null:Ee.get(A).__webglFramebuffer;L.bindFramebuffer(I.FRAMEBUFFER,p);let m=I.fenceSync(I.SYNC_GPU_COMMANDS_COMPLETE,0);return I.flush(),await Np(I,m,4),I.bindBuffer(I.PIXEL_PACK_BUFFER,f),I.getBufferSubData(I.PIXEL_PACK_BUFFER,0,a),I.bindBuffer(I.PIXEL_PACK_BUFFER,null),I.deleteBuffer(f),I.deleteSync(m),a}else throw Error(`THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.`)},this.copyFramebufferToTexture=function(e,t=null,n=0){let r=2**-n,i=Math.floor(e.image.width*r),a=Math.floor(e.image.height*r),o=t===null?0:t.x,s=t===null?0:t.y;De.setTexture2D(e,0),I.copyTexSubImage2D(I.TEXTURE_2D,n,0,0,o,s,i,a),L.unbindTexture()},this.copyTextureToTexture=function(e,t,n=null,r=null,i=0,a=0){let o,s,c,l,u,d,f,p,m,h=e.isCompressedTexture?e.mipmaps[a]:e.image;if(n!==null)o=n.max.x-n.min.x,s=n.max.y-n.min.y,c=n.isBox3?n.max.z-n.min.z:1,l=n.min.x,u=n.min.y,d=n.isBox3?n.min.z:0;else{let t=2**-i;o=Math.floor(h.width*t),s=Math.floor(h.height*t),c=e.isDataArrayTexture?h.depth:e.isData3DTexture?Math.floor(h.depth*t):1,l=0,u=0,d=0}r===null?(f=0,p=0,m=0):(f=r.x,p=r.y,m=r.z);let g=He.convert(t.format),_=He.convert(t.type),v;t.isData3DTexture?(De.setTexture3D(t,0),v=I.TEXTURE_3D):t.isDataArrayTexture||t.isCompressedArrayTexture?(De.setTexture2DArray(t,0),v=I.TEXTURE_2D_ARRAY):(De.setTexture2D(t,0),v=I.TEXTURE_2D),L.activeTexture(I.TEXTURE0),L.pixelStorei(I.UNPACK_FLIP_Y_WEBGL,t.flipY),L.pixelStorei(I.UNPACK_PREMULTIPLY_ALPHA_WEBGL,t.premultiplyAlpha),L.pixelStorei(I.UNPACK_ALIGNMENT,t.unpackAlignment);let y=L.getParameter(I.UNPACK_ROW_LENGTH),b=L.getParameter(I.UNPACK_IMAGE_HEIGHT),x=L.getParameter(I.UNPACK_SKIP_PIXELS),S=L.getParameter(I.UNPACK_SKIP_ROWS),C=L.getParameter(I.UNPACK_SKIP_IMAGES);L.pixelStorei(I.UNPACK_ROW_LENGTH,h.width),L.pixelStorei(I.UNPACK_IMAGE_HEIGHT,h.height),L.pixelStorei(I.UNPACK_SKIP_PIXELS,l),L.pixelStorei(I.UNPACK_SKIP_ROWS,u),L.pixelStorei(I.UNPACK_SKIP_IMAGES,d);let w=e.isDataArrayTexture||e.isData3DTexture,T=t.isDataArrayTexture||t.isData3DTexture;if(e.isDepthTexture){let n=Ee.get(e),r=Ee.get(t),h=Ee.get(n.__renderTarget),g=Ee.get(r.__renderTarget);L.bindFramebuffer(I.READ_FRAMEBUFFER,h.__webglFramebuffer),L.bindFramebuffer(I.DRAW_FRAMEBUFFER,g.__webglFramebuffer);for(let n=0;n=0&&(x[r]=null,b[r].disconnect(n))}for(let t=0;t=x.length){x.push(n),r=e;break}else if(x[e]===null){x[e]=n,r=e;break}if(r===-1)break}let i=b[r];i&&i.connect(n)}}let ne=new J,re=new J;function ie(e,t,n){ne.setFromMatrixPosition(t.matrixWorld),re.setFromMatrixPosition(n.matrixWorld);let r=ne.distanceTo(re),i=t.projectionMatrix.elements,a=n.projectionMatrix.elements,o=i[14]/(i[10]-1),s=i[14]/(i[10]+1),c=(i[9]+1)/i[5],l=(i[9]-1)/i[5],u=(i[8]-1)/i[0],d=(a[8]+1)/a[0],f=o*u,p=o*d,m=r/(-u+d),h=m*-u;if(t.matrixWorld.decompose(e.position,e.quaternion,e.scale),e.translateX(h),e.translateZ(m),e.matrixWorld.compose(e.position,e.quaternion,e.scale),e.matrixWorldInverse.copy(e.matrixWorld).invert(),i[10]===-1)e.projectionMatrix.copy(t.projectionMatrix),e.projectionMatrixInverse.copy(t.projectionMatrixInverse);else{let t=o+m,n=s+m,i=f-h,a=p+(r-h),u=c*s/n*t,d=l*s/n*t;e.projectionMatrix.makePerspective(i,a,u,d,t,n),e.projectionMatrixInverse.copy(e.projectionMatrix).invert()}}function ae(e,t){t===null?e.matrixWorld.copy(e.matrix):e.matrixWorld.multiplyMatrices(t.matrixWorld,e.matrix),e.matrixWorldInverse.copy(e.matrixWorld).invert()}this.updateCamera=function(e){if(r===null)return;let t=e.near,n=e.far;h.texture!==null&&(h.depthNear>0&&(t=h.depthNear),h.depthFar>0&&(n=h.depthFar)),O.near=E.near=T.near=t,O.far=E.far=T.far=n,(k!==O.near||A!==O.far)&&(r.updateRenderState({depthNear:O.near,depthFar:O.far}),k=O.near,A=O.far),O.layers.mask=e.layers.mask|6,T.layers.mask=O.layers.mask&-5,E.layers.mask=O.layers.mask&-3;let i=e.parent,a=O.cameras;ae(O,i);for(let e=0;e0&&(e.alphaTest.value=r.alphaTest);let i=t.get(r),a=i.envMap,o=i.envMapRotation;a&&(e.envMap.value=a,e.envMapRotation.value.setFromMatrix4(KC.makeRotationFromEuler(o)).transpose(),a.isCubeTexture&&a.isRenderTargetTexture===!1&&e.envMapRotation.value.premultiply(qC),e.reflectivity.value=r.reflectivity,e.ior.value=r.ior,e.refractionRatio.value=r.refractionRatio),r.lightMap&&(e.lightMap.value=r.lightMap,e.lightMapIntensity.value=r.lightMapIntensity,n(r.lightMap,e.lightMapTransform)),r.aoMap&&(e.aoMap.value=r.aoMap,e.aoMapIntensity.value=r.aoMapIntensity,n(r.aoMap,e.aoMapTransform))}function o(e,t){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,t.map&&(e.map.value=t.map,n(t.map,e.mapTransform))}function s(e,t){e.dashSize.value=t.dashSize,e.totalSize.value=t.dashSize+t.gapSize,e.scale.value=t.scale}function c(e,t,r,i){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,e.size.value=t.size*r,e.scale.value=i*.5,t.map&&(e.map.value=t.map,n(t.map,e.uvTransform)),t.alphaMap&&(e.alphaMap.value=t.alphaMap,n(t.alphaMap,e.alphaMapTransform)),t.alphaTest>0&&(e.alphaTest.value=t.alphaTest)}function l(e,t){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,e.rotation.value=t.rotation,t.map&&(e.map.value=t.map,n(t.map,e.mapTransform)),t.alphaMap&&(e.alphaMap.value=t.alphaMap,n(t.alphaMap,e.alphaMapTransform)),t.alphaTest>0&&(e.alphaTest.value=t.alphaTest)}function u(e,t){e.specular.value.copy(t.specular),e.shininess.value=Math.max(t.shininess,1e-4)}function d(e,t){t.gradientMap&&(e.gradientMap.value=t.gradientMap)}function f(e,t){e.metalness.value=t.metalness,t.metalnessMap&&(e.metalnessMap.value=t.metalnessMap,n(t.metalnessMap,e.metalnessMapTransform)),e.roughness.value=t.roughness,t.roughnessMap&&(e.roughnessMap.value=t.roughnessMap,n(t.roughnessMap,e.roughnessMapTransform)),t.envMap&&(e.envMapIntensity.value=t.envMapIntensity)}function p(e,t,r){e.ior.value=t.ior,t.sheen>0&&(e.sheenColor.value.copy(t.sheenColor).multiplyScalar(t.sheen),e.sheenRoughness.value=t.sheenRoughness,t.sheenColorMap&&(e.sheenColorMap.value=t.sheenColorMap,n(t.sheenColorMap,e.sheenColorMapTransform)),t.sheenRoughnessMap&&(e.sheenRoughnessMap.value=t.sheenRoughnessMap,n(t.sheenRoughnessMap,e.sheenRoughnessMapTransform))),t.clearcoat>0&&(e.clearcoat.value=t.clearcoat,e.clearcoatRoughness.value=t.clearcoatRoughness,t.clearcoatMap&&(e.clearcoatMap.value=t.clearcoatMap,n(t.clearcoatMap,e.clearcoatMapTransform)),t.clearcoatRoughnessMap&&(e.clearcoatRoughnessMap.value=t.clearcoatRoughnessMap,n(t.clearcoatRoughnessMap,e.clearcoatRoughnessMapTransform)),t.clearcoatNormalMap&&(e.clearcoatNormalMap.value=t.clearcoatNormalMap,n(t.clearcoatNormalMap,e.clearcoatNormalMapTransform),e.clearcoatNormalScale.value.copy(t.clearcoatNormalScale),t.side===1&&e.clearcoatNormalScale.value.negate())),t.dispersion>0&&(e.dispersion.value=t.dispersion),t.retroreflectivity>0&&(e.retroreflectivity.value=t.retroreflectivity),t.iridescence>0&&(e.iridescence.value=t.iridescence,e.iridescenceIOR.value=t.iridescenceIOR,e.iridescenceThicknessMinimum.value=t.iridescenceThicknessRange[0],e.iridescenceThicknessMaximum.value=t.iridescenceThicknessRange[1],t.iridescenceMap&&(e.iridescenceMap.value=t.iridescenceMap,n(t.iridescenceMap,e.iridescenceMapTransform)),t.iridescenceThicknessMap&&(e.iridescenceThicknessMap.value=t.iridescenceThicknessMap,n(t.iridescenceThicknessMap,e.iridescenceThicknessMapTransform))),t.transmission>0&&(e.transmission.value=t.transmission,e.transmissionSamplerMap.value=r.texture,e.transmissionSamplerSize.value.set(r.width,r.height),t.transmissionMap&&(e.transmissionMap.value=t.transmissionMap,n(t.transmissionMap,e.transmissionMapTransform)),e.thickness.value=t.thickness,t.thicknessMap&&(e.thicknessMap.value=t.thicknessMap,n(t.thicknessMap,e.thicknessMapTransform)),e.attenuationDistance.value=t.attenuationDistance,e.attenuationColor.value.copy(t.attenuationColor)),t.anisotropy>0&&(e.anisotropyVector.value.set(t.anisotropy*Math.cos(t.anisotropyRotation),t.anisotropy*Math.sin(t.anisotropyRotation)),t.anisotropyMap&&(e.anisotropyMap.value=t.anisotropyMap,n(t.anisotropyMap,e.anisotropyMapTransform))),e.specularIntensity.value=t.specularIntensity,e.specularColor.value.copy(t.specularColor),t.specularColorMap&&(e.specularColorMap.value=t.specularColorMap,n(t.specularColorMap,e.specularColorMapTransform)),t.specularIntensityMap&&(e.specularIntensityMap.value=t.specularIntensityMap,n(t.specularIntensityMap,e.specularIntensityMapTransform))}function m(e,t){t.matcap&&(e.matcap.value=t.matcap)}function h(e,n){let r=t.get(n).light;e.referencePosition.value.setFromMatrixPosition(r.matrixWorld),e.nearDistance.value=r.shadow.camera.near,e.farDistance.value=r.shadow.camera.far}return{refreshFogUniforms:r,refreshMaterialUniforms:i}}function YC(e,t,n,r){let i={},a={},o=[],s=e.getParameter(e.MAX_UNIFORM_BUFFER_BINDINGS);function c(e,t){let n=t.program;r.uniformBlockBinding(e,n)}function l(e,n){let o=i[e.id];o===void 0&&(g(e),o=u(e),i[e.id]=o,e.addEventListener(`dispose`,v));let s=n.program;r.updateUBOMapping(e,s);let c=t.render.frame;a[e.id]!==c&&(f(e),a[e.id]=c)}function u(t){let n=d();t.__bindingPointIndex=n;let r=e.createBuffer(),i=t.__size,a=t.usage;return e.bindBuffer(e.UNIFORM_BUFFER,r),e.bufferData(e.UNIFORM_BUFFER,i,a),e.bindBuffer(e.UNIFORM_BUFFER,null),e.bindBufferBase(e.UNIFORM_BUFFER,n,r),r}function d(){for(let e=0;e0&&(n+=16-r),e.__size=n,e.__cache={},this}function _(e){let t={boundary:0,storage:0};return typeof e==`number`||typeof e==`boolean`?(t.boundary=4,t.storage=4):e.isVector2?(t.boundary=8,t.storage=8):e.isVector3||e.isColor?(t.boundary=16,t.storage=12):e.isVector4?(t.boundary=16,t.storage=16):e.isMatrix3?(t.boundary=48,t.storage=48):e.isMatrix4?(t.boundary=64,t.storage=64):e.isTexture?Yp(`WebGLRenderer: Texture samplers can not be part of an uniforms group.`):ArrayBuffer.isView(e)?(t.boundary=16,t.storage=e.byteLength):Yp(`WebGLRenderer: Unsupported uniform value type.`,e),t}function v(t){let n=t.target;n.removeEventListener(`dispose`,v);let r=o.indexOf(n.__bindingPointIndex);o.splice(r,1),e.deleteBuffer(i[n.id]),delete i[n.id],delete a[n.id]}function y(){for(let t in i)e.deleteBuffer(i[t]);o=[],i={},a={}}return{bind:c,update:l,dispose:y}}var XC=new Uint16Array([12469,15057,12620,14925,13266,14620,13807,14376,14323,13990,14545,13625,14713,13328,14840,12882,14931,12528,14996,12233,15039,11829,15066,11525,15080,11295,15085,10976,15082,10705,15073,10495,13880,14564,13898,14542,13977,14430,14158,14124,14393,13732,14556,13410,14702,12996,14814,12596,14891,12291,14937,11834,14957,11489,14958,11194,14943,10803,14921,10506,14893,10278,14858,9960,14484,14039,14487,14025,14499,13941,14524,13740,14574,13468,14654,13106,14743,12678,14818,12344,14867,11893,14889,11509,14893,11180,14881,10751,14852,10428,14812,10128,14765,9754,14712,9466,14764,13480,14764,13475,14766,13440,14766,13347,14769,13070,14786,12713,14816,12387,14844,11957,14860,11549,14868,11215,14855,10751,14825,10403,14782,10044,14729,9651,14666,9352,14599,9029,14967,12835,14966,12831,14963,12804,14954,12723,14936,12564,14917,12347,14900,11958,14886,11569,14878,11247,14859,10765,14828,10401,14784,10011,14727,9600,14660,9289,14586,8893,14508,8533,15111,12234,15110,12234,15104,12216,15092,12156,15067,12010,15028,11776,14981,11500,14942,11205,14902,10752,14861,10393,14812,9991,14752,9570,14682,9252,14603,8808,14519,8445,14431,8145,15209,11449,15208,11451,15202,11451,15190,11438,15163,11384,15117,11274,15055,10979,14994,10648,14932,10343,14871,9936,14803,9532,14729,9218,14645,8742,14556,8381,14461,8020,14365,7603,15273,10603,15272,10607,15267,10619,15256,10631,15231,10614,15182,10535,15118,10389,15042,10167,14963,9787,14883,9447,14800,9115,14710,8665,14615,8318,14514,7911,14411,7507,14279,7198,15314,9675,15313,9683,15309,9712,15298,9759,15277,9797,15229,9773,15166,9668,15084,9487,14995,9274,14898,8910,14800,8539,14697,8234,14590,7790,14479,7409,14367,7067,14178,6621,15337,8619,15337,8631,15333,8677,15325,8769,15305,8871,15264,8940,15202,8909,15119,8775,15022,8565,14916,8328,14804,8009,14688,7614,14569,7287,14448,6888,14321,6483,14088,6171,15350,7402,15350,7419,15347,7480,15340,7613,15322,7804,15287,7973,15229,8057,15148,8012,15046,7846,14933,7611,14810,7357,14682,7069,14552,6656,14421,6316,14251,5948,14007,5528,15356,5942,15356,5977,15353,6119,15348,6294,15332,6551,15302,6824,15249,7044,15171,7122,15070,7050,14949,6861,14818,6611,14679,6349,14538,6067,14398,5651,14189,5311,13935,4958,15359,4123,15359,4153,15356,4296,15353,4646,15338,5160,15311,5508,15263,5829,15188,6042,15088,6094,14966,6001,14826,5796,14678,5543,14527,5287,14377,4985,14133,4586,13869,4257,15360,1563,15360,1642,15358,2076,15354,2636,15341,3350,15317,4019,15273,4429,15203,4732,15105,4911,14981,4932,14836,4818,14679,4621,14517,4386,14359,4156,14083,3795,13808,3437,15360,122,15360,137,15358,285,15355,636,15344,1274,15322,2177,15281,2765,15215,3223,15120,3451,14995,3569,14846,3567,14681,3466,14511,3305,14344,3121,14037,2800,13753,2467,15360,0,15360,1,15359,21,15355,89,15346,253,15325,479,15287,796,15225,1148,15133,1492,15008,1749,14856,1882,14685,1886,14506,1783,14324,1608,13996,1398,13702,1183]),ZC=null;function QC(){return ZC===null&&(ZC=new h_(XC,16,16,Bf,Df),ZC.name=`DFG_LUT`,ZC.minFilter=_f,ZC.magFilter=_f,ZC.wrapS=ff,ZC.wrapT=ff,ZC.generateMipmaps=!1,ZC.needsUpdate=!0),ZC}var $C=class{constructor(e={}){let{canvas:t=Gp(),context:n=null,depth:r=!0,stencil:i=!1,alpha:a=!1,antialias:o=!1,premultipliedAlpha:s=!0,preserveDrawingBuffer:c=!1,powerPreference:l=`default`,failIfMajorPerformanceCaveat:u=!1,reversedDepthBuffer:d=!1,outputBufferType:f=bf}=e;this.isWebGLRenderer=!0;let p;if(n!==null){if(typeof WebGLRenderingContext<`u`&&n instanceof WebGLRenderingContext)throw Error(`THREE.WebGLRenderer: WebGL 1 is not supported since r163.`);p=n.getContextAttributes().alpha}else p=a;let m=f,h=new Set([Hf,Vf,zf]),g=new Set([bf,Tf,Cf,Af,Of,kf]),_=new Uint32Array(4),v=new Int32Array(4),y=new J,b=null,x=null,S=[],C=[],w=null;this.domElement=t,this.debug={checkShaderErrors:!0,diagnostics:{keywords:!1},onShaderError:null},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.toneMapping=0,this.toneMappingExposure=1,this.transmissionResolutionScale=1;let T=this,E=!1,D=null,O=null,k=null,A=null;this._outputColorSpace=Pp;let j=0,ee=0,te=null,ne=-1,re=null,ie=new Km,ae=new Km,M=null,oe=new Y(0),se=0,ce=t.width,le=t.height,ue=1,N=null,de=null,fe=new Km(0,0,ce,le),pe=new Km(0,0,ce,le),me=!1,he=new j_,P=!1,ge=!1,_e=new Zm,ve=new J,ye=new Km,be={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0},xe=!1;function F(){return te===null?ue:1}let I=n;function L(e,n){return t.getContext(e,n)}let Se,Ce,R,we,Te,Ee,De,Oe,ke,Ae,je,Me,Ne,Pe,Fe,Ie,Le,Re,ze,Be,Ve,He,Ue;try{let e={alpha:!0,depth:r,stencil:i,antialias:o,premultipliedAlpha:s,preserveDrawingBuffer:c,powerPreference:l,failIfMajorPerformanceCaveat:u};if(`setAttribute`in t&&t.setAttribute(`data-engine`,`three.js r186`),t.addEventListener(`webglcontextlost`,Ke,!1),t.addEventListener(`webglcontextrestored`,qe,!1),t.addEventListener(`webglcontextcreationerror`,Je,!1),I===null){let t=`webgl2`;if(I=L(t,e),I===null)throw L(t)?Error(`THREE.WebGLRenderer: Error creating WebGL context with your selected attributes.`):Error(`THREE.WebGLRenderer: Error creating WebGL context.`)}We()}catch(e){throw t.removeEventListener(`webglcontextlost`,Ke,!1),t.removeEventListener(`webglcontextrestored`,qe,!1),t.removeEventListener(`webglcontextcreationerror`,Je,!1),Xp(`WebGLRenderer: `+e.message),e}function We(){Se=new _x(I),Se.init(),Ve=new VC(I,Se),Ce=new Kb(I,Se,e,Ve),R=new zC(I,Se),Ce.reversedDepthBuffer&&d&&R.buffers.depth.setReversed(!0),O=I.createFramebuffer(),k=I.createFramebuffer(),A=I.createFramebuffer(),we=new bx(I),Te=new yC,Ee=new BC(I,Se,R,Te,Ce,Ve,we),De=new gx(T),Oe=new Lb(I),He=new Wb(I,Oe),ke=new vx(I,Oe,we,He),Ae=new Sx(I,ke,Oe,He,we),Re=new xx(I,Ce,Ee),Fe=new qb(Te),je=new vC(T,De,Se,Ce,He,Fe),Me=new JC(T,Te),Ne=new CC,Pe=new AC(Se),Le=new Ub(T,De,R,Ae,p,s),Ie=new RC(T,Ae,Ce),Ue=new YC(I,we,Ce,R),ze=new Gb(I,Se,we),Be=new yx(I,Se,we),we.programs=je.programs,T.capabilities=Ce,T.extensions=Se,T.properties=Te,T.renderLists=Ne,T.shadowMap=Ie,T.state=R,T.info=we}m!==1009&&(w=new wx(m,t.width,t.height,o,r,i));let Ge=new GC(T,I);this.xr=Ge,this.getContext=function(){return I},this.getContextAttributes=function(){return I.getContextAttributes()},this.forceContextLoss=function(){let e=Se.get(`WEBGL_lose_context`);e&&e.loseContext()},this.forceContextRestore=function(){let e=Se.get(`WEBGL_lose_context`);e&&e.restoreContext()},this.getPixelRatio=function(){return ue},this.setPixelRatio=function(e){e!==void 0&&(ue=e,this.setSize(ce,le,!1))},this.getSize=function(e){return e.set(ce,le)},this.setSize=function(e,n,r=!0){if(Ge.isPresenting){Yp(`WebGLRenderer: Can't change size while VR device is presenting.`);return}ce=e,le=n,t.width=Math.floor(e*ue),t.height=Math.floor(n*ue),r===!0&&(t.style.width=e+`px`,t.style.height=n+`px`),w!==null&&w.setSize(t.width,t.height),this.setViewport(0,0,e,n)},this.getDrawingBufferSize=function(e){return e.set(ce*ue,le*ue).floor()},this.setDrawingBufferSize=function(e,n,r){ce=e,le=n,ue=r,t.width=Math.floor(e*r),t.height=Math.floor(n*r),this.setViewport(0,0,e,n)},this.setEffects=function(e){if(m===1009){Xp(`WebGLRenderer: setEffects() requires outputBufferType set to HalfFloatType or FloatType.`);return}if(e){for(let t=0;t{function n(){if(r.forEach(function(e){let t=Te.get(e).currentProgram;(t===void 0||t.isReady())&&r.delete(e)}),r.size===0){t(e);return}setTimeout(n,10)}Se.get(`KHR_parallel_shader_compile`)===null?setTimeout(n,10):n()})};let $e=null;function et(e){$e&&$e(e)}function tt(){rt.stop()}function nt(){rt.start()}let rt=new Ib;rt.setAnimationLoop(et),typeof self<`u`&&rt.setContext(self),this.setAnimationLoop=function(e){$e=e,Ge.setAnimationLoop(e),e===null?rt.stop():rt.start()},Ge.addEventListener(`sessionstart`,tt),Ge.addEventListener(`sessionend`,nt),this.render=function(e,t){if(t!==void 0&&t.isCamera!==!0){Xp(`WebGLRenderer.render: camera is not an instance of THREE.Camera.`);return}if(E===!0)return;D!==null&&D.renderStart(e,t);let n=Ge.enabled===!0&&Ge.isPresenting===!0,r=w!==null&&(te===null||n)&&w.begin(T,te);if(e.matrixWorldAutoUpdate===!0&&e.updateMatrixWorld(),t.parent===null&&t.matrixWorldAutoUpdate===!0&&t.updateMatrixWorld(),Ge.enabled===!0&&Ge.isPresenting===!0&&(w===null||w.isCompositing()===!1)&&(Ge.cameraAutoUpdate===!0&&Ge.updateCamera(t),t=Ge.getCamera()),e.isScene===!0&&e.onBeforeRender(T,e,t,te),x=Pe.get(e,C.length),x.init(t),x.state.textureUnits=Ee.getTextureUnits(),C.push(x),_e.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse),he.setFromProjectionMatrix(_e,Vp,t.reversedDepth),ge=this.localClippingEnabled,P=Fe.init(this.clippingPlanes,ge),b=Ne.get(e,S.length),b.init(),S.push(b),Ge.enabled===!0&&Ge.isPresenting===!0){let e=T.xr.getDepthSensingMesh();e!==null&&it(e,t,-1/0,T.sortObjects)}it(e,t,0,T.sortObjects),b.finish(),D!==null&&D.updateLights(x.state.lightsArray),T.sortObjects===!0&&b.sort(N,de),xe=Ge.enabled===!1||Ge.isPresenting===!1||Ge.hasDepthSensing()===!1,xe&&Le.addToRenderList(b,e),this.info.render.frame++,this.info.autoReset===!0&&this.info.reset(),P===!0&&Fe.beginShadows();let i=x.state.shadowsArray;if(Ie.render(i,e,t),P===!0&&Fe.endShadows(),(r&&w.hasRenderPass())===!1){let n=b.opaque,r=b.transmissive;if(x.setupLights(),t.isArrayCamera){let i=t.cameras;if(r.length>0)for(let t=0,a=i.length;t0&&ot(n,r,e,t),xe&&Le.render(e),at(b,e,t)}te!==null&&ee===0&&(Ee.updateMultisampleRenderTarget(te),Ee.updateRenderTargetMipmap(te)),r&&w.end(T),e.isScene===!0&&e.onAfterRender(T,e,t),He.resetDefaultState(),ne=-1,re=null,C.pop(),C.length>0?(x=C[C.length-1],Ee.setTextureUnits(x.state.textureUnits),P===!0&&Fe.setGlobalState(T.clippingPlanes,x.state.camera)):x=null,S.pop(),b=S.length>0?S[S.length-1]:null,D!==null&&D.renderEnd()};function it(e,t,n,r){if(e.visible===!1)return;if(e.layers.test(t.layers)){if(e.isGroup)n=e.renderOrder;else if(e.isLOD)e.autoUpdate===!0&&e.update(t);else if(e.isLightProbeGrid)x.pushLightProbeGrid(e);else if(e.isLight)x.pushLight(e),e.castShadow&&x.pushShadow(e);else if(e.isSprite){if(!e.frustumCulled||e.intersectsFrustum(he)){r&&ye.setFromMatrixPosition(e.matrixWorld).applyMatrix4(_e);let i=Ae.update(e),a=e.material;a.visible&&b.push(e,i,a,n,ye.z,null,t)}}else if((e.isMesh||e.isLine||e.isPoints)&&(!e.frustumCulled||e.intersectsFrustum(he))){let i=Ae.update(e),a=e.material;if(r&&(e.boundingSphere===void 0?(i.boundingSphere===null&&i.computeBoundingSphere(),ye.copy(i.boundingSphere.center)):(e.boundingSphere===null&&e.computeBoundingSphere(),ye.copy(e.boundingSphere.center)),ye.applyMatrix4(e.matrixWorld).applyMatrix4(_e)),Array.isArray(a)){let r=i.groups;for(let o=0,s=r.length;o0&&st(i,t,n),a.length>0&&st(a,t,n),o.length>0&&st(o,t,n),R.buffers.depth.setTest(!0),R.buffers.depth.setMask(!0),R.buffers.color.setMask(!0),R.setPolygonOffset(!1)}function ot(e,t,n,r){if((n.isScene===!0?n.overrideMaterial:null)!==null)return;if(x.state.transmissionRenderTarget[r.id]===void 0){let e=Se.has(`EXT_color_buffer_half_float`)||Se.has(`EXT_color_buffer_float`);x.state.transmissionRenderTarget[r.id]=new Jm(1,1,{generateMipmaps:!0,type:e?Df:bf,minFilter:yf,samples:Math.max(4,Ce.samples),stencilBuffer:i,resolveDepthBuffer:!1,resolveStencilBuffer:!1,storeMultisampledDepthBuffer:!1,storeMultisampledStencilBuffer:!1,colorSpace:Fm.workingColorSpace})}let a=x.state.transmissionRenderTarget[r.id],o=r.viewport||ie;a.setSize(o.z*T.transmissionResolutionScale,o.w*T.transmissionResolutionScale);let s=T.getRenderTarget(),c=T.getActiveCubeFace(),l=T.getActiveMipmapLevel();T.setRenderTarget(a),T.getClearColor(oe),se=T.getClearAlpha(),se<1&&T.setClearColor(16777215,.5),T.clear(),xe&&Le.render(n);let u=T.toneMapping;T.toneMapping=0;let d=r.viewport;if(r.viewport!==void 0&&(r.viewport=void 0),x.setupLightsView(r),P===!0&&Fe.setGlobalState(T.clippingPlanes,r),st(e,n,r),Ee.updateMultisampleRenderTarget(a),Ee.updateRenderTargetMipmap(a),Se.has(`WEBGL_multisampled_render_to_texture`)===!1){let e=!1;for(let i=0,a=t.length;i0,r.currentProgram=d,r.uniformsList=null,d}function ut(e){if(e.uniformsList===null){let t=e.currentProgram.getUniforms();e.uniformsList=jS.seqWithValue(t.seq,e.uniforms)}return e.uniformsList}function dt(e,t){let n=Te.get(e);n.outputColorSpace=t.outputColorSpace,n.batching=t.batching,n.batchingColor=t.batchingColor,n.instancing=t.instancing,n.instancingColor=t.instancingColor,n.instancingMorph=t.instancingMorph,n.skinning=t.skinning,n.morphTargets=t.morphTargets,n.morphNormals=t.morphNormals,n.morphColors=t.morphColors,n.morphTargetsCount=t.morphTargetsCount,n.numClippingPlanes=t.numClippingPlanes,n.numIntersection=t.numClipIntersection,n.vertexAlphas=t.vertexAlphas,n.vertexTangents=t.vertexTangents,n.toneMapping=t.toneMapping}function ft(e,t){if(e.length===0)return null;if(e.length===1)return e[0].texture===null?null:e[0];y.setFromMatrixPosition(t.matrixWorld);for(let t=0,n=e.length;t0),f=!!n.morphAttributes.position,p=!!n.morphAttributes.normal,m=!!n.morphAttributes.color,h=0;r.toneMapped&&(te===null||te.isXRRenderTarget===!0)&&(h=T.toneMapping);let g=n.morphAttributes.position||n.morphAttributes.normal||n.morphAttributes.color,_=g===void 0?0:g.length,v=Te.get(r),y=x.state.lights;if(P===!0&&(ge===!0||e!==re)){let t=e===re&&r.id===ne;Fe.setState(r,e,t)}let b=!1;r.version===v.__version?v.needsLights&&v.lightsStateVersion!==y.state.version?b=!0:v.outputColorSpace===s?i.isBatchedMesh&&v.batching===!1||!i.isBatchedMesh&&v.batching===!0||i.isBatchedMesh&&v.batchingColor===!0&&i._colorsTexture===null||i.isBatchedMesh&&v.batchingColor===!1&&i._colorsTexture!==null||i.isInstancedMesh&&v.instancing===!1||!i.isInstancedMesh&&v.instancing===!0||i.isSkinnedMesh&&v.skinning===!1||!i.isSkinnedMesh&&v.skinning===!0||i.isInstancedMesh&&v.instancingColor===!0&&i.instanceColor===null||i.isInstancedMesh&&v.instancingColor===!1&&i.instanceColor!==null||i.isInstancedMesh&&v.instancingMorph===!0&&i.morphTexture===null||i.isInstancedMesh&&v.instancingMorph===!1&&i.morphTexture!==null?b=!0:v.envMap===l?r.fog===!0&&v.fog!==a||v.numClippingPlanes!==void 0&&(v.numClippingPlanes!==Fe.numPlanes||v.numIntersection!==Fe.numIntersection)?b=!0:v.vertexAlphas===u&&v.vertexTangents===d&&v.morphTargets===f&&v.morphNormals===p&&v.morphColors===m&&v.toneMapping===h&&v.morphTargetsCount===_?!!v.lightProbeGrid!=x.state.lightProbeGridArray.length>0&&(b=!0):b=!0:b=!0:b=!0:(b=!0,v.__version=r.version);let S=v.currentProgram;b===!0&&(S=lt(r,t,i),D&&r.isNodeMaterial&&D.onUpdateProgram(r,S,v));let C=!1,w=!1,E=!1,O=S.getUniforms(),k=v.uniforms;if(R.useProgram(S.program)&&(C=!0,w=!0,E=!0),r.id!==ne&&(ne=r.id,w=!0),v.needsLights){let e=ft(x.state.lightProbeGridArray,i);v.lightProbeGrid!==e&&(v.lightProbeGrid=e,w=!0)}if(C||re!==e){R.buffers.depth.getReversed()&&e.reversedDepth!==!0&&(e._reversedDepth=!0,e.updateProjectionMatrix()),O.setValue(I,`projectionMatrix`,e.projectionMatrix),O.setValue(I,`viewMatrix`,e.matrixWorldInverse);let t=O.map.cameraPosition;t!==void 0&&t.setValue(I,ve.setFromMatrixPosition(e.matrixWorld)),Ce.logarithmicDepthBuffer&&O.setValue(I,`logDepthBufFC`,2/(Math.log(e.far+1)/Math.LN2)),(r.isMeshPhongMaterial||r.isMeshToonMaterial||r.isMeshLambertMaterial||r.isMeshBasicMaterial||r.isMeshStandardMaterial||r.isShaderMaterial)&&O.setValue(I,`isOrthographic`,e.isOrthographicCamera===!0),re!==e&&(re=e,w=!0,E=!0)}if(v.needsLights&&(y.state.sunShadowMap.length>0&&O.setValue(I,`sunShadowMap`,y.state.sunShadowMap,Ee),y.state.directionalShadowMap.length>0&&O.setValue(I,`directionalShadowMap`,y.state.directionalShadowMap,Ee),y.state.spotShadowMap.length>0&&O.setValue(I,`spotShadowMap`,y.state.spotShadowMap,Ee),y.state.pointShadowMap.length>0&&O.setValue(I,`pointShadowMap`,y.state.pointShadowMap,Ee)),i.isSkinnedMesh){O.setOptional(I,i,`bindMatrix`),O.setOptional(I,i,`bindMatrixInverse`);let e=i.skeleton;e&&(e.boneTexture===null&&e.computeBoneTexture(),O.setValue(I,`boneTexture`,e.boneTexture,Ee))}i.isBatchedMesh&&(O.setOptional(I,i,`batchingTexture`),O.setValue(I,`batchingTexture`,i._matricesTexture,Ee),O.setOptional(I,i,`batchingIdTexture`),O.setValue(I,`batchingIdTexture`,i._indirectTexture,Ee),O.setOptional(I,i,`batchingColorTexture`),i._colorsTexture!==null&&O.setValue(I,`batchingColorTexture`,i._colorsTexture,Ee));let A=n.morphAttributes;if((A.position!==void 0||A.normal!==void 0||A.color!==void 0)&&Re.update(i,n,S),(w||v.receiveShadow!==i.receiveShadow)&&(v.receiveShadow=i.receiveShadow,O.setValue(I,`receiveShadow`,i.receiveShadow)),(r.isMeshStandardMaterial||r.isMeshLambertMaterial||r.isMeshPhongMaterial)&&r.envMap===null&&t.environment!==null&&(k.envMapIntensity.value=t.environmentIntensity),k.dfgLUT!==void 0&&(k.dfgLUT.value=QC()),w){if(O.setValue(I,`toneMappingExposure`,T.toneMappingExposure),v.needsLights&&mt(k,E),a&&r.fog===!0&&Me.refreshFogUniforms(k,a),Me.refreshMaterialUniforms(k,r,ue,le,x.state.transmissionRenderTarget[e.id]),v.needsLights&&v.lightProbeGrid){let e=v.lightProbeGrid;k.probesSH.value=e.texture,k.probesMin.value.copy(e.boundingBox.min),k.probesMax.value.copy(e.boundingBox.max),k.probesResolution.value.copy(e.resolution)}jS.upload(I,ut(v),k,Ee)}if(r.isShaderMaterial&&r.uniformsNeedUpdate===!0&&(jS.upload(I,ut(v),k,Ee),r.uniformsNeedUpdate=!1),r.isSpriteMaterial&&O.setValue(I,`center`,i.center),O.setValue(I,`modelViewMatrix`,i.modelViewMatrix),O.setValue(I,`normalMatrix`,i.normalMatrix),O.setValue(I,`modelMatrix`,i.matrixWorld),r.uniformsGroups!==void 0){let e=r.uniformsGroups;for(let t=0,n=e.length;t0&&Ee.useMultisampledRTT(e)===!1?Te.get(e).__webglMultisampledFramebuffer:Array.isArray(c)?c[n]:c,ie.copy(e.viewport),ae.copy(e.scissor),M=e.scissorTest}else ie.copy(fe).multiplyScalar(ue).floor(),ae.copy(pe).multiplyScalar(ue).floor(),M=me;if(n!==0&&(r=O),R.bindFramebuffer(I.FRAMEBUFFER,r)&&R.drawBuffers(e,r),R.viewport(ie),R.scissor(ae),R.setScissorTest(M),i){let r=Te.get(e.texture);I.framebufferTexture2D(I.FRAMEBUFFER,I.COLOR_ATTACHMENT0,I.TEXTURE_CUBE_MAP_POSITIVE_X+t,r.__webglTexture,n)}else if(a){let r=t;for(let t=0;t1&&I.readBuffer(I.COLOR_ATTACHMENT0+s);let u=gt(o);if(u.__formatReadable===!1){Xp(`WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.`);return}if(u.__typeReadable===!1){Xp(`WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.`);return}t>=0&&t<=e.width-r&&n>=0&&n<=e.height-i&&I.readPixels(t,n,r,i,Ve.convert(c),Ve.convert(l),a)}finally{let e=te===null?null:Te.get(te).__webglFramebuffer;R.bindFramebuffer(I.FRAMEBUFFER,e)}}},this.readRenderTargetPixelsAsync=async function(e,t,n,r,i,a,o,s=0){if(!(e&&e.isWebGLRenderTarget))throw Error(`THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.`);let c=Te.get(e).__webglFramebuffer;if(e.isWebGLCubeRenderTarget&&o!==void 0&&(c=c[o]),c)if(t>=0&&t<=e.width-r&&n>=0&&n<=e.height-i){R.bindFramebuffer(I.FRAMEBUFFER,c);let o=e.textures[s],l=o.format,u=o.type;e.textures.length>1&&I.readBuffer(I.COLOR_ATTACHMENT0+s);let d=gt(o);if(d.__formatReadable===!1)throw Error(`THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.`);if(d.__typeReadable===!1)throw Error(`THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.`);let f=I.createBuffer();I.bindBuffer(I.PIXEL_PACK_BUFFER,f),I.bufferData(I.PIXEL_PACK_BUFFER,a.byteLength,I.STREAM_READ),I.readPixels(t,n,r,i,Ve.convert(l),Ve.convert(u),0),I.bindBuffer(I.PIXEL_PACK_BUFFER,null);let p=te===null?null:Te.get(te).__webglFramebuffer;R.bindFramebuffer(I.FRAMEBUFFER,p);let m=I.fenceSync(I.SYNC_GPU_COMMANDS_COMPLETE,0);return I.flush(),await Qp(I,m,4),I.bindBuffer(I.PIXEL_PACK_BUFFER,f),I.getBufferSubData(I.PIXEL_PACK_BUFFER,0,a),I.bindBuffer(I.PIXEL_PACK_BUFFER,null),I.deleteBuffer(f),I.deleteSync(m),a}else throw Error(`THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.`)},this.copyFramebufferToTexture=function(e,t=null,n=0){let r=2**-n,i=Math.floor(e.image.width*r),a=Math.floor(e.image.height*r),o=t===null?0:t.x,s=t===null?0:t.y;Ee.setTexture2D(e,0),I.copyTexSubImage2D(I.TEXTURE_2D,n,0,0,o,s,i,a),R.unbindTexture()},this.copyTextureToTexture=function(e,t,n=null,r=null,i=0,a=0){let o,s,c,l,u,d,f,p,m,h=e.isCompressedTexture?e.mipmaps[a]:e.image;if(n!==null)o=n.max.x-n.min.x,s=n.max.y-n.min.y,c=n.isBox3?n.max.z-n.min.z:1,l=n.min.x,u=n.min.y,d=n.isBox3?n.min.z:0;else{let t=2**-i;o=Math.floor(h.width*t),s=Math.floor(h.height*t),c=e.isDataArrayTexture?h.depth:e.isData3DTexture?Math.floor(h.depth*t):1,l=0,u=0,d=0}r===null?(f=0,p=0,m=0):(f=r.x,p=r.y,m=r.z);let g=Ve.convert(t.format),_=Ve.convert(t.type),v;t.isData3DTexture?(Ee.setTexture3D(t,0),v=I.TEXTURE_3D):t.isDataArrayTexture||t.isCompressedArrayTexture?(Ee.setTexture2DArray(t,0),v=I.TEXTURE_2D_ARRAY):(Ee.setTexture2D(t,0),v=I.TEXTURE_2D),R.activeTexture(I.TEXTURE0),R.pixelStorei(I.UNPACK_FLIP_Y_WEBGL,t.flipY),R.pixelStorei(I.UNPACK_PREMULTIPLY_ALPHA_WEBGL,t.premultiplyAlpha),R.pixelStorei(I.UNPACK_ALIGNMENT,t.unpackAlignment);let y=R.getParameter(I.UNPACK_ROW_LENGTH),b=R.getParameter(I.UNPACK_IMAGE_HEIGHT),x=R.getParameter(I.UNPACK_SKIP_PIXELS),S=R.getParameter(I.UNPACK_SKIP_ROWS),C=R.getParameter(I.UNPACK_SKIP_IMAGES);R.pixelStorei(I.UNPACK_ROW_LENGTH,h.width),R.pixelStorei(I.UNPACK_IMAGE_HEIGHT,h.height),R.pixelStorei(I.UNPACK_SKIP_PIXELS,l),R.pixelStorei(I.UNPACK_SKIP_ROWS,u),R.pixelStorei(I.UNPACK_SKIP_IMAGES,d);let w=e.isDataArrayTexture||e.isData3DTexture,T=t.isDataArrayTexture||t.isData3DTexture;if(e.isDepthTexture){let n=Te.get(e),r=Te.get(t),h=Te.get(n.__renderTarget),g=Te.get(r.__renderTarget);R.bindFramebuffer(I.READ_FRAMEBUFFER,h.__webglFramebuffer),R.bindFramebuffer(I.DRAW_FRAMEBUFFER,g.__webglFramebuffer);for(let n=0;n0||e.is_downed||e.clinch_ticks>0||e.clinch_startup_ticks>0||e.taunt_ticks>0||e.is_foul_recovery_target||[`slip_left`,`slip_right`,`weave`,`pull`].includes(e.defense)}function iw(e,t,n={x:0,y:0,speed:0},r=0){let i=Math.max(2,Math.floor(YC*$C(e.conditioning,e.trauma.body)/100)),a=e.stunned_ticks-r,o=i;a>1?o=Math.max(2,Math.floor(i*O/100)):a<=0&&(t.defense===`guard_high`||t.defense===`guard_low`)&&(o=Math.max(2,Math.floor(i*XC/100))),o*=oe(e.style).moveSpeedPercent/100;let s=Math.hypot(t.moveX,t.moveY),c=s>1e3?1e3/s:1;return n.x=t.moveX*c*o/1e3,n.y=t.moveY*c*o/1e3,n.speed=o,n}function aw(e,t,n){return e.kind===`parry`&&e.target_id===t?Math.max(n,e.tick+e.amount):n}function ow(e,t,n){let r=e.stunned_ticks>0||e.action_id!==null&&e.action_id===n.cutActionId?0:Math.max(0,nw(e,t)-1),i=e.stunned_ticks>0?Math.min((n.rootedUntil??0)-t,e.stunned_ticks)-1:0;return Math.max(r,i)}function sw(e,t,n,r,i={}){if(n<=0||rw(e))return{dx:0,dy:0};let a=r===void 0?e.action===null?0:1/0:ow(e,r,i);if(a>=n)return{dx:0,dy:0};let o=e.velocity_x,s=e.velocity_y,c=0,l=0,u=Math.floor(n),d=n-u;for(let e=0;e=a,r=t(e);o=(o+(n?r.x:0))/2,s=(s+(n?r.y:0))/2;let i=Math.hypot(o,s);i>r.speed&&(o=o/i*r.speed,s=s/i*r.speed),c+=o,l+=s}if(d>0){let e=u>=a,n=t(u);c+=(o+(e?n.x:0))/2*d,l+=(s+(e?n.y:0))/2*d}return{dx:c,dy:l}}var cw=1e3,lw=2.5,uw=class{history=[];offset={dx:0,dy:0};mean={x:0,y:0,speed:0};sample={x:0,y:0,speed:0};horizon=null;holds={rootedUntil:0,cutActionId:null};observe(e,t){this.holds.rootedUntil=aw(e,t,this.holds.rootedUntil)}update(e,t,n,r,i,a,o,s){for(this.history.push({at:r,held:n?{...t,moveX:0,moveY:0}:t});this.history.length>2&&this.history[1].at0&&e.action_id!==null&&(this.holds.cutActionId=e.action_id),e!==null){let t=1e3/s,n=this.horizon;c=sw(e,i=>this.meanIntent(e,i,r-(n-1-i)*t,t),n,a,this.holds)}let l=lw*YC*s*o,u=c.dx-this.offset.dx,d=c.dy-this.offset.dy,f=Math.hypot(u,d),p=f>l?l/f:1;return this.offset.dx+=u*p,this.offset.dy+=d*p,{dx:this.offset.dx,dy:this.offset.dy}}meanIntent(e,t,n,r){let i=n-r/2,a=n+r/2,o=this.mean;o.x=0,o.y=0,o.speed=0;for(let n=0;nr?{x:i*(m-r),y:a*r}:h>n?{x:i*n,y:a*(m-n)}:{x:i*h,y:a*g}}function fw(e,t,n){let r=e.x+t.dx,i=e.y+t.dy;if(n!==null){let t=Math.min(QC,Math.hypot(e.x-n.x,e.y-n.y)),a=r-n.x,o=i-n.y,s=Math.hypot(a,o);s1e-9?(r=n.x+a/s*t,i=n.y+o/s*t):(r=e.x,i=e.y))}let a=dw(r,i);return{dx:a.x-e.x,dy:a.y-e.y}}function pw(e){return e===`slip_left`||e===`slip_right`||e===`weave`||e===`pull`}function mw(e,t,n){return e.stunned_ticks>0||e.taunt_ticks>0||e.clinch_ticks>0?e.defense:n===null?pw(e.defense)?e.defense:t.defense:n}var hw=class{kind=null;id=``;pressedAt=0;until=0;ticks=10;sequence=null;started=!1;press(e,t,n,r,i,a=10){this.kind=e,this.id=t,this.pressedAt=n,this.ticks=a,this.until=n+(Math.max(0,r)+a)*1e3/i,this.sequence=null,this.started=!1}acknowledge(e,t,n){if(this.kind===null)return;this.sequence??=n?.(this.id)??null,e.defense===this.kind&&(this.started=!0);let r=!t||e.stunned_ticks>0||e.clinch_ticks>0,i=!this.started&&this.sequence!==null&&e.last_input_sequence>=this.sequence&&e.queued_actions===0;(r||i)&&(this.kind=null)}pose(e){return this.kind!==null&&e>=this.until&&(this.kind=null),this.kind}holdsFeet(e,t){return this.kind!==null&&e{let r=new e.array.constructor(e.count*e.itemSize);l[n][t]=new e.constructor(r,e.itemSize,e.normalized)}))}let p=t*.5,m=10**Math.log10(1/t),h=p*m;for(let t=0;te*t,z:e=>-e*n}}var Dw={blue:1920728,red:12131356,neutral:15067115},Ow=[{radius:8.2,y:-.55,count:120,scale:1},{radius:10.6,y:.35,count:150,scale:1.04},{radius:13.2,y:1.35,count:180,scale:1.08},{radius:16,y:2.45,count:210,scale:1.12}],kw=.95,Aw=.42,jw=[3819104,5915960,3493980,6963002,4612159,5524835,7233348,9076852,4678266,7620714,10107450,11843778,3104688,11573822,2303534,2303534],Mw=[13081462,9067067,7225640,14726287,5517341,11105359],Nw=[1380364,2759442,4862496,7035464,9341572,11569742],Pw=.9,Fw=.235,Iw=-.35,Lw=-2.7,Rw=.32,zw=.26,Bw=6.2,Vw=.3;function Hw(e,t,n=Bw){return t>0&&Math.hypot(e,t)>n&&Math.abs(Math.atan2(e,t))<.3}var Uw=` + }`},pw=class extends tw{constructor(){super(),this.isOutputPass=!0,this.uniforms=Jv.clone(fw.uniforms),this.material=new Qv({name:fw.name,uniforms:this.uniforms,vertexShader:fw.vertexShader,fragmentShader:fw.fragmentShader}),this._fsQuad=new iw(this.material),this._outputColorSpace=null,this._toneMapping=null}render(e,t,n){this.uniforms.tDiffuse.value=n.texture,this.uniforms.toneMappingExposure.value=e.toneMappingExposure,(this._outputColorSpace!==e.outputColorSpace||this._toneMapping!==e.toneMapping)&&(this._outputColorSpace=e.outputColorSpace,this._toneMapping=e.toneMapping,this.material.defines={},Fm.getTransfer(this._outputColorSpace)===`srgb`&&(this.material.defines.SRGB_TRANSFER=``),this._toneMapping===1?this.material.defines.LINEAR_TONE_MAPPING=``:this._toneMapping===2?this.material.defines.REINHARD_TONE_MAPPING=``:this._toneMapping===3?this.material.defines.CINEON_TONE_MAPPING=``:this._toneMapping===4?this.material.defines.ACES_FILMIC_TONE_MAPPING=``:this._toneMapping===6?this.material.defines.AGX_TONE_MAPPING=``:this._toneMapping===7?this.material.defines.NEUTRAL_TONE_MAPPING=``:this._toneMapping===5&&(this.material.defines.CUSTOM_TONE_MAPPING=``),this.material.needsUpdate=!0),this.renderToScreen===!0?(e.setRenderTarget(null),this._fsQuad.render(e)):(e.setRenderTarget(t),this.clear&&e.clear(e.autoClearColor,e.autoClearDepth,e.autoClearStencil),this._fsQuad.render(e))}dispose(){this.material.dispose(),this._fsQuad.dispose()}},mw=70,hw=1e3,gw=f*2;function _w(e,t){return Math.max(65,100-Math.floor((hw-e)/30)-Math.floor(t/50))}function vw(e,t,n){if(e.action===null||!T(e.action,t.class))return!1;let r=e.action_startup_ticks+e.action_active_ticks+e.action_recovery_ticks;return n-e.action_start_tick0||e.clinch_startup_ticks>0||e.taunt_ticks>0||e.is_foul_recovery_target}function Sw(e,t,n={x:0,y:0,speed:0},r=0){let i=Math.max(2,Math.floor(g*_w(e.conditioning,e.trauma.body)/100)),a=e.stunned_ticks-r,o=i;a>1?o=Math.max(2,Math.floor(i*ae/100)):a<=0&&(t.defense===`guard_high`||t.defense===`guard_low`)&&(o=Math.max(2,Math.floor(i*mw/100))),o*=N(e.style).moveSpeedPercent/100;let s=Math.hypot(t.moveX,t.moveY),c=s>1e3?1e3/s:1;return n.x=t.moveX*c*o/1e3,n.y=t.moveY*c*o/1e3,n.speed=o,n}function Cw(e,t,n){return e.kind===`parry`&&e.target_id===t?Math.max(n,e.tick+e.amount):n}function ww(e,t,n){return e.kind===`defense`&&e.actor_id===t&&Lw(e.detail)?Math.max(n??e.tick,e.tick):n}function Tw(e,t){if(e.stunned_ticks>0||e.action_id!==null&&e.action_id===t.cutActionId)return!0;let n=t.evasionFrom;if(n===void 0||e.action===null)return!1;let r=e.action_start_tick+e.action_startup_ticks+e.action_active_ticks;return n>=r&&n=n&&t0?Math.min((n.rootedUntil??0)-t,e.stunned_ticks)-1:0;return Math.max(r,i)}function Ow(e,t,n){if(!Lw(e.defense))return 0;let r=n.evasionFrom;return t===void 0||r===void 0||r>t?null:Math.max(0,r+y+N(e.style).evasionTicks-t-1)}function kw(e,t,n){if(e.queued_actions===0)return 1/0;if(t===void 0)return 0;if(e.action!==null&&!Tw(e,n)){let n=e.action_start_tick+e.action_startup_ticks+e.action_active_ticks+e.action_recovery_ticks-t-1;if(n>0)return n}return Math.max(0,e.stunned_ticks)}function Aw(e,t,n,r,i={}){let a=Ow(e,r,i);if(n<=0||xw(e)||a===null)return{dx:0,dy:0};let o=Math.max(a,r===void 0?e.action===null?0:1/0:Dw(e,r,i)),s=kw(e,r,i),c=Tw(e,i),l=(t,n)=>Math.min(n.share??1,r!==void 0&&!c&&Ew(e,r+1+t)?v/100:1),u=e.velocity_x,d=e.velocity_y,f=0,p=0,m=Math.floor(n),h=n-m;for(let e=0;e=o&&er.speed*i&&(u=u/a*r.speed*i,d=d/a*r.speed*i),f+=u,p+=d}if(h>0){let e=m>=o&&m(e*(100-_)+t*_)/100,Mw=1e3,Nw=2.5,Pw=class{history=[];offset={dx:0,dy:0};mean={x:0,y:0,speed:0,share:1};sample={x:0,y:0,speed:0};horizon=null;holds={rootedUntil:0,cutActionId:null,evasionFrom:void 0};observe(e,t){this.holds.rootedUntil=Cw(e,t,this.holds.rootedUntil),this.holds.evasionFrom=ww(e,t,this.holds.evasionFrom)}update(e,t,n,r,i,a,o,s){for(this.history.push({at:r,held:n<=0?{...t,moveX:0,moveY:0}:t,share:n<=0?1:n});this.history.length>2&&this.history[1].at0&&e.action_id!==null&&(this.holds.cutActionId=e.action_id),e!==null){let t=1e3/s,n=this.horizon;c=Aw(e,i=>this.meanIntent(e,i,r-(n-1-i)*t,t),n,a,this.holds)}let l=Nw*g*s*o,u=c.dx-this.offset.dx,d=c.dy-this.offset.dy,f=Math.hypot(u,d),p=f>l?l/f:1;return this.offset.dx+=u*p,this.offset.dy+=d*p,{dx:this.offset.dx,dy:this.offset.dy}}meanIntent(e,t,n,r){let i=n-r/2,a=n+r/2,o=this.mean;o.x=0,o.y=0,o.speed=0,o.share=0;for(let n=0;nr?{x:i*(S-r),y:a*r}:m>n?{x:i*n,y:a*(S-n)}:{x:i*m,y:a*h}}function Iw(e,t,n){let r=e.x+t.dx,i=e.y+t.dy;if(n!==null){let t=Math.min(gw,Math.hypot(e.x-n.x,e.y-n.y)),a=r-n.x,o=i-n.y,s=Math.hypot(a,o);s1e-9?(r=n.x+a/s*t,i=n.y+o/s*t):(r=e.x,i=e.y))}let a=Fw(r,i);return{dx:a.x-e.x,dy:a.y-e.y}}function Lw(e){return e===`slip_left`||e===`slip_right`||e===`weave`||e===`pull`}function Rw(e,t,n,r=!1){return e.stunned_ticks>0||e.taunt_ticks>0||e.clinch_ticks>0?e.defense:n===null?Lw(e.defense)&&!r?e.defense:t.defense:n}var zw=class{kind=null;id=``;startsAt=0;endsAt=0;until=0;sequence=null;started=!1;press(e,t,n,r,i,a=y,o=n){this.kind=e,this.id=t,this.startsAt=o,this.endsAt=o+a*1e3/i,this.until=this.endsAt+Math.max(0,r)*1e3/i,this.sequence=null,this.started=!1}acknowledge(e,t,n){if(this.kind===null)return!1;this.sequence??=n?.(this.id)??null,e.defense===this.kind&&(this.started=!0);let r=!t||e.stunned_ticks>0||e.clinch_ticks>0,i=!this.started&&this.sequence!==null&&e.last_input_sequence>=this.sequence&&e.queued_actions===0;return(r||i)&&(this.kind=null),i}pose(e){return this.kind!==null&&e>=this.until&&(this.kind=null),this.kind!==null&&e>=this.startsAt&&e=this.startsAt&&e=this.startsAt&&e=this.startsAt?!1:(this.kind=null,!0)}};function Bw(e,t=!1){let n=e[0].index!==null,r=new Set(Object.keys(e[0].attributes)),i=new Set(Object.keys(e[0].morphAttributes)),a={},o={},s=e[0].morphTargetsRelative,c=new Og,l=0;for(let u=0;u{let r=new e.array.constructor(e.count*e.itemSize);l[n][t]=new e.constructor(r,e.itemSize,e.normalized)}))}let p=t*.5,m=10**Math.log10(1/t),h=p*m;for(let t=0;te*t,z:e=>-e*n}}var Zw={blue:1920728,red:12131356,neutral:15067115},Qw=[{radius:8.2,y:-.55,count:120,scale:1},{radius:10.6,y:.35,count:150,scale:1.04},{radius:13.2,y:1.35,count:180,scale:1.08},{radius:16,y:2.45,count:210,scale:1.12}],$w=.95,eT=.42,tT=[3819104,5915960,3493980,6963002,4612159,5524835,7233348,9076852,4678266,7620714,10107450,11843778,3104688,11573822,2303534,2303534],nT=[13081462,9067067,7225640,14726287,5517341,11105359],rT=[1380364,2759442,4862496,7035464,9341572,11569742],iT=.9,aT=.235,oT=-.35,sT=-2.7,cT=.32,lT=.26,uT=6.2,dT=.3;function fT(e,t,n=uT){return t>0&&Math.hypot(e,t)>n&&Math.abs(Math.atan2(e,t))<.3}var pT=` #ifdef USE_INSTANCING vec4 crowdWorld = modelMatrix * instanceMatrix * vec4(transformed, 1.0); #else vec4 crowdWorld = modelMatrix * vec4(transformed, 1.0); #endif vCrowdLight = vec3(-crowdWorld.x, ${7.5.toFixed(1)} - crowdWorld.y, -crowdWorld.z); -`,Ww=` +`,mT=` #ifdef USE_COLOR totalEmissiveRadiance *= vColor.rgb * (0.22 + 0.78 * max(0.0, dot(inverseTransformDirection(normal, viewMatrix), normalize(vCrowdLight)))); #endif -`,Gw=(e,t,n)=>{let r=Math.min(1,Math.max(0,(n-e)/(t-e)));return r*r*(3-2*r)};function Kw(e,t){let n=[];for(let[r,i]of e.entries())for(let e=0;e0&&Math.abs(Math.atan2(s,c))<.3})}return n}function qw(e,t,n,r={rise:0,armLeft:0,armRight:0,sway:0}){let i=.2+.7*(1-e.keen),a=Gw(i-.12,i+.12,n),o=Math.abs(Math.sin(t*(2.3+n*3.2)+e.phase*1.7))*(.02+.1*a),s=Math.sin(t*6.2+e.phase)*.32*a,c=Iw+(Lw-Iw)*a;return r.rise=a*Rw+o,r.armLeft=c+s,r.armRight=c-s*.8,r.sway=Math.sin(t*1.6+e.phase)*(.04+n*.05),r}function Jw(e){let t=gw(e,!1);for(let t of e)t.dispose();if(t===null)throw Error(`crowd geometry could not be merged`);return t}function Yw(){let e=new B_(.16,.28,2,8);e.scale(1.35,1,.8),e.translate(0,.64,0);let t=new B_(.078,.3,1,5);t.rotateZ(Math.PI/2),t.translate(0,Pw-.01,0);let n=new B_(.11,.26,1,5);return n.rotateX(Math.PI/2),n.scale(1.7,1,1),n.translate(0,.4,.17),Jw([e,t,n])}function Xw(){let e=new Sv(.105,10,6);e.rotateY(-Math.PI/2),e.scale(.92,1.12,1),e.translate(0,1.12,.01);let t=new H_(.048,.056,.1,5,1,!0);t.translate(0,.99,0);let n=t.getAttribute(`uv`);for(let e=0;e{e.vertexShader=e.vertexShader.replace(`#include `,`#include -varying vec3 vCrowdLight;`).replace(`#include `,`#include \n${Uw}`),e.fragmentShader=e.fragmentShader.replace(`#include `,`#include -varying vec3 vCrowdLight;`).replace(`#include `,`#include \n${Ww}`)},e.customProgramCacheKey=()=>`hands-crowd`;let u=new Pv({color:724501,roughness:.96,metalness:0,side:2}),d=new c_(o[0],s,i),f=new c_(o[1],c,i),p=new c_(o[2],l,i),m=new c_(o[3],s,i),h=new c_(o[3],s,i),g=[d,f,p,m,h],_=[d,f,p];for(let e of g)e.instanceMatrix.setUsage(xp),e.frustumCulled=!1;let v=new Y;for(let t=0;t.12&&v.setHex(Nw[Math.floor(e()*Nw.length)]).multiplyScalar((.8+e()*.4)*n),p.setColorAt(t,v)}for(let e of g)e.instanceColor.needsUpdate=!0;let y=new Ig(o[4],u);y.name=`stands`,y.receiveShadow=!1,n.add(y,...g);let b=new J(0,1,0),x=new J,S=new cm,C=new J,w=new Mm,T=new Mm,E=new Mm,D=new Mm,O={rise:0,armLeft:0,armRight:0,sway:0},ee=(e,t,n,r)=>{E.makeTranslation(n*Fw,Pw,0),D.makeRotationX(r),T.multiplyMatrices(w,E).multiply(D),e.setMatrixAt(t,T)},te=0,k=!1,ne=!1,A=!1,re=0,ie=0,ae=r.flatMap((e,t)=>e.platform?[t]:[]),oe=new Mm().makeScale(0,0,0),j=(e,t)=>{let n=r[e];if(A&&n.platform){for(let n of t?g:_)n.setMatrixAt(e,oe);return}qw(n,re,ie,O),S.setFromAxisAngle(b,n.yaw+O.sway),w.compose(x.set(n.x,n.y+O.rise*n.scale,n.z),S,C.setScalar(n.scale)),d.setMatrixAt(e,w),f.setMatrixAt(e,w),p.setMatrixAt(e,w),t&&(ee(m,e,1,O.armLeft),ee(h,e,-1,O.armRight))},se=(e,t,n=!1)=>{let r=n||ne;ne=!1;let a=r?1:k?4:2,o=Math.ceil(i/a),s=te%a*o,c=Math.min(i,s+o);te+=1,re=e,ie=t;let l=!k||r;for(let e=s;e{e!==k&&(k=e,m.visible=!e,h.visible=!e,e||(ne=!0))},makeRoomForCamera:e=>{let t=Hw(e.x,e.z,A?Bw-Vw:Bw);if(t!==A){A=t;for(let e of ae)j(e,!0);for(let e of g)e.instanceMatrix.clearUpdateRanges(),e.instanceMatrix.needsUpdate=!0}},dispose:()=>{for(let e of o)e.dispose();for(let e of[s,c,l,u])e.dispose();a.dispose();for(let e of g)e.dispose()}}}var nT=.3,rT=.012,iT=e=>()=>(e=Math.imul(e^e>>>15,1|e),e^=e+Math.imul(e^e>>>7,61|e),((e^e>>>14)>>>0)/4294967296);function aT(){let e=new oh;e.name=`arena`;let t=[],n=[],r=[],i=new Pv({color:`#05070c`,roughness:.95});n.push(i);let a=new V_(30,40);t.push(a);let o=new Ig(a,i);o.rotation.x=-Math.PI/2,o.position.y=-1,o.receiveShadow=!0,e.add(o);let s=iT(20260727),c=Ow,l=tT(s);e.add(l.group);let u=document.createElement(`canvas`);u.width=1024,u.height=64;let d=u.getContext(`2d`);d!==null&&(d.fillStyle=`#070c1a`,d.fillRect(0,0,1024,64),d.fillStyle=`#13203f`,d.fillRect(0,0,1024,5),d.fillRect(0,59,1024,5),d.textBaseline=`middle`,d.font=`800 38px Inter, system-ui, sans-serif`,d.fillStyle=`#e9c46a`,d.fillText(`H A N D S`,28,33),d.fillStyle=`#c9d6f2`,d.font=`600 26px Inter, system-ui, sans-serif`,d.fillText(`CHAMPIONSHIP BOXING`,300,34),d.fillStyle=`#e9c46a`,d.font=`800 30px Inter, system-ui, sans-serif`,d.fillText(`FIGHT NIGHT`,700,34),d.fillStyle=`#b91c1c`,d.fillRect(948,22,22,22),d.fillStyle=`#1d4ed8`,d.fillRect(978,22,22,22));let f=new F_(u);f.colorSpace=hp,f.wrapS=Gd,f.repeat.set(-6,1),r.push(f);let p=new wg({map:f,side:1});n.push(p);let m=c[0].y+Aw,h=new H_(c[0].radius-kw-.03,c[0].radius-kw-.03,m- -1-.04,72,1,!0);t.push(h);let g=new Ig(h,p);g.name=`boards`,g.position.y=(m+-1)/2+.02,e.add(g);let _=new Float32Array(270);for(let e=0;e<90;e+=1){let t=c[Math.floor(s()*c.length)],n=s()*Math.PI*2;_[e*3]=Math.sin(n)*t.radius,_[e*3+1]=t.y+.9+s()*.5,_[e*3+2]=Math.cos(n)*t.radius}let v=new lg;v.setAttribute(`position`,new Jh(_,3)),t.push(v);let y=new D_({color:13623551,size:.09,transparent:!0,opacity:0,blending:2,depthWrite:!1});n.push(y);let b=new M_(v,y);e.add(b);let x=new Pv({color:`#11151d`,roughness:.6,metalness:.4});n.push(x);let S=new Pv({color:`#1a2230`,emissive:`#dfe9ff`,emissiveIntensity:1.1,roughness:.4});n.push(S);let C=new wg({color:`#a8c4ff`,transparent:!0,opacity:.006,blending:2,depthWrite:!1,side:2});n.push(C);let w=new z_(9,.18,.18);t.push(w);let T=new H_(.09,.14,.22,10);t.push(T);let E=new U_(1.7,6.6,20,1,!0);t.push(E);for(let t=0;t<2;t+=1){let n=new Ig(w,x);n.position.set(0,7.6,t===0?-1.6:1.6),e.add(n);for(let t=0;t<5;t+=1){let r=-3.6+t*1.8,i=new Ig(T,S);i.position.set(r,7.45,n.position.z),e.add(i);let a=new Ig(E,C);a.position.set(r,4.1,n.position.z*.4),e.add(a)}}let D=new Pv({color:`#070a12`,roughness:1});n.push(D);let O=new H_(24,24,14,32,1,!0);t.push(O);let ee=new Ig(O,D);ee.position.y=5,ee.material.side=1,e.add(ee);let te=document.createElement(`canvas`);te.width=512,te.height=256;let k=te.getContext(`2d`);k!==null&&(k.fillStyle=`#04060c`,k.fillRect(0,0,512,256),k.strokeStyle=`#f1cc72`,k.lineWidth=6,k.strokeRect(14,14,484,228),k.fillStyle=`#f1cc72`,k.font=`800 84px Inter, system-ui, sans-serif`,k.textAlign=`center`,k.textBaseline=`middle`,k.fillText(`H A N D S`,256,104),k.fillStyle=`#8fa3c8`,k.font=`600 30px Inter, system-ui, sans-serif`,k.fillText(`CHAMPIONSHIP BOXING`,256,186));let ne=new F_(te);ne.colorSpace=hp;let A=new wg({map:ne});n.push(A);let re=new z_(4.6,2.3,.3);t.push(re);let ie=new Ig(re,A);ie.position.set(0,6.4,-14.5),e.add(ie);let ae=new Ig(re,x);ae.position.set(0,6.4,-14.65),e.add(ae),r.push(ne);let oe=0,j=0,se=0,ce=!1;return{group:e,update:(e,t,n)=>{se=Math.max(0,se-t*nT),n&&!ce&&l.update(0,0,!0),ce=n,n||(l.update(e,se),f.offset.x=e*rT%1,oe-=t,oe<=0&&(j=.09+Math.random()*.08,oe=(.25+Math.random()*1.6)/(1+se*4)),j=Math.max(0,j-t),y.opacity=j>0?.85:0)},excite:e=>{se=Math.min(1,se+Math.max(0,e))},excitement:()=>se,setLowTier:l.setLowTier,makeRoomForCamera:l.makeRoomForCamera,dispose:()=>{for(let e of t)e.dispose();for(let e of n)e.dispose();for(let e of r)e.dispose();l.dispose()}}}var oT=2.05,sT=5.5,cT=1.05,lT=1.78,uT=3.75,dT=.85,fT=.45,pT=1.18,mT=2.5,hT=5.5;function gT(e,t,n){return e<2.5||t<3?null:(n+Math.floor((e-mT)/hT))%2}function _T(e){return Math.max(0,e-mT)%hT}var vT=.95,yT=2.6,bT=-25;function xT(e,t,n,r,i){let a=e===0?-1:1,o=r*Math.PI/180,s=-a*Math.SQRT1_2,c=a*Math.SQRT1_2,l=s*Math.cos(o)+c*Math.sin(o),u=-s*Math.sin(o)+c*Math.cos(o);return i.set(a*t+l*n,0,-a*t+u*n)}function ST(e,t,n,r,i){xT(e,t,yT,bT+Math.min(1,n/hT)*5,r).setY(1.45),xT(e,t,.62,27,i).setY(1.05)}var CT={top:2.42,bottom:.95,width:2.4};function wT(e,t,n,r=.09){let i=Math.max(.2,1-n-r),a=Math.max((CT.top-CT.bottom)/i,CT.width/Math.max(.1,e)),o=(CT.top+CT.bottom)/2;return{distance:a/(2*Math.tan(K.degToRad(t)/2)),height:o-(.5-(r+i/2))*a}}var TT=class{current=new J(0,oT,sT);look=new J(0,cT,0);swayPhase=0;update(e,t,n,r,i,a,o,s,c=!1,l=null){this.swayPhase+=e;let u=a&&l!==null?dT:0,d=(n.x+r.x)/2+((l?.x??0)-(n.x+r.x)/2)*u,f=(n.z+r.z)/2+((l?.z??0)-(n.z+r.z)/2)*u,p=K.clamp(d,-1.4,1.4),m=K.clamp(f,-1.1,1.1),h=c?K.clamp(uT+i*.45-(a?.6:0),3.3,5.6):K.clamp(sT+i*.6-(a?.9:0),4.6,8.4),g=(c?lT:oT)+i*.08-(a?.45:0),_=s?0:Math.sin(this.swayPhase*.21)*.35,v=s?0:Math.sin(this.swayPhase*.13)*.3,y=p*.32+_,b=h+m*.2,x=g+v*.2;if(this.current.x+=(y-this.current.x)*(1-Math.exp(-2.6*e)),this.current.y+=(x-this.current.y)*(1-Math.exp(-2.6*e)),this.current.z+=(b-this.current.z)*(1-Math.exp(-2.6*e)),this.look.x+=(p-this.look.x)*(1-Math.exp(-3.2*e)),this.look.y+=((a?u>0?fT:.7:c?pT:cT)-this.look.y)*(1-Math.exp(-3.2*e)),this.look.z+=(m*.6-this.look.z)*(1-Math.exp(-3.2*e)),!s&&o>5e-4){let e=t*61;this.current.x+=Math.sin(e*1.31)*o,this.current.y+=Math.cos(e*1.97)*o*.6,this.look.x+=Math.sin(e*1.53)*o*.5,this.look.y+=Math.cos(e*2.11)*o*.35}return{position:this.current,lookAt:this.look}}},ET=2.45,DT=2.25,OT=1.35,kT=3.5,AT=1.25,jT=.45;function MT(e,t,n,r,i,a,o=31){let s=K.degToRad(o),c=Math.cos(s)*ET,l=Math.sin(s)*ET,u=-r,d=n,f=-n*c+u*l,p=-r*c+d*l,m=(e,t)=>Math.abs(t)<1e-9?1:K.clamp((Math.sign(t)*kT-e)/t,0,1),h=Math.min(m(e.x,f),m(e.z,p));i.set(K.clamp(e.x+f*h,-3.5,kT),DT,K.clamp(e.z+p*h,-3.5,kT)),a.set(t.x,OT,t.z)}var NT=class{angle=Math.PI;closeness=0;initialised=!1;target=new J;position=new J;look=new J;aim=new J;get forwardX(){return Math.sin(this.angle)}get forwardZ(){return Math.cos(this.angle)}reset(){this.initialised=!1}update(e,t,n,r,i,a,o=16/9){let s=r.x-n.x,c=r.z-n.z,l=Math.hypot(s,c),u=l>.05?Math.atan2(s,c):this.angle,d=K.clamp((1.3-l)/.8,0,1);if(!this.initialised)this.angle=u,this.closeness=d;else{let t=Math.atan2(Math.sin(u-this.angle),Math.cos(u-this.angle));this.angle+=t*(1-Math.exp(-4.5*e)),this.closeness+=(d-this.closeness)*(1-Math.exp(-3*e))}let f=K.clamp(o,jT,1);if(MT(n,r,this.forwardX,this.forwardZ,this.target,this.aim,K.lerp(31,60,this.closeness)*f),!this.initialised)this.position.copy(this.target),this.look.copy(this.aim),this.initialised=!0;else{let t=1-Math.exp(-10*e);this.position.lerp(this.target,t),this.look.lerp(this.aim,t)}let p={position:this.position,lookAt:this.look,tight:!0};if(a||i<=5e-4)return p;let m=t*61;return this.target.set(this.position.x+Math.sin(m*1.31)*i,this.position.y+Math.cos(m*1.97)*i*.6,this.position.z),this.aim.set(this.look.x+Math.sin(m*1.53)*i*.5,this.look.y+Math.cos(m*2.11)*i*.35,this.look.z),{position:this.target,lookAt:this.aim,tight:!0}}},PT=54,FT=136,IT=110,LT=168,RT=74,zT=72,BT={right:220,wideTop:64,compactTop:120,height:34},VT=200,HT={reach:192,bottom:80},UT=`rgba(3,6,12,0.86)`,WT=`rgb(4,7,13)`,GT={play:`#f6d57a`,colour:`#9ec7ff`,announcer:`#f6d57a`},KT=[`#4f86d9`,`#d9483c`],qT=`Inter, system-ui, sans-serif`;function JT(e){let{width:t,height:n}=e,r=t<640,i=n<480,a=i?.78:r?.85:1,o=Math.min(680,t-24),s=e.resultTop,c=s===null&&e.touch&&e.phase!==`complete`,l=qt(t,n,c);if(c&&e.paused===!0&&e.phase===`countdown`)return null;if(s===null&&e.phase===`countdown`){let e=l.x+l.width/2,r=t-(c&&t>n?Gt(t,n,l.y+l.height):12);return{x:e,y:l.y,maxWidth:Math.min(o,2*Math.min(e-12,r-e)),anchor:`top`,scale:a,cover:{width:l.width,height:l.height}}}if(s===null&&!e.touch&&!i){let r=n-(e.hint?LT:IT),i=e.cornerPanelTop===void 0||e.cornerPanelTop===null?r:Math.min(r,e.cornerPanelTop-8);if(i-RT*a>=n*.45)return{x:t/2,y:i,maxWidth:o,anchor:`bottom`,scale:a,cover:null}}if(s===null&&e.viewerDown)return null;let u=s===null&&r?FT:PT;s===null&&(e.phase===`rest`||e.phase===`foul_recovery`||c&&e.paused===!0?u=Math.max(u,l.y+l.height+8):e.phase===`knockdown`&&(u=Math.max(u,cn(n,r)+zT)),e.replay&&t/2-o/2d)return null;let f=c&&e.lag===!0&&!r&&!e.replay&&uMath.round(8*e)+Math.round(10*e)+Math.round(4*e)+2*Math.round(Math.round(17*e)*1.3)+Math.round(5*e);function XT(e,t,n,r){let i=r?1:t.opacity;if(i<=.01)return;let a=r||n.cover!==null?0:t.entering*8*(n.anchor===`bottom`?1:-1);e.save(),e.globalAlpha=i,e.textBaseline=`alphabetic`;let o=i*i;t.line.card===null?$T(e,t.line,n,a,o):tE(e,t.line.card,n,a,o),e.restore()}function ZT(e,t,n){if(e.measureText(t).width<=n)return t;let r=t;for(;r.length>1&&e.measureText(`${r}…`).width>n;)r=r.slice(0,-1);return`${r}…`}function QT(e,t){let n=e.length/2,r=null,i=1/0;for(let a=e.indexOf(` `);a>=0;a=e.indexOf(` `,a+1)){let o=e.slice(0,a),s=e.slice(a+1),c=Math.abs(a-n);t(o)&&t(s)&&c0?[e.slice(0,a),e.slice(a+1)]:[e,``]}function $T(e,t,n,r,i){let a=n.scale,o=Math.round(14*a),s=Math.round(10*a),c=n.maxWidth-o*2-4,l=(t,n)=>(e.font=`700 ${n}px ${qT}`,e.measureText(t).width),u=Tt(e=>l(t.text,e),c,Math.round(17*a),Math.round(13*a)),d=l(t.text,u)<=c?[t.text]:QT(t.text,e=>l(e,u)<=c).filter(e=>e.length>0),f=Math.max(...d.map(e=>Math.min(c,l(e,u)))),p=Xu[t.speaker];e.font=`800 ${s}px ${qT}`;let m=e.measureText(p).width,h=Math.min(n.maxWidth,Math.max(f,m)+o*2+4),g=Math.round(u*1.3),_=Math.round(8*a)+s,v=_+Math.round(4*a)+d.length*g+Math.round(5*a),y=(n.anchor===`bottom`?n.y-v:n.y)+r,b=n.x-h/2,x=GT[t.speaker];e.fillStyle=UT,e.fillRect(b,y,h,v),e.fillStyle=x,e.fillRect(b,y,4,v),e.globalAlpha=i,e.textAlign=`left`,e.font=`800 ${s}px ${qT}`,e.fillText(p,b+4+o,y+_),e.fillStyle=`#f6f7fb`,e.font=`700 ${u}px ${qT}`,d.forEach((t,n)=>e.fillText(ZT(e,t,c),b+4+o,y+_+Math.round(4*a)+g*(n+1)-Math.round(u*.28)))}function eE(e,t,n){let r=Math.round(11*e),i=Math.round(28*e),a=Math.round(6*e),o={pad:Math.round(10*e),gap:Math.round(7*e)},s={pad:Math.max(4,Math.round(6*e)),gap:Math.max(3,Math.round(4*e))},c=t?Math.round(10*e):0,l=[{...o,detail:c},{...s,detail:c},{...s,detail:0}],u=(e,t)=>e.pad*2+r+e.gap+t+(e.detail===0?0:a+e.detail);for(let e of l)if(n===null||u(e,i)<=n)return{kicker:r,title:i,...e,height:u(e,i)};let d=l[2],f=Math.max(12,Math.min(i,(n??1/0)-u(d,0)));return{kicker:r,title:f,...d,height:u(d,f)}}function tE(e,t,n,r,i){let a=n.scale,o=Math.round(18*a),s=n.maxWidth-o*2,c=eE(a,t.detail.length>0,n.cover?.height??null),l=c.kicker,u=c.detail,d=(t,n,r)=>(e.font=`${n} ${r}px ${qT}`,e.measureText(t).width),f=Tt(e=>d(t.title,900,e),s,c.title,Math.min(c.title,Math.round(15*a))),p=Math.max(d(t.kicker,800,l),Math.min(s,d(t.title,900,f)),u===0?0:d(t.detail,700,u)),m=Math.min(n.maxWidth,Math.max(240*a,p+o*2,n.cover?.width??0)),h=c.pad+l+c.gap+f+(u===0?0:Math.round(6*a)+u)+c.pad,g=Math.max(h,n.cover?.height??0),_=(n.anchor===`bottom`?n.y-g:n.y)+r,v=n.x-m/2,y=t.corner===null?GT.announcer:KT[t.corner];e.fillStyle=n.cover===null?UT:WT,e.fillRect(v,_,m,g),e.fillStyle=y,e.fillRect(v,_,m,3),e.globalAlpha=i,e.textAlign=`center`;let b=_+(g-h)/2+c.pad+l;e.font=`800 ${l}px ${qT}`,e.fillText(ZT(e,t.kicker,s),n.x,b),b+=c.gap+f,e.fillStyle=`#ffffff`,e.font=`900 ${f}px ${qT}`,e.fillText(ZT(e,t.title,s),n.x,b-Math.round(f*.12)),u>0&&(b+=Math.round(6*a)+u,e.fillStyle=`#93a3bd`,e.font=`700 ${u}px ${qT}`,e.fillText(ZT(e,t.detail,s),n.x,b))}var nE=128,rE=4,iE=.12,aE=.82,oE=e=>()=>(e=Math.imul(e^e>>>15,1|e),e^=e+Math.imul(e^e>>>7,61|e),((e^e>>>14)>>>0)/4294967296);function sE(e){let t=oE(e);return{lobes:Array.from({length:5+Math.floor(t()*4)},(e,n)=>{let r=t()*Math.PI*2,i=n===0?0:6+t()*12,a=n===0?16+t()*6:8+t()*9;return{x:64+Math.cos(r)*i,y:64+Math.sin(r)*i,rx:a,ry:a*(.55+t()*.45),turn:t()*Math.PI}}),fill:.55+t()*.2,rim:.95,satellites:6+Math.floor(t()*6)}}function cE(e){let t=document.createElement(`canvas`);t.width=nE,t.height=nE;let n=t.getContext(`2d`);if(n!==null){let t=sE(e),r=oE(e^1540483477);n.clearRect(0,0,nE,nE),n.fillStyle=`rgba(255,255,255,1)`,n.strokeStyle=`rgba(255,255,255,1)`,n.globalAlpha=t.rim,n.lineWidth=3.5;for(let e of t.lobes)n.beginPath(),n.ellipse(e.x,e.y,e.rx,e.ry,e.turn,0,Math.PI*2),n.stroke();let i=()=>{n.beginPath();for(let e of t.lobes){let t=Math.max(1,e.rx-1.5);n.moveTo(e.x+Math.cos(e.turn)*t,e.y+Math.sin(e.turn)*t),n.ellipse(e.x,e.y,t,Math.max(1,e.ry-1.5),e.turn,0,Math.PI*2)}n.fill()};n.globalCompositeOperation=`destination-out`,n.globalAlpha=1,i(),n.globalCompositeOperation=`source-over`,n.globalAlpha=t.fill,i();for(let e=0;e{let t=t=>Math.round((e>>t&255)*.8);return`rgb(${t(16)},${t(8)},${t(0)})`},uE=class{scene;size;mesh;canvas;context;texture;source;uploader=null;region=new cb;regionAt=new q;material;geometry;stamps=[];scratch;scratchContext;pixelsPerMetre;dirty=!1;sinceUpload=0;uploadInterval=iE;painted=0;constructor(e,t=1024){this.scene=e,this.size=t,this.canvas=document.createElement(`canvas`),this.canvas.width=t,this.canvas.height=t,this.context=this.canvas.getContext(`2d`),this.context?.clearRect(0,0,t,t),this.scratch=document.createElement(`canvas`),this.scratch.width=nE,this.scratch.height=nE,this.scratchContext=this.scratch.getContext(`2d`);for(let e=0;e3.05||Math.abs(t)>3.05)return;let c=this.context,l=this.scratchContext;if(this.painted+=1,this.dirty=!0,this.mesh.visible=!0,c===null||l===null)return;l.globalCompositeOperation=`copy`,l.drawImage(this.stamps[Math.abs(Math.trunc(s))%rE],0,0),l.globalCompositeOperation=`source-in`,l.fillStyle=lE(o),l.fillRect(0,0,nE,nE),l.globalCompositeOperation=`source-over`;let u=this.pixel(e,t),d=Math.max(1,n*this.pixelsPerMetre),f=Math.max(1,r*this.pixelsPerMetre);this.grow(u.x,u.y,Math.hypot(d,f)/2),c.save(),c.globalAlpha=K.clamp(a,0,1),c.translate(u.x,u.y),c.rotate(Number.isFinite(i)?i:0),c.drawImage(this.scratch,-d/2,-f/2,d,f),c.restore()}pool(e,t,n,r,i){this.stain(e,t,n*2.3,n*2,i*1.7,r*.8,4851467,i);let a=this.context;if(a===null||Math.abs(e)>3.05||Math.abs(t)>3.05)return;let o=this.pixel(e,t),s=Math.max(1,n*1.15*this.pixelsPerMetre);this.grow(o.x,o.y,s);let c=a.createRadialGradient(o.x,o.y,0,o.x,o.y,s);c.addColorStop(0,`rgba(40,3,6,0.9)`),c.addColorStop(.65,`rgba(58,5,9,0.65)`),c.addColorStop(1,`rgba(70,7,11,0)`),a.save(),a.globalAlpha=K.clamp(r,0,1),a.fillStyle=c,a.beginPath(),a.ellipse(o.x,o.y,s,s*.86,i*.9,0,Math.PI*2),a.fill(),a.restore()}update(e){if(this.sinceUpload+=Number.isFinite(e)?Math.max(0,e):0,!this.dirty||this.sinceUploadt.min.x&&t.max.y>t.min.y?this.uploader.copyTextureToTexture(this.source,this.texture,t,this.regionAt.copy(t.min)):this.texture.needsUpdate=!0,t.makeEmpty(),this.dirty=!1,this.sinceUpload=0}clear(){this.context?.clearRect(0,0,this.size,this.size),this.painted=0,this.dirty=!1,this.region.makeEmpty(),this.texture.needsUpdate=!0,this.mesh.visible=!1}dispose(){this.scene.remove(this.mesh),this.texture.dispose(),this.source.dispose(),this.material.dispose(),this.geometry.dispose()}},dE=` +`,hT=(e,t,n)=>{let r=Math.min(1,Math.max(0,(n-e)/(t-e)));return r*r*(3-2*r)};function gT(e,t){let n=[];for(let[r,i]of e.entries())for(let e=0;e0&&Math.abs(Math.atan2(s,c))<.3})}return n}function _T(e,t,n,r={rise:0,armLeft:0,armRight:0,sway:0}){let i=.2+.7*(1-e.keen),a=hT(i-.12,i+.12,n),o=Math.abs(Math.sin(t*(2.3+n*3.2)+e.phase*1.7))*(.02+.1*a),s=Math.sin(t*6.2+e.phase)*.32*a,c=oT+(sT-oT)*a;return r.rise=a*cT+o,r.armLeft=c+s,r.armRight=c-s*.8,r.sway=Math.sin(t*1.6+e.phase)*(.04+n*.05),r}function vT(e){let t=Bw(e,!1);for(let t of e)t.dispose();if(t===null)throw Error(`crowd geometry could not be merged`);return t}function yT(){let e=new av(.16,.28,2,8);e.scale(1.35,1,.8),e.translate(0,.64,0);let t=new av(.078,.3,1,5);t.rotateZ(Math.PI/2),t.translate(0,iT-.01,0);let n=new av(.11,.26,1,5);return n.rotateX(Math.PI/2),n.scale(1.7,1,1),n.translate(0,.4,.17),vT([e,t,n])}function bT(){let e=new Vv(.105,10,6);e.rotateY(-Math.PI/2),e.scale(.92,1.12,1),e.translate(0,1.12,.01);let t=new sv(.048,.056,.1,5,1,!0);t.translate(0,.99,0);let n=t.getAttribute(`uv`);for(let e=0;e{e.vertexShader=e.vertexShader.replace(`#include `,`#include +varying vec3 vCrowdLight;`).replace(`#include `,`#include \n${pT}`),e.fragmentShader=e.fragmentShader.replace(`#include `,`#include +varying vec3 vCrowdLight;`).replace(`#include `,`#include \n${mT}`)},e.customProgramCacheKey=()=>`hands-crowd`;let u=new $v({color:724501,roughness:.96,metalness:0,side:2}),d=new D_(o[0],s,i),f=new D_(o[1],c,i),p=new D_(o[2],l,i),m=new D_(o[3],s,i),h=new D_(o[3],s,i),g=[d,f,p,m,h],_=[d,f,p];for(let e of g)e.instanceMatrix.setUsage(Bp),e.frustumCulled=!1;let v=new Y;for(let t=0;t.12&&v.setHex(rT[Math.floor(e()*rT.length)]).multiplyScalar((.8+e()*.4)*n),p.setColorAt(t,v)}for(let e of g)e.instanceColor.needsUpdate=!0;let y=new t_(o[4],u);y.name=`stands`,y.receiveShadow=!1,n.add(y,...g);let b=new J(0,1,0),x=new J,S=new Dm,C=new J,w=new Zm,T=new Zm,E=new Zm,D=new Zm,O={rise:0,armLeft:0,armRight:0,sway:0},k=(e,t,n,r)=>{E.makeTranslation(n*aT,iT,0),D.makeRotationX(r),T.multiplyMatrices(w,E).multiply(D),e.setMatrixAt(t,T)},A=0,j=!1,ee=!1,te=!1,ne=0,re=0,ie=r.flatMap((e,t)=>e.platform?[t]:[]),ae=new Zm().makeScale(0,0,0),M=(e,t)=>{let n=r[e];if(te&&n.platform){for(let n of t?g:_)n.setMatrixAt(e,ae);return}_T(n,ne,re,O),S.setFromAxisAngle(b,n.yaw+O.sway),w.compose(x.set(n.x,n.y+O.rise*n.scale,n.z),S,C.setScalar(n.scale)),d.setMatrixAt(e,w),f.setMatrixAt(e,w),p.setMatrixAt(e,w),t&&(k(m,e,1,O.armLeft),k(h,e,-1,O.armRight))},oe=(e,t,n=!1)=>{let r=n||ee;ee=!1;let a=r?1:j?4:2,o=Math.ceil(i/a),s=A%a*o,c=Math.min(i,s+o);A+=1,ne=e,re=t;let l=!j||r;for(let e=s;e{e!==j&&(j=e,m.visible=!e,h.visible=!e,e||(ee=!0))},makeRoomForCamera:e=>{let t=fT(e.x,e.z,te?uT-dT:uT);if(t!==te){te=t;for(let e of ie)M(e,!0);for(let e of g)e.instanceMatrix.clearUpdateRanges(),e.instanceMatrix.needsUpdate=!0}},dispose:()=>{for(let e of o)e.dispose();for(let e of[s,c,l,u])e.dispose();a.dispose();for(let e of g)e.dispose()}}}var ET=.3,DT=.012,OT=e=>()=>(e=Math.imul(e^e>>>15,1|e),e^=e+Math.imul(e^e>>>7,61|e),((e^e>>>14)>>>0)/4294967296);function kT(){let e=new Th;e.name=`arena`;let t=[],n=[],r=[],i=new $v({color:`#05070c`,roughness:.95});n.push(i);let a=new ov(30,40);t.push(a);let o=new t_(a,i);o.rotation.x=-Math.PI/2,o.position.y=-1,o.receiveShadow=!0,e.add(o);let s=OT(20260727),c=Qw,l=TT(s);e.add(l.group);let u=document.createElement(`canvas`);u.width=1024,u.height=64;let d=u.getContext(`2d`);d!==null&&(d.fillStyle=`#070c1a`,d.fillRect(0,0,1024,64),d.fillStyle=`#13203f`,d.fillRect(0,0,1024,5),d.fillRect(0,59,1024,5),d.textBaseline=`middle`,d.font=`800 38px Inter, system-ui, sans-serif`,d.fillStyle=`#e9c46a`,d.fillText(`H A N D S`,28,33),d.fillStyle=`#c9d6f2`,d.font=`600 26px Inter, system-ui, sans-serif`,d.fillText(`CHAMPIONSHIP BOXING`,300,34),d.fillStyle=`#e9c46a`,d.font=`800 30px Inter, system-ui, sans-serif`,d.fillText(`FIGHT NIGHT`,700,34),d.fillStyle=`#b91c1c`,d.fillRect(948,22,22,22),d.fillStyle=`#1d4ed8`,d.fillRect(978,22,22,22));let f=new ev(u);f.colorSpace=Pp,f.wrapS=df,f.repeat.set(-6,1),r.push(f);let p=new Ug({map:f,side:1});n.push(p);let m=c[0].y+eT,h=new sv(c[0].radius-$w-.03,c[0].radius-$w-.03,m- -1-.04,72,1,!0);t.push(h);let g=new t_(h,p);g.name=`boards`,g.position.y=(m+-1)/2+.02,e.add(g);let _=new Float32Array(270);for(let e=0;e<90;e+=1){let t=c[Math.floor(s()*c.length)],n=s()*Math.PI*2;_[e*3]=Math.sin(n)*t.radius,_[e*3+1]=t.y+.9+s()*.5,_[e*3+2]=Math.cos(n)*t.radius}let v=new Og;v.setAttribute(`position`,new pg(_,3)),t.push(v);let y=new K_({color:13623551,size:.09,transparent:!0,opacity:0,blending:2,depthWrite:!1});n.push(y);let b=new Z_(v,y);e.add(b);let x=new $v({color:`#11151d`,roughness:.6,metalness:.4});n.push(x);let S=new $v({color:`#1a2230`,emissive:`#dfe9ff`,emissiveIntensity:1.1,roughness:.4});n.push(S);let C=new Ug({color:`#a8c4ff`,transparent:!0,opacity:.006,blending:2,depthWrite:!1,side:2});n.push(C);let w=new iv(9,.18,.18);t.push(w);let T=new sv(.09,.14,.22,10);t.push(T);let E=new cv(1.7,6.6,20,1,!0);t.push(E);for(let t=0;t<2;t+=1){let n=new t_(w,x);n.position.set(0,7.6,t===0?-1.6:1.6),e.add(n);for(let t=0;t<5;t+=1){let r=-3.6+t*1.8,i=new t_(T,S);i.position.set(r,7.45,n.position.z),e.add(i);let a=new t_(E,C);a.position.set(r,4.1,n.position.z*.4),e.add(a)}}let D=new $v({color:`#070a12`,roughness:1});n.push(D);let O=new sv(24,24,14,32,1,!0);t.push(O);let k=new t_(O,D);k.position.y=5,k.material.side=1,e.add(k);let A=document.createElement(`canvas`);A.width=512,A.height=256;let j=A.getContext(`2d`);j!==null&&(j.fillStyle=`#04060c`,j.fillRect(0,0,512,256),j.strokeStyle=`#f1cc72`,j.lineWidth=6,j.strokeRect(14,14,484,228),j.fillStyle=`#f1cc72`,j.font=`800 84px Inter, system-ui, sans-serif`,j.textAlign=`center`,j.textBaseline=`middle`,j.fillText(`H A N D S`,256,104),j.fillStyle=`#8fa3c8`,j.font=`600 30px Inter, system-ui, sans-serif`,j.fillText(`CHAMPIONSHIP BOXING`,256,186));let ee=new ev(A);ee.colorSpace=Pp;let te=new Ug({map:ee});n.push(te);let ne=new iv(4.6,2.3,.3);t.push(ne);let re=new t_(ne,te);re.position.set(0,6.4,-14.5),e.add(re);let ie=new t_(ne,x);ie.position.set(0,6.4,-14.65),e.add(ie),r.push(ee);let ae=0,M=0,oe=0,se=!1;return{group:e,update:(e,t,n)=>{oe=Math.max(0,oe-t*ET),n&&!se&&l.update(0,0,!0),se=n,n||(l.update(e,oe),f.offset.x=e*DT%1,ae-=t,ae<=0&&(M=.09+Math.random()*.08,ae=(.25+Math.random()*1.6)/(1+oe*4)),M=Math.max(0,M-t),y.opacity=M>0?.85:0)},excite:e=>{oe=Math.min(1,oe+Math.max(0,e))},excitement:()=>oe,setLowTier:l.setLowTier,makeRoomForCamera:l.makeRoomForCamera,dispose:()=>{for(let e of t)e.dispose();for(let e of n)e.dispose();for(let e of r)e.dispose();l.dispose()}}}var AT=2.05,jT=5.5,MT=1.05,NT=1.78,PT=3.75,FT=.85,IT=.45,LT=1.18,RT=2.5,zT=5.5;function BT(e,t,n){return e<2.5||t<3?null:(n+Math.floor((e-RT)/zT))%2}function VT(e){return Math.max(0,e-RT)%zT}var HT=.95,UT=2.6,WT=-25;function GT(e,t,n,r,i){let a=e===0?-1:1,o=r*Math.PI/180,s=-a*Math.SQRT1_2,c=a*Math.SQRT1_2,l=s*Math.cos(o)+c*Math.sin(o),u=-s*Math.sin(o)+c*Math.cos(o);return i.set(a*t+l*n,0,-a*t+u*n)}function KT(e,t,n,r,i){GT(e,t,UT,WT+Math.min(1,n/zT)*5,r).setY(1.45),GT(e,t,.62,27,i).setY(1.05)}var qT={top:2.42,bottom:.95,width:2.4};function JT(e,t,n,r=.09){let i=Math.max(.2,1-n-r),a=Math.max((qT.top-qT.bottom)/i,qT.width/Math.max(.1,e)),o=(qT.top+qT.bottom)/2;return{distance:a/(2*Math.tan(K.degToRad(t)/2)),height:o-(.5-(r+i/2))*a}}var YT=class{current=new J(0,AT,jT);look=new J(0,MT,0);swayPhase=0;update(e,t,n,r,i,a,o,s,c=!1,l=null){this.swayPhase+=e;let u=a&&l!==null?FT:0,d=(n.x+r.x)/2+((l?.x??0)-(n.x+r.x)/2)*u,f=(n.z+r.z)/2+((l?.z??0)-(n.z+r.z)/2)*u,p=K.clamp(d,-1.4,1.4),m=K.clamp(f,-1.1,1.1),h=c?K.clamp(PT+i*.45-(a?.6:0),3.3,5.6):K.clamp(jT+i*.6-(a?.9:0),4.6,8.4),g=(c?NT:AT)+i*.08-(a?.45:0),_=s?0:Math.sin(this.swayPhase*.21)*.35,v=s?0:Math.sin(this.swayPhase*.13)*.3,y=p*.32+_,b=h+m*.2,x=g+v*.2;if(this.current.x+=(y-this.current.x)*(1-Math.exp(-2.6*e)),this.current.y+=(x-this.current.y)*(1-Math.exp(-2.6*e)),this.current.z+=(b-this.current.z)*(1-Math.exp(-2.6*e)),this.look.x+=(p-this.look.x)*(1-Math.exp(-3.2*e)),this.look.y+=((a?u>0?IT:.7:c?LT:MT)-this.look.y)*(1-Math.exp(-3.2*e)),this.look.z+=(m*.6-this.look.z)*(1-Math.exp(-3.2*e)),!s&&o>5e-4){let e=t*61;this.current.x+=Math.sin(e*1.31)*o,this.current.y+=Math.cos(e*1.97)*o*.6,this.look.x+=Math.sin(e*1.53)*o*.5,this.look.y+=Math.cos(e*2.11)*o*.35}return{position:this.current,lookAt:this.look}}},XT=2.45,ZT=2.25,QT=1.35,$T=3.5,eE=1.25,tE=.45;function nE(e,t,n,r,i,a,o=31){let s=K.degToRad(o),c=Math.cos(s)*XT,l=Math.sin(s)*XT,u=-r,d=n,f=-n*c+u*l,p=-r*c+d*l,m=(e,t)=>Math.abs(t)<1e-9?1:K.clamp((Math.sign(t)*$T-e)/t,0,1),h=Math.min(m(e.x,f),m(e.z,p));i.set(K.clamp(e.x+f*h,-3.5,$T),ZT,K.clamp(e.z+p*h,-3.5,$T)),a.set(t.x,QT,t.z)}var rE=class{angle=Math.PI;closeness=0;initialised=!1;target=new J;position=new J;look=new J;aim=new J;get forwardX(){return Math.sin(this.angle)}get forwardZ(){return Math.cos(this.angle)}reset(){this.initialised=!1}update(e,t,n,r,i,a,o=16/9){let s=r.x-n.x,c=r.z-n.z,l=Math.hypot(s,c),u=l>.05?Math.atan2(s,c):this.angle,d=K.clamp((1.3-l)/.8,0,1);if(!this.initialised)this.angle=u,this.closeness=d;else{let t=Math.atan2(Math.sin(u-this.angle),Math.cos(u-this.angle));this.angle+=t*(1-Math.exp(-4.5*e)),this.closeness+=(d-this.closeness)*(1-Math.exp(-3*e))}let f=K.clamp(o,tE,1);if(nE(n,r,this.forwardX,this.forwardZ,this.target,this.aim,K.lerp(31,60,this.closeness)*f),!this.initialised)this.position.copy(this.target),this.look.copy(this.aim),this.initialised=!0;else{let t=1-Math.exp(-10*e);this.position.lerp(this.target,t),this.look.lerp(this.aim,t)}let p={position:this.position,lookAt:this.look,tight:!0};if(a||i<=5e-4)return p;let m=t*61;return this.target.set(this.position.x+Math.sin(m*1.31)*i,this.position.y+Math.cos(m*1.97)*i*.6,this.position.z),this.aim.set(this.look.x+Math.sin(m*1.53)*i*.5,this.look.y+Math.cos(m*2.11)*i*.35,this.look.z),{position:this.target,lookAt:this.aim,tight:!0}}},iE=54,aE=136,oE=110,sE=168,cE=74,lE=72,uE={right:220,wideTop:64,compactTop:120,height:34},dE=200,fE={reach:192,bottom:80},pE=`rgba(3,6,12,0.86)`,mE=`rgb(4,7,13)`,hE={play:`#f6d57a`,colour:`#9ec7ff`,announcer:`#f6d57a`},gE=[`#4f86d9`,`#d9483c`],_E=`Inter, system-ui, sans-serif`;function vE(e){let{width:t,height:n}=e,r=t<640,i=n<480,a=i?.78:r?.85:1,o=Math.min(680,t-24),s=e.resultTop,c=s===null&&e.touch&&e.phase!==`complete`,l=nn(t,n,c);if(c&&e.paused===!0&&e.phase===`countdown`)return null;if(s===null&&e.phase===`countdown`){let e=l.x+l.width/2,r=t-(c&&t>n?en(t,n,l.y+l.height):12);return{x:e,y:l.y,maxWidth:Math.min(o,2*Math.min(e-12,r-e)),anchor:`top`,scale:a,cover:{width:l.width,height:l.height}}}if(s===null&&!e.touch&&!i){let r=n-(e.hint?sE:oE),i=e.cornerPanelTop===void 0||e.cornerPanelTop===null?r:Math.min(r,e.cornerPanelTop-8);if(i-cE*a>=n*.45)return{x:t/2,y:i,maxWidth:o,anchor:`bottom`,scale:a,cover:null}}if(s===null&&e.viewerDown)return null;let u=s===null&&r?aE:iE;s===null&&(e.phase===`rest`||e.phase===`foul_recovery`||c&&e.paused===!0?u=Math.max(u,l.y+l.height+8):e.phase===`knockdown`&&(u=Math.max(u,_n(n,r)+lE)),e.replay&&t/2-o/2d)return null;let f=c&&e.lag===!0&&!r&&!e.replay&&uMath.round(8*e)+Math.round(10*e)+Math.round(4*e)+2*Math.round(Math.round(17*e)*1.3)+Math.round(5*e);function bE(e,t,n,r){let i=r?1:t.opacity;if(i<=.01)return;let a=r||n.cover!==null?0:t.entering*8*(n.anchor===`bottom`?1:-1);e.save(),e.globalAlpha=i,e.textBaseline=`alphabetic`;let o=i*i;t.line.card===null?CE(e,t.line,n,a,o):TE(e,t.line.card,n,a,o),e.restore()}function xE(e,t,n){if(e.measureText(t).width<=n)return t;let r=t;for(;r.length>1&&e.measureText(`${r}…`).width>n;)r=r.slice(0,-1);return`${r}…`}function SE(e,t){let n=e.length/2,r=null,i=1/0;for(let a=e.indexOf(` `);a>=0;a=e.indexOf(` `,a+1)){let o=e.slice(0,a),s=e.slice(a+1),c=Math.abs(a-n);t(o)&&t(s)&&c0?[e.slice(0,a),e.slice(a+1)]:[e,``]}function CE(e,t,n,r,i){let a=n.scale,o=Math.round(14*a),s=Math.round(10*a),c=n.maxWidth-o*2-4,l=(t,n)=>(e.font=`700 ${n}px ${_E}`,e.measureText(t).width),u=Nt(e=>l(t.text,e),c,Math.round(17*a),Math.round(13*a)),d=l(t.text,u)<=c?[t.text]:SE(t.text,e=>l(e,u)<=c).filter(e=>e.length>0),f=Math.max(...d.map(e=>Math.min(c,l(e,u)))),p=hd[t.speaker];e.font=`800 ${s}px ${_E}`;let m=e.measureText(p).width,h=Math.min(n.maxWidth,Math.max(f,m)+o*2+4),g=Math.round(u*1.3),_=Math.round(8*a)+s,v=_+Math.round(4*a)+d.length*g+Math.round(5*a),y=(n.anchor===`bottom`?n.y-v:n.y)+r,b=n.x-h/2,x=hE[t.speaker];e.fillStyle=pE,e.fillRect(b,y,h,v),e.fillStyle=x,e.fillRect(b,y,4,v),e.globalAlpha=i,e.textAlign=`left`,e.font=`800 ${s}px ${_E}`,e.fillText(p,b+4+o,y+_),e.fillStyle=`#f6f7fb`,e.font=`700 ${u}px ${_E}`,d.forEach((t,n)=>e.fillText(xE(e,t,c),b+4+o,y+_+Math.round(4*a)+g*(n+1)-Math.round(u*.28)))}function wE(e,t,n){let r=Math.round(11*e),i=Math.round(28*e),a=Math.round(6*e),o={pad:Math.round(10*e),gap:Math.round(7*e)},s={pad:Math.max(4,Math.round(6*e)),gap:Math.max(3,Math.round(4*e))},c=t?Math.round(10*e):0,l=[{...o,detail:c},{...s,detail:c},{...s,detail:0}],u=(e,t)=>e.pad*2+r+e.gap+t+(e.detail===0?0:a+e.detail);for(let e of l)if(n===null||u(e,i)<=n)return{kicker:r,title:i,...e,height:u(e,i)};let d=l[2],f=Math.max(12,Math.min(i,(n??1/0)-u(d,0)));return{kicker:r,title:f,...d,height:u(d,f)}}function TE(e,t,n,r,i){let a=n.scale,o=Math.round(18*a),s=n.maxWidth-o*2,c=wE(a,t.detail.length>0,n.cover?.height??null),l=c.kicker,u=c.detail,d=(t,n,r)=>(e.font=`${n} ${r}px ${_E}`,e.measureText(t).width),f=Nt(e=>d(t.title,900,e),s,c.title,Math.min(c.title,Math.round(15*a))),p=Math.max(d(t.kicker,800,l),Math.min(s,d(t.title,900,f)),u===0?0:d(t.detail,700,u)),m=Math.min(n.maxWidth,Math.max(240*a,p+o*2,n.cover?.width??0)),h=c.pad+l+c.gap+f+(u===0?0:Math.round(6*a)+u)+c.pad,g=Math.max(h,n.cover?.height??0),_=(n.anchor===`bottom`?n.y-g:n.y)+r,v=n.x-m/2,y=t.corner===null?hE.announcer:gE[t.corner];e.fillStyle=n.cover===null?pE:mE,e.fillRect(v,_,m,g),e.fillStyle=y,e.fillRect(v,_,m,3),e.globalAlpha=i,e.textAlign=`center`;let b=_+(g-h)/2+c.pad+l;e.font=`800 ${l}px ${_E}`,e.fillText(xE(e,t.kicker,s),n.x,b),b+=c.gap+f,e.fillStyle=`#ffffff`,e.font=`900 ${f}px ${_E}`,e.fillText(xE(e,t.title,s),n.x,b-Math.round(f*.12)),u>0&&(b+=Math.round(6*a)+u,e.fillStyle=`#93a3bd`,e.font=`700 ${u}px ${_E}`,e.fillText(xE(e,t.detail,s),n.x,b))}var EE=128,DE=4,OE=.12,kE=.82,AE=e=>()=>(e=Math.imul(e^e>>>15,1|e),e^=e+Math.imul(e^e>>>7,61|e),((e^e>>>14)>>>0)/4294967296);function jE(e){let t=AE(e);return{lobes:Array.from({length:5+Math.floor(t()*4)},(e,n)=>{let r=t()*Math.PI*2,i=n===0?0:6+t()*12,a=n===0?16+t()*6:8+t()*9;return{x:64+Math.cos(r)*i,y:64+Math.sin(r)*i,rx:a,ry:a*(.55+t()*.45),turn:t()*Math.PI}}),fill:.55+t()*.2,rim:.95,satellites:6+Math.floor(t()*6)}}function ME(e){let t=document.createElement(`canvas`);t.width=EE,t.height=EE;let n=t.getContext(`2d`);if(n!==null){let t=jE(e),r=AE(e^1540483477);n.clearRect(0,0,EE,EE),n.fillStyle=`rgba(255,255,255,1)`,n.strokeStyle=`rgba(255,255,255,1)`,n.globalAlpha=t.rim,n.lineWidth=3.5;for(let e of t.lobes)n.beginPath(),n.ellipse(e.x,e.y,e.rx,e.ry,e.turn,0,Math.PI*2),n.stroke();let i=()=>{n.beginPath();for(let e of t.lobes){let t=Math.max(1,e.rx-1.5);n.moveTo(e.x+Math.cos(e.turn)*t,e.y+Math.sin(e.turn)*t),n.ellipse(e.x,e.y,t,Math.max(1,e.ry-1.5),e.turn,0,Math.PI*2)}n.fill()};n.globalCompositeOperation=`destination-out`,n.globalAlpha=1,i(),n.globalCompositeOperation=`source-over`,n.globalAlpha=t.fill,i();for(let e=0;e{let t=t=>Math.round((e>>t&255)*.8);return`rgb(${t(16)},${t(8)},${t(0)})`},PE=class{scene;size;mesh;canvas;context;texture;source;uploader=null;region=new Db;regionAt=new q;material;geometry;stamps=[];tinted=new Map;pixelsPerMetre;dirty=!1;sinceUpload=0;uploadInterval=OE;painted=0;constructor(e,t=1024){this.scene=e,this.size=t,this.canvas=document.createElement(`canvas`),this.canvas.width=t,this.canvas.height=t,this.context=this.canvas.getContext(`2d`),this.context?.clearRect(0,0,t,t);for(let e=0;e3.05||Math.abs(t)>3.05)return;let c=this.context;if(this.painted+=1,this.dirty=!0,this.mesh.visible=!0,c===null)return;let l=this.tintedStamp(o,s),u=this.pixel(e,t),d=Math.max(1,n*this.pixelsPerMetre),f=Math.max(1,r*this.pixelsPerMetre);this.grow(u.x,u.y,Math.hypot(d,f)/2),c.save(),c.globalAlpha=K.clamp(a,0,1),c.translate(u.x,u.y),c.rotate(Number.isFinite(i)?i:0),c.drawImage(l,-d/2,-f/2,d,f),c.restore()}tintedStamp(e,t){let n=this.tinted.get(e);return n===void 0&&(n=this.stamps.map(t=>{let n=document.createElement(`canvas`);n.width=EE,n.height=EE;let r=n.getContext(`2d`);return r!==null&&(r.drawImage(t,0,0),r.globalCompositeOperation=`source-in`,r.fillStyle=NE(e),r.fillRect(0,0,EE,EE)),n}),this.tinted.set(e,n)),n[Math.abs(Math.trunc(t))%DE]}pool(e,t,n,r,i){this.stain(e,t,n*2.3,n*2,i*1.7,r*.8,4851467,i);let a=this.context;if(a===null||Math.abs(e)>3.05||Math.abs(t)>3.05)return;let o=this.pixel(e,t),s=Math.max(1,n*1.15*this.pixelsPerMetre);this.grow(o.x,o.y,s);let c=a.createRadialGradient(o.x,o.y,0,o.x,o.y,s);c.addColorStop(0,`rgba(40,3,6,0.9)`),c.addColorStop(.65,`rgba(58,5,9,0.65)`),c.addColorStop(1,`rgba(70,7,11,0)`),a.save(),a.globalAlpha=K.clamp(r,0,1),a.fillStyle=c,a.beginPath(),a.ellipse(o.x,o.y,s,s*.86,i*.9,0,Math.PI*2),a.fill(),a.restore()}update(e){if(this.sinceUpload+=Number.isFinite(e)?Math.max(0,e):0,!this.dirty||this.sinceUploadt.min.x&&t.max.y>t.min.y?this.uploader.copyTextureToTexture(this.source,this.texture,t,this.regionAt.copy(t.min)):this.texture.needsUpdate=!0,t.makeEmpty(),this.dirty=!1,this.sinceUpload=0}clear(){this.context?.clearRect(0,0,this.size,this.size),this.painted=0,this.dirty=!1,this.region.makeEmpty(),this.texture.needsUpdate=!0,this.mesh.visible=!1}dispose(){this.scene.remove(this.mesh),this.texture.dispose(),this.source.dispose(),this.material.dispose(),this.geometry.dispose()}},FE=` uniform float uGearBlood; varying vec3 vGearPos; -`,fE=` +`,IE=` #ifdef USE_MAP { float scanned = dot(sampledDiffuseColor.rgb, vec3(0.2126, 0.7152, 0.0722)); @@ -4473,16 +4473,16 @@ varying vec3 vGearPos; diffuseColor.rgb = mix(diffuseColor.rgb, vec3(0.11, 0.003, 0.005), gearSoaked * 0.9); } #endif -`,pE=` +`,LE=` roughnessFactor = mix(mix(roughnessFactor, 0.8, gearTrim), 0.2, gearSoaked); -`;function mE(e,t=!1,n=`gloves`){let r={value:0};return n===`trunks`&&(e.defines={...e.defines,GEAR_TRUNKS:``}),e.onBeforeCompile=e=>{e.uniforms.uGearBlood=r,e.vertexShader=e.vertexShader.replace(`#include `,`#include \n${t?`attribute vec3 bindPosition;`:``}\n${dE}`).replace(`#include `,`#include \nvGearPos = ${t?`bindPosition`:`position`};`),e.fragmentShader=e.fragmentShader.replace(`#include `,`#include \n${dE}\nfloat gearSoaked = 0.0;\nfloat gearTrim = 0.0;`).replace(`#include `,`#include \n${fE}`).replace(`#include `,`#include \n${pE}`)},e.customProgramCacheKey=()=>`hands-gear-${t?`baked`:`live`}`,e.needsUpdate=!0,r}function hE(){let e=new vv(1,2);e.deleteAttribute(`normal`),e.deleteAttribute(`uv`);let t=vw(e,1e-4);e.dispose();let n=t.getAttribute(`position`),r=new J;for(let e=0;e=95?t>=120?2:1:+(e===`hit`&&t>=115):0}function vE(e,t){return Math.min(140,Math.round(Math.max(0,e)*1.4+Math.max(0,t-50)*.5))}var yE=1.1,bE=.6,xE=.35,SE=1.2;function CE(){let e=new Sv(1,8,6),t=e.getAttribute(`position`);for(let e=0;e1+(e-1)*28+t%28;for(let e=0;e<28;e+=1)a.push(0,o(1,e+1),o(1,e));for(let e=1;e<6;e+=1)for(let t=0;t<28;t+=1)a.push(o(e,t),o(e,t+1),o(e+1,t)),a.push(o(e,t+1),o(e+1,t+1),o(e+1,t));let s=new lg;return s.setAttribute(`position`,new Zh(r,3)),s.setAttribute(`uv`,new Zh(i,2)),s.setIndex(a),s.computeVertexNormals(),s}function OE(e,t){let n=e.getAttribute(`position`),r=e.getIndex();if(r===null)return[];let i=new Map,a=new Int32Array(n.count),o=new Uint8Array(n.count),s=new J;for(let e=0;eo[e]===1);for(let e=0;e<3;e+=1){let r=a[t[e]],o=a[t[(e+1)%3]],s=r=2&&l.push(Math.floor(e/n.count),e%n.count);return l}var kE=.5,AE=new J,jE=new J,ME=new J,NE=new J,PE=new J;function FE(e,t,n){PE.copy(e).addScaledVector(t,-e.dot(t)).multiplyScalar(kE/n).add(t).normalize()}function IE(e,t,n,r,i=.01,a){let o=Math.floor(t.length/6),s=e.getAttribute(`position`),c=e.getAttribute(`normal`),l=e.getAttribute(`uv`);(s===void 0||c===void 0||l===void 0||s.count!==o*3)&&(s=new Jh(new Float32Array(o*9),3).setUsage(xp),c=new Jh(new Float32Array(o*9),3).setUsage(xp),l=new Jh(new Float32Array(o*6),2).setUsage(xp),e.setAttribute(`position`,s),e.setAttribute(`normal`,c),e.setAttribute(`uv`,l)),AE.set(1,0,0),Math.abs(r.x)>.9&&AE.set(0,0,1),a!==void 0&&a.lengthSq()>1e-8&&Math.abs(a.dot(r))<.95*a.length()&&AE.copy(a),jE.crossVectors(r,AE).normalize(),AE.crossVectors(jE,r).normalize();let u=1e-6;for(let e=0;e(n=Math.imul(n^n>>>15,1|n),n^=n+Math.imul(n^n>>>7,61|n),((n^n>>>14)>>>0)/4294967296);for(let e=0;e<46;e+=1){let e=r()*Math.PI*2,n=14+r()*42;t.fillStyle=r()<.5?`rgba(150,28,30,0.55)`:`rgba(40,4,8,0.5)`,t.beginPath(),t.ellipse(64+Math.cos(e)*n,64+Math.sin(e)*n,3+r()*6,2+r()*3,e,0,Math.PI*2),t.fill()}let i=(e,n,r,i)=>{t.fillStyle=i,t.beginPath(),t.arc(e,n,r,0,Math.PI*2),t.fill()};i(64,38,10,`#8f7c64`),i(61,36,4.5,`#6a2a25`),i(66,78,7,`#7a3c34`),i(66,78,4.5,`#150203`),i(41,64,3,`#1d0204`),i(90,69,2.6,`#1d0204`);for(let e=0;e<70;e+=1){let e=r()*Math.PI*2,t=r()*60;i(64+Math.cos(e)*t,64+Math.sin(e)*t,.6+r()*1.6,r()<.4?`rgba(190,60,50,0.5)`:`rgba(20,2,4,0.55)`)}RE(t)}let n=new F_(e);return n.colorSpace=hp,n}function RE(e){e.lineWidth=7,e.strokeStyle=`rgba(214,178,92,0.85)`,e.beginPath(),e.arc(64,64,55,0,Math.PI*2),e.stroke(),e.lineWidth=4,e.strokeStyle=`#b8775c`,e.beginPath(),e.arc(64,64,61,0,Math.PI*2),e.stroke()}function zE(){let e=document.createElement(`canvas`);e.width=128,e.height=128;let t=e.getContext(`2d`);if(t!==null){let e=t.createRadialGradient(64,64,6,64,64,64);e.addColorStop(0,`#741014`),e.addColorStop(.7,`#52090d`),e.addColorStop(1,`#300407`),t.fillStyle=e,t.fillRect(0,0,128,128);let n=(e,n,r,i)=>{t.fillStyle=i,t.beginPath(),t.arc(e,n,r,0,Math.PI*2),t.fill()};for(let[e,t,r]of[[46,60,13],[84,66,10]])n(e,t,r,`#e4d8c0`),n(e,t,r*.62,`#a4483c`),n(e-r*.2,t-r*.2,r*.25,`rgba(220,110,90,0.6)`);for(let e=0;e<9;e+=1){let t=Math.PI*(.15+e/8*.7);n(64+Math.cos(t)*34,64+Math.sin(t)*34,3.2,`#d9c9b3`)}n(30,84,3.4,`#1a0204`),n(98,46,3,`#1a0204`),n(66,30,2.6,`#1a0204`),RE(t)}let n=new F_(e);return n.colorSpace=hp,n}function BE(){let e=.09,t=.007,n=[];for(let e=0;e<9;e+=1){let t=e/9*Math.PI*2,r=.32*(.62+.38*Math.abs(Math.sin(e*2.3+.4)));n.push([Math.cos(t)*r,Math.sin(t)*r])}let r=(t,n,r)=>{let i=Math.hypot(t,n,1);return[t/i*r,n/i*r,1/i*r-e]},i=[],a=[],o=[.07,.035,.025],s=[.78,.7,.58],c=[.42,.05,.05],l=(e,t,n,r)=>{i.push(...e,...t,...n);for(let e=0;e<3;e+=1)a.push(...r)};for(let i=0;i<9;i+=1){let[a,u]=n[i],[d,f]=n[(i+1)%9];l(r(0,0,e),r(a,u,e),r(d,f,e),o),l(r(0,0,e-t),r(d,f,e-t),r(a,u,e-t),i%3==0?s:c),l(r(a,u,e),r(a,u,e-t),r(d,f,e),s),l(r(d,f,e),r(a,u,e-t),r(d,f,e-t),s)}let u=new lg;return u.setAttribute(`position`,new Zh(i,3)),u.setAttribute(`color`,new Zh(a,3)),u.computeVertexNormals(),u.computeBoundingSphere(),u}function VE(){let e=document.createElement(`canvas`);e.width=128,e.height=128;let t=e.getContext(`2d`);if(t!==null){let e=t.createRadialGradient(64,60,6,64,64,66);e.addColorStop(0,`#7a1016`),e.addColorStop(.75,`#530a0e`),e.addColorStop(1,`#300408`),t.fillStyle=e,t.fillRect(0,0,128,128),t.fillStyle=`#8a2a2e`,t.beginPath(),t.ellipse(64,50,22,17,0,0,Math.PI*2),t.fill(),t.fillStyle=`rgba(220,120,120,0.35)`,t.beginPath(),t.ellipse(60,45,9,5,-.3,0,Math.PI*2),t.fill(),t.strokeStyle=`#a99c86`,t.lineWidth=5,t.beginPath(),t.ellipse(64,62,50,50,0,Math.PI*.08,Math.PI*.92),t.stroke();for(let e=0;e<12;e+=1){let n=Math.PI*(.14+e/11*.72);t.save(),t.translate(64+Math.cos(n)*42,62+Math.sin(n)*42),t.rotate(n+Math.PI/2),t.fillStyle=e%5==2?`#3a0508`:`#ece4cf`,t.fillRect(-3.5,-4.5,7,9),t.restore()}let n=625341585,r=()=>(n=Math.imul(n^n>>>15,1|n),n^=n+Math.imul(n^n>>>7,61|n),((n^n>>>14)>>>0)/4294967296);for(let e=0;e<60;e+=1)t.fillStyle=r()<.5?`rgba(150,20,24,0.6)`:`rgba(20,2,4,0.5)`,t.beginPath(),t.arc(r()*128,r()*128,.8+r()*2.2,0,Math.PI*2),t.fill();RE(t)}let n=new F_(e);return n.colorSpace=hp,n}function HE(){let e=document.createElement(`canvas`);e.width=128,e.height=64;let t=e.getContext(`2d`);if(t!==null){let e=t.createLinearGradient(0,0,128,0);e.addColorStop(0,`#e9ddd4`),e.addColorStop(.42,`#e9ddd4`),e.addColorStop(.62,`#8a2a2c`),e.addColorStop(.85,`#4a070b`),e.addColorStop(1,`#e9ddd4`),t.fillStyle=e,t.fillRect(0,0,128,64),t.strokeStyle=`rgba(170,20,26,0.75)`,t.lineWidth=.8;for(let e=0;e<14;e+=1){let n=e/14*Math.PI*2;t.beginPath(),t.moveTo(32+Math.cos(n)*30,32+Math.sin(n)*26),t.quadraticCurveTo(32+Math.cos(n+.3)*20,32+Math.sin(n+.3)*18,32+Math.cos(n)*11,32+Math.sin(n)*11),t.stroke()}let n=t.createRadialGradient(32,32,2,32,32,9);n.addColorStop(0,`#6b4524`),n.addColorStop(.8,`#4a2d14`),n.addColorStop(1,`#1e1208`),t.fillStyle=n,t.beginPath(),t.arc(32,32,9,0,Math.PI*2),t.fill(),t.fillStyle=`#050302`,t.beginPath(),t.arc(32,32,4,0,Math.PI*2),t.fill(),t.fillStyle=`rgba(255,255,255,0.85)`,t.beginPath(),t.arc(29.5,29.5,1.4,0,Math.PI*2),t.fill()}let n=new F_(e);return n.colorSpace=hp,n}var UE=[{name:`leftEye`,position:[2.4,120,3.4],radius:3.4,cutHalfLength:0,bleeds:!1},{name:`rightEye`,position:[-2.8,120.1,3.2],radius:3.4,cutHalfLength:0,bleeds:!1},{name:`leftBrow`,position:[2.9,123.4,3],radius:2.2,cutHalfLength:1.1,bleeds:!0},{name:`rightBrow`,position:[-2.7,123,3.3],radius:2.2,cutHalfLength:1.1,bleeds:!0},{name:`nose`,position:[0,117,5.3],radius:1.6,cutHalfLength:0,bleeds:!0},{name:`mouth`,position:[0,114.3,4.6],radius:1.8,cutHalfLength:.9,bleeds:!0},{name:`leftCheek`,position:[3.4,117.8,3.4],radius:3,cutHalfLength:.8,bleeds:!0},{name:`rightCheek`,position:[-3.4,117.9,3.3],radius:3,cutHalfLength:.8,bleeds:!0},{name:`chin`,position:[0,110.8,4.2],radius:2.2,cutHalfLength:0,bleeds:!1},{name:`leftJaw`,position:[4.6,113,1.4],radius:2.6,cutHalfLength:0,bleeds:!1},{name:`rightJaw`,position:[-4.6,113,1.4],radius:2.6,cutHalfLength:0,bleeds:!1},{name:`forehead`,position:[0,125.5,3.5],radius:3.2,cutHalfLength:1.3,bleeds:!0}],WE=[{name:`leftRibs`,position:[13.5,98,1],radius:7.5,cutHalfLength:0,bleeds:!1},{name:`rightRibs`,position:[-13.5,98,1],radius:7.5,cutHalfLength:0,bleeds:!1},{name:`solarPlexus`,position:[.5,96.5,5.5],radius:6,cutHalfLength:0,bleeds:!1},{name:`leftPec`,position:[9,96.2,4.4],radius:6,cutHalfLength:0,bleeds:!1},{name:`rightPec`,position:[-8.8,96.2,4.4],radius:6,cutHalfLength:0,bleeds:!1},{name:`neckSmear`,position:[.4,105.5,5.8],radius:4,cutHalfLength:0,bleeds:!0},{name:`leftShoulderSmear`,position:[10.5,104,4.5],radius:3,cutHalfLength:0,bleeds:!0},{name:`rightShoulderSmear`,position:[-10.5,104,4.5],radius:3,cutHalfLength:0,bleeds:!0},{name:`unused0`,position:[0,-100,0],radius:0,cutHalfLength:0,bleeds:!1},{name:`unused1`,position:[0,-100,0],radius:0,cutHalfLength:0,bleeds:!1},{name:`unused2`,position:[0,-100,0],radius:0,cutHalfLength:0,bleeds:!1},{name:`unused3`,position:[0,-100,0],radius:0,cutHalfLength:0,bleeds:!1}],GE=112.4,KE=.3,qE=114.5,JE=1.8,YE=1e3,XE=` +`;function RE(e,t=!1,n=`gloves`){let r={value:0};return n===`trunks`&&(e.defines={...e.defines,GEAR_TRUNKS:``}),e.onBeforeCompile=e=>{e.uniforms.uGearBlood=r,e.vertexShader=e.vertexShader.replace(`#include `,`#include \n${t?`attribute vec3 bindPosition;`:``}\n${FE}`).replace(`#include `,`#include \nvGearPos = ${t?`bindPosition`:`position`};`),e.fragmentShader=e.fragmentShader.replace(`#include `,`#include \n${FE}\nfloat gearSoaked = 0.0;\nfloat gearTrim = 0.0;`).replace(`#include `,`#include \n${IE}`).replace(`#include `,`#include \n${LE}`)},e.customProgramCacheKey=()=>`hands-gear-${t?`baked`:`live`}`,e.needsUpdate=!0,r}function zE(){let e=new Lv(1,2);e.deleteAttribute(`normal`),e.deleteAttribute(`uv`);let t=Hw(e,1e-4);e.dispose();let n=t.getAttribute(`position`),r=new J;for(let e=0;e=120?5:t>=90?3:t>=60?2:+(t>=40):e===`hit`?t>=130?4:t>=100?3:t>=75?2:+(t>=50):0:0}function HE(e,t){return Math.min(800,Math.round(Math.max(0,e)*4.5+Math.max(0,t)*2.8))}var UE=1.1,WE=.6,GE=.35,KE=1.2;function qE(){let e=new Vv(1,8,6),t=e.getAttribute(`position`);for(let e=0;e1+(e-1)*28+t%28;for(let e=0;e<28;e+=1)a.push(0,o(1,e+1),o(1,e));for(let e=1;e<6;e+=1)for(let t=0;t<28;t+=1)a.push(o(e,t),o(e,t+1),o(e+1,t)),a.push(o(e,t+1),o(e+1,t+1),o(e+1,t));let s=new Og;return s.setAttribute(`position`,new gg(r,3)),s.setAttribute(`uv`,new gg(i,2)),s.setIndex(a),s.computeVertexNormals(),s}function QE(e,t){let n=e.getAttribute(`position`),r=e.getIndex();if(r===null)return[];let i=new Map,a=new Int32Array(n.count),o=new Uint8Array(n.count),s=new J;for(let e=0;eo[e]===1);for(let e=0;e<3;e+=1){let r=a[t[e]],o=a[t[(e+1)%3]],s=r=2&&l.push(Math.floor(e/n.count),e%n.count);return l}var $E=.5,eD=new J,tD=new J,nD=new J,rD=new J,iD=new J;function aD(e,t,n){iD.copy(e).addScaledVector(t,-e.dot(t)).multiplyScalar($E/n).add(t).normalize()}function oD(e,t,n,r,i=.01,a){let o=Math.floor(t.length/6),s=e.getAttribute(`position`),c=e.getAttribute(`normal`),l=e.getAttribute(`uv`);(s===void 0||c===void 0||l===void 0||s.count!==o*3)&&(s=new pg(new Float32Array(o*9),3).setUsage(Bp),c=new pg(new Float32Array(o*9),3).setUsage(Bp),l=new pg(new Float32Array(o*6),2).setUsage(Bp),e.setAttribute(`position`,s),e.setAttribute(`normal`,c),e.setAttribute(`uv`,l)),eD.set(1,0,0),Math.abs(r.x)>.9&&eD.set(0,0,1),a!==void 0&&a.lengthSq()>1e-8&&Math.abs(a.dot(r))<.95*a.length()&&eD.copy(a),tD.crossVectors(r,eD).normalize(),eD.crossVectors(tD,r).normalize();let u=1e-6;for(let e=0;e(n=Math.imul(n^n>>>15,1|n),n^=n+Math.imul(n^n>>>7,61|n),((n^n>>>14)>>>0)/4294967296);for(let e=0;e<46;e+=1){let e=r()*Math.PI*2,n=14+r()*42;t.fillStyle=r()<.5?`rgba(150,28,30,0.55)`:`rgba(40,4,8,0.5)`,t.beginPath(),t.ellipse(64+Math.cos(e)*n,64+Math.sin(e)*n,3+r()*6,2+r()*3,e,0,Math.PI*2),t.fill()}let i=(e,n,r,i)=>{t.fillStyle=i,t.beginPath(),t.arc(e,n,r,0,Math.PI*2),t.fill()};i(64,38,10,`#8f7c64`),i(61,36,4.5,`#6a2a25`),i(66,78,7,`#7a3c34`),i(66,78,4.5,`#150203`),i(41,64,3,`#1d0204`),i(90,69,2.6,`#1d0204`);for(let e=0;e<70;e+=1){let e=r()*Math.PI*2,t=r()*60;i(64+Math.cos(e)*t,64+Math.sin(e)*t,.6+r()*1.6,r()<.4?`rgba(190,60,50,0.5)`:`rgba(20,2,4,0.55)`)}cD(t)}let n=new ev(e);return n.colorSpace=Pp,n}function cD(e){e.lineWidth=7,e.strokeStyle=`rgba(214,178,92,0.85)`,e.beginPath(),e.arc(64,64,55,0,Math.PI*2),e.stroke(),e.lineWidth=4,e.strokeStyle=`#b8775c`,e.beginPath(),e.arc(64,64,61,0,Math.PI*2),e.stroke()}function lD(){let e=document.createElement(`canvas`);e.width=128,e.height=128;let t=e.getContext(`2d`);if(t!==null){let e=t.createRadialGradient(64,64,6,64,64,64);e.addColorStop(0,`#741014`),e.addColorStop(.7,`#52090d`),e.addColorStop(1,`#300407`),t.fillStyle=e,t.fillRect(0,0,128,128);let n=(e,n,r,i)=>{t.fillStyle=i,t.beginPath(),t.arc(e,n,r,0,Math.PI*2),t.fill()};for(let[e,t,r]of[[46,60,13],[84,66,10]])n(e,t,r,`#e4d8c0`),n(e,t,r*.62,`#a4483c`),n(e-r*.2,t-r*.2,r*.25,`rgba(220,110,90,0.6)`);for(let e=0;e<9;e+=1){let t=Math.PI*(.15+e/8*.7);n(64+Math.cos(t)*34,64+Math.sin(t)*34,3.2,`#d9c9b3`)}n(30,84,3.4,`#1a0204`),n(98,46,3,`#1a0204`),n(66,30,2.6,`#1a0204`),cD(t)}let n=new ev(e);return n.colorSpace=Pp,n}function uD(){let e=.09,t=.007,n=[];for(let e=0;e<9;e+=1){let t=e/9*Math.PI*2,r=.32*(.62+.38*Math.abs(Math.sin(e*2.3+.4)));n.push([Math.cos(t)*r,Math.sin(t)*r])}let r=(t,n,r)=>{let i=Math.hypot(t,n,1);return[t/i*r,n/i*r,1/i*r-e]},i=[],a=[],o=[.07,.035,.025],s=[.78,.7,.58],c=[.42,.05,.05],l=(e,t,n,r)=>{i.push(...e,...t,...n);for(let e=0;e<3;e+=1)a.push(...r)};for(let i=0;i<9;i+=1){let[a,u]=n[i],[d,f]=n[(i+1)%9];l(r(0,0,e),r(a,u,e),r(d,f,e),o),l(r(0,0,e-t),r(d,f,e-t),r(a,u,e-t),i%3==0?s:c),l(r(a,u,e),r(a,u,e-t),r(d,f,e),s),l(r(d,f,e),r(a,u,e-t),r(d,f,e-t),s)}let u=new Og;return u.setAttribute(`position`,new gg(i,3)),u.setAttribute(`color`,new gg(a,3)),u.computeVertexNormals(),u.computeBoundingSphere(),u}function dD(){let e=document.createElement(`canvas`);e.width=128,e.height=128;let t=e.getContext(`2d`);if(t!==null){let e=t.createRadialGradient(64,60,6,64,64,66);e.addColorStop(0,`#7a1016`),e.addColorStop(.75,`#530a0e`),e.addColorStop(1,`#300408`),t.fillStyle=e,t.fillRect(0,0,128,128),t.fillStyle=`#8a2a2e`,t.beginPath(),t.ellipse(64,50,22,17,0,0,Math.PI*2),t.fill(),t.fillStyle=`rgba(220,120,120,0.35)`,t.beginPath(),t.ellipse(60,45,9,5,-.3,0,Math.PI*2),t.fill(),t.strokeStyle=`#a99c86`,t.lineWidth=5,t.beginPath(),t.ellipse(64,62,50,50,0,Math.PI*.08,Math.PI*.92),t.stroke();for(let e=0;e<12;e+=1){let n=Math.PI*(.14+e/11*.72);t.save(),t.translate(64+Math.cos(n)*42,62+Math.sin(n)*42),t.rotate(n+Math.PI/2),t.fillStyle=e%5==2?`#3a0508`:`#ece4cf`,t.fillRect(-3.5,-4.5,7,9),t.restore()}let n=625341585,r=()=>(n=Math.imul(n^n>>>15,1|n),n^=n+Math.imul(n^n>>>7,61|n),((n^n>>>14)>>>0)/4294967296);for(let e=0;e<60;e+=1)t.fillStyle=r()<.5?`rgba(150,20,24,0.6)`:`rgba(20,2,4,0.5)`,t.beginPath(),t.arc(r()*128,r()*128,.8+r()*2.2,0,Math.PI*2),t.fill();cD(t)}let n=new ev(e);return n.colorSpace=Pp,n}function fD(){let e=document.createElement(`canvas`);e.width=128,e.height=64;let t=e.getContext(`2d`);if(t!==null){let e=t.createLinearGradient(0,0,128,0);e.addColorStop(0,`#e9ddd4`),e.addColorStop(.42,`#e9ddd4`),e.addColorStop(.62,`#8a2a2c`),e.addColorStop(.85,`#4a070b`),e.addColorStop(1,`#e9ddd4`),t.fillStyle=e,t.fillRect(0,0,128,64),t.strokeStyle=`rgba(170,20,26,0.75)`,t.lineWidth=.8;for(let e=0;e<14;e+=1){let n=e/14*Math.PI*2;t.beginPath(),t.moveTo(32+Math.cos(n)*30,32+Math.sin(n)*26),t.quadraticCurveTo(32+Math.cos(n+.3)*20,32+Math.sin(n+.3)*18,32+Math.cos(n)*11,32+Math.sin(n)*11),t.stroke()}let n=t.createRadialGradient(32,32,2,32,32,9);n.addColorStop(0,`#6b4524`),n.addColorStop(.8,`#4a2d14`),n.addColorStop(1,`#1e1208`),t.fillStyle=n,t.beginPath(),t.arc(32,32,9,0,Math.PI*2),t.fill(),t.fillStyle=`#050302`,t.beginPath(),t.arc(32,32,4,0,Math.PI*2),t.fill(),t.fillStyle=`rgba(255,255,255,0.85)`,t.beginPath(),t.arc(29.5,29.5,1.4,0,Math.PI*2),t.fill()}let n=new ev(e);return n.colorSpace=Pp,n}var pD=[{name:`leftEye`,position:[2.4,120,3.4],radius:3.4,cutHalfLength:0,bleeds:!1},{name:`rightEye`,position:[-2.8,120.1,3.2],radius:3.4,cutHalfLength:0,bleeds:!1},{name:`leftBrow`,position:[2.9,123.4,3],radius:2.2,cutHalfLength:1.1,bleeds:!0},{name:`rightBrow`,position:[-2.7,123,3.3],radius:2.2,cutHalfLength:1.1,bleeds:!0},{name:`nose`,position:[0,117,5.3],radius:1.6,cutHalfLength:0,bleeds:!0},{name:`mouth`,position:[0,114.3,4.6],radius:1.8,cutHalfLength:.9,bleeds:!0},{name:`leftCheek`,position:[3.4,117.8,3.4],radius:3,cutHalfLength:.8,bleeds:!0},{name:`rightCheek`,position:[-3.4,117.9,3.3],radius:3,cutHalfLength:.8,bleeds:!0},{name:`chin`,position:[0,110.8,4.2],radius:2.2,cutHalfLength:0,bleeds:!1},{name:`leftJaw`,position:[4.6,113,1.4],radius:2.6,cutHalfLength:0,bleeds:!1},{name:`rightJaw`,position:[-4.6,113,1.4],radius:2.6,cutHalfLength:0,bleeds:!1},{name:`forehead`,position:[0,125.5,3.5],radius:3.2,cutHalfLength:1.3,bleeds:!0}],mD=[{name:`leftRibs`,position:[13.5,98,1],radius:7.5,cutHalfLength:0,bleeds:!1},{name:`rightRibs`,position:[-13.5,98,1],radius:7.5,cutHalfLength:0,bleeds:!1},{name:`solarPlexus`,position:[.5,96.5,5.5],radius:6,cutHalfLength:0,bleeds:!1},{name:`leftPec`,position:[9,96.2,4.4],radius:6,cutHalfLength:0,bleeds:!1},{name:`rightPec`,position:[-8.8,96.2,4.4],radius:6,cutHalfLength:0,bleeds:!1},{name:`neckSmear`,position:[.4,105.5,5.8],radius:4,cutHalfLength:0,bleeds:!0},{name:`leftShoulderSmear`,position:[10.5,104,4.5],radius:3,cutHalfLength:0,bleeds:!0},{name:`rightShoulderSmear`,position:[-10.5,104,4.5],radius:3,cutHalfLength:0,bleeds:!0},{name:`unused0`,position:[0,-100,0],radius:0,cutHalfLength:0,bleeds:!1},{name:`unused1`,position:[0,-100,0],radius:0,cutHalfLength:0,bleeds:!1},{name:`unused2`,position:[0,-100,0],radius:0,cutHalfLength:0,bleeds:!1},{name:`unused3`,position:[0,-100,0],radius:0,cutHalfLength:0,bleeds:!1}],hD=112.4,gD=.3,_D=114.5,vD=1.8,yD=1e3,bD=` uniform float uInjurySever; uniform vec2 uInjurySeverShape; float injuryCutLine(vec3 p) { float around = atan(p.z + 3.6, p.x); return uInjurySever - uInjurySeverShape.x * (p.z - (${(-4).toFixed(1)})) + uInjurySeverShape.y * (0.4 * sin(around * 6.0) + 0.22 * sin(around * 13.0 + 1.7)); } -`,ZE=[0,119,-3.5,0],QE=[0,0,-2,1],$E=[[2.65,120.65,3.6],[-2.75,120.75,3.4]],eD=` +`,xD=[0,119,-3.5,0],SD=[0,0,-2,1],CD=[[2.65,120.65,3.6],[-2.75,120.75,3.4]],wD=` uniform vec4 uInjurySite[12]; uniform float uInjurySwell[12]; uniform vec4 uInjuryCore; @@ -4495,7 +4495,7 @@ uniform vec3 uInjuryImpactPush; uniform vec4 uInjuryNose; uniform mat3 uInjuryBindToPart; varying vec3 vInjuryPos; -`,tD=e=>` +`,TD=e=>` { vec3 injuryBind = ${e?`bindPosition`:`transformed`}; vInjuryPos = injuryBind; @@ -4532,7 +4532,7 @@ varying vec3 vInjuryPos; injuryMoved.z -= uInjuryJaw * 0.4 * jawMask; ${e?`transformed += uInjuryBindToPart * (injuryMoved - injuryBind);`:`transformed = injuryMoved;`} } -`,nD=` +`,ED=` uniform vec4 uInjurySite[12]; uniform vec4 uInjuryCut[12]; uniform float uInjuryBruise[12]; @@ -4544,13 +4544,13 @@ uniform vec4 uInjuryLid[2]; uniform vec2 uInjuryEyeOut; varying vec3 vInjuryPos; float injuryWet = 0.0; -${XE} +${bD} float injuryHash(float n) { return fract(sin(n) * 43758.5453123); } -`,rD=`HANDS_INJURY_OPEN`,iD=` +`,DD=`HANDS_INJURY_OPEN`,OD=` { vec3 injuryPos = vInjuryPos; -#ifdef ${rD} +#ifdef ${DD} { float below = injuryCutLine(injuryPos) - injuryPos.y; if (below < 0.0) discard; @@ -4636,19 +4636,20 @@ float injuryHash(float n) { return fract(sin(n) * 43758.5453123); } float drop = origin.y - injuryPos.y; if (drop < -0.6 || injuryPos.z < origin.z - 3.2) continue; float flow = smoothstep(0.0, 0.3, blood); - float well = (1.0 - smoothstep(0.0, 0.3 + blood * 0.4, distance(injuryPos.xy, origin.xy))) * flow; + float well = (1.0 - smoothstep(0.0, 0.4 + blood * 0.6, distance(injuryPos.xy, origin.xy))) * flow; float w = well; - // Two rivulets of their own lengths run from each wound, wandering, thinning, with a bead at each tip. - for (int k = 0; k < 2; k++) { + // Up to three rivulets of their own lengths run from each wound, wandering, thinning, with a bead at each tip. + for (int k = 0; k < 3; k++) { float fk = float(k); - if (fk > 0.5 && blood < 0.45) break; + if (fk > 0.5 && blood < 0.3) break; + if (fk > 1.5 && blood < 0.7) break; float seed = fract(sin(float(i) * 12.9898 + fk * 78.233) * 43758.5453); - float reach = (2.0 + blood * 9.0) * (fk < 0.5 ? 1.0 : 0.55 + 0.3 * seed); - float start = (fk < 0.5 ? -0.3 : 0.4) * (0.6 + 0.6 * seed) * radius * 0.35; + float reach = (4.0 + blood * 18.0) * (fk < 0.5 ? 1.0 : 0.55 + 0.3 * seed); + float start = (fk < 0.5 ? -0.3 : fk < 1.5 ? 0.4 : 0.05) * (0.6 + 0.6 * seed) * radius * 0.35; float t = clamp(drop / reach, 0.0, 1.0); float wander = (0.35 * sin(injuryPos.y * 1.3 + float(i) * 1.7 + fk * 2.1) + 0.15 * sin(injuryPos.y * 3.7 + fk)) * t; float dx = abs(injuryPos.x - origin.x - start - wander); - float width = (0.26 - 0.12 * t) * (0.7 + 0.45 * min(1.0, blood)); + float width = (0.32 - 0.12 * t) * (0.8 + 0.9 * min(1.4, blood)); float run = (1.0 - smoothstep(width * 0.55, width, dx)) * step(drop, reach) * smoothstep(-0.4, 0.1, drop); float tipY = origin.y - reach; vec2 tip = vec2(origin.x + start + 0.35 * sin(tipY * 1.3 + float(i) * 1.7 + fk * 2.1) + 0.15 * sin(tipY * 3.7 + fk), tipY); @@ -4664,12 +4665,12 @@ float injuryHash(float n) { return fract(sin(n) * 43758.5453123); } float t = clamp(drop / (radius * 3.2 + blood * 10.0), 0.0, 1.0); float across = abs(injuryPos.x - origin.x + 0.9 * sin(injuryPos.y * 0.45 + float(i))); float wash = (1.0 - smoothstep(radius * (0.5 + 0.4 * t), radius * (1.0 + 0.7 * t), across)) * (1.0 - t * t) * smoothstep(-0.6, 0.6, drop) * flow; - diffuseColor.rgb = mix(diffuseColor.rgb, diffuseColor.rgb * vec3(0.95, 0.26, 0.26) + vec3(0.07, 0.0, 0.0), wash * min(1.0, blood) * 0.7); + diffuseColor.rgb = mix(diffuseColor.rgb, diffuseColor.rgb * vec3(0.95, 0.26, 0.26) + vec3(0.07, 0.0, 0.0), wash * min(1.0, blood) * 0.9); w = max(w, wash * 0.5); } injuryWet = max(injuryWet, w); } -#ifdef ${rD} +#ifdef ${DD} // Where a cut or a burst opens the head, its inside shows as raw flesh rather than nothing. if (!gl_FrontFacing) { diffuseColor.rgb = vec3(0.2, 0.012, 0.022); @@ -4678,11 +4679,11 @@ float injuryHash(float n) { return fract(sin(n) * 43758.5453123); } #endif injuryWet *= uInjuryWetness; } -`,aD=` +`,kD=` roughnessFactor = mix(roughnessFactor, 0.18, injuryWet); -`,oD=class{material;sites;uniforms={uInjurySite:{value:[]},uInjuryCut:{value:[]},uInjurySwell:{value:new Float32Array(12)},uInjuryBruise:{value:new Float32Array(12)},uInjuryBlood:{value:new Float32Array(12)},uInjuryJaw:{value:0},uInjuryJawLevel:{value:114.5},uInjuryImpact:{value:new Dm(0,-1e3,0,1)},uInjuryImpactPush:{value:new J},uInjuryNose:{value:new Dm(0,-1e3,0,0)},uInjuryWetness:{value:1},uInjuryRaw:{value:1},uInjurySever:{value:YE},uInjurySeverShape:{value:new q(KE,1)},uInjuryCore:{value:new Dm(...ZE)},uInjuryWash:{value:0},uInjuryLid:{value:[new Dm(0,-1e3,0,0),new Dm(0,-1e3,0,0)]},uInjuryEyeOut:{value:new q},uInjuryBindToPart:{value:new dm}};index=new Map;shadow=null;constructor(e,t,n={core:ZE}){if(this.material=e,this.sites=t,t.length!==12)throw Error(`injury shading requires 12 sites`);this.uniforms.uInjuryCore.value.set(...n.core),this.uniforms.uInjuryWash.value=+(n.wash===!0);for(let[e,t]of(n.lids??[]).slice(0,2).entries())this.uniforms.uInjuryLid.value[e].set(t[0],t[1],t[2],0);for(let[e,n]of t.entries())this.index.set(n.name,e),this.uniforms.uInjurySite.value.push(new Dm(n.position[0],n.position[1],n.position[2],n.radius)),this.uniforms.uInjuryCut.value.push(new Dm(n.cutHalfLength,0,0,0));if(e===null)return;let r=this.uniforms,i=n.baked===!0;e.onBeforeCompile=e=>{Object.assign(e.uniforms,r),e.vertexShader=e.vertexShader.replace(`#include `,`#include \n${eD}`).replace(`#include `,`#include \n${tD(i)}`),e.fragmentShader=e.fragmentShader.replace(`#include `,`#include \n${nD}`).replace(`#include `,`#include \n${iD}`).replace(`#include `,`#include \n${aD}`)},e.customProgramCacheKey=()=>`hands-injury-12${i?`-baked`:``}`,e.needsUpdate=!0}slot(e){let t=this.index.get(e);if(t===void 0)throw Error(`unknown injury site ${e}`);return t}set(e,t){let n=this.slot(e);t.bruise!==void 0&&(this.uniforms.uInjuryBruise.value[n]=K.clamp(t.bruise,0,1.2)),t.swell!==void 0&&(this.uniforms.uInjurySwell.value[n]=K.clamp(t.swell,0,2.2)),t.cut!==void 0&&(this.uniforms.uInjuryCut.value[n].y=K.clamp(t.cut,0,1)),t.blood!==void 0&&(this.uniforms.uInjuryBlood.value[n]=K.clamp(t.blood,0,1.4))}impact(e,t,n){let r=this.uniforms.uInjurySite.value[this.slot(e)];this.uniforms.uInjuryImpact.value.set(r.x,r.y,r.z,n),this.uniforms.uInjuryImpactPush.value.set(t[0],t[1],t[2])}setNoseShift(e){let t=this.index.get(`nose`);if(t===void 0)return;let n=this.uniforms.uInjurySite.value[t];this.uniforms.uInjuryNose.value.set(n.x,n.y,n.z,K.clamp(e,-1.4,1.4)||0)}update(e){let t=this.uniforms.uInjuryImpactPush.value;t.lengthSq()<1e-6||(t.multiplyScalar(Math.exp(-9*e)),t.lengthSq()<1e-4&&t.set(0,0,0))}get impactDepth(){return this.uniforms.uInjuryImpactPush.value.length()}setSevered(e){this.uniforms.uInjurySever.value=e?GE:YE,this.uniforms.uInjurySeverShape.value.set(KE,1),this.setOpen(e)}setBurst(e){this.uniforms.uInjurySever.value=e?qE:YE,this.uniforms.uInjurySeverShape.value.set(e?0:KE,e?JE:1),this.setOpen(e)}get open(){return this.material?.defines?.[rD]!==void 0}setOpen(e){let t=this.material;if(!(t===null||e===this.open)){for(let n of[t,this.shadow]){if(n===null)continue;let t=n.defines??={};e?t[rD]=``:delete t[rD],n.needsUpdate=!0}t.side=e?2:0}}shadowMaterial(){let e=new Iv,t={uInjurySever:this.uniforms.uInjurySever,uInjurySeverShape:this.uniforms.uInjurySeverShape};return e.onBeforeCompile=e=>{Object.assign(e.uniforms,t),e.vertexShader=e.vertexShader.replace(`#include `,`#include +`,AD=class{material;sites;uniforms={uInjurySite:{value:[]},uInjuryCut:{value:[]},uInjurySwell:{value:new Float32Array(12)},uInjuryBruise:{value:new Float32Array(12)},uInjuryBlood:{value:new Float32Array(12)},uInjuryJaw:{value:0},uInjuryJawLevel:{value:114.5},uInjuryImpact:{value:new Km(0,-1e3,0,1)},uInjuryImpactPush:{value:new J},uInjuryNose:{value:new Km(0,-1e3,0,0)},uInjuryWetness:{value:1},uInjuryRaw:{value:1},uInjurySever:{value:yD},uInjurySeverShape:{value:new q(gD,1)},uInjuryCore:{value:new Km(...xD)},uInjuryWash:{value:0},uInjuryLid:{value:[new Km(0,-1e3,0,0),new Km(0,-1e3,0,0)]},uInjuryEyeOut:{value:new q},uInjuryBindToPart:{value:new Am}};index=new Map;shadow=null;constructor(e,t,n={core:xD}){if(this.material=e,this.sites=t,t.length!==12)throw Error(`injury shading requires 12 sites`);this.uniforms.uInjuryCore.value.set(...n.core),this.uniforms.uInjuryWash.value=+(n.wash===!0);for(let[e,t]of(n.lids??[]).slice(0,2).entries())this.uniforms.uInjuryLid.value[e].set(t[0],t[1],t[2],0);for(let[e,n]of t.entries())this.index.set(n.name,e),this.uniforms.uInjurySite.value.push(new Km(n.position[0],n.position[1],n.position[2],n.radius)),this.uniforms.uInjuryCut.value.push(new Km(n.cutHalfLength,0,0,0));if(e===null)return;let r=this.uniforms,i=n.baked===!0;e.onBeforeCompile=e=>{Object.assign(e.uniforms,r),e.vertexShader=e.vertexShader.replace(`#include `,`#include \n${wD}`).replace(`#include `,`#include \n${TD(i)}`),e.fragmentShader=e.fragmentShader.replace(`#include `,`#include \n${ED}`).replace(`#include `,`#include \n${OD}`).replace(`#include `,`#include \n${kD}`)},e.customProgramCacheKey=()=>`hands-injury-12${i?`-baked`:``}`,e.needsUpdate=!0}slot(e){let t=this.index.get(e);if(t===void 0)throw Error(`unknown injury site ${e}`);return t}set(e,t){let n=this.slot(e);t.bruise!==void 0&&(this.uniforms.uInjuryBruise.value[n]=K.clamp(t.bruise,0,1.2)),t.swell!==void 0&&(this.uniforms.uInjurySwell.value[n]=K.clamp(t.swell,0,2.2)),t.cut!==void 0&&(this.uniforms.uInjuryCut.value[n].y=K.clamp(t.cut,0,1)),t.blood!==void 0&&(this.uniforms.uInjuryBlood.value[n]=K.clamp(t.blood,0,1.4))}impact(e,t,n){let r=this.uniforms.uInjurySite.value[this.slot(e)];this.uniforms.uInjuryImpact.value.set(r.x,r.y,r.z,n),this.uniforms.uInjuryImpactPush.value.set(t[0],t[1],t[2])}setNoseShift(e){let t=this.index.get(`nose`);if(t===void 0)return;let n=this.uniforms.uInjurySite.value[t];this.uniforms.uInjuryNose.value.set(n.x,n.y,n.z,K.clamp(e,-1.4,1.4)||0)}update(e){let t=this.uniforms.uInjuryImpactPush.value;t.lengthSq()<1e-6||(t.multiplyScalar(Math.exp(-9*e)),t.lengthSq()<1e-4&&t.set(0,0,0))}get impactDepth(){return this.uniforms.uInjuryImpactPush.value.length()}setSevered(e){this.uniforms.uInjurySever.value=e?hD:yD,this.uniforms.uInjurySeverShape.value.set(gD,1),this.setOpen(e)}setBurst(e){this.uniforms.uInjurySever.value=e?_D:yD,this.uniforms.uInjurySeverShape.value.set(e?0:gD,e?vD:1),this.setOpen(e)}get open(){return this.material?.defines?.[DD]!==void 0}setOpen(e){let t=this.material;if(!(t===null||e===this.open)){for(let n of[t,this.shadow]){if(n===null)continue;let t=n.defines??={};e?t[DD]=``:delete t[DD],n.needsUpdate=!0}t.side=e?2:0}}shadowMaterial(){let e=new ty,t={uInjurySever:this.uniforms.uInjurySever,uInjurySeverShape:this.uniforms.uInjurySeverShape};return e.onBeforeCompile=e=>{Object.assign(e.uniforms,t),e.vertexShader=e.vertexShader.replace(`#include `,`#include varying vec3 vInjuryPos;`).replace(`#include `,`#include -vInjuryPos = transformed;`),e.fragmentShader=e.fragmentShader.replace(`#include `,`#include \nvarying vec3 vInjuryPos;\n${XE}`).replace(`#include `,`#include \n#ifdef ${rD}\nif (vInjuryPos.y > injuryCutLine(vInjuryPos)) discard;\n#endif`)},e.customProgramCacheKey=()=>`hands-injury-shadow`,this.open&&(e.defines={[rD]:``}),this.shadow=e,e}copyFrom(e){let t=e.uniforms,n=this.uniforms;n.uInjuryBruise.value.set(t.uInjuryBruise.value),n.uInjurySwell.value.set(t.uInjurySwell.value),n.uInjuryBlood.value.set(t.uInjuryBlood.value);for(let[e,r]of n.uInjuryCut.value.entries())r.y=t.uInjuryCut.value[e]?.y??0;for(let[e,r]of n.uInjuryLid.value.entries())r.w=t.uInjuryLid.value[e]?.w??0;n.uInjuryEyeOut.value.copy(t.uInjuryEyeOut.value),n.uInjuryNose.value.copy(t.uInjuryNose.value),n.uInjuryJaw.value=t.uInjuryJaw.value,n.uInjuryWetness.value=t.uInjuryWetness.value,n.uInjuryRaw.value=t.uInjuryRaw.value,n.uInjuryImpactPush.value.set(0,0,0)}setBindToPart(e){this.uniforms.uInjuryBindToPart.value.copy(e)}setRawCuts(e){this.uniforms.uInjuryRaw.value=K.clamp(e,0,1)||0}setJaw(e){this.uniforms.uInjuryJaw.value=K.clamp(e,0,1)}setEyesShut(e,t){let[n,r]=this.uniforms.uInjuryLid.value;n.y>-500&&(n.w=K.clamp(e,0,1)||0),r.y>-500&&(r.w=K.clamp(t,0,1)||0)}setEyeOut(e){let t=this.uniforms.uInjuryLid.value,n=e===`left`&&t[0].y>-500,r=e===`right`&&t[1].y>-500;this.uniforms.uInjuryEyeOut.value.set(+!!n,+!!r),this.index.has(`leftEye`)&&this.set(`leftEye`,{blood:n?1.3:0}),this.index.has(`rightEye`)&&this.set(`rightEye`,{blood:r?1.3:0})}get eyeOut(){let e=this.uniforms.uInjuryEyeOut.value;return e.x>0?`left`:e.y>0?`right`:null}get eyesShut(){return[this.uniforms.uInjuryLid.value[0].w,this.uniforms.uInjuryLid.value[1].w]}clear(){this.uniforms.uInjuryBruise.value.fill(0),this.uniforms.uInjurySwell.value.fill(0),this.uniforms.uInjuryBlood.value.fill(0);for(let e of this.uniforms.uInjuryCut.value)e.y=0;this.uniforms.uInjuryJaw.value=0;for(let e of this.uniforms.uInjuryLid.value)e.w=0;this.uniforms.uInjuryEyeOut.value.set(0,0),this.uniforms.uInjuryNose.value.w=0,this.uniforms.uInjuryImpactPush.value.set(0,0,0)}level(e){let t=this.slot(e);return{bruise:this.uniforms.uInjuryBruise.value[t],swell:this.uniforms.uInjurySwell.value[t],cut:this.uniforms.uInjuryCut.value[t].y,blood:this.uniforms.uInjuryBlood.value[t]}}},sD=e=>e===`off`?0:e===`reduced`?.35:1,cD=330;function lD(e,t){return K.clamp((e-cD)/(d-cD)+Math.max(0,t-200)/1600,0,1)}var uD=1.8,dD=750,fD=380;function pD(e,t,n){let r=sD(n),i=n===`full`?1:.6;e.setRawCuts(n===`full`?1:n===`reduced`?.6:0);let a=e=>Math.min(1.2,e/380+t.swelling/900),o=e=>Math.min(2,(e/600+t.swelling/900)*i);e.set(`leftEye`,{bruise:a(t.left_eye),swell:o(t.left_eye)}),e.set(`rightEye`,{bruise:a(t.right_eye),swell:o(t.right_eye)}),e.setEyesShut(lD(t.left_eye,t.swelling),lD(t.right_eye,t.swelling));let s=e=>Math.min(1,e/220),c=e=>Math.min(1.4,(e/260+t.bleeding/520)*r);e.set(`leftBrow`,{bruise:Math.min(1,t.left_eye/700),swell:Math.min(1.2,t.left_eye/900)*i,cut:s(t.left_cut),blood:c(t.left_cut)}),e.set(`rightBrow`,{bruise:Math.min(1,t.right_eye/700),swell:Math.min(1.2,t.right_eye/900)*i,cut:s(t.right_cut),blood:c(t.right_cut)});let l=Math.min(1,t.head/950+t.swelling/1100),u=Math.min(uD,t.swelling/520)*i,d=e=>Math.min(1,Math.max(0,e-350)/(dD-350));e.set(`leftCheek`,{bruise:l*.9,swell:u,cut:d(t.left_cut),blood:Math.min(1,Math.max(0,t.left_cut-350)/400)*r}),e.set(`rightCheek`,{bruise:l*.85,swell:u,cut:d(t.right_cut),blood:Math.min(1,Math.max(0,t.right_cut-350)/400)*r}),e.set(`nose`,{bruise:Math.min(1,t.head/800),swell:Math.min(.8,t.head/1400)*i,blood:Math.min(1.4,(Math.max(0,t.head-160)/520+t.bleeding/420)*r)}),e.set(`mouth`,{bruise:Math.min(.8,t.head/1100),cut:Math.min(1,Math.max(0,t.head-420)/700),blood:Math.min(1.2,(Math.max(0,t.head-280)/650+t.bleeding/500)*r)}),e.set(`chin`,{bruise:Math.min(.7,t.head/1300)});let f=t.left_eye>=t.right_eye?-1:1;e.setNoseShift(f*Math.min(1.1,Math.max(0,t.head-520)/450)*i),e.set(`leftJaw`,{bruise:Math.min(.9,t.left_eye/900+t.head/1600)}),e.set(`rightJaw`,{bruise:Math.min(.9,t.right_eye/900+t.head/1600)}),e.set(`forehead`,{bruise:Math.min(.6,t.swelling/1200),cut:Math.min(1,Math.max(0,t.swelling-fD)/400),blood:Math.min(1.2,Math.max(0,t.swelling-fD)/360)*r})}function mD(e,t){return Math.min(1,(Math.max(0,e.bleeding-40)/420+Math.max(0,e.left_cut+e.right_cut-150)/1300)*sD(t))}function hD(e,t,n){let r=sD(n),i=Math.min(1.1,t.body/620);e.set(`leftRibs`,{bruise:i,swell:Math.min(1,t.body/1300)}),e.set(`rightRibs`,{bruise:i*.9,swell:Math.min(1,t.body/1400)}),e.set(`solarPlexus`,{bruise:Math.min(1,t.body/800)}),e.set(`leftPec`,{bruise:Math.min(.8,t.body/1100)}),e.set(`rightPec`,{bruise:Math.min(.8,t.body/1150)});let a=Math.min(1.4,(t.bleeding/380+(t.left_cut+t.right_cut)/900)*r);e.set(`neckSmear`,{blood:a}),e.set(`leftShoulderSmear`,{blood:Math.min(1,t.left_cut/600)*r}),e.set(`rightShoulderSmear`,{blood:Math.min(1,t.right_cut/600)*r})}var gD={tint:16777215,hair:4862755,shaved:0,beard:0,jaw:0,nose:0,brow:0,skull:0},_D={referee:{tint:15916235,hair:9210502,shaved:0,beard:0,jaw:-.4,nose:.3,brow:-.2,skull:.2},blueCorner:{tint:11109480,hair:1380364,shaved:1,beard:.8,jaw:.7,nose:.5,brow:.6,skull:.4},redCorner:{tint:16772829,hair:8007452,shaved:0,beard:.6,jaw:.2,nose:-.5,brow:.1,skull:-.3},blueCutman:{tint:14202008,hair:2234128,shaved:0,beard:0,jaw:-.6,nose:.8,brow:-.5,skull:-.5},redCutman:{tint:9070160,hair:1380364,shaved:1,beard:.45,jaw:.5,nose:.2,brow:.8,skull:.6}},vD=[16777215,16047307,14268057,12555896,10717820,9071708,7296328],yD=[1380364,2234128,3810326,5913120,9071164,11045976,7222304,9210502];function bD(e){let t=2166136261;for(let n=0;n>>0}function xD(e){return()=>(e=Math.imul(e^e>>>15,1|e),e^=e+Math.imul(e^e>>>7,61|e),((e^e>>>14)>>>0)/4294967296)}function SD(e){let t=xD(bD(e)||1),n=e=>e[Math.floor(t()*e.length)],r=()=>Math.round((t()*2-1)*100)/100;return{tint:n(vD),hair:n(yD),shaved:+(t()<.28),beard:t()<.45?0:Math.round((.35+t()*.65)*100)/100,jaw:r(),nose:r(),brow:r(),skull:r()}}var CD=`vec3(0.84, 0.39, 0.175)`,wD=` +vInjuryPos = transformed;`),e.fragmentShader=e.fragmentShader.replace(`#include `,`#include \nvarying vec3 vInjuryPos;\n${bD}`).replace(`#include `,`#include \n#ifdef ${DD}\nif (vInjuryPos.y > injuryCutLine(vInjuryPos)) discard;\n#endif`)},e.customProgramCacheKey=()=>`hands-injury-shadow`,this.open&&(e.defines={[DD]:``}),this.shadow=e,e}copyFrom(e){let t=e.uniforms,n=this.uniforms;n.uInjuryBruise.value.set(t.uInjuryBruise.value),n.uInjurySwell.value.set(t.uInjurySwell.value),n.uInjuryBlood.value.set(t.uInjuryBlood.value);for(let[e,r]of n.uInjuryCut.value.entries())r.y=t.uInjuryCut.value[e]?.y??0;for(let[e,r]of n.uInjuryLid.value.entries())r.w=t.uInjuryLid.value[e]?.w??0;n.uInjuryEyeOut.value.copy(t.uInjuryEyeOut.value),n.uInjuryNose.value.copy(t.uInjuryNose.value),n.uInjuryJaw.value=t.uInjuryJaw.value,n.uInjuryWetness.value=t.uInjuryWetness.value,n.uInjuryRaw.value=t.uInjuryRaw.value,n.uInjuryImpactPush.value.set(0,0,0)}setBindToPart(e){this.uniforms.uInjuryBindToPart.value.copy(e)}setRawCuts(e){this.uniforms.uInjuryRaw.value=K.clamp(e,0,1)||0}setJaw(e){this.uniforms.uInjuryJaw.value=K.clamp(e,0,1)}setEyesShut(e,t){let[n,r]=this.uniforms.uInjuryLid.value;n.y>-500&&(n.w=K.clamp(e,0,1)||0),r.y>-500&&(r.w=K.clamp(t,0,1)||0)}setEyeOut(e){let t=this.uniforms.uInjuryLid.value,n=(e===`left`||e===`both`)&&t[0].y>-500,r=(e===`right`||e===`both`)&&t[1].y>-500;this.uniforms.uInjuryEyeOut.value.set(+!!n,+!!r),this.index.has(`leftEye`)&&this.set(`leftEye`,{blood:n?1.3:0}),this.index.has(`rightEye`)&&this.set(`rightEye`,{blood:r?1.3:0})}get eyeOut(){let e=this.uniforms.uInjuryEyeOut.value;return e.x>0&&e.y>0?`both`:e.x>0?`left`:e.y>0?`right`:null}get eyesShut(){return[this.uniforms.uInjuryLid.value[0].w,this.uniforms.uInjuryLid.value[1].w]}clear(){this.uniforms.uInjuryBruise.value.fill(0),this.uniforms.uInjurySwell.value.fill(0),this.uniforms.uInjuryBlood.value.fill(0);for(let e of this.uniforms.uInjuryCut.value)e.y=0;this.uniforms.uInjuryJaw.value=0;for(let e of this.uniforms.uInjuryLid.value)e.w=0;this.uniforms.uInjuryEyeOut.value.set(0,0),this.uniforms.uInjuryNose.value.w=0,this.uniforms.uInjuryImpactPush.value.set(0,0,0)}level(e){let t=this.slot(e);return{bruise:this.uniforms.uInjuryBruise.value[t],swell:this.uniforms.uInjurySwell.value[t],cut:this.uniforms.uInjuryCut.value[t].y,blood:this.uniforms.uInjuryBlood.value[t]}}},jD=e=>e===`off`?0:e===`reduced`?.2:1.5,MD=330;function ND(e,t){return K.clamp((e-MD)/(p-MD)+Math.max(0,t-200)/1600,0,1)}var PD=1.8,FD=150,ID=500,LD=240;function RD(e,t,n){let r=jD(n),i=n===`full`?1:.6;e.setRawCuts(n===`full`?1:n===`reduced`?.6:0);let a=e=>Math.min(1.2,e/380+t.swelling/900),o=e=>Math.min(2,(e/600+t.swelling/900)*i);e.set(`leftEye`,{bruise:a(t.left_eye),swell:o(t.left_eye)}),e.set(`rightEye`,{bruise:a(t.right_eye),swell:o(t.right_eye)}),e.setEyesShut(ND(t.left_eye,t.swelling),ND(t.right_eye,t.swelling));let s=e=>Math.min(1,e/120),c=e=>Math.min(1.4,(e/120+t.bleeding/240)*r);e.set(`leftBrow`,{bruise:Math.min(1,t.left_eye/700),swell:Math.min(1.2,t.left_eye/900)*i,cut:s(t.left_cut),blood:c(t.left_cut)}),e.set(`rightBrow`,{bruise:Math.min(1,t.right_eye/700),swell:Math.min(1.2,t.right_eye/900)*i,cut:s(t.right_cut),blood:c(t.right_cut)});let l=Math.min(1,t.head/950+t.swelling/1100),u=Math.min(PD,t.swelling/520)*i,d=e=>Math.min(1,Math.max(0,e-FD)/(ID-FD)),f=e=>Math.min(1.2,Math.max(0,e-FD+30)/240)*r;e.set(`leftCheek`,{bruise:l*.9,swell:u,cut:d(t.left_cut),blood:f(t.left_cut)}),e.set(`rightCheek`,{bruise:l*.85,swell:u,cut:d(t.right_cut),blood:f(t.right_cut)}),e.set(`nose`,{bruise:Math.min(1,t.head/800),swell:Math.min(.8,t.head/1400)*i,blood:Math.min(1.4,(Math.max(0,t.head-60)/300+t.bleeding/220)*r)}),e.set(`mouth`,{bruise:Math.min(.8,t.head/1100),cut:Math.min(1,Math.max(0,t.head-250)/500),blood:Math.min(1.3,(Math.max(0,t.head-120)/360+t.bleeding/260)*r)}),e.set(`chin`,{bruise:Math.min(.7,t.head/1300)});let p=t.left_eye>=t.right_eye?-1:1;e.setNoseShift(p*Math.min(1.1,Math.max(0,t.head-520)/450)*i),e.set(`leftJaw`,{bruise:Math.min(.9,t.left_eye/900+t.head/1600)}),e.set(`rightJaw`,{bruise:Math.min(.9,t.right_eye/900+t.head/1600)}),e.set(`forehead`,{bruise:Math.min(.6,t.swelling/1200),cut:Math.min(1,Math.max(0,t.swelling-LD)/300),blood:Math.min(1.2,Math.max(0,t.swelling-LD)/220)*r})}function zD(e,t){return Math.min(1,(Math.max(0,e.bleeding-10)/220+Math.max(0,e.left_cut+e.right_cut-60)/650)*jD(t))}function BD(e,t,n){let r=jD(n),i=Math.min(1.1,t.body/620);e.set(`leftRibs`,{bruise:i,swell:Math.min(1,t.body/1300)}),e.set(`rightRibs`,{bruise:i*.9,swell:Math.min(1,t.body/1400)}),e.set(`solarPlexus`,{bruise:Math.min(1,t.body/800)}),e.set(`leftPec`,{bruise:Math.min(.8,t.body/1100)}),e.set(`rightPec`,{bruise:Math.min(.8,t.body/1150)});let a=Math.min(1.4,(t.bleeding/200+(t.left_cut+t.right_cut)/450)*r);e.set(`neckSmear`,{blood:a}),e.set(`leftShoulderSmear`,{blood:Math.min(1.2,t.left_cut/300)*r}),e.set(`rightShoulderSmear`,{blood:Math.min(1.2,t.right_cut/300)*r})}var VD=96,HD=4,UD=2.5,WD=5,GD=.45,KD=.032,qD=e=>()=>(e=Math.imul(e^e>>>15,1|e),e^=e+Math.imul(e^e>>>7,61|e),((e^e>>>14)>>>0)/4294967296);function JD(e){let t=document.createElement(`canvas`);t.width=VD,t.height=VD;let n=t.getContext(`2d`);if(n===null)return t;let r=qD(e),i=VD/2,a=4+Math.floor(r()*3);for(let e=0;e.05)||!Number.isFinite(e)||!Number.isFinite(t))return;let i=qD((Number.isSafeInteger(r)?r:0)*40503+11),a=Math.min(24,Math.max(1,Math.round(n*12))),o=.7+.3*Math.min(3,n);for(let r=0;r=1.5?1.8:1),l=UD+i()*(WD-UD);this.drops.push({x:Math.min(1,Math.max(0,a?i():e+(i()+i()-1)*s*1.6)),y:Math.min(1,Math.max(0,a?i():t+(i()+i()-1)*s)),radius:c,alpha:.6+i()*.35,life:l,maxLife:l,run:c>=KD?.02+i()*.04:0,ran:0,sprite:Math.floor(i()*HD),turn:i()*Math.PI*2})}this.drops.length>96&&this.drops.splice(0,this.drops.length-96)}update(e){let t=Number.isFinite(e)?Math.max(0,e):0;for(let e=this.drops.length-1;e>=0;--e){let n=this.drops[e];if(n.life-=t,n.life<=0){this.drops.splice(e,1);continue}n.ran+=n.run*t*(n.life/n.maxLife)}}draw(e,t,n){if(this.drops.length!==0){this.sprites??=Array.from({length:HD},(e,t)=>JD(1374496523+t*7919)),e.save();for(let r of this.drops){let i=Math.min(1,r.life/(r.maxLife*GD)),a=r.radius*n,o=r.x*t,s=(r.y+r.ran)*n;if(e.globalAlpha=r.alpha*i,r.ran>0){let t=r.y*n,i=e.createLinearGradient(0,t,0,s);i.addColorStop(0,`rgba(88,0,6,0)`),i.addColorStop(1,`rgba(88,0,6,0.6)`),e.fillStyle=i,e.beginPath(),e.moveTo(o-a*.06,t),e.lineTo(o+a*.06,t),e.lineTo(o+a*.28,s),e.lineTo(o-a*.28,s),e.closePath(),e.fill()}e.save(),e.translate(o,s),e.rotate(r.turn),e.drawImage(this.sprites[r.sprite],-a,-a,a*2,a*2),e.restore()}e.restore()}}clear(){this.drops.length=0}},XD={tint:16777215,hair:4862755,shaved:0,beard:0,jaw:0,nose:0,brow:0,skull:0},ZD={referee:{tint:15916235,hair:9210502,shaved:0,beard:0,jaw:-.4,nose:.3,brow:-.2,skull:.2},blueCorner:{tint:11109480,hair:1380364,shaved:1,beard:.8,jaw:.7,nose:.5,brow:.6,skull:.4},redCorner:{tint:16772829,hair:8007452,shaved:0,beard:.6,jaw:.2,nose:-.5,brow:.1,skull:-.3},blueCutman:{tint:14202008,hair:2234128,shaved:0,beard:0,jaw:-.6,nose:.8,brow:-.5,skull:-.5},redCutman:{tint:9070160,hair:1380364,shaved:1,beard:.45,jaw:.5,nose:.2,brow:.8,skull:.6}},QD=[16777215,16047307,14268057,12555896,10717820,9071708,7296328],$D=[1380364,2234128,3810326,5913120,9071164,11045976,7222304,9210502];function eO(e){let t=2166136261;for(let n=0;n>>0}function tO(e){return()=>(e=Math.imul(e^e>>>15,1|e),e^=e+Math.imul(e^e>>>7,61|e),((e^e>>>14)>>>0)/4294967296)}function nO(e){let t=tO(eO(e)||1),n=e=>e[Math.floor(t()*e.length)],r=()=>Math.round((t()*2-1)*100)/100;return{tint:n(QD),hair:n($D),shaved:+(t()<.28),beard:t()<.45?0:Math.round((.35+t()*.65)*100)/100,jaw:r(),nose:r(),brow:r(),skull:r()}}var rO=`vec3(0.84, 0.39, 0.175)`,iO=` uniform vec3 uLookHair; uniform vec4 uLookFace; uniform vec2 uLookGroom; @@ -4695,7 +4696,7 @@ float lookHairZone(vec3 p) { float reach = mix(3.8, 9.0, nape); return smoothstep(line - 0.5, line + 0.5, p.y) * (1.0 - smoothstep(reach, reach + 1.0, abs(p.x)) * (1.0 - nape)); } -`,TD=` +`,aO=` { vec3 p = position; vLookPos = p; @@ -4716,26 +4717,26 @@ float lookHairZone(vec3 p) { transformed.y -= crownAway.y * crownDepth; transformed.z -= crownAway.z * crownDepth; } -`,ED=(e,t,n)=>{let r=Math.min(1,Math.max(0,(n-e)/(t-e)));return r*r*(3-2*r)},DD=(e,t,n)=>e+(t-e)*n;function OD(e,t,n){let r=DD(DD(115.3,120.6,ED(-6.8,-4.6,n)),125.5,ED(-4.6,1.6,n)),i=ED(116,121,t),a=DD(3.8,9,i);return ED(r-.5,r+.5,t)*(1-ED(a,a+1,Math.abs(e))*(1-i))}function kD(e,t,n){let{x:r,y:i,z:a}=e,o=(1-ED(113.5,118,i))*ED(108.5,112,i)*ED(-7,-2,a),s=1-ED(0,2.6,Math.hypot(r,i-117.2,a-5)),c=(1-ED(0,2.2,Math.abs(i-123.2)))*ED(1.5,3.5,a),l=r*.12*t.jaw*o+r*.4*t.nose*s+r*.06*t.skull*ED(112,116,i),u=0,d=.5*t.nose*s+.55*t.brow*c,f=DD(.9,1.9,ED(-1,3,a)*ED(123.5,126,i))*OD(r,i,a)*t.shaved,p=r,m=(i-120)*1.1,h=a+2.5,g=Math.hypot(p,m,h)||1;return l-=p/g*f,u-=m/g*f,d-=h/g*f,n.set(r+l,i+u,a+d)}var AD=` +`,oO=(e,t,n)=>{let r=Math.min(1,Math.max(0,(n-e)/(t-e)));return r*r*(3-2*r)},sO=(e,t,n)=>e+(t-e)*n;function cO(e,t,n){let r=sO(sO(115.3,120.6,oO(-6.8,-4.6,n)),125.5,oO(-4.6,1.6,n)),i=oO(116,121,t),a=sO(3.8,9,i);return oO(r-.5,r+.5,t)*(1-oO(a,a+1,Math.abs(e))*(1-i))}function lO(e,t,n){let{x:r,y:i,z:a}=e,o=(1-oO(113.5,118,i))*oO(108.5,112,i)*oO(-7,-2,a),s=1-oO(0,2.6,Math.hypot(r,i-117.2,a-5)),c=(1-oO(0,2.2,Math.abs(i-123.2)))*oO(1.5,3.5,a),l=r*.12*t.jaw*o+r*.4*t.nose*s+r*.06*t.skull*oO(112,116,i),u=0,d=.5*t.nose*s+.55*t.brow*c,f=sO(.9,1.9,oO(-1,3,a)*oO(123.5,126,i))*cO(r,i,a)*t.shaved,p=r,m=(i-120)*1.1,h=a+2.5,g=Math.hypot(p,m,h)||1;return l-=p/g*f,u-=m/g*f,d-=h/g*f,n.set(r+l,i+u,a+d)}var uO=` vLookPos = bindPosition; -`,jD=` +`,dO=` #ifdef USE_MAP { vec3 p = vLookPos; float scanned = dot(sampledDiffuseColor.rgb, vec3(0.2126, 0.7152, 0.0722)); float hair = lookHairZone(p) * max(1.0 - smoothstep(0.13, 0.26, scanned), smoothstep(126.2, 127.4, p.y)); vec3 dyed = uLookHair * clamp(scanned / 0.075, 0.45, 1.7); - vec3 scalp = mix(${CD}, uLookHair, 0.1) * clamp(scanned / 0.075, 0.85, 1.12) * 0.9; + vec3 scalp = mix(${rO}, uLookHair, 0.1) * clamp(scanned / 0.075, 0.85, 1.12) * 0.9; diffuseColor.rgb = mix(diffuseColor.rgb, mix(dyed, scalp * diffuse, uLookGroom.x), hair); // The beard covers the chin and runs back along the jaw to the ear, clear of the neck beneath it. float front = mix(1.4, -4.8, smoothstep(111.2, 114.6, p.y)); float jaw = (1.0 - smoothstep(115.4, 116.8, p.y)) * smoothstep(109.6, 110.6, p.y) * smoothstep(front - 0.6, front + 0.6, p.z); float lips = 1.0 - smoothstep(0.8, 2.0, length(vec3(p.x * 0.55, p.y - 114.3, (p.z - 4.8) * 0.4))); float grain = 0.8 + 0.2 * sin(p.x * 41.0 + p.z * 13.0) * sin(p.y * 47.0 + p.z * 29.0); - diffuseColor.rgb = mix(diffuseColor.rgb, mix(uLookHair * 0.8, ${CD} * diffuse, 0.12), jaw * (1.0 - lips) * uLookGroom.y * grain * 0.88); + diffuseColor.rgb = mix(diffuseColor.rgb, mix(uLookHair * 0.8, ${rO} * diffuse, 0.12), jaw * (1.0 - lips) * uLookGroom.y * grain * 0.88); } #endif -`,MD=class{material;uniforms={uLookHair:{value:new Y(gD.hair)},uLookFace:{value:new Dm},uLookGroom:{value:new q}};current=gD;constructor(e,t=!1){this.material=e;let n=this.uniforms,r=e.onBeforeCompile,i=Object.hasOwn(e,`customProgramCacheKey`)?e.customProgramCacheKey():`plain`;e.onBeforeCompile=(i,a)=>{r.call(e,i,a),Object.assign(i.uniforms,n),i.vertexShader=i.vertexShader.replace(`#include `,`#include \n${t?`attribute vec3 bindPosition;`:``}\n${wD}`).replace(`#include `,`${t?AD:TD}\n#include `),i.fragmentShader=i.fragmentShader.replace(`#include `,`#include \n${wD}`).replace(`#include `,`#include \n${jD}`)},e.customProgramCacheKey=()=>`${i}-look-${t?`baked`:`live`}`,e.needsUpdate=!0}set(e){this.current=e,this.material.color.setHex(e.tint),this.uniforms.uLookHair.value.setHex(e.hair),this.uniforms.uLookFace.value.set(e.jaw,e.nose,e.brow,e.skull),this.uniforms.uLookGroom.value.set(e.shaved,e.beard)}get look(){return this.current}},ND=.026,PD=.038,FD=22,ID=[[.55,.85],[.55,.1],[.4,-.12],[-.4,-.12],[-.55,.05],[-.55,.6],[-.32,.62],[-.3,.16],[.3,.16],[.32,.85]],LD=.03;function RD(){let e=[],t=[],n=ID.length,r=new J,i=new J,a=new J;for(let t=0;t<=FD;t+=1){let n=t/FD*2-1;r.set(n*ND,0,PD*(1-n*n)-PD*.5),i.set(ND,0,-2*PD*n).normalize(),a.set(i.z,0,-i.x),a.dot(r.clone().setY(0).add(new J(0,0,PD*.5)))<0&&a.negate();for(let[t,n]of ID)e.push(r.x+a.x*t*.01,n*.01,r.z+a.z*t*.01)}for(let e=0;e=95:e===`hit`&&t>=110:!1}var BD=9.81,VD=.32,HD=4.5,UD=.04,WD=3;function GD(){return{out:!1,moving:!1,sliding:!1,x:0,y:-50,z:0,vx:0,vy:0,vz:0,wx:0,wy:0,wz:0,bounces:0,age:0,restYaw:0}}function KD(e,t,n,r){if(!e.out||!e.moving)return!1;e.age+=n;let i=r+.006;if(!e.sliding)e.vy-=BD*n,e.x+=e.vx*n,e.y+=e.vy*n,e.z+=e.vz*n,ZD(t,e.wx*n,e.wy*n,e.wz*n),e.y<=i&&(e.y=i,e.bounces.6?(e.bounces+=1,e.vy=-e.vy*VD,e.vx*=.72,e.vz*=.72,e.wx*=.55,e.wy*=.7,e.wz*=.55):(e.vy=0,e.sliding=!0));else{let r=Math.hypot(e.vx,e.vz),a=Math.max(0,r-HD*n);a<=UD?(e.vx=0,e.vz=0):(e.vx*=a/r,e.vz*=a/r),e.x+=e.vx*n,e.z+=e.vz*n,e.y=i,e.wy*=Math.exp(-4*n),e.restYaw+=e.wy*n,JD.setFromAxisAngle(qD,e.restYaw),t.slerp(JD,1-Math.exp(-12*n)),e.vx===0&&e.vz===0&&t.angleTo(JD)<.02&&(t.copy(JD),e.moving=!1)}return e.moving}var qD=new J(0,1,0),JD=new cm,YD=new cm,XD=new Hm;function ZD(e,t,n,r){YD.setFromEuler(XD.set(t,n,r)),e.multiply(YD).normalize()}var QD=900,$D=90,eO=96,tO=24,nO=18,rO=14,iO=5,aO=2,oO=4,sO=24,cO=16,lO=.12,uO=.35,dO=.04,fO=4,pO=9.81,mO=5,hO=2,gO=.09,_O=.22,vO=.7,yO=.45,bO=.6,xO=.9,SO=8,CO=.015,wO=.068,TO=.085,EO=.05,DO=1/60,OO={flesh:1,tooth:3,brain:1,shard:2},kO=.3,AO=6.5,jO=7.5,MO=5,NO=4,PO=1.7,FO=.14,IO=110,LO=.12,RO=4,zO=6,BO=.35,VO=new J,HO=new J,UO=new J,WO=new J;function GO(e,t){let n=e.mesh.geometry===e.flesh?e.flesh.getAttribute(`normal`):void 0;return n!==void 0&&n.count>0?t.fromBufferAttribute(n,0):t.set(0,1,0).applyQuaternion(e.mesh.quaternion),t.lengthSq()>1e-8?t.normalize():t.set(0,1,0)}var KO=e=>()=>(e=Math.imul(e^e>>>15,1|e),e^=e+Math.imul(e^e>>>7,61|e),((e^e>>>14)>>>0)/4294967296),Z=(e,t=0)=>Number.isFinite(e)?e:t,qO=()=>({alive:!1,x:0,y:-50,z:0,vx:0,vy:0,vz:0,rx:0,ry:0,rz:0,vrx:0,vry:0,vrz:0,scale:0,stretch:1,bounces:0,stained:!1,kind:`flesh`,resting:!1,born:0,owner:-1,fading:-1}),JO=new Y(16054267),YO=.012,XO=.055,ZO=.985,QO=new q(.097,.132),$O=.012,ek={r:.82,g:.86,b:.9};function tk(e){if(typeof e==`number`)return{x:e<0?-1:1,z:0};let t=Math.hypot(e.x,e.z);return Number.isFinite(t)&&t>1e-6?{x:e.x/t,z:e.z/t}:{x:1,z:0}}var nk=new J(0,1,0),rk=new J(0,0,1),ik=e=>Number.isFinite(e)?K.clamp(e,0,EO):0,ak=new Set([`hit`,`counter_hit`,`block`,`perfect_block`,`guard_break`,`knockdown`,`bleed`]);function ok(e,t,n,r){let i=Math.abs(e)-r;if(i<=0)return{position:e,velocity:t};let a=Math.sign(e);return Math.abs(n)<=r?{position:a*r,velocity:t*-.42}:{position:e,velocity:-a*Math.max(-a*t,i*fO)}}function sk(e){if(e.kind===`bleed`)return`ooze`;if(e.kind===`knockdown`)return`impact`;let t=e.detail.split(`:`);if(t.at(-1)===`body`)return`body_burst`;let n=t.find(e=>[`jab`,`straight`,`hook`,`uppercut`].includes(e));return n===`hook`?`fan`:n===`uppercut`?`plume`:`jet`}function ck(e,t){e.set(Z(t.x),Z(t.y),Z(t.z),Z(t.w,1)),e.lengthSq()<1e-6?e.identity():e.normalize()}function lk(){return new Fv({color:9063730,roughness:.58,metalness:.02,clearcoat:.25,clearcoatRoughness:.6})}function uk(e,t,n){n.identity();let r=e.getAttribute(`position`),i=e.getAttribute(`bindPosition`),a=e.getIndex();if(i===void 0||i.count!==r.count)return n;let o=new Uint8Array(r.count);if(a===null)o.fill(1);else for(let e=0;eObject.assign(new Ig(e.geometry,e.material),{castShadow:e.castShadow}));if(e.push(Object.assign(new Ig(this.stumpGeometry,this.jawMaterial),{castShadow:this.stumps[0].mesh.castShadow})),this.bakedStandIns===null){let e=new Em,t=lk();t.map=e,new oD(t,UE,{core:ZE,lids:$E,baked:!0}),new MD(t,!0);let n=new Pv({color:1920728,roughness:.38,metalness:.03,map:e});mE(n,!0),this.bakedStandIns={map:e,materials:[t,n]}}for(let t of this.bakedStandIns.materials)e.push(Object.assign(new Ig(this.headGeometry,t),{castShadow:!0}));return e}setBloodLevel(e){if(e===this.bloodLevel)return;let t=this.bloodLevel;this.bloodLevel=e,(e===`off`||t===`full`&&e===`reduced`)&&this.clearArcadeGore()}get shakeAmount(){return this.shake}get liveParticles(){return this.droplets.filter(e=>e.alive).length}get liveBloodParticles(){return this.droplets.filter(e=>e.alive&&e.blood).length}get liveMist(){return this.mists.filter(e=>e.alive).length}get canvasStains(){return this.canvasBlood.stains}useUploader(e){this.canvasBlood.useUploader(e)}setLowTier(e){this.canvasBlood.setLowTier(e)}get liveGibs(){return this.gibs.filter(e=>e.alive).length}get liveShards(){return this.shards.filter(e=>e.alive).length}debrisCount(e){return[...this.gibs,...this.shards].filter(t=>t.alive&&t.kind===e).length}get activeHeads(){return this.heads.filter(e=>e.active).length}headBurst(e){let t=this.stumps[Math.trunc(e)];return t!==void 0&&t.active&&t.mesh.material===this.jawMaterial}severedHeadPosition(e,t){let n=this.heads[Math.trunc(e)];return n===void 0||!n.active?!1:(t.copy(n.mesh.position),!0)}severedHeadFacing(e,t){let n=this.heads[Math.trunc(e)];return n===void 0||!n.active?!1:(t.set(0,0,1).applyQuaternion(n.mesh.quaternion),!0)}mouthpieceOut(e){return this.shields[Math.trunc(e)]?.out===!0}mouthpiecePosition(e,t){let n=this.shields[Math.trunc(e)];return n===void 0||!n.out?!1:(t.set(n.x,n.y,n.z),!0)}ejectMouthpiece(e,t,n,r,i,a,o=!1){if(e<0||e>=aO)return!1;let s=Math.trunc(e),c=this.shields[s],l=Number.isSafeInteger(i)?i:0;if(c.out&&!o||this.lastShieldEvent[s]===l)return!1;this.lastShieldEvent[s]=l;let u=KO(l*48271+s*7907+5),d=tk(r),f=.9+u()*.9,p=.9+u()*.9,m=(u()-.5)*1.1;Object.assign(c,GD(),{out:!0,moving:!0,x:Z(t.x),y:Z(t.y,1.45),z:Z(t.z),vx:f*d.x-m*d.z,vy:p,vz:f*d.z+m*d.x,wx:(u()-.5)*26,wy:(u()-.5)*18,wz:(u()-.5)*26,restYaw:u()*Math.PI*2});let h=this.shieldMeshes[s];h.position.set(c.x,c.y,c.z),ck(h.quaternion,n),h.visible=!0,this.shieldMaterials[s].color.setHex(a).lerp(JO,.55);let g=this.bloodLevel===`full`;for(let e=0;e<(g?22:12);e+=1){let t=u()*Math.PI*2,n=g?e%3!=0:this.bloodLevel===`reduced`&&e%3==0;this.spawnDroplet(c.x+(u()-.5)*.03,c.y+(u()-.5)*.03,c.z+(u()-.5)*.03,c.vx*(.5+u()*.6)+Math.sin(t)*.4,c.vy*(.4+u()*.6),c.vz*.5+Math.cos(t)*.4,n?EE(u()):ek,.5+u()*.5,n)}return!0}gougeEye(e,t,n,r,i){if(this.bloodLevel!==`full`||e<0||e>=aO)return;let a=Math.trunc(e),o=this.eyes[a],s=Number.isSafeInteger(i)?i:0;if(o.active||o.eventId===s)return;o.active=!0,o.eventId=s,o.socket.set(Z(t.x),Z(t.y,1.6),Z(t.z)),o.facing.copy(n),o.hasSkull=!1,o.position.copy(o.socket).addScaledVector(n,YO*1.5),this.eyeDirection.copy(n).multiplyScalar(1.3);let c=tk(r);this.eyeDirection.x+=c.x*.5,this.eyeDirection.z+=c.z*.5,o.previous.copy(o.position).addScaledVector(this.eyeDirection,-.016666666666666666),o.bleeding=2,o.accumulator=0,this.eyeMeshes[a].visible=!0,this.nerveMeshes[a].visible=!0;let l=KO(s*52711+a*3571+13);for(let e=0;e<36;e+=1){let e=l()*Math.PI*2;this.spawnDroplet(o.socket.x,o.socket.y,o.socket.z,n.x*(.8+l())+Math.sin(e)*.6,.4+l()*1.2,n.z*(.8+l())+Math.cos(e)*.6,EE(l()),.6+l()*.6,!0)}for(let e=0;e<4;e+=1)this.spawnMist(o.socket.x+(l()-.5)*.1,o.socket.y+(l()-.5)*.08,o.socket.z+(l()-.5)*.1,.7+l()*.6,.5+l()*.4);this.writeEye(a)}anchorEye(e,t,n,r,i){let a=this.eyes[Math.trunc(e)];a===void 0||!a.active||(a.socket.set(Z(t.x),Z(t.y,1.6),Z(t.z)),n!==void 0&&n.lengthSq()>1e-8&&a.facing.copy(n).normalize(),r!==void 0&&i!==void 0&&(a.skull.set(Z(r.x),Z(r.y,1.6),Z(r.z)),ck(a.skullTurn,i),a.hasSkull=!0))}eyeOut(e){return this.eyes[Math.trunc(e)]?.active===!0}eyePosition(e,t){let n=this.eyes[Math.trunc(e)];return n===void 0||!n.active?!1:(t.copy(n.position),!0)}updateEyes(e){for(let[t,n]of this.eyes.entries()){if(!n.active)continue;this.eyeDirection.copy(n.position).sub(n.previous).multiplyScalar(ZO),n.previous.copy(n.position),n.position.add(this.eyeDirection),n.position.y-=pO*e*e,this.eyeDirection.copy(n.position).sub(n.socket);let r=this.eyeDirection.length();if(r>.055&&n.position.copy(n.socket).addScaledVector(this.eyeDirection,XO/r),n.hasSkull&&this.restOnFace(n)){n.previous.lerp(n.position,.6),this.eyeDirection.copy(n.position).sub(n.socket);let e=this.eyeDirection.length();e>.055&&n.position.copy(n.socket).addScaledVector(this.eyeDirection,XO/e)}if(n.position.y<0+YO&&(n.position.y=0+YO),this.bloodLevel===`full`&&n.bleeding>0)for(n.bleeding=Math.max(0,n.bleeding-e),n.accumulator+=e*14;n.accumulator>=1;)--n.accumulator,this.spawnDroplet(n.socket.x,n.socket.y-.005,n.socket.z,(this.ambientRandom()-.5)*.2,-.2-this.ambientRandom()*.3,(this.ambientRandom()-.5)*.2,EE(this.ambientRandom()),.9,!0);this.writeEye(t)}}restOnFace(e){this.eyeTurn.copy(e.skullTurn).invert();let t=this.eyeDirection.copy(e.position).sub(e.skull).applyQuaternion(this.eyeTurn),n=this.eyeSocketLocal.copy(e.socket).sub(e.skull).applyQuaternion(this.eyeTurn).z+YO+$O;if(t.z>=n)return!1;let r=Math.hypot(t.x/QO.x,t.y/QO.y);return r>=1?!1:(n-t.z<=(1-r)*Math.min(QO.x,QO.y)||r<1e-6?t.z=n:(t.x/=r,t.y/=r),e.position.copy(e.skull).add(t.applyQuaternion(e.skullTurn)),!0)}writeEye(e){let t=this.eyes[e],n=this.eyeMeshes[e],r=this.nerveMeshes[e];n.position.copy(t.position),this.eyeDirection.copy(t.position).sub(t.socket);let i=this.eyeDirection.length();i>1e-5&&(this.eyeDirection.multiplyScalar(1/i),r.quaternion.setFromUnitVectors(nk,this.eyeDirection),this.eyeDirection.addScaledVector(t.facing,.9).normalize(),n.quaternion.setFromUnitVectors(rk,this.eyeDirection)),r.position.copy(t.socket),r.scale.set(1,Math.max(.001,i-YO*.8),1)}returnMouthpiece(e){let t=Math.trunc(e),n=this.shields[t];n!==void 0&&(Object.assign(n,GD()),this.shieldMeshes[t].visible=!1,this.lastShieldEvent[t]=null)}clearMouthpieces(){for(let[e,t]of this.shields.entries())Object.assign(t,GD()),this.shieldMeshes[e].visible=!1,this.lastShieldEvent[e]=null}updateShields(e){for(let[t,n]of this.shields.entries()){if(!n.out||!n.moving)continue;let r=this.shieldMeshes[t],i=n.age<.3&&!n.sliding,a=n.x,o=n.z;KD(n,r.quaternion,e,0);let s=ww-LD-dO,c=ok(n.x,n.vx,a,s),l=ok(n.z,n.vz,o,s);if(n.x=c.position,n.vx=c.velocity,n.z=l.position,n.vz=l.velocity,r.position.set(n.x,n.y,n.z),i&&this.ambientRandom()e.active).length}get activeStumps(){return[...this.stumps,...this.handStumps].filter(e=>e.active).length}spawnDroplet(e,t,n,r,i,a,o,s,c,l=c?.0035+this.ambientRandom()**3*.0125:.0025+this.ambientRandom()**2*.004){let u=this.liveDroplets1e-4?(this.dropletVelocity.set(t.vx/n,t.vy/n,t.vz/n),this.dropletQuaternion.setFromUnitVectors(nk,this.dropletVelocity)):this.dropletQuaternion.identity();let r=Math.min(1,t.life/(t.maxLife*.3))*this.dropletCloseness,i=wE(t.radius*r,n,this.dropletShape);this.dropletScale.set(i.width,i.length,i.width),this.dropletMatrix.compose(this.dropletVelocity.set(t.x,t.y,t.z),this.dropletQuaternion,this.dropletScale),this.dropletMesh.setMatrixAt(e,this.dropletMatrix)}spawnMist(e,t,n,r,i){let a=this.mistIndex%$D;this.mistIndex+=1;let o=this.mists[a];o.alive=!0,o.x=Z(e),o.y=Z(t,1),o.z=Z(n),o.maxLife=Math.max(.05,Z(i,.5)),o.life=o.maxLife,o.scale=Math.max(.1,Z(r,1)),this.mistPositions[a*3]=o.x,this.mistPositions[a*3+1]=o.y,this.mistPositions[a*3+2]=o.z,this.mistColors[a*4+3]=Math.min(1,o.scale),this.mistGeometry.attributes.position.needsUpdate=!0,this.mistGeometry.attributes.color.needsUpdate=!0}placeDecal(e,t,n,r,i,a,o){this.canvasBlood.stain(Z(e),Z(t),Math.max(.01,Z(n,.2))*.28,Math.max(.01,Z(r,.15))*.28,Z(i),K.clamp(Z(a,.4),0,.95),o)}ambientRandom(){return this.ambientSeed=Math.imul(this.ambientSeed^this.ambientSeed>>>15,1|this.ambientSeed),this.ambientSeed^=this.ambientSeed+Math.imul(this.ambientSeed^this.ambientSeed>>>7,61|this.ambientSeed),((this.ambientSeed^this.ambientSeed>>>14)>>>0)/4294967296}splatter(e,t,n,r=()=>this.ambientRandom(),i=12,a=xO){if(this.bloodLevel===`off`)return;let o=this.bloodLevel===`reduced`,s=o?Math.ceil(i/4):i,c=o?.35:1;for(let i=0;i0&&t<=hO){let e=1-gO*t;this.spawnDroplet(f.x,f.y,f.z,f.vx*e,f.vy*e,f.vz*e,f.color,f.life,!0,f.radius*(1-_O*t));continue}let n=t===0,r=(i()-.5)*Math.PI,a=n?2.2+i()*1.8:.9+i()*1.5,c=a,u=.5+i()*1.25,d=(i()-.5)*.5;if(o===`fan`)c=a*(.45+Math.cos(r)*.35),u=.55+i()*1.15,d=Math.sin(r)*a*.9;else if(o===`plume`)c=a*(.25+i()*.25),u=1.8+i()*2.2,d=(i()-.5)*a*.65;else if(o===`body_burst`)c=a*(.55+i()*.45),u=-.15+i()*1.05,d=Math.sin(r)*a*.75;else if(o===`ooze`)c=.08+i()*.22,u=-.3-i()*.55,d=(i()-.5)*.22;else if(o===`impact`)c=a*(.45+i()*.65),u=.9+i()*2.1,d=Math.sin(r)*a;else{let e=n?.12:.34;c=a*(.8+i()*.35),u=n?1.3+i()*1.6:.5+i()*1.25,d=(i()-.5)*a*e}let p=c*s.x-d*s.z,m=c*s.z+d*s.x,h=EE(i()),g=l.x+(i()-.5)*.12,_=l.y+(i()-.5)*.14,v=l.z+(i()-.5)*.12,y=.65+i()*.85;if(!n){this.spawnDroplet(g,_,v,p,u,m,h,y,!0);continue}f.x=g,f.y=_,f.z=v,f.vx=p,f.vy=u,f.vz=m,f.color=h,f.life=y,f.radius=.008+i()*.008,this.spawnDroplet(g,_,v,p,u,m,h,y,!0,f.radius)}let g=e.kind===`hit`&&e.amount>=70||e.kind===`knockdown`||e.kind===`counter_hit`||m>=SO*2;if(!n&&e.blood>0&&this.bloodLevel!==`off`&&g){let t=this.bloodLevel===`reduced`?e.kind===`knockdown`?3:2:e.kind===`knockdown`?14:10+Math.min(8,Math.floor(m/4)),n=this.bloodLevel===`reduced`?.35:1;for(let e=0;e0&&this.bloodLevel!==`off`){let t=e.kind===`knockdown`;this.splatter(l.x+(i()-.5)*.6,l.z+(i()-.5)*.6,t?1+Math.min(2,e.blood/55):.8+Math.min(1.2,m/30),i,_,t?bO:yO)}let v=e.amount>=70||e.kind===`counter_hit`&&e.amount>=gE,y=p&&(v&&m>=SO||e.kind===`counter_hit`&&e.amount>=95);if(this.bloodLevel===`full`&&!n&&y&&!e.detail.endsWith(`:body`)){let t=Math.min(8,Math.max(2,Math.round((e.amount-30)/10)));for(let e=0;e0){e.sideLow=1/0,e.sideHigh=-1/0;for(let t=0;t=aO)return;let s=Math.trunc(e),c=Number.isSafeInteger(i)?i:0,l=this.heads[s];if(l.active||this.lastDecapitationEvent[s]===c)return;this.applyBakedPart(l,o,a);let u=KO(c*104729+s*8191+23),d=tk(r);this.lastDecapitationEvent[s]=c,l.active=!0,l.moving=!0,l.eventId=c;let f=1.8+u()*1.1;l.vy=2.3+u()*1.1;let p=(u()-.5)*2.2;l.vx=f*d.x-p*d.z,l.vz=f*d.z+p*d.x,l.vrx=(u()-.5)*12,l.vry=(u()-.5)*12,l.vrz=(u()-.5)*12,l.bounces=0,l.stained=!1,l.settle=-1,l.mesh.position.set(Z(t.x),Z(t.y,1.55),Z(t.z)),ck(l.mesh.quaternion,n),l.mesh.visible=!0;let m=this.stumps[s];m.mesh.material=this.stumpMaterial,m.active=!0,m.fountainLife=AO,m.accumulator=0,m.seed=c|1,m.direction=d,m.mesh.position.copy(l.mesh.position),m.mesh.quaternion.copy(l.mesh.quaternion),m.mesh.visible=!0;for(let e=0;e=aO)return;let i=Math.trunc(e),a=Number.isSafeInteger(r)?r:0,o=this.stumps[i];if(o.active||this.lastBurstEvent[i]===a)return;this.lastBurstEvent[i]=a;let s=KO(a*91813+i*6151+41),c=tk(n),l=Z(t.x),u=Z(t.y,1.6),d=Z(t.z),f=(e,t,n,r,a)=>{for(let o=0;o=aO)return;let c=Math.trunc(e)*2+(t===`left`?0:1),l=Number.isSafeInteger(a)?a:0,u=this.hands[c];if(u.active||this.lastDismembermentEvent[c]===l)return;this.applyBakedPart(u,s,o);let d=KO(l*130363+c*12289+37),f=tk(i);this.lastDismembermentEvent[c]=l,u.active=!0,u.moving=!0,u.eventId=l;let p=1.3+d()*1.1;u.vy=1.5+d()*1.2;let m=(d()-.5)*1.8;u.vx=p*f.x-m*f.z,u.vz=p*f.z+m*f.x,u.vrx=(d()-.5)*16,u.vry=(d()-.5)*16,u.vrz=(d()-.5)*16,u.bounces=0,u.stained=!1,u.mesh.position.set(Z(n.x),Z(n.y,1.25),Z(n.z)),ck(u.mesh.quaternion,r),u.mesh.visible=!0;let h=this.handStumps[c];h.active=!0,h.fountainLife=MO,h.accumulator=0,h.seed=l|1,h.direction=f,h.mesh.position.copy(u.mesh.position),h.mesh.quaternion.copy(u.mesh.quaternion),h.mesh.visible=!0;for(let t=0;t=aO)return;let i=Math.trunc(e)*2+(t===`left`?0:1),a=this.handStumps[i];a.active&&(a.mesh.position.set(Z(n.x),Z(n.y,1.2),Z(n.z)),ck(a.mesh.quaternion,r))}anchorStump(e,t,n,r,i){if(this.bloodLevel!==`full`||e<0||e>=aO)return;let a=this.stumps[Math.trunc(e)];if(a.active){if(a.mesh.position.set(Z(t.x),Z(t.y,1.5),Z(t.z)),r===void 0||r.length<18){a.mesh.geometry=this.stumpGeometry,ck(a.mesh.quaternion,n);return}IE(a.flesh,r,a.mesh.position,this.stumpOutward.set(0,1,0).applyQuaternion(n),.01,i),a.mesh.geometry=a.flesh,a.mesh.quaternion.identity()}}restoreFighter(e){if(e<0||e>=aO)return;let t=Math.trunc(e),n=this.heads[t];n.active=!1,n.moving=!1,n.mesh.visible=!1,n.mesh.position.y=-50,this.applyBakedPart(n,void 0,9063730);let r=this.stumps[t];r.active=!1,r.fountainLife=0,r.accumulator=0,r.mesh.visible=!1,r.mesh.position.y=-50,r.mesh.material=this.stumpMaterial,this.clearGibs(t);let i=this.eyes[t];i.active=!1,i.bleeding=0,this.eyeMeshes[t].visible=!1,this.nerveMeshes[t].visible=!1;for(let e of[t*2,t*2+1]){let t=this.hands[e];t.active=!1,t.moving=!1,t.mesh.visible=!1,t.mesh.position.y=-50,this.applyBakedPart(t,void 0,1920728);let n=this.handStumps[e];n.active=!1,n.fountainLife=0,n.accumulator=0,n.mesh.visible=!1,n.mesh.position.y=-50}}drip(e,t,n,r=0){let i=+(r===1);if(this.bloodLevel===`off`||n||t<=.05){this.stopDrip(i);return}let a=this.dripEmitters[i];a.position.set(Z(e.x),Z(e.y,1.5),Z(e.z)),a.rate=this.bloodLevel===`reduced`?Math.min(3,t*3):Math.min(18,t*14),a.active=!0}stopDrip(e){let t=this.dripEmitters[+(e===1)];t.active=!1,t.rate=0,t.accumulator=0}updateDripEmitters(e){for(let t of this.dripEmitters)if(t.active)for(t.accumulator+=e*t.rate;t.accumulator>=1;)--t.accumulator,this.spawnDroplet(t.position.x+(this.ambientRandom()-.5)*.14,t.position.y-.04,t.position.z+(this.ambientRandom()-.5)*.1,(this.ambientRandom()-.5)*.08,-.25-this.ambientRandom()*.4,(this.ambientRandom()-.5)*.08,EE(this.ambientRandom()),1.1,!0)}spawnTeeth(e,t,n,r){if(this.bloodLevel===`off`)return;let i=KO((Number.isSafeInteger(r)?r:0)*7331+91),a=tk(t),o=Math.min(4,Math.max(1,Math.round(n*(this.bloodLevel===`reduced`?.5:1))));for(let t=0;t>3)&&n!==null&&(n.fading=kO)}sprayGib(e,t,n,r,i,a,o,s,c=`flesh`,l=-1){this.spawnGib(t,n,r,i*e.x-o*e.z,a,i*e.z+o*e.x,s,c,l)}writeDebrisMatrix(e,t,n){if(!n.alive)this.gibPosition.set(0,-50,0),this.gibQuaternion.identity(),this.gibScale.setScalar(0);else{this.gibPosition.set(n.x,n.y,n.z),this.gibEuler.set(n.rx,n.ry,n.rz),this.gibQuaternion.setFromEuler(this.gibEuler);let e=n.fading>=0?n.scale*Math.max(0,n.fading)/kO:n.scale;this.gibScale.set(e*n.stretch,e,e/Math.sqrt(n.stretch))}this.gibMatrix.compose(this.gibPosition,this.gibQuaternion,this.gibScale),e.setMatrixAt(t,this.gibMatrix)}updateDebris(e,t,n){let r=!1;for(let[i,a]of e.entries())if(!(!a.alive||a.resting&&a.fading<0)){if(r=!0,a.fading>=0){a.fading-=n,a.fading<=0&&(a.alive=!1),this.writeDebrisMatrix(t,i,a);continue}a.vy-=6.4*n,a.x+=a.vx*n,a.y+=a.vy*n,a.z+=a.vz*n,a.rx+=a.vrx*n,a.ry+=a.vry*n,a.rz+=a.vrz*n,this.confineGib(a),a.y<=.015&&(a.y=.015,!a.stained&&this.bloodLevel===`full`&&a.kind!==`tooth`&&(a.stained=!0,this.placeDecal(a.x,a.z,.24+a.scale*.16,.14+a.scale*.1,a.rz,.55,6425104)),a.bounces.35?(a.bounces+=1,a.vy=Math.abs(a.vy)*.3,a.vx*=.68,a.vz*=.68,a.vrx*=.7,a.vry*=.7,a.vrz*=.7):(a.vx=0,a.vy=0,a.vz=0,a.vrx=a.vry=a.vrz=0,a.kind===`shard`&&(a.rx=Math.round(a.rx/Math.PI)*Math.PI),a.resting=!0)),this.writeDebrisMatrix(t,i,a)}r&&(t.instanceMatrix.needsUpdate=!0)}confineGib(e){Math.abs(e.x)>3.05&&(e.x=Math.sign(e.x)*bw,e.vx*=-.45),Math.abs(e.z)>3.05&&(e.z=Math.sign(e.z)*bw,e.vz*=-.45)}updateDetachedParts(e,t){for(let n of e){if(n.active&&n.settle>=0&&n.settle<1){n.settle=Math.min(1,n.settle+t/uO);let e=n.settle*n.settle*(3-2*n.settle);n.mesh.quaternion.slerpQuaternions(n.settleFrom,n.settleTo,e),n.mesh.position.y=n.settleFromY+(n.settleToY-n.settleFromY)*e}if(!n.active||!n.moving)continue;let e=n.mesh.position.x,r=n.mesh.position.z;n.vy-=5.8*t,n.mesh.position.x+=n.vx*t,n.mesh.position.y+=n.vy*t,n.mesh.position.z+=n.vz*t,n.mesh.rotation.x+=n.vrx*t,n.mesh.rotation.y+=n.vry*t,n.mesh.rotation.z+=n.vrz*t;let i=ww-n.radius-dO,a=ok(n.mesh.position.x,n.vx,e,i),o=ok(n.mesh.position.z,n.vz,r,i);if(n.mesh.position.x=a.position,n.mesh.position.z=o.position,n.vx=a.velocity,n.vz=o.velocity,n.mesh.position.y<=0+n.radius){if(n.mesh.position.y=0+n.radius,!n.stained&&this.bloodLevel===`full`){n.stained=!0;let e=n.radius===lO?1:.55;this.placeDecal(n.mesh.position.x,n.mesh.position.z,1.3*e,.9*e,n.mesh.rotation.z,.85,4392199)}n.bounces<2&&Math.abs(n.vy)>.42?(n.bounces+=1,n.vy=Math.abs(n.vy)*.32,n.vx*=.62,n.vz*=.62,n.vrx*=.65,n.vry*=.65,n.vrz*=.65):(n.moving=!1,n.vx=0,n.vy=0,n.vz=0,n.vrx=0,n.vry=0,n.vrz=0,n.look!==null&&this.rollOntoEar(n))}(!Number.isFinite(n.mesh.position.x)||!Number.isFinite(n.mesh.position.y)||!Number.isFinite(n.mesh.position.z)||!Number.isFinite(n.mesh.quaternion.x)||!Number.isFinite(n.mesh.quaternion.y)||!Number.isFinite(n.mesh.quaternion.z)||!Number.isFinite(n.mesh.quaternion.w))&&(n.mesh.position.set(0,0+n.radius,0),n.mesh.quaternion.identity(),n.moving=!1,n.vx=0,n.vy=0,n.vz=0)}}rollOntoEar(e){let t=this.settleAxis.set(1,0,0).applyQuaternion(e.mesh.quaternion),n=t.y>=0?1:-1;e.settleFrom.copy(e.mesh.quaternion),e.settleTo.setFromUnitVectors(t,this.settleUp.set(0,n,0)).multiply(e.mesh.quaternion),e.settleFromY=e.mesh.position.y,e.settleToY=0+(n>0?-e.sideLow:e.sideHigh),e.settle=0}stumpRandom(e){let t=e.seed|0;return t=Math.imul(t^t>>>15,1|t),t^=t+Math.imul(t^t>>>7,61|t),e.seed=t|0,((t^t>>>14)>>>0)/4294967296}updateStumpFountains(e){if(this.bloodLevel===`full`)for(let t of[...this.stumps,...this.handStumps]){if(!t.active||t.fountainLife<=0)continue;t.fountainLife=Math.max(0,t.fountainLife-e);let n=Math.min(1,t.fountainLife/NO),r=t.fountainLife*PO%1,i=Math.exp(-(((r-.5)/FO)**2));if(t.accumulator+=e*IO*n*(LO+(1-LO)*i),t.accumulator<1)continue;let a=GO(t,VO);for(HO.set(Math.abs(a.y)<.9?0:1,+(Math.abs(a.y)<.9),0).cross(a).normalize(),UO.crossVectors(a,HO);t.accumulator>=1;){--t.accumulator;let e=this.stumpRandom(t),r=this.stumpRandom(t),o=this.stumpRandom(t),s=Math.sqrt(e)*BO,c=r*Math.PI*2;WO.copy(a).multiplyScalar(Math.cos(s)).addScaledVector(HO,Math.sin(s)*Math.cos(c)).addScaledVector(UO,Math.sin(s)*Math.sin(c)).multiplyScalar(K.lerp(RO,zO,o)*(.7+.3*i)*(.55+.45*n)),this.spawnDroplet(t.mesh.position.x+a.x*.015+(e-.5)*.03,t.mesh.position.y+a.y*.015,t.mesh.position.z+a.z*.015+(r-.5)*.03,WO.x,WO.y,WO.z,EE(e),1.2+o*.6,!0,.004+o*o*.01)}}}update(e){for(this.canvasBlood.update(ik(e)),this.simulationRemainder+=ik(e);this.simulationRemainder+1e-9>=DO;)this.simulationRemainder=Math.max(0,this.simulationRemainder-DO),this.simulate(DO)}simulate(e){this.shake*=.02**e,this.updateDripEmitters(e),this.updateStumpFountains(e),this.updateDetachedParts(this.heads,e),this.updateDetachedParts(this.hands,e),this.updateShields(e),this.updateEyes(e),this.updateDebris(this.gibs,this.gibMesh,e),this.updateDebris(this.shards,this.shardMesh,e);let t=this.liveDroplets,n=!1;for(let t=0;t0&&(this.dropletBuffers.position.needsUpdate=!0,this.dropletBuffers.color.needsUpdate=!0,this.uploadDroplets(0,this.liveDroplets,n));let r=!1;for(let[t,n]of this.mists.entries()){if(!n.alive)continue;if(r=!0,n.life-=e,n.life<=0){n.alive=!1,this.mistPositions[t*3+1]=-50;continue}let i=1-n.life/n.maxLife;this.mistPositions[t*3]=n.x,this.mistPositions[t*3+1]=n.y+i*.14,this.mistPositions[t*3+2]=n.z,this.mistColors[t*4+3]=Math.max(0,1-i)*Math.min(1,n.scale)}r&&(this.mistGeometry.attributes.position.needsUpdate=!0,this.mistGeometry.attributes.color.needsUpdate=!0)}clearDroplets(e){let t=this.liveDroplets;for(let t=0;t=2.0 are supported.`));return}let c=new fA(i,{path:t||this.resourcePath||``,crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});c.fileLoader.setRequestHeader(this.requestHeader);for(let e=0;e=0&&o[t]===void 0&&console.warn(`THREE.GLTFLoader: Unknown extension "`+t+`".`)}}c.setExtensions(a),c.setPlugins(o),c.parse(n,r)}parseAsync(e,t){let n=this;return new Promise(function(r,i){n.parse(e,t,r,i)})}};function gk(){let e={};return{get:function(t){return e[t]},add:function(t,n){e[t]=n},remove:function(t){delete e[t]},removeAll:function(){e={}}}}function _k(e,t,n){let r=e.json.materials[t];return r.extensions&&r.extensions[n]?r.extensions[n]:null}var vk={KHR_BINARY_GLTF:`KHR_binary_glTF`,KHR_DRACO_MESH_COMPRESSION:`KHR_draco_mesh_compression`,KHR_LIGHTS_PUNCTUAL:`KHR_lights_punctual`,KHR_MATERIALS_CLEARCOAT:`KHR_materials_clearcoat`,KHR_MATERIALS_DISPERSION:`KHR_materials_dispersion`,KHR_MATERIALS_IOR:`KHR_materials_ior`,KHR_MATERIALS_SHEEN:`KHR_materials_sheen`,KHR_MATERIALS_SPECULAR:`KHR_materials_specular`,KHR_MATERIALS_TRANSMISSION:`KHR_materials_transmission`,KHR_MATERIALS_IRIDESCENCE:`KHR_materials_iridescence`,KHR_MATERIALS_ANISOTROPY:`KHR_materials_anisotropy`,KHR_MATERIALS_UNLIT:`KHR_materials_unlit`,KHR_MATERIALS_VOLUME:`KHR_materials_volume`,KHR_TEXTURE_BASISU:`KHR_texture_basisu`,KHR_TEXTURE_TRANSFORM:`KHR_texture_transform`,KHR_MESH_QUANTIZATION:`KHR_mesh_quantization`,KHR_MATERIALS_EMISSIVE_STRENGTH:`KHR_materials_emissive_strength`,EXT_MATERIALS_BUMP:`EXT_materials_bump`,EXT_TEXTURE_WEBP:`EXT_texture_webp`,EXT_TEXTURE_AVIF:`EXT_texture_avif`,EXT_MESHOPT_COMPRESSION:`EXT_meshopt_compression`,KHR_MESHOPT_COMPRESSION:`KHR_meshopt_compression`,EXT_MESH_GPU_INSTANCING:`EXT_mesh_gpu_instancing`},yk=class{constructor(e){this.parser=e,this.name=vk.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){let e=this.parser,t=this.parser.json.nodes||[];for(let n=0,r=t.length;n=0)throw Error(`THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures`);return null}return t.loadTextureImage(e,i.source,a)}},Nk=class{constructor(e){this.parser=e,this.name=vk.EXT_TEXTURE_WEBP}loadTexture(e){let t=this.name,n=this.parser,r=n.json,i=r.textures[e];if(!i.extensions||!i.extensions[t])return null;let a=i.extensions[t],o=r.images[a.source],s=n.textureLoader;if(o.uri){let e=n.options.manager.getHandler(o.uri);e!==null&&(s=e)}return n.loadTextureImage(e,a.source,s)}},Pk=class{constructor(e){this.parser=e,this.name=vk.EXT_TEXTURE_AVIF}loadTexture(e){let t=this.name,n=this.parser,r=n.json,i=r.textures[e];if(!i.extensions||!i.extensions[t])return null;let a=i.extensions[t],o=r.images[a.source],s=n.textureLoader;if(o.uri){let e=n.options.manager.getHandler(o.uri);e!==null&&(s=e)}return n.loadTextureImage(e,a.source,s)}},Fk=class{constructor(e,t){this.name=t,this.parser=e}loadBufferView(e){let t=this.parser.json,n=t.bufferViews[e];if(n.extensions&&n.extensions[this.name]){let e=n.extensions[this.name],r=this.parser.getDependency(`buffer`,e.buffer),i=this.parser.options.meshoptDecoder;if(!i||!i.supported){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw Error(`THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files`);return null}return r.then(function(t){let n=e.byteOffset||0,r=e.byteLength||0,a=e.count,o=e.byteStride,s=new Uint8Array(t,n,r);return i.decodeGltfBufferAsync?i.decodeGltfBufferAsync(a,o,s,e.mode,e.filter).then(function(e){return e.buffer}):i.ready.then(function(){let t=new ArrayBuffer(a*o);return i.decodeGltfBuffer(new Uint8Array(t),a,o,s,e.mode,e.filter),t})})}else return null}},Ik=class{constructor(e){this.name=vk.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(e){let t=this.parser.json,n=t.nodes[e];if(!n.extensions||!n.extensions[this.name]||n.mesh===void 0)return null;let r=t.meshes[n.mesh];for(let e of r.primitives)if(e.mode!==qk.TRIANGLES&&e.mode!==qk.TRIANGLE_STRIP&&e.mode!==qk.TRIANGLE_FAN&&e.mode!==void 0)return null;let i=n.extensions[this.name].attributes,a=[],o={};for(let e in i)a.push(this.parser.getDependency(`accessor`,i[e]).then(t=>(o[e]=t,o[e])));return a.length<1?null:(a.push(this.parser.createNodeMesh(e)),Promise.all(a).then(e=>{let t=e.pop(),n=t.isGroup?t.children:[t],r=e[0].count,i=[];for(let e of n){let t=new Mm,n=new J,a=new cm,s=new J(1,1,1),c=new c_(e.geometry,e.material,r);for(let e=0;e0||e.search(/^data\:image\/jpeg/)===0?`image/jpeg`:e.search(/\.webp($|\?)/i)>0||e.search(/^data\:image\/webp/)===0?`image/webp`:e.search(/\.ktx2($|\?)/i)>0||e.search(/^data\:image\/ktx2/)===0?`image/ktx2`:`image/png`}var dA=new Mm,fA=class{constructor(e={},t={}){this.json=e,this.extensions={},this.plugins={},this.options=t,this.cache=new gk,this.associations=new Map,this.primitiveCache={},this.nodeCache={},this.meshCache={refs:{},uses:{}},this.cameraCache={refs:{},uses:{}},this.lightCache={refs:{},uses:{}},this.sourceCache={},this.textureCache={},this.nodeNamesUsed={};let n=!1,r=-1,i=!1,a=-1;if(typeof navigator<`u`&&navigator.userAgent!==void 0){let e=navigator.userAgent;n=/^((?!chrome|android).)*safari/i.test(e)===!0;let t=e.match(/Version\/(\d+)/);r=n&&t?parseInt(t[1],10):-1,i=e.indexOf(`Firefox`)>-1,a=i?e.match(/Firefox\/([0-9]+)\./)[1]:-1}typeof createImageBitmap>`u`||n&&r<17||i&&a<98?this.textureLoader=new vy(this.options.manager):this.textureLoader=new Hy(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new hy(this.options.manager),this.fileLoader.setResponseType(`arraybuffer`),this.options.crossOrigin===`use-credentials`&&this.fileLoader.setWithCredentials(!0)}setExtensions(e){this.extensions=e}setPlugins(e){this.plugins=e}parse(e,t){let n=this,r=this.json,i=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll(function(e){return e._markDefs&&e._markDefs()}),Promise.all(this._invokeAll(function(e){return e.beforeRoot&&e.beforeRoot()})).then(function(){return Promise.all([n.getDependencies(`scene`),n.getDependencies(`animation`),n.getDependencies(`camera`)])}).then(function(t){let a={scene:t[0][r.scene||0],scenes:t[0],animations:t[1],cameras:t[2],asset:r.asset,parser:n,userData:{}};return rA(i,a,r),iA(a,r),Promise.all(n._invokeAll(function(e){return e.afterRoot&&e.afterRoot(a)})).then(function(){for(let e of a.scenes)e.updateMatrixWorld();e(a)})}).catch(t)}_markDefs(){let e=this.json.nodes||[],t=this.json.skins||[],n=this.json.meshes||[];for(let n=0,r=t.length;n{let n=this.associations.get(e);n!=null&&this.associations.set(t,n);for(let[n,r]of e.children.entries())i(r,t.children[n])};return i(n,r),r.name+=`_instance_`+e.uses[t]++,r}_invokeOne(e){let t=Object.values(this.plugins);t.push(this);for(let n=0;n=2&&p.setY(t,u[e*a+1]),a>=3&&p.setZ(t,u[e*a+2]),a>=4&&p.setW(t,u[e*a+3]),a>=5)throw Error(`THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.`)}p.normalized=d}return p})}loadTexture(e){let t=this.json,n=this.options,r=t.textures[e].source,i=t.images[r],a=this.textureLoader;if(i.uri){let e=n.manager.getHandler(i.uri);e!==null&&(a=e)}return this.loadTextureImage(e,r,a)}loadTextureImage(e,t,n){let r=this,i=this.json,a=i.textures[e],o=i.images[t],s=(o.uri||o.bufferView)+`:`+a.sampler;if(this.textureCache[s])return this.textureCache[s];let c=this.loadImageSource(t,n).then(function(t){t.flipY=!1,t.name=a.name||o.name||``,t.name===``&&typeof o.uri==`string`&&o.uri.startsWith(`data:image/`)===!1&&(t.name=o.uri);let n=(i.samplers||{})[a.sampler]||{};return t.magFilter=Yk[n.magFilter]||1006,t.minFilter=Yk[n.minFilter]||1008,t.wrapS=Xk[n.wrapS]||1e3,t.wrapT=Xk[n.wrapT]||1e3,t.generateMipmaps=!t.isCompressedTexture&&t.minFilter!==1003&&t.minFilter!==1006,r.associations.set(t,{textures:e}),t}).catch(function(){return null});return this.textureCache[s]=c,c}loadImageSource(e,t){let n=this,r=this.json,i=this.options;if(this.sourceCache[e]!==void 0)return this.sourceCache[e].then(e=>e.clone());let a=r.images[e],o=self.URL||self.webkitURL,s=a.uri||``,c=!1;if(a.bufferView!==void 0)s=n.getDependency(`bufferView`,a.bufferView).then(function(e){c=!0;let t=new Blob([e],{type:a.mimeType});return s=o.createObjectURL(t),s});else if(a.uri===void 0)throw Error(`THREE.GLTFLoader: Image `+e+` is missing URI and bufferView`);let l=Promise.resolve(s).then(function(e){return new Promise(function(n,r){let a=n;t.isImageBitmapLoader===!0&&(a=function(e){let t=new Em(e);t.needsUpdate=!0,n(t)}),t.load(By.resolveURL(e,i.path),a,void 0,r)})}).then(function(e){return c===!0&&o.revokeObjectURL(s),iA(e,a),e.userData.mimeType=a.mimeType||uA(a.uri),e}).catch(function(e){throw console.error(`THREE.GLTFLoader: Couldn't load texture`,s),e});return this.sourceCache[e]=l,l}assignTexture(e,t,n,r){let i=this;return this.getDependency(`texture`,n.index).then(function(a){if(!a)return null;if(n.texCoord!==void 0&&n.texCoord>0&&(a=a.clone(),a.channel=n.texCoord),i.extensions[vk.KHR_TEXTURE_TRANSFORM]){let e=n.extensions===void 0?void 0:n.extensions[vk.KHR_TEXTURE_TRANSFORM];if(e){let t=i.associations.get(a);a=i.extensions[vk.KHR_TEXTURE_TRANSFORM].extendTexture(a,e),i.associations.set(a,t)}}return r!==void 0&&(a.colorSpace=r),e[t]=a,a})}assignFinalMaterial(e){let t=e.geometry,n=e.material,r=t.attributes.tangent===void 0,i=t.attributes.color!==void 0,a=t.attributes.normal===void 0;if(e.isPoints){let e=`PointsMaterial:`+n.uuid,t=this.cache.get(e);t||(t=new D_,vg.prototype.copy.call(t,n),t.color.copy(n.color),t.map=n.map,t.sizeAttenuation=!1,this.cache.add(e,t)),n=t}else if(e.isLine){let e=`LineBasicMaterial:`+n.uuid,t=this.cache.get(e);t||(t=new p_,vg.prototype.copy.call(t,n),t.color.copy(n.color),t.map=n.map,this.cache.add(e,t)),n=t}if(r||i||a){let e=`ClonedMaterial:`+n.uuid+`:`;r&&(e+=`derivative-tangents:`),i&&(e+=`vertex-colors:`),a&&(e+=`flat-shading:`);let t=this.cache.get(e);t||(t=n.clone(),i&&(t.vertexColors=!0),a&&(t.flatShading=!0),r&&(t.normalScale&&(t.normalScale.y*=-1),t.clearcoatNormalScale&&(t.clearcoatNormalScale.y*=-1)),this.cache.add(e,t),this.associations.set(t,this.associations.get(n))),n=t}e.material=n}getMaterialType(){return Pv}loadMaterial(e){let t=this,n=this.json,r=this.extensions,i=n.materials[e],a,o={},s=i.extensions||{},c=[];if(s[vk.KHR_MATERIALS_UNLIT]){let e=r[vk.KHR_MATERIALS_UNLIT];a=e.getMaterialType(),c.push(e.extendParams(o,i,t))}else{let n=i.pbrMetallicRoughness||{};if(o.color=new Y(1,1,1),o.opacity=1,Array.isArray(n.baseColorFactor)){let e=n.baseColorFactor;o.color.setRGB(e[0],e[1],e[2],gp),o.opacity=e[3]}n.baseColorTexture!==void 0&&c.push(t.assignTexture(o,`map`,n.baseColorTexture,hp)),o.metalness=n.metallicFactor===void 0?1:n.metallicFactor,o.roughness=n.roughnessFactor===void 0?1:n.roughnessFactor,n.metallicRoughnessTexture!==void 0&&(c.push(t.assignTexture(o,`metalnessMap`,n.metallicRoughnessTexture)),c.push(t.assignTexture(o,`roughnessMap`,n.metallicRoughnessTexture))),a=this._invokeOne(function(t){return t.getMaterialType&&t.getMaterialType(e)}),c.push(Promise.all(this._invokeAll(function(t){return t.extendMaterialParams&&t.extendMaterialParams(e,o)})))}i.doubleSided===!0&&(o.side=2);let l=i.alphaMode||tA.OPAQUE;if(l===tA.BLEND?(o.transparent=!0,o.depthWrite=!1):(o.transparent=!1,l===tA.MASK&&(o.alphaTest=i.alphaCutoff===void 0?.5:i.alphaCutoff)),i.normalTexture!==void 0&&a!==wg&&(c.push(t.assignTexture(o,`normalMap`,i.normalTexture)),o.normalScale=new q(1,1),i.normalTexture.scale!==void 0)){let e=i.normalTexture.scale;o.normalScale.set(e,e)}if(i.occlusionTexture!==void 0&&a!==wg&&(c.push(t.assignTexture(o,`aoMap`,i.occlusionTexture)),i.occlusionTexture.strength!==void 0&&(o.aoMapIntensity=i.occlusionTexture.strength)),i.emissiveFactor!==void 0&&a!==wg){let e=i.emissiveFactor;o.emissive=new Y().setRGB(e[0],e[1],e[2],gp)}return i.emissiveTexture!==void 0&&a!==wg&&c.push(t.assignTexture(o,`emissiveMap`,i.emissiveTexture,hp)),Promise.all(c).then(function(){let n=new a(o);return i.name&&(n.name=i.name),iA(n,i),t.associations.set(n,{materials:e}),i.extensions&&rA(r,n,i),n})}createUniqueName(e){let t=ob.sanitizeNodeName(e||``);return t in this.nodeNamesUsed?t+`_`+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){let t=this,n=this.extensions,r=this.primitiveCache;function i(e){return n[vk.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(e,t).then(function(n){return mA(n,e,t)})}let a=[];for(let n=0,o=e.length;nyw(e,1)):o.mode===qk.TRIANGLE_FAN&&(e=e.then(e=>yw(e,2))),r[s]={primitive:o,promise:e},a.push(e)}}return Promise.all(a)}loadMesh(e){let t=this,n=this.json,r=this.extensions,i=n.meshes[e],a=i.primitives,o=[];for(let e=0,t=a.length;e0&&oA(d,i),d.name=t.createUniqueName(i.name||`mesh_`+e),iA(d,i),u.extensions&&rA(r,d,u),t.assignFinalMaterial(d),c.push(d)}for(let n=0,r=c.length;n0){let e=t.userData.pivot,r=n[0];t.pivot=new J().fromArray(e),t.position.x-=e[0],t.position.y-=e[1],t.position.z-=e[2],r.position.set(0,0,0),delete t.userData.pivot}return t})}_loadNodeShallow(e){let t=this.json,n=this.extensions,r=this;if(this.nodeCache[e]!==void 0)return this.nodeCache[e];let i=t.nodes[e],a=i.name?r.createUniqueName(i.name):``,o=[],s=r._invokeOne(function(t){return t.createNodeMesh&&t.createNodeMesh(e)});return s&&o.push(s),i.camera!==void 0&&o.push(r.getDependency(`camera`,i.camera).then(function(e){return r._getNodeRef(r.cameraCache,i.camera,e)})),r._invokeAll(function(t){return t.createNodeAttachment&&t.createNodeAttachment(e)}).forEach(function(e){o.push(e)}),this.nodeCache[e]=Promise.all(o).then(function(t){let o;if(o=i.isBone===!0?new Yg:t.length>1?new oh:t.length===1?t[0]:new ah,o!==t[0])for(let e=0,n=t.length;e1){let e=r.associations.get(o);r.associations.set(o,{...e})}return r.associations.get(o).nodes=e,o}),this.nodeCache[e]}loadScene(e){let t=this.extensions,n=this.json.scenes[e],r=this,i=new oh;n.name&&(i.name=r.createUniqueName(n.name)),iA(i,n),n.extensions&&rA(t,i,n);let a=n.nodes||[],o=[];for(let e=0,t=a.length;e{let t=new Map;for(let[e,n]of r.associations)(e instanceof vg||e instanceof Em)&&t.set(e,n);return e.traverse(e=>{let n=r.associations.get(e);n!=null&&t.set(e,n)}),t})(i),i})}_createAnimationTracks(e,t,n,r,i){let a=[],o=e.name?e.name:e.uuid,s=[];function c(e){e.morphTargetInfluences&&s.push(e.name?e.name:e.uuid)}$k[i.path]===$k.weights?(c(e),e.isGroup&&e.children.forEach(c)):s.push(o);let l;switch($k[i.path]){case $k.weights:l=ty;break;case $k.rotation:l=ry;break;case $k.translation:case $k.scale:l=ay;break;default:switch(n.itemSize){case 1:l=ty;break;default:l=ay;break}break}let u=r.interpolation===void 0?sp:eA[r.interpolation],d=this._getArrayFromAccessor(n);for(let e=0,n=s.length;e{r.call(e,i,a),Object.assign(i.uniforms,n),i.vertexShader=i.vertexShader.replace(`#include `,`#include \n${t?`attribute vec3 bindPosition;`:``}\n${iO}`).replace(`#include `,`${t?uO:aO}\n#include `),i.fragmentShader=i.fragmentShader.replace(`#include `,`#include \n${iO}`).replace(`#include `,`#include \n${dO}`)},e.customProgramCacheKey=()=>`${i}-look-${t?`baked`:`live`}`,e.needsUpdate=!0}set(e){this.current=e,this.material.color.setHex(e.tint),this.uniforms.uLookHair.value.setHex(e.hair),this.uniforms.uLookFace.value.set(e.jaw,e.nose,e.brow,e.skull),this.uniforms.uLookGroom.value.set(e.shaved,e.beard)}get look(){return this.current}},pO=.026,mO=.038,hO=22,gO=[[.55,.85],[.55,.1],[.4,-.12],[-.4,-.12],[-.55,.05],[-.55,.6],[-.32,.62],[-.3,.16],[.3,.16],[.32,.85]],_O=.03;function vO(){let e=[],t=[],n=gO.length,r=new J,i=new J,a=new J;for(let t=0;t<=hO;t+=1){let n=t/hO*2-1;r.set(n*pO,0,mO*(1-n*n)-mO*.5),i.set(pO,0,-2*mO*n).normalize(),a.set(i.z,0,-i.x),a.dot(r.clone().setY(0).add(new J(0,0,mO*.5)))<0&&a.negate();for(let[t,n]of gO)e.push(r.x+a.x*t*.01,n*.01,r.z+a.z*t*.01)}for(let e=0;e=50:e===`hit`&&t>=65:!1}var bO=9.81,xO=.32,SO=4.5,CO=.04,wO=3;function TO(){return{out:!1,moving:!1,sliding:!1,x:0,y:-50,z:0,vx:0,vy:0,vz:0,wx:0,wy:0,wz:0,bounces:0,age:0,restYaw:0}}function EO(e,t,n,r){if(!e.out||!e.moving)return!1;e.age+=n;let i=r+.006;if(!e.sliding)e.vy-=bO*n,e.x+=e.vx*n,e.y+=e.vy*n,e.z+=e.vz*n,jO(t,e.wx*n,e.wy*n,e.wz*n),e.y<=i&&(e.y=i,e.bounces.6?(e.bounces+=1,e.vy=-e.vy*xO,e.vx*=.72,e.vz*=.72,e.wx*=.55,e.wy*=.7,e.wz*=.55):(e.vy=0,e.sliding=!0));else{let r=Math.hypot(e.vx,e.vz),a=Math.max(0,r-SO*n);a<=CO?(e.vx=0,e.vz=0):(e.vx*=a/r,e.vz*=a/r),e.x+=e.vx*n,e.z+=e.vz*n,e.y=i,e.wy*=Math.exp(-4*n),e.restYaw+=e.wy*n,OO.setFromAxisAngle(DO,e.restYaw),t.slerp(OO,1-Math.exp(-12*n)),e.vx===0&&e.vz===0&&t.angleTo(OO)<.02&&(t.copy(OO),e.moving=!1)}return e.moving}var DO=new J(0,1,0),OO=new Dm,kO=new Dm,AO=new sh;function jO(e,t,n,r){kO.setFromEuler(AO.set(t,n,r)),e.multiply(kO).normalize()}var MO={droplets:4096,mist:320,gibs:320,shards:72,eyeballs:8},NO={droplets:2048,mist:160,gibs:160,shards:36,eyeballs:4},PO=36,FO=40,IO=16,LO=1.8,RO=180,zO=2,BO=4,VO=60,HO=40,UO=900,WO=1200,GO=600,KO=400,qO=.12,JO=.35,YO=.04,XO=4,ZO=9.81,QO=5,$O=2,ek=.09,tk=.22,nk=.7,rk=.45,ik=.6,ak=.9,ok=1.6,sk=8,ck=.015,lk=.8,uk=1.35,dk=250,fk=.068,pk=.085,mk=.05,hk=1/60,gk=64,_k=12,vk=3.5,yk={flesh:1,tooth:3,brain:1,shard:2,eye:4},bk=.3,xk=16,Sk=12,Ck=6,wk=1.7,Tk=.14,Ek=340,Dk=.12,Ok=5.5,kk=8.5,Ak=.45,jk=700,Mk=24,Nk=10,Pk=360,Fk=.22,Ik=.3,Lk=1.2,Rk=3.2,zk=.55,Bk=new J,Vk=new J,Hk=new J,Uk=new J;function Wk(e,t){let n=e.mesh.geometry===e.flesh?e.flesh.getAttribute(`normal`):void 0;return n!==void 0&&n.count>0?t.fromBufferAttribute(n,0):t.set(0,1,0).applyQuaternion(e.mesh.quaternion),t.lengthSq()>1e-8?t.normalize():t.set(0,1,0)}var Gk=e=>()=>(e=Math.imul(e^e>>>15,1|e),e^=e+Math.imul(e^e>>>7,61|e),((e^e>>>14)>>>0)/4294967296),Z=(e,t=0)=>Number.isFinite(e)?e:t,Kk=()=>({alive:!1,x:0,y:-50,z:0,vx:0,vy:0,vz:0,rx:0,ry:0,rz:0,vrx:0,vry:0,vrz:0,scale:0,stretch:1,bounces:0,stained:!1,kind:`flesh`,resting:!1,born:0,owner:-1,fading:-1}),qk=new Y(16054267),Jk=.012,Yk=.055,Xk=90,Zk=10,Qk=.985,$k=new q(.097,.132),eA=.012,tA={r:.82,g:.86,b:.9};function nA(e){if(typeof e==`number`)return{x:e<0?-1:1,z:0};let t=Math.hypot(e.x,e.z);return Number.isFinite(t)&&t>1e-6?{x:e.x/t,z:e.z/t}:{x:1,z:0}}var rA=new J(0,1,0),iA=new J(0,0,1),aA=e=>Number.isFinite(e)?K.clamp(e,0,mk):0,oA=new Set([`hit`,`counter_hit`,`block`,`perfect_block`,`guard_break`,`knockdown`,`bleed`]);function sA(e,t,n,r){let i=Math.abs(e)-r;if(i<=0)return{position:e,velocity:t};let a=Math.sign(e);return Math.abs(n)<=r?{position:a*r,velocity:t*-.42}:{position:e,velocity:-a*Math.max(-a*t,i*XO)}}function cA(e){if(e.kind===`bleed`)return`ooze`;if(e.kind===`knockdown`)return`impact`;let t=e.detail.split(`:`);if(t.at(-1)===`body`)return`body_burst`;let n=t.find(e=>[`jab`,`straight`,`hook`,`uppercut`].includes(e));return n===`hook`?`fan`:n===`uppercut`?`plume`:`jet`}function lA(e,t){e.set(Z(t.x),Z(t.y),Z(t.z),Z(t.w,1)),e.lengthSq()<1e-6?e.identity():e.normalize()}function uA(){return new ey({color:9063730,roughness:.58,metalness:.02,clearcoat:.25,clearcoatRoughness:.6})}function dA(e,t,n){n.identity();let r=e.getAttribute(`position`),i=e.getAttribute(`bindPosition`),a=e.getIndex();if(i===void 0||i.count!==r.count)return n;let o=new Uint8Array(r.count);if(a===null)o.fill(1);else for(let e=0;e({active:!1,eventId:null,life:0,seconds:1,rate:0,accumulator:0,position:new J,axis:new J(0,1,0)}));simulationRemainder=0;ambientSeed=1597463007;shake=0;lowTier=!1;bloodLevel=`full`;lens=new YD;camera=null;lensPoint=new J;constructor(e,t=1024,n=MO){this.scene=e,this.budget=n,this.dropletPositions=new Float32Array(n.droplets*3),this.dropletColors=new Float32Array(n.droplets*3),this.dropletBuffers={position:new pg(this.dropletPositions,3),color:new pg(this.dropletColors,3)},this.dropletGeometry=qE(),this.dropletMaterial=new $v({color:16777215,roughness:.3,metalness:.02}),this.dropletMesh=new D_(this.dropletGeometry,this.dropletMaterial,n.droplets),this.dropletMesh.instanceMatrix.setUsage(Bp),this.dropletMesh.frustumCulled=!1,this.dropletMesh.castShadow=!1,e.add(this.dropletMesh);for(let e=0;eObject.assign(new t_(e.geometry,e.material),{castShadow:e.castShadow}));if(e.push(Object.assign(new t_(this.stumpGeometry,this.jawMaterial),{castShadow:this.stumps[0].mesh.castShadow})),this.bakedStandIns===null){let e=new Gm,t=uA();t.map=e,new AD(t,pD,{core:xD,lids:CD,baked:!0}),new fO(t,!0);let n=new $v({color:1920728,roughness:.38,metalness:.03,map:e});RE(n,!0),this.bakedStandIns={map:e,materials:[t,n]}}for(let t of this.bakedStandIns.materials)e.push(Object.assign(new t_(this.headGeometry,t),{castShadow:!0}));return e}setCamera(e){this.camera=e}drawLens(e,t,n){this.lens.draw(e,t,n)}get lensDrops(){return this.lens.count}setBloodLevel(e){if(e===this.bloodLevel)return;let t=this.bloodLevel;this.bloodLevel=e,(e===`off`||t===`full`&&e===`reduced`)&&this.clearArcadeGore()}get shakeAmount(){return this.shake}get liveParticles(){return this.droplets.filter(e=>e.alive).length}get liveBloodParticles(){return this.droplets.filter(e=>e.alive&&e.blood).length}get liveMist(){return this.mists.filter(e=>e.alive).length}get canvasStains(){return this.canvasBlood.stains}useUploader(e){this.canvasBlood.useUploader(e)}setLowTier(e){this.canvasBlood.setLowTier(e),this.lowTier=e}get liveGibs(){return this.gibs.filter(e=>e.alive).length}get liveShards(){return this.shards.filter(e=>e.alive).length}debrisCount(e){return[...this.gibs,...this.shards,...this.eyeballs].filter(t=>t.alive&&t.kind===e).length}get activeHeads(){return this.heads.filter(e=>e.active).length}headBurst(e){let t=this.stumps[Math.trunc(e)];return t!==void 0&&t.active&&t.mesh.material===this.jawMaterial}severedHeadPosition(e,t){let n=this.heads[Math.trunc(e)];return n===void 0||!n.active?!1:(t.copy(n.mesh.position),!0)}severedHeadFacing(e,t){let n=this.heads[Math.trunc(e)];return n===void 0||!n.active?!1:(t.set(0,0,1).applyQuaternion(n.mesh.quaternion),!0)}mouthpieceOut(e){return this.shields[Math.trunc(e)]?.out===!0}mouthpiecePosition(e,t){let n=this.shields[Math.trunc(e)];return n===void 0||!n.out?!1:(t.set(n.x,n.y,n.z),!0)}ejectMouthpiece(e,t,n,r,i,a,o=!1){if(e<0||e>=zO)return!1;let s=Math.trunc(e),c=this.shields[s],l=Number.isSafeInteger(i)?i:0;if(c.out&&!o||this.lastShieldEvent[s]===l)return!1;this.lastShieldEvent[s]=l;let u=Gk(l*48271+s*7907+5),d=nA(r),f=.9+u()*.9,p=.9+u()*.9,m=(u()-.5)*1.1;Object.assign(c,TO(),{out:!0,moving:!0,x:Z(t.x),y:Z(t.y,1.45),z:Z(t.z),vx:f*d.x-m*d.z,vy:p,vz:f*d.z+m*d.x,wx:(u()-.5)*26,wy:(u()-.5)*18,wz:(u()-.5)*26,restYaw:u()*Math.PI*2});let h=this.shieldMeshes[s];h.position.set(c.x,c.y,c.z),lA(h.quaternion,n),h.visible=!0,this.shieldMaterials[s].color.setHex(a).lerp(qk,.55);let g=this.bloodLevel===`full`;for(let e=0;e<(g?22:12);e+=1){let t=u()*Math.PI*2,n=g?e%3!=0:this.bloodLevel===`reduced`&&e%3==0;this.spawnDroplet(c.x+(u()-.5)*.03,c.y+(u()-.5)*.03,c.z+(u()-.5)*.03,c.vx*(.5+u()*.6)+Math.sin(t)*.4,c.vy*(.4+u()*.6),c.vz*.5+Math.cos(t)*.4,n?XE(u()):tA,.5+u()*.5,n)}return!0}gougeEye(e,t,n,r,i){if(this.bloodLevel!==`full`||e<0||e>=zO)return;let a=Math.trunc(e),o=this.eyes[a],s=Number.isSafeInteger(i)?i:0;if(o.active||o.eventId===s)return;o.active=!0,o.eventId=s,o.socket.set(Z(t.x),Z(t.y,1.6),Z(t.z)),o.facing.copy(n),o.hasSkull=!1,o.position.copy(o.socket).addScaledVector(n,Jk*1.5),this.eyeDirection.copy(n).multiplyScalar(1.3);let c=nA(r);this.eyeDirection.x+=c.x*.5,this.eyeDirection.z+=c.z*.5,o.previous.copy(o.position).addScaledVector(this.eyeDirection,-.016666666666666666),o.bleeding=Zk,o.accumulator=0,this.eyeMeshes[a].visible=!0,this.nerveMeshes[a].visible=!0;let l=Gk(s*52711+a*3571+13);for(let e=0;e1e-8&&a.facing.copy(n).normalize(),r!==void 0&&i!==void 0&&(a.skull.set(Z(r.x),Z(r.y,1.6),Z(r.z)),lA(a.skullTurn,i),a.hasSkull=!0))}eyeOut(e){return this.eyes[Math.trunc(e)]?.active===!0}eyePosition(e,t){let n=this.eyes[Math.trunc(e)];return n===void 0||!n.active?!1:(t.copy(n.position),!0)}updateEyes(e){for(let[t,n]of this.eyes.entries()){if(!n.active)continue;this.eyeDirection.copy(n.position).sub(n.previous).multiplyScalar(Qk),n.previous.copy(n.position),n.position.add(this.eyeDirection),n.position.y-=ZO*e*e,this.eyeDirection.copy(n.position).sub(n.socket);let r=this.eyeDirection.length();if(r>.055&&n.position.copy(n.socket).addScaledVector(this.eyeDirection,Yk/r),n.hasSkull&&this.restOnFace(n)){n.previous.lerp(n.position,.6),this.eyeDirection.copy(n.position).sub(n.socket);let e=this.eyeDirection.length();e>.055&&n.position.copy(n.socket).addScaledVector(this.eyeDirection,Yk/e)}if(n.position.y<0+Jk&&(n.position.y=0+Jk),this.bloodLevel===`full`&&n.bleeding>0)for(n.bleeding=Math.max(0,n.bleeding-e),n.accumulator+=e*this.forDevice(Xk);n.accumulator>=1;){--n.accumulator;let e=.15+this.ambientRandom()*.5;this.spawnDroplet(n.socket.x,n.socket.y-.005,n.socket.z,n.facing.x*e+(this.ambientRandom()-.5)*.2,-.15-this.ambientRandom()*.4,n.facing.z*e+(this.ambientRandom()-.5)*.2,XE(this.ambientRandom()),.9,!0)}this.writeEye(t)}}restOnFace(e){this.eyeTurn.copy(e.skullTurn).invert();let t=this.eyeDirection.copy(e.position).sub(e.skull).applyQuaternion(this.eyeTurn),n=this.eyeSocketLocal.copy(e.socket).sub(e.skull).applyQuaternion(this.eyeTurn).z+Jk+eA;if(t.z>=n)return!1;let r=Math.hypot(t.x/$k.x,t.y/$k.y);return r>=1?!1:(n-t.z<=(1-r)*Math.min($k.x,$k.y)||r<1e-6?t.z=n:(t.x/=r,t.y/=r),e.position.copy(e.skull).add(t.applyQuaternion(e.skullTurn)),!0)}writeEye(e){let t=this.eyes[e],n=this.eyeMeshes[e],r=this.nerveMeshes[e];n.position.copy(t.position),this.eyeDirection.copy(t.position).sub(t.socket);let i=this.eyeDirection.length();i>1e-5&&(this.eyeDirection.multiplyScalar(1/i),r.quaternion.setFromUnitVectors(rA,this.eyeDirection),this.eyeDirection.addScaledVector(t.facing,.9).normalize(),n.quaternion.setFromUnitVectors(iA,this.eyeDirection)),r.position.copy(t.socket),r.scale.set(1,Math.max(.001,i-Jk*.8),1)}returnMouthpiece(e){let t=Math.trunc(e),n=this.shields[t];n!==void 0&&(Object.assign(n,TO()),this.shieldMeshes[t].visible=!1,this.lastShieldEvent[t]=null)}clearMouthpieces(){for(let[e,t]of this.shields.entries())Object.assign(t,TO()),this.shieldMeshes[e].visible=!1,this.lastShieldEvent[e]=null}updateShields(e){for(let[t,n]of this.shields.entries()){if(!n.out||!n.moving)continue;let r=this.shieldMeshes[t],i=n.age<.3&&!n.sliding,a=n.x,o=n.z;EO(n,r.quaternion,e,0);let s=Jw-_O-YO,c=sA(n.x,n.vx,a,s),l=sA(n.z,n.vz,o,s);if(n.x=c.position,n.vx=c.velocity,n.z=l.position,n.vz=l.velocity,r.position.set(n.x,n.y,n.z),i&&this.ambientRandom()e.active).length}get activeStumps(){return[...this.stumps,...this.handStumps].filter(e=>e.active).length}spawnDroplet(e,t,n,r,i,a,o,s,c,l=c?.0035+this.ambientRandom()**3*.0125:.0025+this.ambientRandom()**2*.004){let u=this.liveDropletsthis.droplets[e].maxLife-this.droplets[e].life;for(let n=0;n0&&t(e[i-1])gk&&e.pop()}}forDevice(e){return Math.round(e*this.budget.droplets*(this.lowTier?.5:1)/MO.droplets)}uploadDroplets(e,t,n){if(this.dropletMesh.count=this.liveDroplets,t<=e)return;this.dropletMesh.instanceMatrix.addUpdateRange(e*16,(t-e)*16),this.dropletMesh.instanceMatrix.needsUpdate=!0;let r=this.dropletMesh.instanceColor;!n||r===null||(r.addUpdateRange(e*3,(t-e)*3),r.needsUpdate=!0)}retireDroplet(e){this.oldest.length=0;let t=this.liveDroplets-1,n=this.droplets[e];if(n.alive=!1,this.liveDroplets=t,e!==t){let r=this.droplets[t];this.droplets[e]=r,this.droplets[t]=n,this.dropletPositions.copyWithin(e*3,t*3,t*3+3),this.dropletColors.copyWithin(e*3,t*3,t*3+3),this.dropletMesh.setColorAt(e,this.dropletColor.setRGB(r.r,r.g,r.b)),this.writeDropletMatrix(e,r)}this.dropletPositions[t*3+1]=-50,this.writeDropletMatrix(t,n)}sprayDroplet(e,t,n,r,i,a,o,s,c,l,u){this.spawnDroplet(t,n,r,i*e.x-o*e.z,a,i*e.z+o*e.x,s,c,l,u)}writeDropletMatrix(e,t){if(!t.alive){this.dropletScale.setScalar(0),this.dropletQuaternion.identity(),this.dropletMatrix.compose(this.dropletVelocity.set(0,-50,0),this.dropletQuaternion,this.dropletScale),this.dropletMesh.setMatrixAt(e,this.dropletMatrix);return}let n=Math.hypot(t.vx,t.vy,t.vz);n>1e-4?(this.dropletVelocity.set(t.vx/n,t.vy/n,t.vz/n),this.dropletQuaternion.setFromUnitVectors(rA,this.dropletVelocity)):this.dropletQuaternion.identity();let r=Math.min(1,t.life/(t.maxLife*.3))*this.dropletCloseness*(t.blood&&this.bloodLevel===`full`?uk:1),i=JE(t.radius*r,n,this.dropletShape);this.dropletScale.set(i.width,i.length,i.width),this.dropletMatrix.compose(this.dropletVelocity.set(t.x,t.y,t.z),this.dropletQuaternion,this.dropletScale),this.dropletMesh.setMatrixAt(e,this.dropletMatrix)}spawnMist(e,t,n,r,i){let a=this.mistIndex%this.budget.mist;this.mistIndex+=1;let o=this.mists[a];o.alive=!0,o.x=Z(e),o.y=Z(t,1),o.z=Z(n),o.maxLife=Math.max(.05,Z(i,.5)),o.life=o.maxLife,o.scale=Math.max(.1,Z(r,1)),this.mistPositions[a*3]=o.x,this.mistPositions[a*3+1]=o.y,this.mistPositions[a*3+2]=o.z,this.mistColors[a*4+3]=Math.min(1,o.scale),this.mistGeometry.attributes.position.needsUpdate=!0,this.mistGeometry.attributes.color.needsUpdate=!0}placeDecal(e,t,n,r,i,a,o){this.canvasBlood.stain(Z(e),Z(t),Math.max(.01,Z(n,.2))*.28,Math.max(.01,Z(r,.15))*.28,Z(i),K.clamp(Z(a,.4),0,.95),o)}splashLens(e,t,n,r,i){let a=this.camera;if(a===null||this.bloodLevel===`off`||!(r>0))return;let o=this.lensPoint.set(Z(e),Z(t,1.5),Z(n)),s=o.distanceTo(a.position);if(o.project(a),!(o.z<1)||Math.abs(o.x)>1.15||Math.abs(o.y)>1.15)return;let c=K.clamp((_k-s)/(_k-vk),0,1);this.lens.splash((o.x+1)/2,(1-o.y)/2,c*r*(this.bloodLevel===`reduced`?.25:1),i)}ambientRandom(){return this.ambientSeed=Math.imul(this.ambientSeed^this.ambientSeed>>>15,1|this.ambientSeed),this.ambientSeed^=this.ambientSeed+Math.imul(this.ambientSeed^this.ambientSeed>>>7,61|this.ambientSeed),((this.ambientSeed^this.ambientSeed>>>14)>>>0)/4294967296}splatter(e,t,n,r=()=>this.ambientRandom(),i=12,a=ak){if(this.bloodLevel===`off`)return;let o=this.bloodLevel===`reduced`,s=o?Math.ceil(i/4):i,c=o?.35:ok;for(let i=0;i0?Z(t.y):e.detail.endsWith(`:body`)?1.05:1.58,z:Z(t.z)},f=e.kind===`bleed`,p=n||f?0:Math.round(s?(a?4:6)+Math.min(6,Math.max(0,e.amount)/40):(a?6:16)+Math.min(20,Math.max(0,e.amount)/20)),m={x:0,y:0,z:0,vx:0,vy:0,vz:0,life:0,radius:0,color:XE(0)},h=e.kind===`hit`||e.kind===`counter_hit`,g=h?Math.max(0,e.blood-Math.floor(Math.max(0,e.amount)/3)):0,_=n||e.blood<=0||this.bloodLevel===`off`?0:f?this.bloodLevel===`reduced`?1:Math.min(12,3+Math.floor(Math.max(0,e.amount)/8)):this.bloodLevel===`reduced`?Math.min(24,Math.round(e.blood*(a?.12:.24))):this.forDevice(a?Math.round(HE(e.blood,0)/2):o?HE(e.blood,0)+dk:HE(e.blood,h?e.amount:0));f||(this.shake=Math.min(.14,this.shake+(a?.008:Math.max(.012,e.amount/1500)))),o&&(this.shake=Math.min(.2,this.shake+.09));let v=o?1.2:h?K.clamp((e.amount-40)/60,0,1)*(.6+Math.min(100,e.blood)/150):0;!n&&!f&&e.blood>0&&this.splashLens(d.x,d.y,d.z,v,e.event_id);for(let e=0;e0&&t<=$O){let e=1-ek*t;this.spawnDroplet(m.x,m.y,m.z,m.vx*e,m.vy*e,m.vz*e,m.color,m.life,!0,m.radius*(1-tk*t));continue}let n=t===0,r=(i()-.5)*Math.PI,a=n?2.2+i()*1.8:.9+i()*1.5,o=a,s=.5+i()*1.25,u=(i()-.5)*.5;if(c===`fan`)o=a*(.45+Math.cos(r)*.35),s=.55+i()*1.15,u=Math.sin(r)*a*.9;else if(c===`plume`)o=a*(.25+i()*.25),s=1.8+i()*2.2,u=(i()-.5)*a*.65;else if(c===`body_burst`)o=a*(.55+i()*.45),s=-.15+i()*1.05,u=Math.sin(r)*a*.75;else if(c===`ooze`)o=.08+i()*.22,s=-.3-i()*.55,u=(i()-.5)*.22;else if(c===`impact`)o=a*(.45+i()*.65),s=.9+i()*2.1,u=Math.sin(r)*a;else{let e=n?.12:.34;o=a*(.8+i()*.35),s=n?1.3+i()*1.6:.5+i()*1.25,u=(i()-.5)*a*e}let f=o*l.x-u*l.z,p=o*l.z+u*l.x,h=XE(i()),g=d.x+(i()-.5)*.12,_=d.y+(i()-.5)*.14,v=d.z+(i()-.5)*.12,y=.65+i()*.85;if(!n){this.spawnDroplet(g,_,v,f,s,p,h,y,!0);continue}m.x=g,m.y=_,m.z=v,m.vx=f,m.vy=s,m.vz=p,m.color=h,m.life=y,m.radius=.008+i()*.008,this.spawnDroplet(g,_,v,f,s,p,h,y,!0,m.radius)}let y=s?o||e.kind===`counter_hit`||h&&(e.amount>=35||g>=sk):e.kind===`hit`&&e.amount>=70||o||e.kind===`counter_hit`||g>=sk*2;if(!n&&e.blood>0&&this.bloodLevel!==`off`&&y){let t=s?this.forDevice(o?36:12+Math.min(24,Math.floor(g/2)+Math.floor(Math.max(0,e.amount-35)/6))):o?3:2,n=s?1:.35;for(let e=0;e0&&this.bloodLevel!==`off`){let t=o?1+Math.min(2,e.blood/55):.8+Math.min(1.2,g/30);this.splatter(d.x+(i()-.5)*.6,d.z+(i()-.5)*.6,s?t*1.3:t,i,x,o?ik:rk)}let S=e.amount>=70||e.kind===`counter_hit`&&e.amount>=BE,C=h&&(e.amount>=60||S&&g>=sk/4);if(s&&!n&&C&&!e.detail.endsWith(`:body`)){let t=Math.min(20,Math.max(3,Math.round((e.amount-10)/6)));for(let e=0;e0){e.sideLow=1/0,e.sideHigh=-1/0;for(let t=0;t=zO)return;let s=Math.trunc(e),c=Number.isSafeInteger(i)?i:0,l=this.heads[s];if(l.active||this.lastDecapitationEvent[s]===c)return;this.stopGush(s),this.applyBakedPart(l,o,a);let u=Gk(c*104729+s*8191+23),d=nA(r);this.lastDecapitationEvent[s]=c,l.active=!0,l.moving=!0,l.eventId=c;let f=1.8+u()*1.1;l.vy=2.3+u()*1.1;let p=(u()-.5)*2.2;l.vx=f*d.x-p*d.z,l.vz=f*d.z+p*d.x,l.vrx=(u()-.5)*12,l.vry=(u()-.5)*12,l.vrz=(u()-.5)*12,l.bounces=0,l.trail=0,l.stained=!1,l.settle=-1,l.mesh.position.set(Z(t.x),Z(t.y,1.55),Z(t.z)),lA(l.mesh.quaternion,n),l.mesh.visible=!0;let m=this.stumps[s];m.mesh.material=this.stumpMaterial,m.active=!0,m.fountainLife=14,m.accumulator=0,m.seed=c|1,m.direction=d,m.mesh.position.copy(l.mesh.position),m.mesh.quaternion.copy(l.mesh.quaternion),m.mesh.visible=!0;for(let e=0;e=zO)return;let i=Math.trunc(e),a=Number.isSafeInteger(r)?r:0,o=this.stumps[i];if(o.active||this.lastBurstEvent[i]===a)return;this.lastBurstEvent[i]=a,this.stopGush(i);let s=Gk(a*91813+i*6151+41),c=nA(n),l=Z(t.x),u=Z(t.y,1.6),d=Z(t.z),f=(e,t,n,r,a)=>{for(let o=0;o=zO)return;let c=Math.trunc(e)*2+(t===`left`?0:1),l=Number.isSafeInteger(a)?a:0,u=this.hands[c];if(u.active||this.lastDismembermentEvent[c]===l)return;this.applyBakedPart(u,s,o);let d=Gk(l*130363+c*12289+37),f=nA(i);this.lastDismembermentEvent[c]=l,u.active=!0,u.moving=!0,u.eventId=l;let p=1.3+d()*1.1;u.vy=1.5+d()*1.2;let m=(d()-.5)*1.8;u.vx=p*f.x-m*f.z,u.vz=p*f.z+m*f.x,u.vrx=(d()-.5)*16,u.vry=(d()-.5)*16,u.vrz=(d()-.5)*16,u.bounces=0,u.trail=0,u.stained=!1,u.mesh.position.set(Z(n.x),Z(n.y,1.25),Z(n.z)),lA(u.mesh.quaternion,r),u.mesh.visible=!0;let h=this.handStumps[c];h.active=!0,h.fountainLife=Sk,h.accumulator=0,h.seed=l|1,h.direction=f,h.mesh.position.copy(u.mesh.position),h.mesh.quaternion.copy(u.mesh.quaternion),h.mesh.visible=!0;for(let t=0;t=zO)return;let o=Math.trunc(e),s=Number.isSafeInteger(i)?i:0,c=Gk(s*69061+o*2741+29),l=nA(r),u=this.tornAxis.copy(n);(!(u.lengthSq()>1e-8)||!Number.isFinite(u.lengthSq()))&&u.set(0,1,0),u.normalize();let d=Z(t.x),f=Z(t.y,1.2),p=Z(t.z);for(let e=0;e{for(let n=0;n=zO)return;let i=Math.trunc(e)*2+(t===`left`?0:1),a=this.handStumps[i];a.active&&(a.mesh.position.set(Z(n.x),Z(n.y,1.2),Z(n.z)),lA(a.mesh.quaternion,r))}anchorStump(e,t,n,r,i){if(this.bloodLevel!==`full`||e<0||e>=zO)return;let a=this.stumps[Math.trunc(e)];if(a.active){if(a.mesh.position.set(Z(t.x),Z(t.y,1.5),Z(t.z)),r===void 0||r.length<18){a.mesh.geometry=this.stumpGeometry,lA(a.mesh.quaternion,n);return}oD(a.flesh,r,a.mesh.position,this.stumpOutward.set(0,1,0).applyQuaternion(n),.01,i),a.mesh.geometry=a.flesh,a.mesh.quaternion.identity()}}restoreFighter(e){if(e<0||e>=zO)return;let t=Math.trunc(e),n=this.heads[t];n.active=!1,n.moving=!1,n.mesh.visible=!1,n.mesh.position.y=-50,this.applyBakedPart(n,void 0,9063730);let r=this.stumps[t];r.active=!1,r.fountainLife=0,r.accumulator=0,r.mesh.visible=!1,r.mesh.position.y=-50,r.mesh.material=this.stumpMaterial,this.clearGibs(t),this.stopGush(t);let i=this.eyes[t];i.active=!1,i.bleeding=0,this.eyeMeshes[t].visible=!1,this.nerveMeshes[t].visible=!1;for(let e of[t*2,t*2+1]){let t=this.hands[e];t.active=!1,t.moving=!1,t.mesh.visible=!1,t.mesh.position.y=-50,this.applyBakedPart(t,void 0,1920728);let n=this.handStumps[e];n.active=!1,n.fountainLife=0,n.accumulator=0,n.mesh.visible=!1,n.mesh.position.y=-50}}drip(e,t,n,r=0){let i=+(r===1);if(this.bloodLevel===`off`||n||t<=.05){this.stopDrip(i);return}let a=this.dripEmitters[i];a.position.set(Z(e.x),Z(e.y,1.5),Z(e.z)),a.rate=this.bloodLevel===`reduced`?Math.min(3,t*3):Math.min(60,t*40),a.active=!0}stopDrip(e){let t=this.dripEmitters[+(e===1)];t.active=!1,t.rate=0,t.accumulator=0}gush(e,t,n,r,i,a){if(this.bloodLevel!==`full`||e<0||e>=this.gushes.length)return;let o=this.gushes[Math.trunc(e)],s=Number.isSafeInteger(a)?a:0;o.active&&o.eventId===s||(o.active=!0,o.eventId=s,o.seconds=Math.max(.1,Z(r,1)),o.life=o.seconds,o.rate=Math.max(0,Z(i)),o.accumulator=0,this.anchorGush(e,t,n))}anchorGush(e,t,n){let r=this.gushes[Math.trunc(e)];r===void 0||!r.active||(r.position.set(Z(t.x),Z(t.y,1.4),Z(t.z)),n.lengthSq()>1e-8&&Number.isFinite(n.lengthSq())&&r.axis.copy(n).normalize())}gushing(e){return this.gushes[Math.trunc(e)]?.active===!0}stopGush(e){let t=this.gushes[e];t!==void 0&&(t.active=!1,t.eventId=null)}updateGushes(e){for(let t of this.gushes){if(!t.active)continue;if(t.life-=e,t.life<=0||this.bloodLevel!==`full`){t.active=!1;continue}let n=t.life/t.seconds,r=(t.seconds-t.life)*wk%1,i=Math.exp(-(((r-.5)/Fk)**2));if(t.accumulator+=e*this.forDevice(t.rate)*n*(Ik+(1-Ik)*i),!(t.accumulator<1))for(Vk.set(Math.abs(t.axis.y)<.9?0:1,+(Math.abs(t.axis.y)<.9),0).cross(t.axis).normalize(),Hk.crossVectors(t.axis,Vk);t.accumulator>=1;){--t.accumulator;let e=Math.sqrt(this.ambientRandom())*zk,r=this.ambientRandom()*Math.PI*2,a=(Lk+this.ambientRandom()*(Rk-Lk))*(.5+.5*n)*(.7+.3*i);Uk.copy(t.axis).multiplyScalar(Math.cos(e)).addScaledVector(Vk,Math.sin(e)*Math.cos(r)).addScaledVector(Hk,Math.sin(e)*Math.sin(r)).multiplyScalar(a),this.spawnDroplet(t.position.x+(this.ambientRandom()-.5)*.03,t.position.y+(this.ambientRandom()-.5)*.02,t.position.z+(this.ambientRandom()-.5)*.03,Uk.x,Uk.y,Uk.z,XE(this.ambientRandom()),1.2,!0,.004+this.ambientRandom()**2*.01)}}}updateDripEmitters(e){for(let t of this.dripEmitters)if(t.active)for(t.accumulator+=e*t.rate;t.accumulator>=1;)--t.accumulator,this.spawnDroplet(t.position.x+(this.ambientRandom()-.5)*.14,t.position.y-.04,t.position.z+(this.ambientRandom()-.5)*.1,(this.ambientRandom()-.5)*.08,-.25-this.ambientRandom()*.4,(this.ambientRandom()-.5)*.08,XE(this.ambientRandom()),1.1,!0)}spawnTeeth(e,t,n,r){if(this.bloodLevel===`off`)return;let i=this.bloodLevel===`reduced`?+(n>=3):Math.min(12,Math.max(1,Math.round(n)));if(i<=0)return;let a=Gk((Number.isSafeInteger(r)?r:0)*7331+91),o=nA(t);for(let t=0;t>3)&&n!==null&&(n.fading=bk)}sprayGib(e,t,n,r,i,a,o,s,c=`flesh`,l=-1){this.spawnGib(t,n,r,i*e.x-o*e.z,a,i*e.z+o*e.x,s,c,l)}writeDebrisMatrix(e,t,n){if(!n.alive)this.gibPosition.set(0,-50,0),this.gibQuaternion.identity(),this.gibScale.setScalar(0);else{this.gibPosition.set(n.x,n.y,n.z),this.gibEuler.set(n.rx,n.ry,n.rz),this.gibQuaternion.setFromEuler(this.gibEuler);let e=n.fading>=0?n.scale*Math.max(0,n.fading)/bk:n.scale;this.gibScale.set(e*n.stretch,e,e/Math.sqrt(n.stretch))}this.gibMatrix.compose(this.gibPosition,this.gibQuaternion,this.gibScale),e.setMatrixAt(t,this.gibMatrix)}updateDebris(e,t,n){let r=!1;for(let[i,a]of e.entries()){if(!a.alive||a.resting&&a.fading<0)continue;if(r=!0,a.fading>=0){a.fading-=n,a.fading<=0&&(a.alive=!1),this.writeDebrisMatrix(t,i,a);continue}a.vy-=6.4*n,a.x+=a.vx*n,a.y+=a.vy*n,a.z+=a.vz*n,a.rx+=a.vrx*n,a.ry+=a.vry*n,a.rz+=a.vrz*n,this.confineGib(a);let e=0+(a.kind===`eye`?Jk*LO:.015);a.y<=e&&(a.y=e,!a.stained&&this.bloodLevel===`full`&&a.kind!==`tooth`&&a.kind!==`eye`&&(a.stained=!0,this.placeDecal(a.x,a.z,.24+a.scale*.16,.14+a.scale*.1,a.rz,.55,6425104)),a.bounces.35?(a.bounces+=1,a.vy=Math.abs(a.vy)*.3,a.vx*=.68,a.vz*=.68,a.vrx*=.7,a.vry*=.7,a.vrz*=.7):(a.vx=0,a.vy=0,a.vz=0,a.vrx=a.vry=a.vrz=0,a.kind===`shard`&&(a.rx=Math.round(a.rx/Math.PI)*Math.PI),a.resting=!0)),this.writeDebrisMatrix(t,i,a)}r&&(t.instanceMatrix.needsUpdate=!0)}confineGib(e){Math.abs(e.x)>3.05&&(e.x=Math.sign(e.x)*Ww,e.vx*=-.45),Math.abs(e.z)>3.05&&(e.z=Math.sign(e.z)*Ww,e.vz*=-.45)}updateDetachedParts(e,t){for(let n of e){if(n.active&&n.settle>=0&&n.settle<1){n.settle=Math.min(1,n.settle+t/JO);let e=n.settle*n.settle*(3-2*n.settle);n.mesh.quaternion.slerpQuaternions(n.settleFrom,n.settleTo,e),n.mesh.position.y=n.settleFromY+(n.settleToY-n.settleFromY)*e}if(!n.active||!n.moving)continue;let e=n.mesh.position.x,r=n.mesh.position.z;if(n.vy-=5.8*t,n.mesh.position.x+=n.vx*t,n.mesh.position.y+=n.vy*t,n.mesh.position.z+=n.vz*t,n.mesh.rotation.x+=n.vrx*t,n.mesh.rotation.y+=n.vry*t,n.mesh.rotation.z+=n.vrz*t,this.bloodLevel===`full`)for(n.trail+=t*this.forDevice(RO),n.trail>=1&&this.trailPoint.copy(n.cap.position).multiply(n.mesh.scale).applyQuaternion(n.mesh.quaternion).add(n.mesh.position);n.trail>=1;)--n.trail,this.spawnDroplet(this.trailPoint.x+(this.ambientRandom()-.5)*.03,this.trailPoint.y+(this.ambientRandom()-.5)*.03,this.trailPoint.z+(this.ambientRandom()-.5)*.03,n.vx*.35+(this.ambientRandom()-.5)*.9,n.vy*.35+(this.ambientRandom()-.5)*.9,n.vz*.35+(this.ambientRandom()-.5)*.9,XE(this.ambientRandom()),.9,!0);let i=Jw-n.radius-YO,a=sA(n.mesh.position.x,n.vx,e,i),o=sA(n.mesh.position.z,n.vz,r,i);if(n.mesh.position.x=a.position,n.mesh.position.z=o.position,n.vx=a.velocity,n.vz=o.velocity,n.mesh.position.y<=0+n.radius){if(n.mesh.position.y=0+n.radius,!n.stained&&this.bloodLevel===`full`){n.stained=!0;let e=n.radius===qO?1:.55;this.placeDecal(n.mesh.position.x,n.mesh.position.z,1.3*e,.9*e,n.mesh.rotation.z,.85,4392199)}n.bounces<2&&Math.abs(n.vy)>.42?(n.bounces+=1,n.vy=Math.abs(n.vy)*.32,n.vx*=.62,n.vz*=.62,n.vrx*=.65,n.vry*=.65,n.vrz*=.65):(n.moving=!1,n.vx=0,n.vy=0,n.vz=0,n.vrx=0,n.vry=0,n.vrz=0,n.look!==null&&this.rollOntoEar(n))}(!Number.isFinite(n.mesh.position.x)||!Number.isFinite(n.mesh.position.y)||!Number.isFinite(n.mesh.position.z)||!Number.isFinite(n.mesh.quaternion.x)||!Number.isFinite(n.mesh.quaternion.y)||!Number.isFinite(n.mesh.quaternion.z)||!Number.isFinite(n.mesh.quaternion.w))&&(n.mesh.position.set(0,0+n.radius,0),n.mesh.quaternion.identity(),n.moving=!1,n.vx=0,n.vy=0,n.vz=0)}}rollOntoEar(e){let t=this.settleAxis.set(1,0,0).applyQuaternion(e.mesh.quaternion),n=t.y>=0?1:-1;e.settleFrom.copy(e.mesh.quaternion),e.settleTo.setFromUnitVectors(t,this.settleUp.set(0,n,0)).multiply(e.mesh.quaternion),e.settleFromY=e.mesh.position.y,e.settleToY=0+(n>0?-e.sideLow:e.sideHigh),e.settle=0}stumpRandom(e){let t=e.seed|0;return t=Math.imul(t^t>>>15,1|t),t^=t+Math.imul(t^t>>>7,61|t),e.seed=t|0,((t^t>>>14)>>>0)/4294967296}updateStumpFountains(e){if(this.bloodLevel===`full`)for(let t of[...this.stumps,...this.handStumps]){if(!t.active||t.fountainLife<=0)continue;t.fountainLife=Math.max(0,t.fountainLife-e);let n=Math.min(1,t.fountainLife/Ck),r=t.fountainLife*wk%1,i=Math.exp(-(((r-.5)/Tk)**2));if(t.accumulator+=e*this.forDevice(Ek)*n*(Dk+(1-Dk)*i),t.accumulator<1)continue;let a=Wk(t,Bk);for(Vk.set(Math.abs(a.y)<.9?0:1,+(Math.abs(a.y)<.9),0).cross(a).normalize(),Hk.crossVectors(a,Vk);t.accumulator>=1;){--t.accumulator;let e=this.stumpRandom(t),r=this.stumpRandom(t),o=this.stumpRandom(t),s=Math.sqrt(e)*Ak,c=r*Math.PI*2;Uk.copy(a).multiplyScalar(Math.cos(s)).addScaledVector(Vk,Math.sin(s)*Math.cos(c)).addScaledVector(Hk,Math.sin(s)*Math.sin(c)).multiplyScalar(K.lerp(Ok,kk,o)*(.7+.3*i)*(.55+.45*n)),this.spawnDroplet(t.mesh.position.x+a.x*.015+(e-.5)*.03,t.mesh.position.y+a.y*.015,t.mesh.position.z+a.z*.015+(r-.5)*.03,Uk.x,Uk.y,Uk.z,XE(e),1.2+o*.6,!0,.004+o*o*.01)}}}update(e){for(this.canvasBlood.update(aA(e)),this.lens.update(aA(e)),this.simulationRemainder+=aA(e);this.simulationRemainder+1e-9>=hk;)this.simulationRemainder=Math.max(0,this.simulationRemainder-hk),this.simulate(hk)}simulate(e){this.shake*=.02**e,this.updateDripEmitters(e),this.updateGushes(e),this.updateStumpFountains(e),this.updateDetachedParts(this.heads,e),this.updateDetachedParts(this.hands,e),this.updateShields(e),this.updateEyes(e),this.updateDebris(this.gibs,this.gibMesh,e),this.updateDebris(this.shards,this.shardMesh,e),this.updateDebris(this.eyeballs,this.eyeballMesh,e);let t=this.liveDroplets,n=!1;for(let t=0;t0&&(this.dropletBuffers.position.needsUpdate=!0,this.dropletBuffers.color.needsUpdate=!0,this.uploadDroplets(0,this.liveDroplets,n));let r=!1;for(let[t,n]of this.mists.entries()){if(!n.alive)continue;if(r=!0,n.life-=e,n.life<=0){n.alive=!1,this.mistPositions[t*3+1]=-50;continue}let i=1-n.life/n.maxLife;this.mistPositions[t*3]=n.x,this.mistPositions[t*3+1]=n.y+i*.14,this.mistPositions[t*3+2]=n.z,this.mistColors[t*4+3]=Math.max(0,1-i)*Math.min(1,n.scale)}r&&(this.mistGeometry.attributes.position.needsUpdate=!0,this.mistGeometry.attributes.color.needsUpdate=!0)}clearDroplets(e){let t=this.liveDroplets;for(let t=0;t=2.0 are supported.`));return}let c=new pj(i,{path:t||this.resourcePath||``,crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});c.fileLoader.setRequestHeader(this.requestHeader);for(let e=0;e=0&&o[t]===void 0&&console.warn(`THREE.GLTFLoader: Unknown extension "`+t+`".`)}}c.setExtensions(a),c.setPlugins(o),c.parse(n,r)}parseAsync(e,t){let n=this;return new Promise(function(r,i){n.parse(e,t,r,i)})}};function _A(){let e={};return{get:function(t){return e[t]},add:function(t,n){e[t]=n},remove:function(t){delete e[t]},removeAll:function(){e={}}}}function vA(e,t,n){let r=e.json.materials[t];return r.extensions&&r.extensions[n]?r.extensions[n]:null}var yA={KHR_BINARY_GLTF:`KHR_binary_glTF`,KHR_DRACO_MESH_COMPRESSION:`KHR_draco_mesh_compression`,KHR_LIGHTS_PUNCTUAL:`KHR_lights_punctual`,KHR_MATERIALS_CLEARCOAT:`KHR_materials_clearcoat`,KHR_MATERIALS_DISPERSION:`KHR_materials_dispersion`,KHR_MATERIALS_IOR:`KHR_materials_ior`,KHR_MATERIALS_SHEEN:`KHR_materials_sheen`,KHR_MATERIALS_SPECULAR:`KHR_materials_specular`,KHR_MATERIALS_TRANSMISSION:`KHR_materials_transmission`,KHR_MATERIALS_IRIDESCENCE:`KHR_materials_iridescence`,KHR_MATERIALS_ANISOTROPY:`KHR_materials_anisotropy`,KHR_MATERIALS_UNLIT:`KHR_materials_unlit`,KHR_MATERIALS_VOLUME:`KHR_materials_volume`,KHR_TEXTURE_BASISU:`KHR_texture_basisu`,KHR_TEXTURE_TRANSFORM:`KHR_texture_transform`,KHR_MESH_QUANTIZATION:`KHR_mesh_quantization`,KHR_MATERIALS_EMISSIVE_STRENGTH:`KHR_materials_emissive_strength`,EXT_MATERIALS_BUMP:`EXT_materials_bump`,EXT_TEXTURE_WEBP:`EXT_texture_webp`,EXT_TEXTURE_AVIF:`EXT_texture_avif`,EXT_MESHOPT_COMPRESSION:`EXT_meshopt_compression`,KHR_MESHOPT_COMPRESSION:`KHR_meshopt_compression`,EXT_MESH_GPU_INSTANCING:`EXT_mesh_gpu_instancing`},bA=class{constructor(e){this.parser=e,this.name=yA.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){let e=this.parser,t=this.parser.json.nodes||[];for(let n=0,r=t.length;n=0)throw Error(`THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures`);return null}return t.loadTextureImage(e,i.source,a)}},PA=class{constructor(e){this.parser=e,this.name=yA.EXT_TEXTURE_WEBP}loadTexture(e){let t=this.name,n=this.parser,r=n.json,i=r.textures[e];if(!i.extensions||!i.extensions[t])return null;let a=i.extensions[t],o=r.images[a.source],s=n.textureLoader;if(o.uri){let e=n.options.manager.getHandler(o.uri);e!==null&&(s=e)}return n.loadTextureImage(e,a.source,s)}},FA=class{constructor(e){this.parser=e,this.name=yA.EXT_TEXTURE_AVIF}loadTexture(e){let t=this.name,n=this.parser,r=n.json,i=r.textures[e];if(!i.extensions||!i.extensions[t])return null;let a=i.extensions[t],o=r.images[a.source],s=n.textureLoader;if(o.uri){let e=n.options.manager.getHandler(o.uri);e!==null&&(s=e)}return n.loadTextureImage(e,a.source,s)}},IA=class{constructor(e,t){this.name=t,this.parser=e}loadBufferView(e){let t=this.parser.json,n=t.bufferViews[e];if(n.extensions&&n.extensions[this.name]){let e=n.extensions[this.name],r=this.parser.getDependency(`buffer`,e.buffer),i=this.parser.options.meshoptDecoder;if(!i||!i.supported){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw Error(`THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files`);return null}return r.then(function(t){let n=e.byteOffset||0,r=e.byteLength||0,a=e.count,o=e.byteStride,s=new Uint8Array(t,n,r);return i.decodeGltfBufferAsync?i.decodeGltfBufferAsync(a,o,s,e.mode,e.filter).then(function(e){return e.buffer}):i.ready.then(function(){let t=new ArrayBuffer(a*o);return i.decodeGltfBuffer(new Uint8Array(t),a,o,s,e.mode,e.filter),t})})}else return null}},LA=class{constructor(e){this.name=yA.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(e){let t=this.parser.json,n=t.nodes[e];if(!n.extensions||!n.extensions[this.name]||n.mesh===void 0)return null;let r=t.meshes[n.mesh];for(let e of r.primitives)if(e.mode!==JA.TRIANGLES&&e.mode!==JA.TRIANGLE_STRIP&&e.mode!==JA.TRIANGLE_FAN&&e.mode!==void 0)return null;let i=n.extensions[this.name].attributes,a=[],o={};for(let e in i)a.push(this.parser.getDependency(`accessor`,i[e]).then(t=>(o[e]=t,o[e])));return a.length<1?null:(a.push(this.parser.createNodeMesh(e)),Promise.all(a).then(e=>{let t=e.pop(),n=t.isGroup?t.children:[t],r=e[0].count,i=[];for(let e of n){let t=new Zm,n=new J,a=new Dm,s=new J(1,1,1),c=new D_(e.geometry,e.material,r);for(let e=0;e0||e.search(/^data\:image\/jpeg/)===0?`image/jpeg`:e.search(/\.webp($|\?)/i)>0||e.search(/^data\:image\/webp/)===0?`image/webp`:e.search(/\.ktx2($|\?)/i)>0||e.search(/^data\:image\/ktx2/)===0?`image/ktx2`:`image/png`}var fj=new Zm,pj=class{constructor(e={},t={}){this.json=e,this.extensions={},this.plugins={},this.options=t,this.cache=new _A,this.associations=new Map,this.primitiveCache={},this.nodeCache={},this.meshCache={refs:{},uses:{}},this.cameraCache={refs:{},uses:{}},this.lightCache={refs:{},uses:{}},this.sourceCache={},this.textureCache={},this.nodeNamesUsed={};let n=!1,r=-1,i=!1,a=-1;if(typeof navigator<`u`&&navigator.userAgent!==void 0){let e=navigator.userAgent;n=/^((?!chrome|android).)*safari/i.test(e)===!0;let t=e.match(/Version\/(\d+)/);r=n&&t?parseInt(t[1],10):-1,i=e.indexOf(`Firefox`)>-1,a=i?e.match(/Firefox\/([0-9]+)\./)[1]:-1}typeof createImageBitmap>`u`||n&&r<17||i&&a<98?this.textureLoader=new Ly(this.options.manager):this.textureLoader=new sb(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new Py(this.options.manager),this.fileLoader.setResponseType(`arraybuffer`),this.options.crossOrigin===`use-credentials`&&this.fileLoader.setWithCredentials(!0)}setExtensions(e){this.extensions=e}setPlugins(e){this.plugins=e}parse(e,t){let n=this,r=this.json,i=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll(function(e){return e._markDefs&&e._markDefs()}),Promise.all(this._invokeAll(function(e){return e.beforeRoot&&e.beforeRoot()})).then(function(){return Promise.all([n.getDependencies(`scene`),n.getDependencies(`animation`),n.getDependencies(`camera`)])}).then(function(t){let a={scene:t[0][r.scene||0],scenes:t[0],animations:t[1],cameras:t[2],asset:r.asset,parser:n,userData:{}};return ij(i,a,r),aj(a,r),Promise.all(n._invokeAll(function(e){return e.afterRoot&&e.afterRoot(a)})).then(function(){for(let e of a.scenes)e.updateMatrixWorld();e(a)})}).catch(t)}_markDefs(){let e=this.json.nodes||[],t=this.json.skins||[],n=this.json.meshes||[];for(let n=0,r=t.length;n{let n=this.associations.get(e);n!=null&&this.associations.set(t,n);for(let[n,r]of e.children.entries())i(r,t.children[n])};return i(n,r),r.name+=`_instance_`+e.uses[t]++,r}_invokeOne(e){let t=Object.values(this.plugins);t.push(this);for(let n=0;n=2&&p.setY(t,u[e*a+1]),a>=3&&p.setZ(t,u[e*a+2]),a>=4&&p.setW(t,u[e*a+3]),a>=5)throw Error(`THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.`)}p.normalized=d}return p})}loadTexture(e){let t=this.json,n=this.options,r=t.textures[e].source,i=t.images[r],a=this.textureLoader;if(i.uri){let e=n.manager.getHandler(i.uri);e!==null&&(a=e)}return this.loadTextureImage(e,r,a)}loadTextureImage(e,t,n){let r=this,i=this.json,a=i.textures[e],o=i.images[t],s=(o.uri||o.bufferView)+`:`+a.sampler;if(this.textureCache[s])return this.textureCache[s];let c=this.loadImageSource(t,n).then(function(t){t.flipY=!1,t.name=a.name||o.name||``,t.name===``&&typeof o.uri==`string`&&o.uri.startsWith(`data:image/`)===!1&&(t.name=o.uri);let n=(i.samplers||{})[a.sampler]||{};return t.magFilter=XA[n.magFilter]||1006,t.minFilter=XA[n.minFilter]||1008,t.wrapS=ZA[n.wrapS]||1e3,t.wrapT=ZA[n.wrapT]||1e3,t.generateMipmaps=!t.isCompressedTexture&&t.minFilter!==1003&&t.minFilter!==1006,r.associations.set(t,{textures:e}),t}).catch(function(){return null});return this.textureCache[s]=c,c}loadImageSource(e,t){let n=this,r=this.json,i=this.options;if(this.sourceCache[e]!==void 0)return this.sourceCache[e].then(e=>e.clone());let a=r.images[e],o=self.URL||self.webkitURL,s=a.uri||``,c=!1;if(a.bufferView!==void 0)s=n.getDependency(`bufferView`,a.bufferView).then(function(e){c=!0;let t=new Blob([e],{type:a.mimeType});return s=o.createObjectURL(t),s});else if(a.uri===void 0)throw Error(`THREE.GLTFLoader: Image `+e+` is missing URI and bufferView`);let l=Promise.resolve(s).then(function(e){return new Promise(function(n,r){let a=n;t.isImageBitmapLoader===!0&&(a=function(e){let t=new Gm(e);t.needsUpdate=!0,n(t)}),t.load(ab.resolveURL(e,i.path),a,void 0,r)})}).then(function(e){return c===!0&&o.revokeObjectURL(s),aj(e,a),e.userData.mimeType=a.mimeType||dj(a.uri),e}).catch(function(e){throw console.error(`THREE.GLTFLoader: Couldn't load texture`,s),e});return this.sourceCache[e]=l,l}assignTexture(e,t,n,r){let i=this;return this.getDependency(`texture`,n.index).then(function(a){if(!a)return null;if(n.texCoord!==void 0&&n.texCoord>0&&(a=a.clone(),a.channel=n.texCoord),i.extensions[yA.KHR_TEXTURE_TRANSFORM]){let e=n.extensions===void 0?void 0:n.extensions[yA.KHR_TEXTURE_TRANSFORM];if(e){let t=i.associations.get(a);a=i.extensions[yA.KHR_TEXTURE_TRANSFORM].extendTexture(a,e),i.associations.set(a,t)}}return r!==void 0&&(a.colorSpace=r),e[t]=a,a})}assignFinalMaterial(e){let t=e.geometry,n=e.material,r=t.attributes.tangent===void 0,i=t.attributes.color!==void 0,a=t.attributes.normal===void 0;if(e.isPoints){let e=`PointsMaterial:`+n.uuid,t=this.cache.get(e);t||(t=new K_,Lg.prototype.copy.call(t,n),t.color.copy(n.color),t.map=n.map,t.sizeAttenuation=!1,this.cache.add(e,t)),n=t}else if(e.isLine){let e=`LineBasicMaterial:`+n.uuid,t=this.cache.get(e);t||(t=new M_,Lg.prototype.copy.call(t,n),t.color.copy(n.color),t.map=n.map,this.cache.add(e,t)),n=t}if(r||i||a){let e=`ClonedMaterial:`+n.uuid+`:`;r&&(e+=`derivative-tangents:`),i&&(e+=`vertex-colors:`),a&&(e+=`flat-shading:`);let t=this.cache.get(e);t||(t=n.clone(),i&&(t.vertexColors=!0),a&&(t.flatShading=!0),r&&(t.normalScale&&(t.normalScale.y*=-1),t.clearcoatNormalScale&&(t.clearcoatNormalScale.y*=-1)),this.cache.add(e,t),this.associations.set(t,this.associations.get(n))),n=t}e.material=n}getMaterialType(){return $v}loadMaterial(e){let t=this,n=this.json,r=this.extensions,i=n.materials[e],a,o={},s=i.extensions||{},c=[];if(s[yA.KHR_MATERIALS_UNLIT]){let e=r[yA.KHR_MATERIALS_UNLIT];a=e.getMaterialType(),c.push(e.extendParams(o,i,t))}else{let n=i.pbrMetallicRoughness||{};if(o.color=new Y(1,1,1),o.opacity=1,Array.isArray(n.baseColorFactor)){let e=n.baseColorFactor;o.color.setRGB(e[0],e[1],e[2],Fp),o.opacity=e[3]}n.baseColorTexture!==void 0&&c.push(t.assignTexture(o,`map`,n.baseColorTexture,Pp)),o.metalness=n.metallicFactor===void 0?1:n.metallicFactor,o.roughness=n.roughnessFactor===void 0?1:n.roughnessFactor,n.metallicRoughnessTexture!==void 0&&(c.push(t.assignTexture(o,`metalnessMap`,n.metallicRoughnessTexture)),c.push(t.assignTexture(o,`roughnessMap`,n.metallicRoughnessTexture))),a=this._invokeOne(function(t){return t.getMaterialType&&t.getMaterialType(e)}),c.push(Promise.all(this._invokeAll(function(t){return t.extendMaterialParams&&t.extendMaterialParams(e,o)})))}i.doubleSided===!0&&(o.side=2);let l=i.alphaMode||nj.OPAQUE;if(l===nj.BLEND?(o.transparent=!0,o.depthWrite=!1):(o.transparent=!1,l===nj.MASK&&(o.alphaTest=i.alphaCutoff===void 0?.5:i.alphaCutoff)),i.normalTexture!==void 0&&a!==Ug&&(c.push(t.assignTexture(o,`normalMap`,i.normalTexture)),o.normalScale=new q(1,1),i.normalTexture.scale!==void 0)){let e=i.normalTexture.scale;o.normalScale.set(e,e)}if(i.occlusionTexture!==void 0&&a!==Ug&&(c.push(t.assignTexture(o,`aoMap`,i.occlusionTexture)),i.occlusionTexture.strength!==void 0&&(o.aoMapIntensity=i.occlusionTexture.strength)),i.emissiveFactor!==void 0&&a!==Ug){let e=i.emissiveFactor;o.emissive=new Y().setRGB(e[0],e[1],e[2],Fp)}return i.emissiveTexture!==void 0&&a!==Ug&&c.push(t.assignTexture(o,`emissiveMap`,i.emissiveTexture,Pp)),Promise.all(c).then(function(){let n=new a(o);return i.name&&(n.name=i.name),aj(n,i),t.associations.set(n,{materials:e}),i.extensions&&ij(r,n,i),n})}createUniqueName(e){let t=Tb.sanitizeNodeName(e||``);return t in this.nodeNamesUsed?t+`_`+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){let t=this,n=this.extensions,r=this.primitiveCache;function i(e){return n[yA.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(e,t).then(function(n){return hj(n,e,t)})}let a=[];for(let n=0,o=e.length;nUw(e,1)):o.mode===JA.TRIANGLE_FAN&&(e=e.then(e=>Uw(e,2))),r[s]={primitive:o,promise:e},a.push(e)}}return Promise.all(a)}loadMesh(e){let t=this,n=this.json,r=this.extensions,i=n.meshes[e],a=i.primitives,o=[];for(let e=0,t=a.length;e0&&sj(d,i),d.name=t.createUniqueName(i.name||`mesh_`+e),aj(d,i),u.extensions&&ij(r,d,u),t.assignFinalMaterial(d),c.push(d)}for(let n=0,r=c.length;n0){let e=t.userData.pivot,r=n[0];t.pivot=new J().fromArray(e),t.position.x-=e[0],t.position.y-=e[1],t.position.z-=e[2],r.position.set(0,0,0),delete t.userData.pivot}return t})}_loadNodeShallow(e){let t=this.json,n=this.extensions,r=this;if(this.nodeCache[e]!==void 0)return this.nodeCache[e];let i=t.nodes[e],a=i.name?r.createUniqueName(i.name):``,o=[],s=r._invokeOne(function(t){return t.createNodeMesh&&t.createNodeMesh(e)});return s&&o.push(s),i.camera!==void 0&&o.push(r.getDependency(`camera`,i.camera).then(function(e){return r._getNodeRef(r.cameraCache,i.camera,e)})),r._invokeAll(function(t){return t.createNodeAttachment&&t.createNodeAttachment(e)}).forEach(function(e){o.push(e)}),this.nodeCache[e]=Promise.all(o).then(function(t){let o;if(o=i.isBone===!0?new m_:t.length>1?new Th:t.length===1?t[0]:new wh,o!==t[0])for(let e=0,n=t.length;e1){let e=r.associations.get(o);r.associations.set(o,{...e})}return r.associations.get(o).nodes=e,o}),this.nodeCache[e]}loadScene(e){let t=this.extensions,n=this.json.scenes[e],r=this,i=new Th;n.name&&(i.name=r.createUniqueName(n.name)),aj(i,n),n.extensions&&ij(t,i,n);let a=n.nodes||[],o=[];for(let e=0,t=a.length;e{let t=new Map;for(let[e,n]of r.associations)(e instanceof Lg||e instanceof Gm)&&t.set(e,n);return e.traverse(e=>{let n=r.associations.get(e);n!=null&&t.set(e,n)}),t})(i),i})}_createAnimationTracks(e,t,n,r,i){let a=[],o=e.name?e.name:e.uuid,s=[];function c(e){e.morphTargetInfluences&&s.push(e.name?e.name:e.uuid)}ej[i.path]===ej.weights?(c(e),e.isGroup&&e.children.forEach(c)):s.push(o);let l;switch(ej[i.path]){case ej.weights:l=by;break;case ej.rotation:l=Sy;break;case ej.translation:case ej.scale:l=wy;break;default:switch(n.itemSize){case 1:l=by;break;default:l=wy;break}break}let u=r.interpolation===void 0?Ep:tj[r.interpolation],d=this._getArrayFromAccessor(n);for(let e=0,n=s.length;e` -${OA} +`,Aj={head:`1.0 - smoothstep(outfitCollar(p) - 0.3, outfitCollar(p) + 0.3, p.y)`,body:`p.y < 60.0 ? 1.0 : 1.0 - smoothstep(uOutfitShape.x - 0.4, uOutfitShape.x + 0.4, abs(p.x))`,shoes:`smoothstep(9.0, 11.0, p.y)`,pants:`1.0`},jj=e=>` +${kj} varying vec3 vOutfitPos; vec3 outfitBindNormal = vec3(0.0, 1.0, 0.0); -float outfitClothAt(vec3 p) { return ${kA[e]}; } +float outfitClothAt(vec3 p) { return ${Aj[e]}; } vec3 outfitRounded(vec3 p, vec3 n) { if (p.y < 60.0) { vec2 radial = normalize(p.xz - outfitLegAxis(p.y, sign(p.x)) + vec2(1e-4)); @@ -4799,20 +4800,20 @@ vec3 outfitDraped(vec3 p, vec3 at, float cloth) { at.yz += around / span * (max(span, sleeve) - span) * arm; return at; } -`,jA=` +`,Mj=` { vec3 p = position; float cloth = outfitClothAt(p); objectNormal = normalize(mix(objectNormal, outfitRounded(p, objectNormal), 0.97 * cloth)); outfitBindNormal = objectNormal; } -`,MA=` +`,Nj=` float side = sign(p.x); vec2 axis = outfitLegAxis(p.y, side); vec2 offset = transformed.xz - axis; float reach = max(length(offset), 1e-3); float tube = mix(5.2, 6.0, smoothstep(12.0, 40.0, p.y)); -`,NA={head:` +`,Pj={head:` { vec3 p = position; vOutfitPos = p; @@ -4824,7 +4825,7 @@ vec3 outfitDraped(vec3 p, vec3 at, float cloth) { vec3 p = position; vOutfitPos = p; if (p.y < 60.0) { - ${MA} + ${Nj} float weight = 1.0 - smoothstep(40.5, 45.0, p.y); transformed.xz = axis + offset / reach * mix(reach, max(reach, tube), weight); } else { @@ -4836,7 +4837,7 @@ vec3 outfitDraped(vec3 p, vec3 at, float cloth) { { vec3 p = position; vOutfitPos = p; - ${MA} + ${Nj} float weight = smoothstep(9.0, 11.5, p.y); transformed.xz = axis + offset / reach * mix(reach, max(reach, tube), weight); } @@ -4849,8 +4850,8 @@ vec3 outfitDraped(vec3 p, vec3 at, float cloth) { vec2 narrow = vec2(mix(0.76, 1.0, slim), mix(0.62, 1.0, slim)); transformed.xz = mix(transformed.xz, axis + (transformed.xz - axis) * narrow, smoothstep(0.5, 4.0, abs(p.x))); } -`},PA=` -${OA} +`},Fj=` +${kj} uniform vec3 uOutfitShirt; uniform vec3 uOutfitTrousers; uniform vec3 uOutfitAccent; @@ -4874,7 +4875,7 @@ vec3 outfitShirtTone(vec3 p) { float band = (1.0 - smoothstep(7.0, 7.2, reach)) * step(104.0, p.y); vec3 tone = uOutfitShirt * mix(mix(0.9, 1.0, fold), 1.07, band); tone *= 1.0 - 0.4 * (1.0 - smoothstep(0.0, 0.3, abs(reach - 7.25))) * step(104.0, p.y); - float hem = min(uOutfitShape.x, ${TA.toFixed(1)}) - 2.4; + float hem = min(uOutfitShape.x, ${Ej.toFixed(1)}) - 2.4; tone *= mix(1.0, 0.86, smoothstep(hem - 0.1, hem + 0.1, along)); if (along < 1.0 && p.z > 0.5 && p.y < 106.0) { tone *= 0.92; @@ -4885,7 +4886,7 @@ vec3 outfitShirtTone(vec3 p) { outfitGloss = tie * 0.4; return mix(tone, uOutfitAccent, tie); } -`,FA={head:` +`,Ij={head:` { vec3 p = vOutfitPos; float collar = outfitCollar(p); @@ -4921,19 +4922,19 @@ vec3 outfitShirtTone(vec3 p) { outfitCloth = 1.0 - belt; outfitGloss = belt; } -`},IA=` +`},Lj=` roughnessFactor = mix(mix(roughnessFactor, 0.88, outfitCloth), 0.32, outfitGloss); -`,LA=` +`,Rj=` #ifdef USE_CLEARCOAT material.clearcoat *= 1.0 - outfitCloth; #endif -`;function RA(e,t,n){let r={uOutfitShirt:{value:new Y(n.shirt)},uOutfitTrousers:{value:new Y(n.trousers)},uOutfitAccent:{value:new Y(n.accent)},uOutfitShape:{value:new Dm(n.sleeves===`long`?63.4:EA,+!!n.bowTie,DA,0)}},i=e.onBeforeCompile,a=Object.hasOwn(e,`customProgramCacheKey`)?e.customProgramCacheKey():`plain`;e.onBeforeCompile=(n,a)=>{i.call(e,n,a),Object.assign(n.uniforms,r),n.vertexShader=n.vertexShader.replace(`#include `,`#include \n${AA(t)}`).replace(`#include `,`#include \n${jA}`).replace(`#include `,`#include \n${NA[t]}`),n.fragmentShader=n.fragmentShader.replace(`#include `,`#include \n${PA}`).replace(`#include `,`#include \n${FA[t]}`).replace(`#include `,`#include \n${IA}`).replace(`#include `,`#include \n${LA}`)},e.customProgramCacheKey=()=>`${a}-outfit-${t}`,e.needsUpdate=!0}var zA=new J(0,1,0);function BA(e,t,n,r){let i=new B_(r,n,1,6);return i.applyQuaternion(new cm().setFromUnitVectors(zA,t)),i.translate(e.x+t.x*n*.5,e.y+t.y*n*.5,e.z+t.z*n*.5),i}function VA(e){let t=e===`left`?-1:1,n=[],r=new bA(8.4,9.2,2.8,1,1.25);r.translate(0,5.2,0),n.push(r);let i=new B_(2.2,2.2,1,6);i.scale(1.3,1,.9),i.translate(0,.4,0),n.push(i);let a=[{x:3.2*t,y:9.1,scale:.95,curl:.22,splay:.12*t},{x:1.08*t,y:9.5,scale:1.05,curl:.34,splay:.03*t},{x:-1.05*t,y:9.3,scale:.98,curl:.46,splay:-.05*t},{x:-3.05*t,y:8.7,scale:.8,curl:.6,splay:-.16*t}];for(let e of a){let t=new J(e.x,e.y,0),r=e.curl;for(let[i,a,o]of[[4.3,1.04,.55],[2.7,.95,.5],[2.2,.86,0]]){let s=new J(Math.sin(e.splay)*Math.cos(r),Math.cos(e.splay)*Math.cos(r),Math.sin(r)),c=i*e.scale;n.push(BA(t,s,c,a*(.88+.12*e.scale))),t.addScaledVector(s,c),r+=o}}let o=new Sv(1.9,6,4);o.scale(1.15,1.5,.95),o.translate(2.7*t,3.3,.9),n.push(o);let s=new J(3.7*t,3.4,.9),c=new J(.62*t,.64,.45).normalize();n.push(BA(s,c,3.9,1.2)),s.addScaledVector(c,3.9),n.push(BA(s,new J(.3*t,.82,.48).normalize(),3,1.05));let l=n.map(e=>{let t=e.index===null?e:e.toNonIndexed();return t.deleteAttribute(`uv`),t}),u=gw(l,!1);for(let e of new Set([...n,...l]))e.dispose();if(u===null)throw Error(`hand geometry could not be merged`);return u}function HA(){let e=new H_(3.9,6,9.2,20,1,!1);return e.scale(1,1,.96),e.translate(0,21.1,0),e}var UA={hips:gA.hips,spine:gA.spine,chest:`Spine1_024`,upperChest:gA.chest,neck:`Neck_012`,head:gA.head,clavicleL:`LeftShoulder_09`,shoulderL:gA.shoulderL,elbowL:gA.elbowL,gloveL:gA.gloveL,clavicleR:`RightShoulder_020`,shoulderR:gA.shoulderR,elbowR:gA.elbowR,gloveR:gA.gloveR,hipL:gA.hipL,kneeL:gA.kneeL,ankleL:gA.ankleL,toeL:`LeftToeBase_011`,hipR:gA.hipR,kneeR:gA.kneeR,ankleR:gA.ankleR,toeR:`RightToeBase_022`},WA=new J,GA=new J,KA=new J,qA=new Mm,JA=new cm,YA=new cm,XA=new J,ZA=new J,QA=new J,$A=new J,ej=new J,tj=new J,nj=new J,rj=new J,ij=new J,aj=new J;function oj(e,t){return t.setFromMatrixPosition(e.matrixWorld)}function sj(e,t){return e.matrixWorld.decompose(XA,t,ZA),t}function cj(e,t,n,r){return GA.copy(e).normalize(),n===`z`?(KA.copy(t).addScaledVector(GA,-t.dot(GA)),KA.lengthSq()<1e-8&&KA.set(0,0,1).addScaledVector(GA,-GA.z),KA.normalize(),WA.crossVectors(GA,KA).normalize()):(WA.copy(t).addScaledVector(GA,-t.dot(GA)),WA.lengthSq()<1e-8&&WA.set(1,0,0).addScaledVector(GA,-GA.x),WA.normalize(),KA.crossVectors(WA,GA).normalize()),qA.makeBasis(WA,GA,KA),r.setFromRotationMatrix(qA)}var lj=class{bones;metrics;restLocal=new Map;restPositions=new Map;limb={reached:!1,joint:new J};constructor(e){let t=new Map;e.traverse(e=>{e instanceof Yg&&t.set(e.name,e)});let n={};for(let[e,r]of Object.entries(UA)){let i=t.get(r);if(i===void 0)throw Error(`fighter rig missing bone ${r} (${e})`);n[e]=i}this.bones=n,e.updateMatrixWorld(!0);for(let e of t.values())this.restLocal.set(e,e.quaternion.clone()),this.restPositions.set(e,e.position.clone());let r=(e,t)=>oj(n[e],QA).distanceTo(oj(n[t],$A)),i=oj(n.hips,QA).clone(),a=oj(n.hips.parent??e,$A).clone(),o=n.hips.position.length(),s=i.distanceTo(a);this.metrics={hipsHeight:i.y,headHeight:oj(n.head,QA).y,chestHeight:oj(n.upperChest,QA).y,ankleHeight:oj(n.ankleL,QA).y,armL:{upper:r(`shoulderL`,`elbowL`),lower:r(`elbowL`,`gloveL`)},armR:{upper:r(`shoulderR`,`elbowR`),lower:r(`elbowR`,`gloveR`)},legL:{upper:r(`hipL`,`kneeL`),lower:r(`kneeL`,`ankleL`)},legR:{upper:r(`hipR`,`kneeR`),lower:r(`kneeR`,`ankleR`)},footLength:r(`ankleL`,`toeL`),unitsPerMeter:s>1e-6?o/s:1}}resetToRest(){for(let[e,t]of this.restLocal){e.quaternion.copy(t);let n=this.restPositions.get(e);n!==void 0&&e.position.copy(n)}}restLocalQuaternion(e){return this.restLocal.get(e)??e.quaternion}restLocalPosition(e){return this.restPositions.get(e)??e.position}position(e,t){return oj(this.bones[e],t)}setWorldRotation(e,t){let n=e.parent;n===null?e.quaternion.copy(t):(sj(n,YA),e.quaternion.copy(YA.invert().multiply(t)).normalize()),e.updateWorldMatrix(!1,!1)}setWorldFrame(e,t,n,r){this.setWorldRotation(e,cj(t,n,r,JA))}setWorldPosition(e,t){let n=e.parent;n===null?e.position.copy(t):(e.position.copy(t),n.worldToLocal(e.position)),e.updateWorldMatrix(!1,!1)}aimAt(e,t,n){if(e.updateWorldMatrix(!1,!1),oj(e,QA),ej.subVectors(t,QA),ej.lengthSq()<1e-10)return;sj(e,JA);let r=n===`z`?aj.set(0,0,1):aj.set(1,0,0);this.setWorldFrame(e,ej,r.applyQuaternion(JA),n)}solveLimb(e,t,n,r,i,a,o,s=.01){e.updateWorldMatrix(!1,!1);let c=oj(e,QA);ej.subVectors(r,c);let l=n.upper+n.lower-s,u=K.clamp(ej.length(),Math.abs(n.upper-n.lower)+.005,l),d=ej.length()<=l;ej.lengthSq()<1e-10&&ej.set(0,-1,0),ej.normalize(),tj.copy(i).addScaledVector(ej,-i.dot(ej)),tj.lengthSq()<1e-8&&(tj.set(0,0,1).addScaledVector(ej,-ej.z),tj.lengthSq()<1e-8&&tj.set(1,0,0)),tj.normalize();let f=K.clamp((n.upper*n.upper+u*u-n.lower*n.lower)/(2*n.upper*u),-1,1),p=n.upper*f,m=n.upper*Math.sqrt(Math.max(0,1-f*f));nj.copy(c).addScaledVector(ej,p).addScaledVector(tj,m),rj.crossVectors(tj,ej).multiplyScalar(o).normalize(),ij.copy(nj).sub(c),this.setWorldFrame(e,ij,rj,a),t.updateWorldMatrix(!1,!1);let h=oj(t,$A);return ij.copy(c).addScaledVector(ej,u).sub(h),this.setWorldFrame(t,ij,rj,a),this.limb.reached=d,this.limb.joint.copy(h),this.limb}},uj=new J(.2018,.081,-.027),dj=new J(-.2018,.081,-.027),fj=(e,t,n)=>new J(e,t,n),pj=(e,t,n)=>{let r=K.clamp((n-e)/Math.max(1e-6,t-e),0,1);return r*r*(3-2*r)},mj=(e,t=1.7)=>K.clamp(e,0,1)**+t,hj=(e,t=2)=>1-(1-K.clamp(e,0,1))**t,gj=new cm,_j=new J,vj=new J,yj=new J,bj=new J,xj=new J,Sj=new cm,Cj=new cm,wj=new Hm,Tj=new J(0,1,0),Ej=[[`spine`,.25,.2],[`chest`,.55,.5],[`upperChest`,1,1]],Dj=class{rig;chestLocal=new J;constructor(e){this.rig=e}toWorld(e,t){return t.copy(e).applyQuaternion(gj).add(_j)}dirToWorld(e,t){return t.copy(e).applyQuaternion(gj)}setYawPitchRoll(e,t,n,r){wj.set(n,t,r,`YXZ`),Sj.setFromEuler(wj),Cj.copy(gj).multiply(Sj),this.rig.setWorldRotation(e,Cj)}apply(e,t){let n=this.rig,r=n.bones;n.resetToRest(),e.updateMatrixWorld(!0),sj(e,gj),oj(e,_j);let i=t.torso;this.toWorld(i.hips,vj),n.setWorldPosition(r.hips,vj),this.setYawPitchRoll(r.hips,i.hipsYaw,i.hipsPitch,i.hipsRoll);let a=i.shouldersYaw-i.hipsYaw;for(let e=0;e0&&(oj(r.head,vj),this.dirToWorld(i.headOffset,yj),vj.add(yj),n.setWorldPosition(r.head,vj)),this.solveArm(`L`,t.handL,t.shrugL),this.solveArm(`R`,t.handR,t.shrugR),this.solveLeg(`L`,t.footL),this.solveLeg(`R`,t.footR)}solveArm(e,t,n){let r=this.rig,i=r.bones,a=e===`L`?i.clavicleL:i.clavicleR,o=e===`L`?i.shoulderL:i.shoulderR,s=e===`L`?i.elbowL:i.elbowR,c=e===`L`?i.gloveL:i.gloveR,l=e===`L`?r.metrics.armL:r.metrics.armR,u=e===`L`?uj:dj;this.chestLocal.copy(u),this.chestLocal.z+=n*.06,this.chestLocal.y+=n*.035,this.chestLocal.x*=1-n*.08,bj.copy(this.chestLocal).multiplyScalar(r.metrics.unitsPerMeter),i.upperChest.localToWorld(bj),r.aimAt(a,bj,`z`),o.updateWorldMatrix(!1,!1),this.toWorld(t.position,vj),this.dirToWorld(t.pole,yj),r.solveLimb(o,s,l,vj,yj,`z`,e===`L`?1:-1,.012),c.updateWorldMatrix(!1,!1),this.dirToWorld(t.knuckles,bj),this.dirToWorld(t.palm,xj),r.setWorldFrame(c,bj,xj,`z`)}solveLeg(e,t){let n=this.rig,r=n.bones,i=e===`L`?r.hipL:r.hipR,a=e===`L`?r.kneeL:r.kneeR,o=e===`L`?r.ankleL:r.ankleR,s=e===`L`?r.toeL:r.toeR,c=e===`L`?n.metrics.legL:n.metrics.legR;this.toWorld(t.position,vj),this.dirToWorld(t.toe,bj).normalize();let l=n.metrics.footLength;xj.copy(bj).multiplyScalar(l).addScaledVector(Tj,-n.metrics.ankleHeight).normalize(),t.heel!==0&&(vj.addScaledVector(xj,l),Sj.setFromAxisAngle(yj.crossVectors(bj,Tj).normalize(),-t.heel),xj.applyQuaternion(Sj),vj.addScaledVector(xj,-l)),this.dirToWorld(t.pole,yj),n.solveLimb(i,a,c,vj,yj,`x`,-1,.02),o.updateWorldMatrix(!1,!1),n.setWorldFrame(o,xj,Tj,`z`),s.updateWorldMatrix(!1,!1),n.setWorldFrame(s,bj,Tj,`z`)}},Oj={bladeYaw:-1.05,hipsHeight:.8,leadFoot:fj(.12,0,.24),rearFoot:fj(-.1,0,-.34),leadToe:fj(-.34,0,.94),rearToe:fj(-.77,0,.64),relaxedLead:fj(.11,-.22,.36),relaxedRear:fj(-.11,-.16,.1),guardHighLead:fj(.14,-.02,.17),guardHighRear:fj(-.1,-.02,.11),guardLowLead:fj(.15,-.36,.22),guardLowRear:fj(-.13,-.34,.12),leadPole:fj(.45,-1,.2),rearPole:fj(-.5,-1,-.05),leadKnuckles:fj(.1,.55,.8),leadPalm:fj(-.9,.15,-.35),rearKnuckles:fj(-.05,.7,.7),rearPalm:fj(.95,.1,-.25)};function kj(e,t,n=new J){return n.set(e.x*t,e.y,e.z)}var Q={pelvis:0,hipL:1,hipR:2,belly:3,chest:4,upper:5,neck:6,shoulderL:7,shoulderR:8,head:9,crown:10,face:11,elbowL:12,wristL:13,fistL:14,elbowR:15,wristR:16,fistR:17,kneeL:18,ankleL:19,toeL:20,heelL:21,kneeR:22,ankleR:23,toeR:24,heelR:25},Aj=[9,4,4,2,10,7,2,3.5,3.5,2.5,1.5,1,1.6,1,1,1.6,1,1,3.6,1.6,.4,.6,3.6,1.6,.4,.6],jj=[.12,.09,.09,.11,.14,.13,.06,.07,.07,.09,.085,.055,.05,.065,.08,.05,.065,.08,.06,.05,.035,.04,.06,.05,.035,.04],Mj=.12,Nj=.16,Pj=.09,Fj=.06,Ij=.11,Lj=[[Q.pelvis,Q.hipL],[Q.pelvis,Q.hipR],[Q.hipL,Q.hipR],[Q.belly,Q.hipL],[Q.belly,Q.hipR],[Q.belly,Q.pelvis],[Q.pelvis,Q.chest],[Q.chest,Q.upper],[Q.upper,Q.neck],[Q.upper,Q.shoulderL],[Q.upper,Q.shoulderR],[Q.neck,Q.shoulderL],[Q.neck,Q.shoulderR],[Q.shoulderL,Q.shoulderR],[Q.neck,Q.head],[Q.head,Q.crown],[Q.head,Q.face],[Q.crown,Q.face],[Q.shoulderL,Q.elbowL],[Q.elbowL,Q.wristL],[Q.wristL,Q.fistL],[Q.shoulderR,Q.elbowR],[Q.elbowR,Q.wristR],[Q.wristR,Q.fistR],[Q.hipL,Q.kneeL],[Q.kneeL,Q.ankleL],[Q.ankleL,Q.toeL],[Q.ankleL,Q.heelL],[Q.toeL,Q.heelL],[Q.hipR,Q.kneeR],[Q.kneeR,Q.ankleR],[Q.ankleR,Q.toeR],[Q.ankleR,Q.heelR],[Q.toeR,Q.heelR]],Rj=[[Q.hipL,Q.shoulderL,.8,1.05],[Q.hipR,Q.shoulderR,.8,1.05],[Q.hipL,Q.shoulderR,.84,1.08],[Q.hipR,Q.shoulderL,.84,1.08],[Q.belly,Q.upper,.7,1.06],[Q.pelvis,Q.upper,.86,1],[Q.hipL,Q.chest,.84,1.08],[Q.hipR,Q.chest,.84,1.08],[Q.shoulderL,Q.face,.76,1.2],[Q.shoulderR,Q.face,.76,1.2],[Q.kneeL,Q.hipR,.8,1.3],[Q.kneeR,Q.hipL,.8,1.3],[Q.kneeL,Q.belly,.5,1.12],[Q.kneeR,Q.belly,.5,1.12]],zj=8,Bj=[[Q.kneeL,Q.kneeR,.13],[Q.ankleL,Q.ankleR,.11],[Q.kneeL,Q.ankleR,.1],[Q.kneeR,Q.ankleL,.1],[Q.hipL,Q.ankleL,.2],[Q.hipR,Q.ankleR,.2],[Q.shoulderL,Q.wristL,.14],[Q.shoulderR,Q.wristR,.14],[Q.face,Q.chest,.2],[Q.crown,Q.chest,.24],[Q.kneeL,Q.upper,.3],[Q.kneeR,Q.upper,.3]],Vj=[Q.elbowL,Q.wristL,Q.fistL,Q.elbowR,Q.wristR,Q.fistR],Hj=[.7,.6,.6,.7,.9,1,1,1,1,1,1,1,.9,.8,.8,.9,.8,.8,.35,.1,0,0,.35,.1,0,0],Uj=[[Q.pelvis,Q.chest,.12],[Q.chest,Q.upper,.13]],Wj=Int32Array.from(Lj.flat()),Gj=Int32Array.from(Rj.flatMap(([e,t])=>[e,t])),Kj=Int32Array.from(Bj.flatMap(([e,t])=>[e,t])),qj=Float64Array.from(Bj.map(([,,e])=>e)),Jj=Int32Array.from(Uj.flatMap(([e,t])=>[e,t])),Yj=Float64Array.from(Uj.map(([,,e])=>e)),Xj=Float64Array.from([Q.head,1,Q.crown,.9,Q.face,1,Q.neck,.45]),Zj=Float64Array.from([Q.belly,1,Q.chest,.6,Q.pelvis,.4,Q.hipL,.3,Q.hipR,.3]),Qj=[Q.head,Q.crown,Q.face],$j=[Q.crown,Q.face],eM=[[Q.toeL,Q.heelL],[Q.toeR,Q.heelR]],tM=[[Q.heelL],[Q.heelR]],nM=[Q.head,Q.crown,Q.face],rM=[Q.fistL],iM=[Q.fistR],aM=1/120,oM=12,sM=9.81,cM=.998,lM=.5,uM=.03,dM=.35,fM=.12,pM=[Q.pelvis,Q.hipL,Q.hipR,Q.belly,Q.chest,Q.upper],mM=[Q.upper,Q.neck,Q.shoulderL,Q.shoulderR,Q.head,Q.crown,Q.face,Q.elbowL,Q.wristL,Q.fistL,Q.elbowR,Q.wristR,Q.fistR],hM=[Q.pelvis,Q.hipL,Q.hipR,Q.belly,Q.kneeL,Q.ankleL,Q.toeL,Q.heelL,Q.kneeR,Q.ankleR,Q.toeR,Q.heelR],gM=40*Math.PI/180,_M=[[Q.kneeL,Q.ankleL,Q.toeL,Q.heelL],[Q.kneeR,Q.ankleR,Q.toeR,Q.heelR]],vM=[[Q.ankleL,Q.toeL,Q.heelL],[Q.ankleR,Q.toeR,Q.heelR]],yM=.08,bM=.35,xM=new Set(pM),SM=bw+.45,CM=.24,wM=1.75,TM=.012,EM=1,DM=.35,OM=.15,kM=1.1,AM=.975,jM=.4,MM=1.2,NM=1200,PM=3,FM=7,IM=.08,LM=.97,RM=2.55,zM=.5,BM=30*Math.PI/180,VM=32*Math.PI/180,HM=28*Math.PI/180,UM=35*Math.PI/180,WM=20*Math.PI/180,GM=.5,KM=.01,qM=.04,JM=.4,YM=.02,XM=.25,ZM={timber:{knee:.12,spine:.2,seconds:.55},crumple:{knee:RM,spine:1,seconds:0},sag:{knee:.55,spine:.6,seconds:.3},fold:{knee:.9,spine:1,seconds:.5}},QM=2.5,$M=35*Math.PI/180,eN=50*Math.PI/180,tN=135*Math.PI/180,nN=[[Q.kneeL,Q.ankleL,Q.toeL,eN,tN],[Q.kneeR,Q.ankleR,Q.toeR,eN,tN],[Q.elbowL,Q.wristL,Q.fistL,0,$M],[Q.elbowR,Q.wristR,Q.fistR,0,$M]],rN=Int32Array.from(nN.flatMap(([e,,t])=>[e,t]));function iN(e,t,n,r){if(t===`body`)return`fold`;if(n<90)return`sag`;let i=Math.abs(Math.floor(r))%3;return e===`hook`?i===0?`timber`:`crumple`:i===0?`crumple`:`timber`}var aN=(e,t,n)=>n.set(e[t*3],e[t*3+1],e[t*3+2]),oN=e=>e-Math.round(e/(Math.PI*2))*Math.PI*2,sN=(e,t,n)=>{e[t*3]=n.x,e[t*3+1]=n.y,e[t*3+2]=n.z},cN=class{position=new Float64Array(78);previous=new Float64Array(78);before=new Float64Array(78);invMass=new Float64Array(26);rigidLength=new Float64Array(Lj.length);rangeMin=new Float64Array(Rj.length);rangeMax=new Float64Array(Rj.length);restRange=new Float64Array(Rj.length);rangeStart=new Float64Array(Rj.length);kneeStart=new Float64Array(2);footSign=new Float64Array(2);turnAxis=new J;turnQuaternion=new cm;turnPoint=new J;angleRanges=new Float64Array(nN.length*2);elbowAxes=new Float64Array(6);kneeAxes=new Float64Array(6);hingeStart=new Float64Array(24);hingeNow=new Float64Array(24);swing=new cm;local=new J;localAxis=new J;ropeLines=new Float64Array(4);style=`crumple`;steps=0;stillSeconds=0;torsoStillSeconds=0;fallSeconds=0;landedSeconds=-1;asleep=!1;obstacleActive=!1;obstacleX=0;obstacleZ=0;obstacleTrack=null;obstacleTrackLive=!1;pull=null;pullShare=0;trackObstacle(e,t){this.obstacleTrack=e,this.obstacleTrackLive=e!==null&&!t}a=new J;b=new J;c=new J;d=new J;e=new J;fx=new J;fy=new J;fz=new J;gx=new J;gy=new J;gz=new J;pivot=new J;segmentA=new J;segmentB=new J;constructor(){for(let e=0;e<26;e+=1)this.invMass[e]=1/Aj[e]}calibrate(e){for(let[t,[n,r]]of Rj.entries())this.restRange[t]=this.distance(e,n,r)}start(e,t,n){this.position.set(e),this.before.set(e);for(let n=0;n<78;n+=1)this.previous[n]=e[n]-t[n]*aM;for(let[t,[n,r]]of Lj.entries())this.rigidLength[t]=this.distance(e,n,r);for(let[t,[n,r,i,a,o]]of nN.entries()){let s=this.distance(e,n,r),c=this.distance(e,r,i),l=this.distance(e,n,i),u=e=>Math.sqrt(s*s+c*c+2*s*c*Math.cos(e));this.angleRanges[t*2]=Math.min(u(o),l),this.angleRanges[t*2+1]=Math.max(u(a),l)}for(let[t,[n,r,i,a]]of Rj.entries()){let o=this.distance(e,n,r),s=this.restRange[t]>0?this.restRange[t]:o;this.rangeMin[t]=Math.min(s*i,o*.98),this.rangeMax[t]=Math.max(s*a,o*1.02),this.rangeStart[t]=o}this.style=n,this.steps=0,this.stillSeconds=0,this.torsoStillSeconds=0,this.fallSeconds=0,this.landedSeconds=-1,this.asleep=!1,this.upperFrame(this.position),this.pelvisFrame(this.position);for(let e of[0,1]){this.startHinge(this.elbowAxes,e,e===0?Q.shoulderL:Q.shoulderR,e===0?Q.elbowL:Q.elbowR,e===0?Q.wristL:Q.wristR,this.gx,-1),this.startHinge(this.kneeAxes,e,e===0?Q.hipL:Q.hipR,e===0?Q.kneeL:Q.kneeR,e===0?Q.ankleL:Q.ankleR,this.fx,1),this.storeHingeStart(e,e===0?Q.hipL:Q.hipR,e===0?Q.kneeL:Q.kneeR,this.kneeAxes,this.fx,this.fy,this.fz),this.storeHingeStart(2+e,e===0?Q.shoulderL:Q.shoulderR,e===0?Q.elbowL:Q.elbowR,this.elbowAxes,this.gx,this.gy,this.gz);let t=this.dir(e===0?Q.hipL:Q.hipR,e===0?Q.kneeL:Q.kneeR,this.a),n=this.dir(e===0?Q.kneeL:Q.kneeR,e===0?Q.ankleL:Q.ankleR,this.b);this.kneeStart[e]=Math.acos(Math.min(1,Math.max(-1,t.dot(n))));let r=this.c.set(this.kneeAxes[e*3],this.kneeAxes[e*3+1],this.kneeAxes[e*3+2]);this.footSign[e]=this.footNormal(e,this.d).dot(r)>=0?1:-1}for(let t=0;t<4;t+=1){let n=t<2?0:2,r=t%2==0?1:-1,i=0;for(let t of pM)i=Math.max(i,r*e[t*3+n]+jj[t]);this.ropeLines[t]=Math.max(ww,i+.04)}}startHinge(e,t,n,r,i,a,o){let s=this.dir(n,r,this.a),c=this.dir(r,i,this.b),l=this.c.crossVectors(s,c);l.length()<.2&&l.copy(a).multiplyScalar(o),l.addScaledVector(s,-l.dot(s)),l.lengthSq()<1e-8&&l.copy(a).multiplyScalar(o).addScaledVector(s,-o*a.dot(s)),l.normalize(),e[t*3]=l.x,e[t*3+1]=l.y,e[t*3+2]=l.z}storeHingeStart(e,t,n,r,i,a,o){let s=e%2,c=this.dir(t,n,this.a),l=this.b.set(r[s*3],r[s*3+1],r[s*3+2]),u=e*6;this.hingeStart[u]=c.dot(i),this.hingeStart[u+1]=c.dot(a),this.hingeStart[u+2]=c.dot(o),this.hingeStart[u+3]=l.dot(i),this.hingeStart[u+4]=l.dot(a),this.hingeStart[u+5]=l.dot(o);for(let e=0;e<6;e+=1)this.hingeNow[u+e]=this.hingeStart[u+e]}hingeAxis(e,t,n,r,i,a){let o=e*6,s=this.hingeNow;return this.local.set(t.dot(n),t.dot(r),t.dot(i)).normalize(),this.localAxis.set(s[o],s[o+1],s[o+2]),this.swing.setFromUnitVectors(this.localAxis,this.local),this.localAxis.set(s[o+3],s[o+4],s[o+5]).applyQuaternion(this.swing),a.copy(n).multiplyScalar(this.localAxis.x).addScaledVector(r,this.localAxis.y).addScaledVector(i,this.localAxis.z),a.addScaledVector(t,-a.dot(t)).normalize()}carryHinges(){this.pelvisFrame(this.position),this.upperFrame(this.position);for(let e=0;e<4;e+=1){let t=e%2,n=e<2,r=n?t===0?Q.hipL:Q.hipR:t===0?Q.shoulderL:Q.shoulderR,i=n?t===0?Q.kneeL:Q.kneeR:t===0?Q.elbowL:Q.elbowR,a=n?this.fx:this.gx,o=n?this.fy:this.gy,s=n?this.fz:this.gz,c=this.dir(r,i,this.a),l=this.hingeAxis(e,c,a,o,s,this.b),u=e*6;this.hingeNow[u]=c.dot(a),this.hingeNow[u+1]=c.dot(o),this.hingeNow[u+2]=c.dot(s),this.hingeNow[u+3]=l.dot(a),this.hingeNow[u+4]=l.dot(o),this.hingeNow[u+5]=l.dot(s)}}get holding(){return this.steps*aM0){let e=Math.min(this.steps,t.steps-1)*3;this.obstacleActive=t.data[e]===1,this.obstacleX=t.data[e+1],this.obstacleZ=t.data[e+2]}let n=aM,r=this.position,i=this.previous,a=this.landedSeconds<0?cM:cM+(AM-cM)*Math.min(1,this.landedSeconds/jM);this.before.set(r);for(let e=0;e<26;e+=1)for(let t=0;t<3;t+=1){let o=e*3+t,s=r[o],c=(s-i[o])*a;i[o]=s,r[o]=s+c-(t===1?sM*n*n:0)}let o=this.pull;if(o!==null)for(let e=0;e<26;e+=1){let t=(o[e*3]-r[e*3])*this.pullShare,n=(o[e*3+1]-r[e*3+1])*this.pullShare,a=(o[e*3+2]-r[e*3+2])*this.pullShare,s=Math.sqrt(t*t+n*n+a*a),c=this.pullShare<1&&s>bN?bN/s:1;for(let o=0;o<3;o+=1){let s=(o===0?t:o===1?n:a)*c;r[e*3+o]=r[e*3+o]+s,i[e*3+o]=i[e*3+o]+s}}this.carryHinges();for(let e=0;e=0&&o===null&&this.toppleLegs(),this.applyFriction(),this.limitSpeed(),this.steps+=1;let s=0,c=0;for(let e=0;e<26;e+=1){let t=r[e*3]-i[e*3],a=r[e*3+1]-i[e*3+1],o=r[e*3+2]-i[e*3+2],l=Math.sqrt(t*t+a*a+o*o)/n;s=Math.max(s,l),xM.has(e)&&(c=Math.max(c,l))}this.stillSeconds=s=0?this.landedSeconds+=n:(this.torsoStillSeconds=c=OM||this.fallSeconds>=kM)&&(this.landedSeconds=0)),o===null&&(this.stillSeconds>=EM||this.landedSeconds>=MM)&&(this.asleep=!0)}solveRigid(){for(let e=0;er?r:c;if(l===c)return;let u=this.invMass[e],d=this.invMass[t],f=u+d;if(f<=0)return;let p=(c-l)/(c*f);i[e*3]=i[e*3]+a*p*u,i[e*3+1]=i[e*3+1]+o*p*u,i[e*3+2]=i[e*3+2]+s*p*u,i[t*3]=i[t*3]-a*p*d,i[t*3+1]=i[t*3+1]-o*p*d,i[t*3+2]=i[t*3+2]-s*p*d}solveKnees(){this.pelvisFrame(this.position);for(let e=0;e<2;e+=1){let t=e===0?Q.hipL:Q.hipR,n=e===0?Q.kneeL:Q.kneeR,r=this.dir(t,n,this.a),i=this.hingeAxis(e,r,this.fx,this.fy,this.fz,this.b),a=this.holding?Math.min(RM,this.kneeStart[e]+ZM[this.style].knee):RM;this.hinge(n,e===0?Q.ankleL:Q.ankleR,r,i,-.12,a)}}solveElbows(){this.upperFrame(this.position);for(let e=0;e<2;e+=1){let t=e===0?Q.shoulderL:Q.shoulderR,n=e===0?Q.elbowL:Q.elbowR,r=this.dir(t,n,this.a),i=this.hingeAxis(2+e,r,this.gx,this.gy,this.gz,this.b);this.hinge(n,e===0?Q.wristL:Q.wristR,r,i,-.12,QM)}}toppleLegs(){let e=this.position;for(let t=0;t<2;t+=1){let n=t===0?Q.hipL:Q.hipR,r=t===0?Q.kneeL:Q.kneeR,i=t===0?Q.ankleL:Q.ankleR,a=this.dir(n,r,this.a);if(a.y>bM){let i=this.dir(Q.hipR,Q.hipL,this.b),o=this.c.crossVectors(i,this.d.set(e[r*3]-e[n*3],e[r*3+1]-e[n*3+1],e[r*3+2]-e[n*3+2])).y>0?-1:1;this.rotateAbout(_M[t],n,i,o*yM*(a.y-bM))}let o=this.dir(r,i,this.a);if(o.y>bM){let n=this.kneeAxis(t===0?0:1,e,this.b),a=this.c.crossVectors(n,this.d.set(e[i*3]-e[r*3],e[i*3+1]-e[r*3+1],e[i*3+2]-e[r*3+2])).y>0?-1:1;this.rotateAbout(vM[t],r,n,a*yM*(o.y-bM))}}}solveTwist(){let e=this.dir(Q.pelvis,Q.upper,this.e),t=this.dir(Q.hipR,Q.hipL,this.a);t.addScaledVector(e,-t.dot(e));let n=this.dir(Q.shoulderR,Q.shoulderL,this.c);if(n.addScaledVector(e,-n.dot(e)),t.lengthSq()<1e-8||n.lengthSq()<1e-8)return;let r=Math.atan2(this.d.crossVectors(t,n).dot(e),t.dot(n)),i=Math.abs(r)-gM;if(i<=0)return;let a=this.spinInertia(mM,e),o=this.spinInertia(hM,e),s=Math.sign(r)*i*JM;this.rotateAbout(mM,Q.chest,e,-s*(o/(a+o))),this.rotateAbout(hM,Q.chest,e,s*(a/(a+o)))}spinInertia(e,t){let n=this.position,r=1e-6;for(let i=0;iMath.abs(p)+1e-6){let n=Math.atan2(r,u),a=Math.acos(p/i),c=oN(n-a),l=oN(n+a),d=(Math.abs(c)<=Math.abs(l)?c:l)*s;this.rotateAbout(tM[t],o,e,Math.min(qM,Math.max(-.04,d)))}}let m=this.dir(i,a,this.a),h=this.hingeAxis(t,m,this.fx,this.fy,this.fz,this.b),g=this.footNormal(t===0?0:1,this.d).multiplyScalar(this.footSign[t]);if(h.addScaledVector(c,-h.dot(c)),g.addScaledVector(c,-g.dot(c)),h.lengthSq()<.09||g.lengthSq()<.09)continue;h.normalize(),g.normalize();let _=Math.atan2(this.e.crossVectors(h,g).dot(c),h.dot(g)),v=Math.min(HM,Math.max(-HM,_));v!==_&&this.rotateAbout(eM[t],o,c,Math.min(KM,Math.max(-.01,(v-_)*s)))}}footNormal(e,t){let n=this.position,r=e===0?Q.ankleL:Q.ankleR,i=e===0?Q.toeL:Q.toeR,a=e===0?Q.heelL:Q.heelR;return t.set(n[i*3]-n[a*3],n[i*3+1]-n[a*3+1],n[i*3+2]-n[a*3+2]),this.turnPoint.set(n[r*3]-n[a*3],n[r*3+1]-n[a*3+1],n[r*3+2]-n[a*3+2]),t.cross(this.turnPoint).normalize()}cone(e,t,n,r,i,a){let o=this.dir(t,n,this.turnPoint),s=Math.acos(Math.min(1,Math.max(-1,o.dot(e))));if(s<=r)return;let c=this.turnAxis.crossVectors(o,e);if(c.lengthSq()<1e-10)return;c.normalize();let l=this.pressed(a,i,c)?YM*XM:YM;this.rotateAbout(a,i,c,Math.min(l,(s-r)*JM))}pressed(e,t,n){let r=this.position;for(let i=0;ijj[a]+.005)&&n.z*(r[a*3]-r[t*3])-n.x*(r[a*3+2]-r[t*3+2])<-1e-9)return!0}return!1}rotateAbout(e,t,n,r){let i=this.position;this.turnQuaternion.setFromAxisAngle(n,r);let a=i[t*3],o=i[t*3+1],s=i[t*3+2];for(let t=0;t=u||l<1e-6||(o.addScaledVector(c,(u-l)/l),sN(e,n,o))}}}closestOnSegment(e,t,n,r){let i=this.segmentA.subVectors(t,e),a=i.lengthSq(),o=a<1e-12?0:Math.min(1,Math.max(0,this.segmentB.subVectors(n,e).dot(i)/a));return r.copy(e).addScaledVector(i,o)}solveEnvironment(){let e=this.position;for(let t=0;t<26;t+=1){let n=jj[t],r=e[t*3],i=e[t*3+1],a=e[t*3+2];i=p||f<1e-9)continue;let m=(p-f)/f*dM,h=u*m,g=d*m;t?r+=s*h:a+=s*h,i+=g}let u=o?c-n*.6:SM;s*(t?r:a)>u&&(t?r=s*u:a=s*u)}for(let e=0;e<4;e+=1){let t=e<2?-ww:ww,o=e%2==0?-ww:ww,s=r-t,c=a-o,l=Math.sqrt(s*s+c*c),u=fM+n;l>=u||l<1e-9||i>1.45||(r=t+s/l*u,a=o+c/l*u)}if(this.obstacleActive&&i1e-9&&(r=this.obstacleX+e/i*o,a=this.obstacleZ+t/i*o)}e[t*3]=r,e[t*3+1]=i,e[t*3+2]=a}}limitSpeed(){let e=this.position,t=this.previous,n=FM*aM,r=IM*aM;for(let i=0;i<26;i+=1){let a=e[i*3]-t[i*3],o=e[i*3+1]-t[i*3+1],s=e[i*3+2]-t[i*3+2],c=Math.sqrt(a*a+o*o+s*s);if(c>n||cn?n/c:LM;t[i*3]=e[i*3]-a*r,t[i*3+1]=e[i*3+1]-o*r,t[i*3+2]=e[i*3+2]-s*r}}}applyFriction(){let e=this.position,t=this.previous;for(let n=0;n<26;n+=1)e[n*3+1]>jj[n]+.004||(t[n*3]=t[n*3]+(e[n*3]-t[n*3])*lM,t[n*3+2]=t[n*3+2]+(e[n*3+2]-t[n*3+2])*lM,t[n*3+1]>e[n*3+1]&&(t[n*3+1]=e[n*3+1]))}settle(e=4,t){let n=this.steps+Math.ceil(e/aM);for(;!this.asleep&&this.steps1e-9?n.divideScalar(i):n.set(0,1,0)}pelvisFrame(e){this.fx.set(e[Q.hipL*3]-e[Q.hipR*3],e[Q.hipL*3+1]-e[Q.hipR*3+1],e[Q.hipL*3+2]-e[Q.hipR*3+2]).normalize(),this.fz.set(e[Q.belly*3]-(e[Q.hipL*3]+e[Q.hipR*3])/2,e[Q.belly*3+1]-(e[Q.hipL*3+1]+e[Q.hipR*3+1])/2,e[Q.belly*3+2]-(e[Q.hipL*3+2]+e[Q.hipR*3+2])/2),this.fz.addScaledVector(this.fx,-this.fz.dot(this.fx)).normalize(),this.fy.crossVectors(this.fz,this.fx).normalize()}upperFrame(e){this.gx.set(e[Q.shoulderL*3]-e[Q.shoulderR*3],e[Q.shoulderL*3+1]-e[Q.shoulderR*3+1],e[Q.shoulderL*3+2]-e[Q.shoulderR*3+2]).normalize(),this.gy.set(e[Q.neck*3]-e[Q.upper*3],e[Q.neck*3+1]-e[Q.upper*3+1],e[Q.neck*3+2]-e[Q.upper*3+2]),this.gy.addScaledVector(this.gx,-this.gy.dot(this.gx)).normalize(),this.gz.crossVectors(this.gx,this.gy).normalize()}pelvisForward(e){return this.pelvisFrame(this.position),e.copy(this.fz)}};function lN(e,t){e.setLimp(nM,(t&1)!=0),e.setLimp(rM,(t&2)!=0),e.setLimp(iM,(t&4)!=0)}var uN=[`hips`,`spine`,`chest`,`upperChest`,`neck`,`head`,`shoulderL`,`elbowL`,`gloveL`,`shoulderR`,`elbowR`,`gloveR`,`hipL`,`kneeL`,`ankleL`,`hipR`,`kneeR`,`ankleR`],dN=uN.map(e=>({shoulderL:[Q.shoulderL,Q.elbowL],elbowL:[Q.elbowL,Q.wristL],gloveL:[Q.wristL,Q.fistL],shoulderR:[Q.shoulderR,Q.elbowR],elbowR:[Q.elbowR,Q.wristR],gloveR:[Q.wristR,Q.fistR],hipL:[Q.hipL,Q.kneeL],kneeL:[Q.kneeL,Q.ankleL],hipR:[Q.hipR,Q.kneeR],kneeR:[Q.kneeR,Q.ankleR]})[e]??null),fN=uN.map(e=>({chest:Q.chest,shoulderL:Q.shoulderL,shoulderR:Q.shoulderR,hipL:Q.hipL,hipR:Q.hipR})[e]??-1),pN=.1,mN=.35,hN=.6,gN=10,_N=.35,vN=6,yN=.25,bN=.05,xN=.3,SN=6;function CN(e){let t=e.lateral;if(e.target===`body`){let n=Math.min(2.6,Math.max(1,.9+e.amount/90));return{x:.3*t*n,y:-.05*n,z:-n,driveX:.1*t*n,driveY:-.2*n,driveZ:.45*n,twist:0}}let n=Math.min(3.2,Math.max(1.4,1.2+e.amount/70)),r=n/3.2;switch(e.punchClass){case`hook`:return{x:t*n,y:.05*n,z:-.25*n,driveX:.55*t*r,driveY:-.1*r,driveZ:.85*r,twist:.6};case`uppercut`:return{x:0,y:.8*n,z:-.65*n,driveX:0,driveY:.25*r,driveZ:-1.1*r,twist:.4};case`straight`:return{x:.12*t*n,y:.1*n,z:-n,driveX:.1*t*r,driveY:0,driveZ:-1.25*r,twist:.3};default:return{x:.12*t*n,y:.1*n,z:-.85*n,driveX:.08*t*r,driveY:0,driveZ:-1*r,twist:.2}}}var wN=class{rig;root;body=new cN;ahead=new cN;aheadOf=null;aheadBlows=0;ragdolling=!1;age=0;accumulator=0;sampleNow=new Float64Array(78);sampleBefore=new Float64Array(78);sampleRoot=new J;sampleSeconds=0;samples=0;drawn=new Float64Array(78);velocities=new Float64Array(78);offsets=uN.map(()=>new cm);fromLocal=uN.map(()=>new cm);fromPositions=uN.map(()=>new J);fromHips=new J;riseLocal=uN.map(()=>new cm);riseHips=new J;riseTurns=uN.map(()=>new cm);solvedTurns=uN.map(()=>new cm);rootTurn=new cm;turn=new cm;riseCaptured=!1;lastFall=null;recordPositions=new Float64Array(78);recordVelocities=new Float64Array(78);recordOffsets=uN.map(()=>new cm);recordImpulses=[];recordObstacles={data:new Float64Array(NM*3),steps:0};recordLosses=[];recordRest={position:new Float64Array(78),previous:new Float64Array(78),steps:-1};replaying=null;followTargets=new Float64Array(78);followOffsets=uN.map(()=>new cm);blendedOffsets=uN.map(()=>new cm);following=!1;followAge=0;primed=!1;pending=null;lost=0;clock=0;bones;frame=new cm;world=new cm;axisX=new J;axisY=new J;axisZ=new J;hint=new J;point=new J;other=new J;pelvisX=new J;pelvisY=new J;upperX=new J;headX=new J;kneeAxes=[new J(1,0,0),new J(1,0,0)];elbowAxes=[new J,new J];spineLength;tiltJoint=new J;tiltChest=new J;tiltAcross=new J;tiltTurn=new cm;constructor(e,t){this.rig=e,this.root=t,this.bones=uN.map(t=>e.bones[t]);let n=new Map;t.traverse(e=>{e instanceof Yg&&n.set(e,[e.quaternion.clone(),e.position.clone()])}),e.resetToRest(),t.updateMatrixWorld(!0);let r=new Float64Array(78);this.read(r),this.body.calibrate(r),this.ahead.calibrate(r),this.spineLength=this.tiltJoint.setFromMatrixPosition(e.bones.spine.matrixWorld).distanceTo(this.tiltChest.setFromMatrixPosition(e.bones.chest.matrixWorld));for(let[e,[t,r]]of n)e.quaternion.copy(t),e.position.copy(r);t.updateMatrixWorld(!0)}get active(){return this.ragdolling}get record(){return this.lastFall}sample(e){this.ragdolling||e<=0||(this.sampleBefore.set(this.sampleNow),this.read(this.sampleNow),this.sampleRoot.setFromMatrixPosition(this.root.matrixWorld),this.sampleSeconds=e,this.samples=Math.min(2,this.samples+1))}tick(e){this.clock+=e}takeBlow(e,t,n,r,i){let a={step:0,x:e.x,y:e.y,z:e.z,driveX:t.x,driveY:t.y,driveZ:t.z,target:n,twist:r,style:i};if(this.ragdolling){if(this.age>mN)return;if(this.replaying!==null){this.replaying.impulses.length===0&&this.replaying.impulses.push({...a,step:this.body.steps});return}this.lastFall?.impulses.push(this.body.impulse(a));return}this.pending={...a,at:this.clock}}prime(){this.primed=this.lastFall!==null}forget(){this.lastFall=null,this.primed=!1}start(e){let t=this.primed?this.lastFall:null;if(this.primed=!1,this.root.updateMatrixWorld(!0),this.captureLocals(this.fromLocal,this.fromHips),t!==null){this.replaying=t,this.body.start(t.positions,t.velocities,t.style),this.body.trackObstacle(t.obstacles,!0),this.replayLosses(this.body,t,0);for(let[e,n]of t.offsets.entries())this.offsets[e].copy(n);this.aheadOf=null,t.rest.steps<0&&this.runAhead(t,0)}else{this.replaying=null;let t=this.point.setFromMatrixPosition(this.root.matrixWorld).sub(this.sampleRoot),n=this.samples>0&&t.lengthSq()<=_N*_N;if(!n)this.read(this.sampleNow);else for(let e=0;e<26;e+=1)for(let n of[this.sampleNow,this.sampleBefore])n[e*3]=n[e*3]+t.x,n[e*3+1]=n[e*3+1]+t.y,n[e*3+2]=n[e*3+2]+t.z;let r=n&&this.samples>=2&&this.sampleSeconds>0?this.sampleSeconds:0;this.samples=0;for(let e=0;e<78;e+=1){let t=r>0?(this.sampleNow[e]-this.sampleBefore[e])/r:0;this.velocities[e]=Math.max(-3,Math.min(PM,t))}let i=this.rig.bones.neck,a=this.rig.bones.head;this.point.copy(this.rig.restLocalPosition(a)).applyMatrix4(i.matrixWorld).sub(this.other.setFromMatrixPosition(a.matrixWorld));for(let e of Qj)this.sampleNow[e*3]=this.sampleNow[e*3]+this.point.x,this.sampleNow[e*3+1]=this.sampleNow[e*3+1]+this.point.y,this.sampleNow[e*3+2]=this.sampleNow[e*3+2]+this.point.z;let o=this.pending!==null&&this.clock-this.pending.at<=hN?this.pending:null;this.body.start(this.sampleNow,this.velocities,o?.style??e),this.computeOffsets();let s=this.recordImpulses;s.length=0,o!==null&&s.push(this.body.impulse({step:0,x:o.x,y:o.y,z:o.z,driveX:o.driveX,driveY:o.driveY,driveZ:o.driveZ,target:o.target,twist:o.twist}));let c=this.recordObstacles;c.steps=0,this.body.trackObstacle(c,!1),this.recordPositions.set(this.sampleNow),this.recordVelocities.set(this.velocities);for(let e=0;e=.008333333333333333&&i=.008333333333333333&&n=0)this.body.restore(t);else{let t=this.body.steps+Math.ceil(SN/aM);for(;!this.body.asleep&&this.body.steps=1)return;let t=Math.min(1,Math.max(0,e));this.bodyTurns(this.solvedTurns),this.rig.bones.hips.position.lerpVectors(this.riseHips,this.rig.bones.hips.position,t);for(let e=0;esN(e,t,n),r=e=>this.point.setFromMatrixPosition(e.matrixWorld),i=(e,t,n)=>n.setFromMatrixColumn(e.matrixWorld,t).normalize();n(Q.pelvis,r(t.hips)),n(Q.hipL,r(t.hipL)),n(Q.hipR,r(t.hipR)),n(Q.belly,r(t.hips).addScaledVector(i(t.hips,2,this.axisZ),Mj)),n(Q.chest,r(t.chest)),n(Q.upper,r(t.upperChest)),n(Q.neck,r(t.neck)),n(Q.shoulderL,r(t.shoulderL)),n(Q.shoulderR,r(t.shoulderR)),n(Q.head,r(t.head)),n(Q.crown,r(t.head).addScaledVector(i(t.head,1,this.axisY),Nj)),n(Q.face,r(t.head).addScaledVector(i(t.head,2,this.axisZ),Pj).addScaledVector(i(t.head,1,this.axisY),Fj)),n(Q.elbowL,r(t.elbowL)),n(Q.wristL,r(t.gloveL)),n(Q.fistL,r(t.gloveL).addScaledVector(i(t.gloveL,1,this.axisY),Ij)),n(Q.elbowR,r(t.elbowR)),n(Q.wristR,r(t.gloveR)),n(Q.fistR,r(t.gloveR).addScaledVector(i(t.gloveR,1,this.axisY),Ij)),n(Q.kneeL,r(t.kneeL)),n(Q.ankleL,r(t.ankleL)),n(Q.toeL,r(t.toeL)),n(Q.heelL,r(t.ankleL).addScaledVector(i(t.toeL,1,this.axisY),-.07).addScaledVector(i(t.toeL,2,this.axisZ),-.09)),n(Q.kneeR,r(t.kneeR)),n(Q.ankleR,r(t.ankleR)),n(Q.toeR,r(t.toeR)),n(Q.heelR,r(t.ankleR).addScaledVector(i(t.toeR,1,this.axisY),-.07).addScaledVector(i(t.toeR,2,this.axisZ),-.09))}computeOffsets(){this.prepareFrames(this.body.position);for(let e=0;e=0&&this.rig.setWorldPosition(i,aN(e,a,this.point)),uN[r]===`upperChest`&&(this.rig.bones.clavicleL.updateWorldMatrix(!1,!1),this.rig.bones.clavicleR.updateWorldMatrix(!1,!1))}this.root.updateMatrixWorld(!0)}tiltHips(e){let t=this.rig.bones.hips,n=this.point.setFromMatrixPosition(t.matrixWorld),r=this.tiltJoint.copy(this.rig.restLocalPosition(this.rig.bones.spine)).applyMatrix4(t.matrixWorld).sub(n),i=aN(e,Q.chest,this.tiltChest).sub(n),a=this.pelvisX,o=a.dot(r),s=this.tiltAcross.copy(r).addScaledVector(a,-o),c=(r.lengthSq()+i.lengthSq()-this.spineLength*this.spineLength)/2-o*a.dot(i),l=s.dot(i),u=this.other.crossVectors(a,s).dot(i),d=Math.hypot(l,u);if(d<1e-9)return;let f=Math.atan2(u,l),p=Math.acos(Math.min(1,Math.max(-1,c/d))),m=oN(f-p),h=oN(f+p),g=Math.abs(m)<=Math.abs(h)?m:h;Math.abs(g)<1e-5||(t.getWorldQuaternion(this.world).premultiply(this.tiltTurn.setFromAxisAngle(a,g)),this.rig.setWorldRotation(t,this.world))}prepareFrames(e){this.segment(e,Q.hipR,Q.hipL,this.pelvisX),this.axisZ.set(e[Q.belly*3]-(e[Q.hipL*3]+e[Q.hipR*3])/2,e[Q.belly*3+1]-(e[Q.hipL*3+1]+e[Q.hipR*3+1])/2,e[Q.belly*3+2]-(e[Q.hipL*3+2]+e[Q.hipR*3+2])/2),this.axisZ.addScaledVector(this.pelvisX,-this.axisZ.dot(this.pelvisX)).normalize(),this.pelvisY.crossVectors(this.axisZ,this.pelvisX).normalize(),this.segment(e,Q.shoulderR,Q.shoulderL,this.upperX),this.segment(e,Q.head,Q.crown,this.axisX),this.segment(e,Q.head,Q.face,this.other),this.headX.crossVectors(this.axisX,this.other).normalize()}segment(e,t,n,r){return r.set(e[n*3]-e[t*3],e[n*3+1]-e[t*3+1],e[n*3+2]-e[t*3+2]),r.lengthSq()>1e-12?r.normalize():r.set(0,1,0)}frameFor(e,t,n){let r=uN[e];switch(r){case`hips`:return cj(this.pelvisY,this.pelvisX,`x`,n);case`spine`:{let r=this.bones[e];return r.updateWorldMatrix(!1,!1),this.axisY.setFromMatrixPosition(r.matrixWorld),this.axisY.set(t[Q.chest*3]-this.axisY.x,t[Q.chest*3+1]-this.axisY.y,t[Q.chest*3+2]-this.axisY.z),this.axisY.lengthSq()>1e-12?this.axisY.normalize():this.segment(t,Q.pelvis,Q.chest,this.axisY),cj(this.axisY,this.hint.copy(this.pelvisX).multiplyScalar(.75).addScaledVector(this.upperX,.25),`x`,n)}case`chest`:return this.segment(t,Q.chest,Q.upper,this.axisY),cj(this.axisY,this.hint.copy(this.pelvisX).multiplyScalar(.4).addScaledVector(this.upperX,.6),`x`,n);case`upperChest`:return this.segment(t,Q.upper,Q.neck,this.axisY),cj(this.axisY,this.upperX,`x`,n);case`neck`:return this.segment(t,Q.neck,Q.head,this.axisY),cj(this.axisY,this.hint.copy(this.upperX).add(this.headX),`x`,n);case`head`:return this.segment(t,Q.head,Q.crown,this.axisY),cj(this.axisY,this.segment(t,Q.head,Q.face,this.hint),`z`,n);case`shoulderL`:case`elbowL`:case`gloveL`:case`shoulderR`:case`elbowR`:case`gloveR`:{let i=+!r.endsWith(`L`),a=dN[e],o=this.body.elbowAxis(i,t,this.elbowAxes[i]);return this.segment(t,a[0],a[1],this.axisY),cj(this.axisY,o,`x`,n)}case`hipL`:case`kneeL`:case`hipR`:case`kneeR`:{let i=+!r.endsWith(`L`),a=dN[e],o=this.body.kneeAxis(i,t,this.kneeAxes[i]);return this.segment(t,a[0],a[1],this.axisY),cj(this.axisY,o,`x`,n)}default:{let e=r===`ankleL`,i=e?Q.ankleL:Q.ankleR,a=e?Q.toeL:Q.toeR,o=e?Q.heelL:Q.heelR;return this.segment(t,i,a,this.axisY),this.segment(t,o,a,this.hint),this.other.set(t[i*3]-t[o*3],t[i*3+1]-t[o*3+1],t[i*3+2]-t[o*3+2]),this.hint.cross(this.other),cj(this.axisY,this.hint,`x`,n)}}}};function TN(e,t,n){let r=Math.min(1,Math.max(0,(n-e)/(t-e)));return r*r*(3-2*r)}var EN=3,DN=5;function ON(e){return 1-.74*TN(-.6,1.4,e)}var kN=.23,AN=.22,jN=.22,MN=1.15,NN=.5,PN=.9,FN=.045,IN=[.33,.66],LN=FN*2*.33*.67,RN=.04;function zN(e,t){return{pressX:Math.min(AN,Math.max(0,Math.abs(e)+kN-ww)),pressZ:Math.min(AN,Math.max(0,Math.abs(t)+kN-ww))}}function BN(e,t,n){return n.x=Math.sign(e)*Math.max(0,Math.abs(e)+kN-ww-AN),n.z=Math.sign(t)*Math.max(0,Math.abs(t)+kN-ww-AN),n}var VN=` +`;function zj(e,t,n){let r={uOutfitShirt:{value:new Y(n.shirt)},uOutfitTrousers:{value:new Y(n.trousers)},uOutfitAccent:{value:new Y(n.accent)},uOutfitShape:{value:new Km(n.sleeves===`long`?63.4:Dj,+!!n.bowTie,Oj,0)}},i=e.onBeforeCompile,a=Object.hasOwn(e,`customProgramCacheKey`)?e.customProgramCacheKey():`plain`;e.onBeforeCompile=(n,a)=>{i.call(e,n,a),Object.assign(n.uniforms,r),n.vertexShader=n.vertexShader.replace(`#include `,`#include \n${jj(t)}`).replace(`#include `,`#include \n${Mj}`).replace(`#include `,`#include \n${Pj[t]}`),n.fragmentShader=n.fragmentShader.replace(`#include `,`#include \n${Fj}`).replace(`#include `,`#include \n${Ij[t]}`).replace(`#include `,`#include \n${Lj}`).replace(`#include `,`#include \n${Rj}`)},e.customProgramCacheKey=()=>`${a}-outfit-${t}`,e.needsUpdate=!0}var Bj=new J(0,1,0);function Vj(e,t,n,r){let i=new av(r,n,1,6);return i.applyQuaternion(new Dm().setFromUnitVectors(Bj,t)),i.translate(e.x+t.x*n*.5,e.y+t.y*n*.5,e.z+t.z*n*.5),i}function Hj(e){let t=e===`left`?-1:1,n=[],r=new xj(8.4,9.2,2.8,1,1.25);r.translate(0,5.2,0),n.push(r);let i=new av(2.2,2.2,1,6);i.scale(1.3,1,.9),i.translate(0,.4,0),n.push(i);let a=[{x:3.2*t,y:9.1,scale:.95,curl:.22,splay:.12*t},{x:1.08*t,y:9.5,scale:1.05,curl:.34,splay:.03*t},{x:-1.05*t,y:9.3,scale:.98,curl:.46,splay:-.05*t},{x:-3.05*t,y:8.7,scale:.8,curl:.6,splay:-.16*t}];for(let e of a){let t=new J(e.x,e.y,0),r=e.curl;for(let[i,a,o]of[[4.3,1.04,.55],[2.7,.95,.5],[2.2,.86,0]]){let s=new J(Math.sin(e.splay)*Math.cos(r),Math.cos(e.splay)*Math.cos(r),Math.sin(r)),c=i*e.scale;n.push(Vj(t,s,c,a*(.88+.12*e.scale))),t.addScaledVector(s,c),r+=o}}let o=new Vv(1.9,6,4);o.scale(1.15,1.5,.95),o.translate(2.7*t,3.3,.9),n.push(o);let s=new J(3.7*t,3.4,.9),c=new J(.62*t,.64,.45).normalize();n.push(Vj(s,c,3.9,1.2)),s.addScaledVector(c,3.9),n.push(Vj(s,new J(.3*t,.82,.48).normalize(),3,1.05));let l=n.map(e=>{let t=e.index===null?e:e.toNonIndexed();return t.deleteAttribute(`uv`),t}),u=Bw(l,!1);for(let e of new Set([...n,...l]))e.dispose();if(u===null)throw Error(`hand geometry could not be merged`);return u}function Uj(){let e=new sv(3.9,6,9.2,20,1,!1);return e.scale(1,1,.96),e.translate(0,21.1,0),e}var Wj={hips:_j.hips,spine:_j.spine,chest:`Spine1_024`,upperChest:_j.chest,neck:`Neck_012`,head:_j.head,clavicleL:`LeftShoulder_09`,shoulderL:_j.shoulderL,elbowL:_j.elbowL,gloveL:_j.gloveL,clavicleR:`RightShoulder_020`,shoulderR:_j.shoulderR,elbowR:_j.elbowR,gloveR:_j.gloveR,hipL:_j.hipL,kneeL:_j.kneeL,ankleL:_j.ankleL,toeL:`LeftToeBase_011`,hipR:_j.hipR,kneeR:_j.kneeR,ankleR:_j.ankleR,toeR:`RightToeBase_022`},Gj=new J,Kj=new J,qj=new J,Jj=new Zm,Yj=new Dm,Xj=new Dm,Zj=new J,Qj=new J,$j=new J,eM=new J,tM=new J,nM=new J,rM=new J,iM=new J,aM=new J,oM=new J;function sM(e,t){return t.setFromMatrixPosition(e.matrixWorld)}function cM(e,t){return e.matrixWorld.decompose(Zj,t,Qj),t}function lM(e,t,n,r){return Kj.copy(e).normalize(),n===`z`?(qj.copy(t).addScaledVector(Kj,-t.dot(Kj)),qj.lengthSq()<1e-8&&qj.set(0,0,1).addScaledVector(Kj,-Kj.z),qj.normalize(),Gj.crossVectors(Kj,qj).normalize()):(Gj.copy(t).addScaledVector(Kj,-t.dot(Kj)),Gj.lengthSq()<1e-8&&Gj.set(1,0,0).addScaledVector(Kj,-Kj.x),Gj.normalize(),qj.crossVectors(Gj,Kj).normalize()),Jj.makeBasis(Gj,Kj,qj),r.setFromRotationMatrix(Jj)}var uM=class{bones;metrics;restLocal=new Map;restPositions=new Map;limb={reached:!1,joint:new J};constructor(e){let t=new Map;e.traverse(e=>{e instanceof m_&&t.set(e.name,e)});let n={};for(let[e,r]of Object.entries(Wj)){let i=t.get(r);if(i===void 0)throw Error(`fighter rig missing bone ${r} (${e})`);n[e]=i}this.bones=n,e.updateMatrixWorld(!0);for(let e of t.values())this.restLocal.set(e,e.quaternion.clone()),this.restPositions.set(e,e.position.clone());let r=(e,t)=>sM(n[e],$j).distanceTo(sM(n[t],eM)),i=sM(n.hips,$j).clone(),a=sM(n.hips.parent??e,eM).clone(),o=n.hips.position.length(),s=i.distanceTo(a);this.metrics={hipsHeight:i.y,headHeight:sM(n.head,$j).y,chestHeight:sM(n.upperChest,$j).y,ankleHeight:sM(n.ankleL,$j).y,armL:{upper:r(`shoulderL`,`elbowL`),lower:r(`elbowL`,`gloveL`)},armR:{upper:r(`shoulderR`,`elbowR`),lower:r(`elbowR`,`gloveR`)},legL:{upper:r(`hipL`,`kneeL`),lower:r(`kneeL`,`ankleL`)},legR:{upper:r(`hipR`,`kneeR`),lower:r(`kneeR`,`ankleR`)},footLength:r(`ankleL`,`toeL`),unitsPerMeter:s>1e-6?o/s:1}}resetToRest(){for(let[e,t]of this.restLocal){e.quaternion.copy(t);let n=this.restPositions.get(e);n!==void 0&&e.position.copy(n)}}restLocalQuaternion(e){return this.restLocal.get(e)??e.quaternion}restLocalPosition(e){return this.restPositions.get(e)??e.position}position(e,t){return sM(this.bones[e],t)}setWorldRotation(e,t){let n=e.parent;n===null?e.quaternion.copy(t):(cM(n,Xj),e.quaternion.copy(Xj.invert().multiply(t)).normalize()),e.updateWorldMatrix(!1,!1)}setWorldFrame(e,t,n,r){this.setWorldRotation(e,lM(t,n,r,Yj))}setWorldPosition(e,t){let n=e.parent;n===null?e.position.copy(t):(e.position.copy(t),n.worldToLocal(e.position)),e.updateWorldMatrix(!1,!1)}aimAt(e,t,n){if(e.updateWorldMatrix(!1,!1),sM(e,$j),tM.subVectors(t,$j),tM.lengthSq()<1e-10)return;cM(e,Yj);let r=n===`z`?oM.set(0,0,1):oM.set(1,0,0);this.setWorldFrame(e,tM,r.applyQuaternion(Yj),n)}solveLimb(e,t,n,r,i,a,o,s=.01){e.updateWorldMatrix(!1,!1);let c=sM(e,$j);tM.subVectors(r,c);let l=n.upper+n.lower-s,u=K.clamp(tM.length(),Math.abs(n.upper-n.lower)+.005,l),d=tM.length()<=l;tM.lengthSq()<1e-10&&tM.set(0,-1,0),tM.normalize(),nM.copy(i).addScaledVector(tM,-i.dot(tM)),nM.lengthSq()<1e-8&&(nM.set(0,0,1).addScaledVector(tM,-tM.z),nM.lengthSq()<1e-8&&nM.set(1,0,0)),nM.normalize();let f=K.clamp((n.upper*n.upper+u*u-n.lower*n.lower)/(2*n.upper*u),-1,1),p=n.upper*f,m=n.upper*Math.sqrt(Math.max(0,1-f*f));rM.copy(c).addScaledVector(tM,p).addScaledVector(nM,m),iM.crossVectors(nM,tM).multiplyScalar(o).normalize(),aM.copy(rM).sub(c),this.setWorldFrame(e,aM,iM,a),t.updateWorldMatrix(!1,!1);let h=sM(t,eM);return aM.copy(c).addScaledVector(tM,u).sub(h),this.setWorldFrame(t,aM,iM,a),this.limb.reached=d,this.limb.joint.copy(h),this.limb}},dM=new J(.2018,.081,-.027),fM=new J(-.2018,.081,-.027),pM=(e,t,n)=>new J(e,t,n),mM=(e,t,n)=>{let r=K.clamp((n-e)/Math.max(1e-6,t-e),0,1);return r*r*(3-2*r)},hM=(e,t=1.7)=>K.clamp(e,0,1)**+t,gM=(e,t=2)=>1-(1-K.clamp(e,0,1))**t,_M=new Dm,vM=new J,yM=new J,bM=new J,xM=new J,SM=new J,CM=new Dm,wM=new Dm,TM=new sh,EM=new J(0,1,0),DM=[[`spine`,.25,.2],[`chest`,.55,.5],[`upperChest`,1,1]],OM=class{rig;chestLocal=new J;constructor(e){this.rig=e}toWorld(e,t){return t.copy(e).applyQuaternion(_M).add(vM)}dirToWorld(e,t){return t.copy(e).applyQuaternion(_M)}setYawPitchRoll(e,t,n,r){TM.set(n,t,r,`YXZ`),CM.setFromEuler(TM),wM.copy(_M).multiply(CM),this.rig.setWorldRotation(e,wM)}apply(e,t){let n=this.rig,r=n.bones;n.resetToRest(),e.updateMatrixWorld(!0),cM(e,_M),sM(e,vM);let i=t.torso;this.toWorld(i.hips,yM),n.setWorldPosition(r.hips,yM),this.setYawPitchRoll(r.hips,i.hipsYaw,i.hipsPitch,i.hipsRoll);let a=i.shouldersYaw-i.hipsYaw;for(let e=0;e0&&(sM(r.head,yM),this.dirToWorld(i.headOffset,bM),yM.add(bM),n.setWorldPosition(r.head,yM)),this.solveArm(`L`,t.handL,t.shrugL),this.solveArm(`R`,t.handR,t.shrugR),this.solveLeg(`L`,t.footL),this.solveLeg(`R`,t.footR)}solveArm(e,t,n){let r=this.rig,i=r.bones,a=e===`L`?i.clavicleL:i.clavicleR,o=e===`L`?i.shoulderL:i.shoulderR,s=e===`L`?i.elbowL:i.elbowR,c=e===`L`?i.gloveL:i.gloveR,l=e===`L`?r.metrics.armL:r.metrics.armR,u=e===`L`?dM:fM;this.chestLocal.copy(u),this.chestLocal.z+=n*.06,this.chestLocal.y+=n*.035,this.chestLocal.x*=1-n*.08,xM.copy(this.chestLocal).multiplyScalar(r.metrics.unitsPerMeter),i.upperChest.localToWorld(xM),r.aimAt(a,xM,`z`),o.updateWorldMatrix(!1,!1),this.toWorld(t.position,yM),this.dirToWorld(t.pole,bM),r.solveLimb(o,s,l,yM,bM,`z`,e===`L`?1:-1,.012),c.updateWorldMatrix(!1,!1),this.dirToWorld(t.knuckles,xM),this.dirToWorld(t.palm,SM),r.setWorldFrame(c,xM,SM,`z`)}solveLeg(e,t){let n=this.rig,r=n.bones,i=e===`L`?r.hipL:r.hipR,a=e===`L`?r.kneeL:r.kneeR,o=e===`L`?r.ankleL:r.ankleR,s=e===`L`?r.toeL:r.toeR,c=e===`L`?n.metrics.legL:n.metrics.legR;this.toWorld(t.position,yM),this.dirToWorld(t.toe,xM).normalize();let l=n.metrics.footLength;SM.copy(xM).multiplyScalar(l).addScaledVector(EM,-n.metrics.ankleHeight).normalize(),t.heel!==0&&(yM.addScaledVector(SM,l),CM.setFromAxisAngle(bM.crossVectors(xM,EM).normalize(),-t.heel),SM.applyQuaternion(CM),yM.addScaledVector(SM,-l)),this.dirToWorld(t.pole,bM),n.solveLimb(i,a,c,yM,bM,`x`,-1,.02),o.updateWorldMatrix(!1,!1),n.setWorldFrame(o,SM,EM,`z`),s.updateWorldMatrix(!1,!1),n.setWorldFrame(s,xM,EM,`z`)}},kM={bladeYaw:-1.05,hipsHeight:.8,leadFoot:pM(.12,0,.24),rearFoot:pM(-.1,0,-.34),leadToe:pM(-.34,0,.94),rearToe:pM(-.77,0,.64),relaxedLead:pM(.11,-.22,.36),relaxedRear:pM(-.11,-.16,.1),guardHighLead:pM(.14,-.02,.17),guardHighRear:pM(-.1,-.02,.11),guardLowLead:pM(.15,-.36,.22),guardLowRear:pM(-.13,-.34,.12),leadPole:pM(.45,-1,.2),rearPole:pM(-.5,-1,-.05),leadKnuckles:pM(.1,.55,.8),leadPalm:pM(-.9,.15,-.35),rearKnuckles:pM(-.05,.7,.7),rearPalm:pM(.95,.1,-.25)};function AM(e,t,n=new J){return n.set(e.x*t,e.y,e.z)}var Q={pelvis:0,hipL:1,hipR:2,belly:3,chest:4,upper:5,neck:6,shoulderL:7,shoulderR:8,head:9,crown:10,face:11,elbowL:12,wristL:13,fistL:14,elbowR:15,wristR:16,fistR:17,kneeL:18,ankleL:19,toeL:20,heelL:21,kneeR:22,ankleR:23,toeR:24,heelR:25},jM=[9,4,4,2,10,7,2,3.5,3.5,2.5,1.5,1,1.6,1,1,1.6,1,1,3.6,1.6,.4,.6,3.6,1.6,.4,.6],MM=[.12,.09,.09,.11,.14,.13,.06,.07,.07,.09,.085,.055,.05,.065,.08,.05,.065,.08,.06,.05,.035,.04,.06,.05,.035,.04],NM=.12,PM=.16,FM=.09,IM=.06,LM=.11,RM=[[Q.pelvis,Q.hipL],[Q.pelvis,Q.hipR],[Q.hipL,Q.hipR],[Q.belly,Q.hipL],[Q.belly,Q.hipR],[Q.belly,Q.pelvis],[Q.pelvis,Q.chest],[Q.chest,Q.upper],[Q.upper,Q.neck],[Q.upper,Q.shoulderL],[Q.upper,Q.shoulderR],[Q.neck,Q.shoulderL],[Q.neck,Q.shoulderR],[Q.shoulderL,Q.shoulderR],[Q.neck,Q.head],[Q.head,Q.crown],[Q.head,Q.face],[Q.crown,Q.face],[Q.shoulderL,Q.elbowL],[Q.elbowL,Q.wristL],[Q.wristL,Q.fistL],[Q.shoulderR,Q.elbowR],[Q.elbowR,Q.wristR],[Q.wristR,Q.fistR],[Q.hipL,Q.kneeL],[Q.kneeL,Q.ankleL],[Q.ankleL,Q.toeL],[Q.ankleL,Q.heelL],[Q.toeL,Q.heelL],[Q.hipR,Q.kneeR],[Q.kneeR,Q.ankleR],[Q.ankleR,Q.toeR],[Q.ankleR,Q.heelR],[Q.toeR,Q.heelR]],zM=[[Q.hipL,Q.shoulderL,.8,1.05],[Q.hipR,Q.shoulderR,.8,1.05],[Q.hipL,Q.shoulderR,.84,1.08],[Q.hipR,Q.shoulderL,.84,1.08],[Q.belly,Q.upper,.7,1.06],[Q.pelvis,Q.upper,.86,1],[Q.hipL,Q.chest,.84,1.08],[Q.hipR,Q.chest,.84,1.08],[Q.shoulderL,Q.face,.76,1.2],[Q.shoulderR,Q.face,.76,1.2],[Q.kneeL,Q.hipR,.8,1.3],[Q.kneeR,Q.hipL,.8,1.3],[Q.kneeL,Q.belly,.5,1.12],[Q.kneeR,Q.belly,.5,1.12]],BM=8,VM=[[Q.kneeL,Q.kneeR,.13],[Q.ankleL,Q.ankleR,.11],[Q.kneeL,Q.ankleR,.1],[Q.kneeR,Q.ankleL,.1],[Q.hipL,Q.ankleL,.2],[Q.hipR,Q.ankleR,.2],[Q.shoulderL,Q.wristL,.14],[Q.shoulderR,Q.wristR,.14],[Q.face,Q.chest,.2],[Q.crown,Q.chest,.24],[Q.kneeL,Q.upper,.3],[Q.kneeR,Q.upper,.3]],HM=[Q.elbowL,Q.wristL,Q.fistL,Q.elbowR,Q.wristR,Q.fistR],UM=[.7,.6,.6,.7,.9,1,1,1,1,1,1,1,.9,.8,.8,.9,.8,.8,.35,.1,0,0,.35,.1,0,0],WM=[[Q.pelvis,Q.chest,.12],[Q.chest,Q.upper,.13]],GM=Int32Array.from(RM.flat()),KM=Int32Array.from(zM.flatMap(([e,t])=>[e,t])),qM=Int32Array.from(VM.flatMap(([e,t])=>[e,t])),JM=Float64Array.from(VM.map(([,,e])=>e)),YM=Int32Array.from(WM.flatMap(([e,t])=>[e,t])),XM=Float64Array.from(WM.map(([,,e])=>e)),ZM=Float64Array.from([Q.head,1,Q.crown,.9,Q.face,1,Q.neck,.45]),QM=Float64Array.from([Q.belly,1,Q.chest,.6,Q.pelvis,.4,Q.hipL,.3,Q.hipR,.3]),$M=[Q.head,Q.crown,Q.face],eN=[Q.crown,Q.face],tN=[[Q.toeL,Q.heelL],[Q.toeR,Q.heelR]],nN=[[Q.heelL],[Q.heelR]],rN=[Q.head,Q.crown,Q.face],iN=[Q.fistL],aN=[Q.fistR],oN=1/120,sN=12,cN=9.81,lN=.998,uN=.5,dN=.03,fN=.35,pN=.12,mN=[Q.pelvis,Q.hipL,Q.hipR,Q.belly,Q.chest,Q.upper],hN=[Q.upper,Q.neck,Q.shoulderL,Q.shoulderR,Q.head,Q.crown,Q.face,Q.elbowL,Q.wristL,Q.fistL,Q.elbowR,Q.wristR,Q.fistR],gN=[Q.pelvis,Q.hipL,Q.hipR,Q.belly,Q.kneeL,Q.ankleL,Q.toeL,Q.heelL,Q.kneeR,Q.ankleR,Q.toeR,Q.heelR],_N=40*Math.PI/180,vN=[[Q.kneeL,Q.ankleL,Q.toeL,Q.heelL],[Q.kneeR,Q.ankleR,Q.toeR,Q.heelR]],yN=[[Q.ankleL,Q.toeL,Q.heelL],[Q.ankleR,Q.toeR,Q.heelR]],bN=.08,xN=.35,SN=new Set(mN),CN=Ww+.45,wN=.24,TN=1.75,EN=.012,DN=1,ON=.35,kN=.15,AN=1.1,jN=.975,MN=.4,NN=1.2,PN=1200,FN=3,IN=7,LN=.08,RN=.97,zN=2.55,BN=.5,VN=30*Math.PI/180,HN=32*Math.PI/180,UN=28*Math.PI/180,WN=35*Math.PI/180,GN=20*Math.PI/180,KN=.5,qN=.01,JN=.04,YN=.4,XN=.02,ZN=.25,QN={timber:{knee:.12,spine:.2,seconds:.55},crumple:{knee:zN,spine:1,seconds:0},sag:{knee:.55,spine:.6,seconds:.3},fold:{knee:.9,spine:1,seconds:.5}},$N=2.5,eP=35*Math.PI/180,tP=50*Math.PI/180,nP=135*Math.PI/180,rP=[[Q.kneeL,Q.ankleL,Q.toeL,tP,nP],[Q.kneeR,Q.ankleR,Q.toeR,tP,nP],[Q.elbowL,Q.wristL,Q.fistL,0,eP],[Q.elbowR,Q.wristR,Q.fistR,0,eP]],iP=Int32Array.from(rP.flatMap(([e,,t])=>[e,t]));function aP(e,t,n,r){if(t===`body`)return`fold`;if(n<90)return`sag`;let i=Math.abs(Math.floor(r))%3;return e===`hook`?i===0?`timber`:`crumple`:i===0?`crumple`:`timber`}var oP=(e,t,n)=>n.set(e[t*3],e[t*3+1],e[t*3+2]),sP=e=>e-Math.round(e/(Math.PI*2))*Math.PI*2,cP=(e,t,n)=>{e[t*3]=n.x,e[t*3+1]=n.y,e[t*3+2]=n.z},lP=class{position=new Float64Array(78);previous=new Float64Array(78);before=new Float64Array(78);invMass=new Float64Array(26);rigidLength=new Float64Array(RM.length);rangeMin=new Float64Array(zM.length);rangeMax=new Float64Array(zM.length);restRange=new Float64Array(zM.length);rangeStart=new Float64Array(zM.length);kneeStart=new Float64Array(2);footSign=new Float64Array(2);turnAxis=new J;turnQuaternion=new Dm;turnPoint=new J;angleRanges=new Float64Array(rP.length*2);elbowAxes=new Float64Array(6);kneeAxes=new Float64Array(6);hingeStart=new Float64Array(24);hingeNow=new Float64Array(24);swing=new Dm;local=new J;localAxis=new J;ropeLines=new Float64Array(4);style=`crumple`;steps=0;stillSeconds=0;torsoStillSeconds=0;fallSeconds=0;landedSeconds=-1;asleep=!1;obstacleActive=!1;obstacleX=0;obstacleZ=0;obstacleTrack=null;obstacleTrackLive=!1;pull=null;pullShare=0;trackObstacle(e,t){this.obstacleTrack=e,this.obstacleTrackLive=e!==null&&!t}a=new J;b=new J;c=new J;d=new J;e=new J;fx=new J;fy=new J;fz=new J;gx=new J;gy=new J;gz=new J;pivot=new J;segmentA=new J;segmentB=new J;constructor(){for(let e=0;e<26;e+=1)this.invMass[e]=1/jM[e]}calibrate(e){for(let[t,[n,r]]of zM.entries())this.restRange[t]=this.distance(e,n,r)}start(e,t,n){this.position.set(e),this.before.set(e);for(let n=0;n<78;n+=1)this.previous[n]=e[n]-t[n]*oN;for(let[t,[n,r]]of RM.entries())this.rigidLength[t]=this.distance(e,n,r);for(let[t,[n,r,i,a,o]]of rP.entries()){let s=this.distance(e,n,r),c=this.distance(e,r,i),l=this.distance(e,n,i),u=e=>Math.sqrt(s*s+c*c+2*s*c*Math.cos(e));this.angleRanges[t*2]=Math.min(u(o),l),this.angleRanges[t*2+1]=Math.max(u(a),l)}for(let[t,[n,r,i,a]]of zM.entries()){let o=this.distance(e,n,r),s=this.restRange[t]>0?this.restRange[t]:o;this.rangeMin[t]=Math.min(s*i,o*.98),this.rangeMax[t]=Math.max(s*a,o*1.02),this.rangeStart[t]=o}this.style=n,this.steps=0,this.stillSeconds=0,this.torsoStillSeconds=0,this.fallSeconds=0,this.landedSeconds=-1,this.asleep=!1,this.upperFrame(this.position),this.pelvisFrame(this.position);for(let e of[0,1]){this.startHinge(this.elbowAxes,e,e===0?Q.shoulderL:Q.shoulderR,e===0?Q.elbowL:Q.elbowR,e===0?Q.wristL:Q.wristR,this.gx,-1),this.startHinge(this.kneeAxes,e,e===0?Q.hipL:Q.hipR,e===0?Q.kneeL:Q.kneeR,e===0?Q.ankleL:Q.ankleR,this.fx,1),this.storeHingeStart(e,e===0?Q.hipL:Q.hipR,e===0?Q.kneeL:Q.kneeR,this.kneeAxes,this.fx,this.fy,this.fz),this.storeHingeStart(2+e,e===0?Q.shoulderL:Q.shoulderR,e===0?Q.elbowL:Q.elbowR,this.elbowAxes,this.gx,this.gy,this.gz);let t=this.dir(e===0?Q.hipL:Q.hipR,e===0?Q.kneeL:Q.kneeR,this.a),n=this.dir(e===0?Q.kneeL:Q.kneeR,e===0?Q.ankleL:Q.ankleR,this.b);this.kneeStart[e]=Math.acos(Math.min(1,Math.max(-1,t.dot(n))));let r=this.c.set(this.kneeAxes[e*3],this.kneeAxes[e*3+1],this.kneeAxes[e*3+2]);this.footSign[e]=this.footNormal(e,this.d).dot(r)>=0?1:-1}for(let t=0;t<4;t+=1){let n=t<2?0:2,r=t%2==0?1:-1,i=0;for(let t of mN)i=Math.max(i,r*e[t*3+n]+MM[t]);this.ropeLines[t]=Math.max(Jw,i+.04)}}startHinge(e,t,n,r,i,a,o){let s=this.dir(n,r,this.a),c=this.dir(r,i,this.b),l=this.c.crossVectors(s,c);l.length()<.2&&l.copy(a).multiplyScalar(o),l.addScaledVector(s,-l.dot(s)),l.lengthSq()<1e-8&&l.copy(a).multiplyScalar(o).addScaledVector(s,-o*a.dot(s)),l.normalize(),e[t*3]=l.x,e[t*3+1]=l.y,e[t*3+2]=l.z}storeHingeStart(e,t,n,r,i,a,o){let s=e%2,c=this.dir(t,n,this.a),l=this.b.set(r[s*3],r[s*3+1],r[s*3+2]),u=e*6;this.hingeStart[u]=c.dot(i),this.hingeStart[u+1]=c.dot(a),this.hingeStart[u+2]=c.dot(o),this.hingeStart[u+3]=l.dot(i),this.hingeStart[u+4]=l.dot(a),this.hingeStart[u+5]=l.dot(o);for(let e=0;e<6;e+=1)this.hingeNow[u+e]=this.hingeStart[u+e]}hingeAxis(e,t,n,r,i,a){let o=e*6,s=this.hingeNow;return this.local.set(t.dot(n),t.dot(r),t.dot(i)).normalize(),this.localAxis.set(s[o],s[o+1],s[o+2]),this.swing.setFromUnitVectors(this.localAxis,this.local),this.localAxis.set(s[o+3],s[o+4],s[o+5]).applyQuaternion(this.swing),a.copy(n).multiplyScalar(this.localAxis.x).addScaledVector(r,this.localAxis.y).addScaledVector(i,this.localAxis.z),a.addScaledVector(t,-a.dot(t)).normalize()}carryHinges(){this.pelvisFrame(this.position),this.upperFrame(this.position);for(let e=0;e<4;e+=1){let t=e%2,n=e<2,r=n?t===0?Q.hipL:Q.hipR:t===0?Q.shoulderL:Q.shoulderR,i=n?t===0?Q.kneeL:Q.kneeR:t===0?Q.elbowL:Q.elbowR,a=n?this.fx:this.gx,o=n?this.fy:this.gy,s=n?this.fz:this.gz,c=this.dir(r,i,this.a),l=this.hingeAxis(e,c,a,o,s,this.b),u=e*6;this.hingeNow[u]=c.dot(a),this.hingeNow[u+1]=c.dot(o),this.hingeNow[u+2]=c.dot(s),this.hingeNow[u+3]=l.dot(a),this.hingeNow[u+4]=l.dot(o),this.hingeNow[u+5]=l.dot(s)}}get holding(){return this.steps*oN0){let e=Math.min(this.steps,t.steps-1)*3;this.obstacleActive=t.data[e]===1,this.obstacleX=t.data[e+1],this.obstacleZ=t.data[e+2]}let n=oN,r=this.position,i=this.previous,a=this.landedSeconds<0?lN:lN+(jN-lN)*Math.min(1,this.landedSeconds/MN);this.before.set(r);for(let e=0;e<26;e+=1)for(let t=0;t<3;t+=1){let o=e*3+t,s=r[o],c=(s-i[o])*a;i[o]=s,r[o]=s+c-(t===1?cN*n*n:0)}let o=this.pull;if(o!==null)for(let e=0;e<26;e+=1){let t=(o[e*3]-r[e*3])*this.pullShare,n=(o[e*3+1]-r[e*3+1])*this.pullShare,a=(o[e*3+2]-r[e*3+2])*this.pullShare,s=Math.sqrt(t*t+n*n+a*a),c=this.pullShare<1&&s>xP?xP/s:1;for(let o=0;o<3;o+=1){let s=(o===0?t:o===1?n:a)*c;r[e*3+o]=r[e*3+o]+s,i[e*3+o]=i[e*3+o]+s}}this.carryHinges();for(let e=0;e=0&&o===null&&this.toppleLegs(),this.applyFriction(),this.limitSpeed(),this.steps+=1;let s=0,c=0;for(let e=0;e<26;e+=1){let t=r[e*3]-i[e*3],a=r[e*3+1]-i[e*3+1],o=r[e*3+2]-i[e*3+2],l=Math.sqrt(t*t+a*a+o*o)/n;s=Math.max(s,l),SN.has(e)&&(c=Math.max(c,l))}this.stillSeconds=s=0?this.landedSeconds+=n:(this.torsoStillSeconds=c=kN||this.fallSeconds>=AN)&&(this.landedSeconds=0)),o===null&&(this.stillSeconds>=DN||this.landedSeconds>=NN)&&(this.asleep=!0)}solveRigid(){for(let e=0;er?r:c;if(l===c)return;let u=this.invMass[e],d=this.invMass[t],f=u+d;if(f<=0)return;let p=(c-l)/(c*f);i[e*3]=i[e*3]+a*p*u,i[e*3+1]=i[e*3+1]+o*p*u,i[e*3+2]=i[e*3+2]+s*p*u,i[t*3]=i[t*3]-a*p*d,i[t*3+1]=i[t*3+1]-o*p*d,i[t*3+2]=i[t*3+2]-s*p*d}solveKnees(){this.pelvisFrame(this.position);for(let e=0;e<2;e+=1){let t=e===0?Q.hipL:Q.hipR,n=e===0?Q.kneeL:Q.kneeR,r=this.dir(t,n,this.a),i=this.hingeAxis(e,r,this.fx,this.fy,this.fz,this.b),a=this.holding?Math.min(zN,this.kneeStart[e]+QN[this.style].knee):zN;this.hinge(n,e===0?Q.ankleL:Q.ankleR,r,i,-.12,a)}}solveElbows(){this.upperFrame(this.position);for(let e=0;e<2;e+=1){let t=e===0?Q.shoulderL:Q.shoulderR,n=e===0?Q.elbowL:Q.elbowR,r=this.dir(t,n,this.a),i=this.hingeAxis(2+e,r,this.gx,this.gy,this.gz,this.b);this.hinge(n,e===0?Q.wristL:Q.wristR,r,i,-.12,$N)}}toppleLegs(){let e=this.position;for(let t=0;t<2;t+=1){let n=t===0?Q.hipL:Q.hipR,r=t===0?Q.kneeL:Q.kneeR,i=t===0?Q.ankleL:Q.ankleR,a=this.dir(n,r,this.a);if(a.y>xN){let i=this.dir(Q.hipR,Q.hipL,this.b),o=this.c.crossVectors(i,this.d.set(e[r*3]-e[n*3],e[r*3+1]-e[n*3+1],e[r*3+2]-e[n*3+2])).y>0?-1:1;this.rotateAbout(vN[t],n,i,o*bN*(a.y-xN))}let o=this.dir(r,i,this.a);if(o.y>xN){let n=this.kneeAxis(t===0?0:1,e,this.b),a=this.c.crossVectors(n,this.d.set(e[i*3]-e[r*3],e[i*3+1]-e[r*3+1],e[i*3+2]-e[r*3+2])).y>0?-1:1;this.rotateAbout(yN[t],r,n,a*bN*(o.y-xN))}}}solveTwist(){let e=this.dir(Q.pelvis,Q.upper,this.e),t=this.dir(Q.hipR,Q.hipL,this.a);t.addScaledVector(e,-t.dot(e));let n=this.dir(Q.shoulderR,Q.shoulderL,this.c);if(n.addScaledVector(e,-n.dot(e)),t.lengthSq()<1e-8||n.lengthSq()<1e-8)return;let r=Math.atan2(this.d.crossVectors(t,n).dot(e),t.dot(n)),i=Math.abs(r)-_N;if(i<=0)return;let a=this.spinInertia(hN,e),o=this.spinInertia(gN,e),s=Math.sign(r)*i*YN;this.rotateAbout(hN,Q.chest,e,-s*(o/(a+o))),this.rotateAbout(gN,Q.chest,e,s*(a/(a+o)))}spinInertia(e,t){let n=this.position,r=1e-6;for(let i=0;iMath.abs(p)+1e-6){let n=Math.atan2(r,u),a=Math.acos(p/i),c=sP(n-a),l=sP(n+a),d=(Math.abs(c)<=Math.abs(l)?c:l)*s;this.rotateAbout(nN[t],o,e,Math.min(JN,Math.max(-.04,d)))}}let m=this.dir(i,a,this.a),h=this.hingeAxis(t,m,this.fx,this.fy,this.fz,this.b),g=this.footNormal(t===0?0:1,this.d).multiplyScalar(this.footSign[t]);if(h.addScaledVector(c,-h.dot(c)),g.addScaledVector(c,-g.dot(c)),h.lengthSq()<.09||g.lengthSq()<.09)continue;h.normalize(),g.normalize();let _=Math.atan2(this.e.crossVectors(h,g).dot(c),h.dot(g)),v=Math.min(UN,Math.max(-UN,_));v!==_&&this.rotateAbout(tN[t],o,c,Math.min(qN,Math.max(-.01,(v-_)*s)))}}footNormal(e,t){let n=this.position,r=e===0?Q.ankleL:Q.ankleR,i=e===0?Q.toeL:Q.toeR,a=e===0?Q.heelL:Q.heelR;return t.set(n[i*3]-n[a*3],n[i*3+1]-n[a*3+1],n[i*3+2]-n[a*3+2]),this.turnPoint.set(n[r*3]-n[a*3],n[r*3+1]-n[a*3+1],n[r*3+2]-n[a*3+2]),t.cross(this.turnPoint).normalize()}cone(e,t,n,r,i,a){let o=this.dir(t,n,this.turnPoint),s=Math.acos(Math.min(1,Math.max(-1,o.dot(e))));if(s<=r)return;let c=this.turnAxis.crossVectors(o,e);if(c.lengthSq()<1e-10)return;c.normalize();let l=this.pressed(a,i,c)?XN*ZN:XN;this.rotateAbout(a,i,c,Math.min(l,(s-r)*YN))}pressed(e,t,n){let r=this.position;for(let i=0;iMM[a]+.005)&&n.z*(r[a*3]-r[t*3])-n.x*(r[a*3+2]-r[t*3+2])<-1e-9)return!0}return!1}rotateAbout(e,t,n,r){let i=this.position;this.turnQuaternion.setFromAxisAngle(n,r);let a=i[t*3],o=i[t*3+1],s=i[t*3+2];for(let t=0;t=u||l<1e-6||(o.addScaledVector(c,(u-l)/l),cP(e,n,o))}}}closestOnSegment(e,t,n,r){let i=this.segmentA.subVectors(t,e),a=i.lengthSq(),o=a<1e-12?0:Math.min(1,Math.max(0,this.segmentB.subVectors(n,e).dot(i)/a));return r.copy(e).addScaledVector(i,o)}solveEnvironment(){let e=this.position;for(let t=0;t<26;t+=1){let n=MM[t],r=e[t*3],i=e[t*3+1],a=e[t*3+2];i=p||f<1e-9)continue;let m=(p-f)/f*fN,h=u*m,g=d*m;t?r+=s*h:a+=s*h,i+=g}let u=o?c-n*.6:CN;s*(t?r:a)>u&&(t?r=s*u:a=s*u)}for(let e=0;e<4;e+=1){let t=e<2?-Jw:Jw,o=e%2==0?-Jw:Jw,s=r-t,c=a-o,l=Math.sqrt(s*s+c*c),u=pN+n;l>=u||l<1e-9||i>1.45||(r=t+s/l*u,a=o+c/l*u)}if(this.obstacleActive&&i1e-9&&(r=this.obstacleX+e/i*o,a=this.obstacleZ+t/i*o)}e[t*3]=r,e[t*3+1]=i,e[t*3+2]=a}}limitSpeed(){let e=this.position,t=this.previous,n=IN*oN,r=LN*oN;for(let i=0;i<26;i+=1){let a=e[i*3]-t[i*3],o=e[i*3+1]-t[i*3+1],s=e[i*3+2]-t[i*3+2],c=Math.sqrt(a*a+o*o+s*s);if(c>n||cn?n/c:RN;t[i*3]=e[i*3]-a*r,t[i*3+1]=e[i*3+1]-o*r,t[i*3+2]=e[i*3+2]-s*r}}}applyFriction(){let e=this.position,t=this.previous;for(let n=0;n<26;n+=1)e[n*3+1]>MM[n]+.004||(t[n*3]=t[n*3]+(e[n*3]-t[n*3])*uN,t[n*3+2]=t[n*3+2]+(e[n*3+2]-t[n*3+2])*uN,t[n*3+1]>e[n*3+1]&&(t[n*3+1]=e[n*3+1]))}settle(e=4,t){let n=this.steps+Math.ceil(e/oN);for(;!this.asleep&&this.steps1e-9?n.divideScalar(i):n.set(0,1,0)}pelvisFrame(e){this.fx.set(e[Q.hipL*3]-e[Q.hipR*3],e[Q.hipL*3+1]-e[Q.hipR*3+1],e[Q.hipL*3+2]-e[Q.hipR*3+2]).normalize(),this.fz.set(e[Q.belly*3]-(e[Q.hipL*3]+e[Q.hipR*3])/2,e[Q.belly*3+1]-(e[Q.hipL*3+1]+e[Q.hipR*3+1])/2,e[Q.belly*3+2]-(e[Q.hipL*3+2]+e[Q.hipR*3+2])/2),this.fz.addScaledVector(this.fx,-this.fz.dot(this.fx)).normalize(),this.fy.crossVectors(this.fz,this.fx).normalize()}upperFrame(e){this.gx.set(e[Q.shoulderL*3]-e[Q.shoulderR*3],e[Q.shoulderL*3+1]-e[Q.shoulderR*3+1],e[Q.shoulderL*3+2]-e[Q.shoulderR*3+2]).normalize(),this.gy.set(e[Q.neck*3]-e[Q.upper*3],e[Q.neck*3+1]-e[Q.upper*3+1],e[Q.neck*3+2]-e[Q.upper*3+2]),this.gy.addScaledVector(this.gx,-this.gy.dot(this.gx)).normalize(),this.gz.crossVectors(this.gx,this.gy).normalize()}pelvisForward(e){return this.pelvisFrame(this.position),e.copy(this.fz)}};function uP(e,t){e.setLimp(rN,(t&1)!=0),e.setLimp(iN,(t&2)!=0),e.setLimp(aN,(t&4)!=0)}var dP=[`hips`,`spine`,`chest`,`upperChest`,`neck`,`head`,`shoulderL`,`elbowL`,`gloveL`,`shoulderR`,`elbowR`,`gloveR`,`hipL`,`kneeL`,`ankleL`,`hipR`,`kneeR`,`ankleR`],fP=dP.map(e=>({shoulderL:[Q.shoulderL,Q.elbowL],elbowL:[Q.elbowL,Q.wristL],gloveL:[Q.wristL,Q.fistL],shoulderR:[Q.shoulderR,Q.elbowR],elbowR:[Q.elbowR,Q.wristR],gloveR:[Q.wristR,Q.fistR],hipL:[Q.hipL,Q.kneeL],kneeL:[Q.kneeL,Q.ankleL],hipR:[Q.hipR,Q.kneeR],kneeR:[Q.kneeR,Q.ankleR]})[e]??null),pP=dP.map(e=>({chest:Q.chest,shoulderL:Q.shoulderL,shoulderR:Q.shoulderR,hipL:Q.hipL,hipR:Q.hipR})[e]??-1),mP=.1,hP=.35,gP=.6,_P=10,vP=.35,yP=6,bP=.25,xP=.05,SP=.3,CP=6;function wP(e){let t=e.lateral;if(e.target===`body`){let n=Math.min(2.6,Math.max(1,.9+e.amount/90));return{x:.3*t*n,y:-.05*n,z:-n,driveX:.1*t*n,driveY:-.2*n,driveZ:.45*n,twist:0}}let n=Math.min(3.2,Math.max(1.4,1.2+e.amount/70)),r=n/3.2;switch(e.punchClass){case`hook`:return{x:t*n,y:.05*n,z:-.25*n,driveX:.55*t*r,driveY:-.1*r,driveZ:.85*r,twist:.6};case`uppercut`:return{x:0,y:.8*n,z:-.65*n,driveX:0,driveY:.25*r,driveZ:-1.1*r,twist:.4};case`straight`:return{x:.12*t*n,y:.1*n,z:-n,driveX:.1*t*r,driveY:0,driveZ:-1.25*r,twist:.3};default:return{x:.12*t*n,y:.1*n,z:-.85*n,driveX:.08*t*r,driveY:0,driveZ:-1*r,twist:.2}}}var TP=class{rig;root;body=new lP;ahead=new lP;aheadOf=null;aheadBlows=0;ragdolling=!1;age=0;accumulator=0;sampleNow=new Float64Array(78);sampleBefore=new Float64Array(78);sampleRoot=new J;sampleSeconds=0;samples=0;drawn=new Float64Array(78);velocities=new Float64Array(78);offsets=dP.map(()=>new Dm);fromLocal=dP.map(()=>new Dm);fromPositions=dP.map(()=>new J);fromHips=new J;riseLocal=dP.map(()=>new Dm);riseHips=new J;riseTurns=dP.map(()=>new Dm);solvedTurns=dP.map(()=>new Dm);rootTurn=new Dm;turn=new Dm;riseCaptured=!1;lastFall=null;recordPositions=new Float64Array(78);recordVelocities=new Float64Array(78);recordOffsets=dP.map(()=>new Dm);recordImpulses=[];recordObstacles={data:new Float64Array(PN*3),steps:0};recordLosses=[];recordRest={position:new Float64Array(78),previous:new Float64Array(78),steps:-1};replaying=null;followTargets=new Float64Array(78);followOffsets=dP.map(()=>new Dm);blendedOffsets=dP.map(()=>new Dm);following=!1;followAge=0;primed=!1;pending=null;lost=0;clock=0;bones;frame=new Dm;world=new Dm;axisX=new J;axisY=new J;axisZ=new J;hint=new J;point=new J;other=new J;pelvisX=new J;pelvisY=new J;upperX=new J;headX=new J;kneeAxes=[new J(1,0,0),new J(1,0,0)];elbowAxes=[new J,new J];spineLength;tiltJoint=new J;tiltChest=new J;tiltAcross=new J;tiltTurn=new Dm;constructor(e,t){this.rig=e,this.root=t,this.bones=dP.map(t=>e.bones[t]);let n=new Map;t.traverse(e=>{e instanceof m_&&n.set(e,[e.quaternion.clone(),e.position.clone()])}),e.resetToRest(),t.updateMatrixWorld(!0);let r=new Float64Array(78);this.read(r),this.body.calibrate(r),this.ahead.calibrate(r),this.spineLength=this.tiltJoint.setFromMatrixPosition(e.bones.spine.matrixWorld).distanceTo(this.tiltChest.setFromMatrixPosition(e.bones.chest.matrixWorld));for(let[e,[t,r]]of n)e.quaternion.copy(t),e.position.copy(r);t.updateMatrixWorld(!0)}get active(){return this.ragdolling}get record(){return this.lastFall}sample(e){this.ragdolling||e<=0||(this.sampleBefore.set(this.sampleNow),this.read(this.sampleNow),this.sampleRoot.setFromMatrixPosition(this.root.matrixWorld),this.sampleSeconds=e,this.samples=Math.min(2,this.samples+1))}tick(e){this.clock+=e}takeBlow(e,t,n,r,i){let a={step:0,x:e.x,y:e.y,z:e.z,driveX:t.x,driveY:t.y,driveZ:t.z,target:n,twist:r,style:i};if(this.ragdolling){if(this.age>hP)return;if(this.replaying!==null){this.replaying.impulses.length===0&&this.replaying.impulses.push({...a,step:this.body.steps});return}this.lastFall?.impulses.push(this.body.impulse(a));return}this.pending={...a,at:this.clock}}prime(){this.primed=this.lastFall!==null}forget(){this.lastFall=null,this.primed=!1}start(e){let t=this.primed?this.lastFall:null;if(this.primed=!1,this.root.updateMatrixWorld(!0),this.captureLocals(this.fromLocal,this.fromHips),t!==null){this.replaying=t,this.body.start(t.positions,t.velocities,t.style),this.body.trackObstacle(t.obstacles,!0),this.replayLosses(this.body,t,0);for(let[e,n]of t.offsets.entries())this.offsets[e].copy(n);this.aheadOf=null,t.rest.steps<0&&this.runAhead(t,0)}else{this.replaying=null;let t=this.point.setFromMatrixPosition(this.root.matrixWorld).sub(this.sampleRoot),n=this.samples>0&&t.lengthSq()<=vP*vP;if(!n)this.read(this.sampleNow);else for(let e=0;e<26;e+=1)for(let n of[this.sampleNow,this.sampleBefore])n[e*3]=n[e*3]+t.x,n[e*3+1]=n[e*3+1]+t.y,n[e*3+2]=n[e*3+2]+t.z;let r=n&&this.samples>=2&&this.sampleSeconds>0?this.sampleSeconds:0;this.samples=0;for(let e=0;e<78;e+=1){let t=r>0?(this.sampleNow[e]-this.sampleBefore[e])/r:0;this.velocities[e]=Math.max(-3,Math.min(FN,t))}let i=this.rig.bones.neck,a=this.rig.bones.head;this.point.copy(this.rig.restLocalPosition(a)).applyMatrix4(i.matrixWorld).sub(this.other.setFromMatrixPosition(a.matrixWorld));for(let e of $M)this.sampleNow[e*3]=this.sampleNow[e*3]+this.point.x,this.sampleNow[e*3+1]=this.sampleNow[e*3+1]+this.point.y,this.sampleNow[e*3+2]=this.sampleNow[e*3+2]+this.point.z;let o=this.pending!==null&&this.clock-this.pending.at<=gP?this.pending:null;this.body.start(this.sampleNow,this.velocities,o?.style??e),this.computeOffsets();let s=this.recordImpulses;s.length=0,o!==null&&s.push(this.body.impulse({step:0,x:o.x,y:o.y,z:o.z,driveX:o.driveX,driveY:o.driveY,driveZ:o.driveZ,target:o.target,twist:o.twist}));let c=this.recordObstacles;c.steps=0,this.body.trackObstacle(c,!1),this.recordPositions.set(this.sampleNow),this.recordVelocities.set(this.velocities);for(let e=0;e=.008333333333333333&&i<_P;)this.body.step(),this.accumulator-=oN,i+=1;i===_P&&(this.accumulator=0),this.body.interpolate(this.accumulator/oN,this.drawn);for(let e=0;e=.008333333333333333&&n<_P;)r!==null&&this.replayLosses(this.body,r,this.body.steps),this.body.step(r?.impulses),this.accumulator-=oN,n+=1;n===_P&&(this.accumulator=0);let i=this.lastFall;r===null&&i!==null&&i.rest.steps<0&&this.body.asleep&&this.body.keepRest(i.rest),r!==null&&this.aheadOf===r&&this.runAhead(r,yP),this.age+=e,this.body.interpolate(this.body.asleep?1:this.accumulator/oN,this.drawn),this.drive(this.drawn),this.age=0)this.body.restore(t);else{let t=this.body.steps+Math.ceil(CP/oN);for(;!this.body.asleep&&this.body.steps=1)return;let t=Math.min(1,Math.max(0,e));this.bodyTurns(this.solvedTurns),this.rig.bones.hips.position.lerpVectors(this.riseHips,this.rig.bones.hips.position,t);for(let e=0;ecP(e,t,n),r=e=>this.point.setFromMatrixPosition(e.matrixWorld),i=(e,t,n)=>n.setFromMatrixColumn(e.matrixWorld,t).normalize();n(Q.pelvis,r(t.hips)),n(Q.hipL,r(t.hipL)),n(Q.hipR,r(t.hipR)),n(Q.belly,r(t.hips).addScaledVector(i(t.hips,2,this.axisZ),NM)),n(Q.chest,r(t.chest)),n(Q.upper,r(t.upperChest)),n(Q.neck,r(t.neck)),n(Q.shoulderL,r(t.shoulderL)),n(Q.shoulderR,r(t.shoulderR)),n(Q.head,r(t.head)),n(Q.crown,r(t.head).addScaledVector(i(t.head,1,this.axisY),PM)),n(Q.face,r(t.head).addScaledVector(i(t.head,2,this.axisZ),FM).addScaledVector(i(t.head,1,this.axisY),IM)),n(Q.elbowL,r(t.elbowL)),n(Q.wristL,r(t.gloveL)),n(Q.fistL,r(t.gloveL).addScaledVector(i(t.gloveL,1,this.axisY),LM)),n(Q.elbowR,r(t.elbowR)),n(Q.wristR,r(t.gloveR)),n(Q.fistR,r(t.gloveR).addScaledVector(i(t.gloveR,1,this.axisY),LM)),n(Q.kneeL,r(t.kneeL)),n(Q.ankleL,r(t.ankleL)),n(Q.toeL,r(t.toeL)),n(Q.heelL,r(t.ankleL).addScaledVector(i(t.toeL,1,this.axisY),-.07).addScaledVector(i(t.toeL,2,this.axisZ),-.09)),n(Q.kneeR,r(t.kneeR)),n(Q.ankleR,r(t.ankleR)),n(Q.toeR,r(t.toeR)),n(Q.heelR,r(t.ankleR).addScaledVector(i(t.toeR,1,this.axisY),-.07).addScaledVector(i(t.toeR,2,this.axisZ),-.09))}computeOffsets(){this.prepareFrames(this.body.position);for(let e=0;e=0&&this.rig.setWorldPosition(i,oP(e,a,this.point)),dP[r]===`upperChest`&&(this.rig.bones.clavicleL.updateWorldMatrix(!1,!1),this.rig.bones.clavicleR.updateWorldMatrix(!1,!1))}this.root.updateMatrixWorld(!0)}tiltHips(e){let t=this.rig.bones.hips,n=this.point.setFromMatrixPosition(t.matrixWorld),r=this.tiltJoint.copy(this.rig.restLocalPosition(this.rig.bones.spine)).applyMatrix4(t.matrixWorld).sub(n),i=oP(e,Q.chest,this.tiltChest).sub(n),a=this.pelvisX,o=a.dot(r),s=this.tiltAcross.copy(r).addScaledVector(a,-o),c=(r.lengthSq()+i.lengthSq()-this.spineLength*this.spineLength)/2-o*a.dot(i),l=s.dot(i),u=this.other.crossVectors(a,s).dot(i),d=Math.hypot(l,u);if(d<1e-9)return;let f=Math.atan2(u,l),p=Math.acos(Math.min(1,Math.max(-1,c/d))),m=sP(f-p),h=sP(f+p),g=Math.abs(m)<=Math.abs(h)?m:h;Math.abs(g)<1e-5||(t.getWorldQuaternion(this.world).premultiply(this.tiltTurn.setFromAxisAngle(a,g)),this.rig.setWorldRotation(t,this.world))}prepareFrames(e){this.segment(e,Q.hipR,Q.hipL,this.pelvisX),this.axisZ.set(e[Q.belly*3]-(e[Q.hipL*3]+e[Q.hipR*3])/2,e[Q.belly*3+1]-(e[Q.hipL*3+1]+e[Q.hipR*3+1])/2,e[Q.belly*3+2]-(e[Q.hipL*3+2]+e[Q.hipR*3+2])/2),this.axisZ.addScaledVector(this.pelvisX,-this.axisZ.dot(this.pelvisX)).normalize(),this.pelvisY.crossVectors(this.axisZ,this.pelvisX).normalize(),this.segment(e,Q.shoulderR,Q.shoulderL,this.upperX),this.segment(e,Q.head,Q.crown,this.axisX),this.segment(e,Q.head,Q.face,this.other),this.headX.crossVectors(this.axisX,this.other).normalize()}segment(e,t,n,r){return r.set(e[n*3]-e[t*3],e[n*3+1]-e[t*3+1],e[n*3+2]-e[t*3+2]),r.lengthSq()>1e-12?r.normalize():r.set(0,1,0)}frameFor(e,t,n){let r=dP[e];switch(r){case`hips`:return lM(this.pelvisY,this.pelvisX,`x`,n);case`spine`:{let r=this.bones[e];return r.updateWorldMatrix(!1,!1),this.axisY.setFromMatrixPosition(r.matrixWorld),this.axisY.set(t[Q.chest*3]-this.axisY.x,t[Q.chest*3+1]-this.axisY.y,t[Q.chest*3+2]-this.axisY.z),this.axisY.lengthSq()>1e-12?this.axisY.normalize():this.segment(t,Q.pelvis,Q.chest,this.axisY),lM(this.axisY,this.hint.copy(this.pelvisX).multiplyScalar(.75).addScaledVector(this.upperX,.25),`x`,n)}case`chest`:return this.segment(t,Q.chest,Q.upper,this.axisY),lM(this.axisY,this.hint.copy(this.pelvisX).multiplyScalar(.4).addScaledVector(this.upperX,.6),`x`,n);case`upperChest`:return this.segment(t,Q.upper,Q.neck,this.axisY),lM(this.axisY,this.upperX,`x`,n);case`neck`:return this.segment(t,Q.neck,Q.head,this.axisY),lM(this.axisY,this.hint.copy(this.upperX).add(this.headX),`x`,n);case`head`:return this.segment(t,Q.head,Q.crown,this.axisY),lM(this.axisY,this.segment(t,Q.head,Q.face,this.hint),`z`,n);case`shoulderL`:case`elbowL`:case`gloveL`:case`shoulderR`:case`elbowR`:case`gloveR`:{let i=+!r.endsWith(`L`),a=fP[e],o=this.body.elbowAxis(i,t,this.elbowAxes[i]);return this.segment(t,a[0],a[1],this.axisY),lM(this.axisY,o,`x`,n)}case`hipL`:case`kneeL`:case`hipR`:case`kneeR`:{let i=+!r.endsWith(`L`),a=fP[e],o=this.body.kneeAxis(i,t,this.kneeAxes[i]);return this.segment(t,a[0],a[1],this.axisY),lM(this.axisY,o,`x`,n)}default:{let e=r===`ankleL`,i=e?Q.ankleL:Q.ankleR,a=e?Q.toeL:Q.toeR,o=e?Q.heelL:Q.heelR;return this.segment(t,i,a,this.axisY),this.segment(t,o,a,this.hint),this.other.set(t[i*3]-t[o*3],t[i*3+1]-t[o*3+1],t[i*3+2]-t[o*3+2]),this.hint.cross(this.other),lM(this.axisY,this.hint,`x`,n)}}}};function EP(e,t,n){let r=Math.min(1,Math.max(0,(n-e)/(t-e)));return r*r*(3-2*r)}var DP=3,OP=5;function kP(e){return 1-.74*EP(-.6,1.4,e)}var AP=.23,jP=.22,MP=.22,NP=1.15,PP=.5,FP=.9,IP=.045,LP=[.33,.66],RP=IP*2*.33*.67,zP=.04;function BP(e,t){return{pressX:Math.min(jP,Math.max(0,Math.abs(e)+AP-Jw)),pressZ:Math.min(jP,Math.max(0,Math.abs(t)+AP-Jw))}}function VP(e,t,n){return n.x=Math.sign(e)*Math.max(0,Math.abs(e)+AP-Jw-jP),n.z=Math.sign(t)*Math.max(0,Math.abs(t)+AP-Jw-jP),n}var HP=` float ropeGive(float along, float position, float height) { - float near = 1.0 - smoothstep(${jN.toFixed(2)}, ${MN.toFixed(2)}, abs(along)); - float tied = smoothstep(0.0, ${NN.toFixed(2)}, ${ww.toFixed(4)} - abs(position)); - return near * tied * (${PN.toFixed(2)} + ${(1-PN).toFixed(2)} * smoothstep(0.5, 0.88, height)); + float near = 1.0 - smoothstep(${MP.toFixed(2)}, ${NP.toFixed(2)}, abs(along)); + float tied = smoothstep(0.0, ${PP.toFixed(2)}, ${Jw.toFixed(4)} - abs(position)); + return near * tied * (${FP.toFixed(2)} + ${(1-FP).toFixed(2)} * smoothstep(0.5, 0.88, height)); } -`,HN=` +`,UP=` vec3 ropeWorld = (modelMatrix * vec4(transformed, 1.0)).xyz; bool ropeSideX = abs(ropeWorld.x) > abs(ropeWorld.z); vec3 ropeOut = ropeSideX ? vec3(sign(ropeWorld.x), 0.0, 0.0) : vec3(0.0, 0.0, sign(ropeWorld.z)); @@ -4947,12 +4948,12 @@ for (int ropeIndex = 0; ropeIndex < 2; ropeIndex += 1) { ropeFlex = max(ropeFlex, press * sameSide * ropeGive(ropeAlong - along, ropeAlong, ropeWorld.y)); } transformed += ropeOut * ropeFlex; -`;function UN(e,t){let n=document.createElement(`canvas`);n.width=e,n.height=e;let r=n.getContext(`2d`);r!==null&&t(r,e);let i=new F_(n);return i.anisotropy=8,i.colorSpace=hp,i}function WN(){return UN(1024,(e,t)=>{e.fillStyle=`#9d968a`,e.fillRect(0,0,t,t);let n=e.createLinearGradient(0,0,t,t);n.addColorStop(0,`rgba(255,255,255,0.08)`),n.addColorStop(.5,`rgba(60,50,40,0.06)`),n.addColorStop(1,`rgba(255,255,255,0.04)`),e.fillStyle=n,e.fillRect(0,0,t,t);for(let n=0;n<2600;n+=1){let r=Math.sin(n*12.9898)*43758.5453%1,i=Math.sin(n*78.233)*12543.1234%1;e.fillStyle=`rgba(${n%3==0?`255,255,255`:`70,55,45`},${.02+n%5*.006})`,e.fillRect(Math.abs(r)*t,Math.abs(i)*t,2+n%4,1+n%3)}for(let n=0;n<40;n+=1){let r=Math.abs(Math.sin(n*91.7)*7919.3%1)*t,i=Math.abs(Math.sin(n*47.1)*4271.9%1)*t;e.fillStyle=`rgba(80,60,50,${.05+n%4*.02})`,e.beginPath(),e.ellipse(r,i,18+n%7*6,6+n%5*3,n*.7%Math.PI,0,Math.PI*2),e.fill()}e.strokeStyle=`rgba(30,60,140,0.85)`,e.lineWidth=12,e.beginPath(),e.arc(t/2,t/2,t*.2,0,Math.PI*2),e.stroke(),e.fillStyle=`rgba(30,60,140,0.9)`,e.font=`800 ${Math.round(t*.062)}px Inter, system-ui, sans-serif`,e.textAlign=`center`,e.textBaseline=`middle`,e.fillText(`H A N D S`,t/2,t/2-t*.012),e.font=`600 ${Math.round(t*.024)}px Inter, system-ui, sans-serif`,e.fillText(`CHAMPIONSHIP BOXING`,t/2,t/2+t*.052),e.strokeStyle=`rgba(30,60,140,0.6)`,e.lineWidth=6,e.strokeRect(t*.035,t*.035,t*.93,t*.93)})}function GN(){let e=[],t=[],n=[],r=new oh;r.name=`ring`;let i=WN();n.push(i);let a=new Pv({map:i,roughness:.88,metalness:0});t.push(a);let o=new bv(bw*2,bw*2);e.push(o);let s=new Ig(o,a);s.rotation.x=-Math.PI/2,s.position.y=.002,s.receiveShadow=!0,r.add(s);let c=new Pv({color:`#1c2b52`,roughness:.85});t.push(c);let l=new xv(bw*.98,xw,4,1);e.push(l);let u=new Ig(l,c);u.rotation.x=-Math.PI/2,u.rotation.z=Math.PI/4,u.position.y=.001,u.receiveShadow=!0,r.add(u);let d=new Pv({color:`#0c1424`,roughness:.9});t.push(d);let f=new z_(Sw*2,1,Sw*2);e.push(f);let p=new Ig(f,d);p.position.y=-.5,p.receiveShadow=!0,r.add(p);let m=new Pv({color:`#101b33`,roughness:.95});t.push(m);for(let t=0;t<4;t+=1){let n=new bv(Sw*2,.95);e.push(n);let i=new Ig(n,m),a=t*Math.PI/2;i.position.set(Math.sin(a)*(Sw-.001),-.48,Math.cos(a)*(Sw-.001)),i.rotation.y=a,r.add(i)}let h=new Pv({color:`#9aa7b5`,roughness:.35,metalness:.75});t.push(h);let g=[Dw.neutral,Dw.red,Dw.neutral,Dw.blue],_=new H_(.055,.055,1.55,12);e.push(_);let v=new z_(.34,.52,.13);e.push(v);let y=new z_(.16,.07,.1);e.push(y);let b=[];for(let e=0;e<4;e+=1){let n=Math.PI/4+e*Math.PI/2,i=Math.sin(n)*Cw*Math.SQRT2*.72,a=Math.cos(n)*Cw*Math.SQRT2*.72;b.push(new J(i,0,a));let o=new Ig(_,h);o.position.set(i,.78,a),o.castShadow=!0,r.add(o);let s=new Pv({color:g[e],roughness:.55});t.push(s);for(let e of[.62,1.12]){let t=new Ig(v,s);t.position.set(i*.985,e,a*.985),t.lookAt(0,e,0),t.castShadow=!0,r.add(t)}}let x=[new Dm(0,0,0,0),new Dm(0,0,0,0)],S={uRopeContactA:{value:x[0]},uRopeContactB:{value:x[1]}},C=[12131356,15067115,1920728],w=e=>{e.uniforms.uRopeContactA=S.uRopeContactA,e.uniforms.uRopeContactB=S.uRopeContactB,e.vertexShader=e.vertexShader.replace(`#include `,`#include \nuniform vec4 uRopeContactA;\nuniform vec4 uRopeContactB;\n${VN}`).replace(`#include `,`#include ${HN}`)},T=e=>{let n=new Pv(e);return n.onBeforeCompile=w,t.push(n),n},E=new Iv;E.onBeforeCompile=w,E.customProgramCacheKey=()=>`hands-rope-depth`,t.push(E);let D=e=>T({color:e,roughness:.42,metalness:.05}),O=C.map(D),ee=C.map(D),te=T({color:14212840,roughness:.6}),k=T({color:14212840,roughness:.6});ee.push(k);let ne=Tw[0]-LN-RN,A=Tw[Tw.length-1]-LN+RN,re=new z_(.035,A-ne,.012,1,6,1);e.push(re);let ie=(e,t)=>{for(let[n,r]of[e,t].entries()){let e=x[n];if(r===null){e.set(0,0,0,0);continue}let t=zN(r.x,r.z);e.set(r.x,r.z,t.pressX,t.pressZ)}};for(let t=0;t<4;t+=1){let n=b[t],i=b[(t+1)%4];for(let[a,o]of Tw.entries()){let s=n.clone().add(i).multiplyScalar(.5);s.y=o-FN;let c=new Cv(new gv(new J(n.x,o,n.z),s,new J(i.x,o,i.z)),72,.028,8,!1);e.push(c);let l=new Ig(c,(t===EN?ee:O)[a]);l.castShadow=!0,l.customDepthMaterial=E,t===EN&&(l.renderOrder=DN),r.add(l)}for(let e of IN){let a=n.x+(i.x-n.x)*e,o=n.z+(i.z-n.z)*e,s=new Ig(re,t===EN?k:te);s.position.set(a,(ne+A)/2,o),s.lookAt(0,s.position.y,0),t===EN&&(s.renderOrder=DN),r.add(s)}}for(let e of ee)e.transparent=!0;return{group:r,materials:t,geometries:e,textures:n,setRopeContacts:ie,ropeContacts:x,setNearRopeOpacity:e=>{for(let t of ee)t.opacity=K.clamp(e,0,1),t.visible=t.opacity>.03,t.depthWrite=t.opacity>=1},nearRopeOpacity:()=>ee[0].opacity}}function KN(e){for(let t of e.geometries)t.dispose();for(let t of e.materials)t.dispose();for(let t of e.textures)t.dispose()}var qN={MHeadMat0:`head`,GlovesMat0:`gloves`,MBodyMat0:`body`,ShoesMat0:`shoes`,PantsMat0:`pants`},JN=new Map,YN=new Map,XN=null,ZN=null;function QN(e){return e.colorSpace=hp,e.flipY=!1,e}function $N(e){let t=JN.get(e);if(t!==void 0)return Promise.resolve(t);let n=YN.get(e);if(n!==void 0)return n;let r=new vy().loadAsync(_A[e]).then(t=>(JN.set(e,QN(t)),t));return YN.set(e,r),r}function eP(){return Promise.all(Object.keys(_A).map($N))}async function tP(){let e=Uint8Array.from(atob(hA),e=>e.charCodeAt(0)),t=new Response(e).body;if(t===null)throw Error(`fighter_glb_stream_unavailable`);return new Response(t.pipeThrough(new DecompressionStream(`gzip`))).arrayBuffer()}function nP(){if(XN===null){let e=tP().then(e=>new Promise((t,n)=>{new hk().parse(e,``,t,e=>n(e instanceof Error?e:Error(String(e))))}));XN=Promise.all([e,eP()]).then(([e])=>(ZN=e.scene,e))}return XN}function rP(){iP(ZN,JN.values())}function iP(e,t){e?.traverse(e=>{e instanceof Ig&&e.geometry.dispose()});for(let e of t)e.dispose()}function aP(e){e.traverse(e=>{e instanceof Jg&&e.skeleton.dispose()})}function oP(e){let t=JN.get(e);if(t!==void 0)return t;let n=QN(new vy().load(_A[e]));return JN.set(e,n),n}var sP=`{ +`;function WP(e,t){let n=document.createElement(`canvas`);n.width=e,n.height=e;let r=n.getContext(`2d`);r!==null&&t(r,e);let i=new ev(n);return i.anisotropy=8,i.colorSpace=Pp,i}function GP(){return WP(1024,(e,t)=>{e.fillStyle=`#9d968a`,e.fillRect(0,0,t,t);let n=e.createLinearGradient(0,0,t,t);n.addColorStop(0,`rgba(255,255,255,0.08)`),n.addColorStop(.5,`rgba(60,50,40,0.06)`),n.addColorStop(1,`rgba(255,255,255,0.04)`),e.fillStyle=n,e.fillRect(0,0,t,t);for(let n=0;n<2600;n+=1){let r=Math.sin(n*12.9898)*43758.5453%1,i=Math.sin(n*78.233)*12543.1234%1;e.fillStyle=`rgba(${n%3==0?`255,255,255`:`70,55,45`},${.02+n%5*.006})`,e.fillRect(Math.abs(r)*t,Math.abs(i)*t,2+n%4,1+n%3)}for(let n=0;n<40;n+=1){let r=Math.abs(Math.sin(n*91.7)*7919.3%1)*t,i=Math.abs(Math.sin(n*47.1)*4271.9%1)*t;e.fillStyle=`rgba(80,60,50,${.05+n%4*.02})`,e.beginPath(),e.ellipse(r,i,18+n%7*6,6+n%5*3,n*.7%Math.PI,0,Math.PI*2),e.fill()}e.strokeStyle=`rgba(30,60,140,0.85)`,e.lineWidth=12,e.beginPath(),e.arc(t/2,t/2,t*.2,0,Math.PI*2),e.stroke(),e.fillStyle=`rgba(30,60,140,0.9)`,e.font=`800 ${Math.round(t*.062)}px Inter, system-ui, sans-serif`,e.textAlign=`center`,e.textBaseline=`middle`,e.fillText(`H A N D S`,t/2,t/2-t*.012),e.font=`600 ${Math.round(t*.024)}px Inter, system-ui, sans-serif`,e.fillText(`CHAMPIONSHIP BOXING`,t/2,t/2+t*.052),e.strokeStyle=`rgba(30,60,140,0.6)`,e.lineWidth=6,e.strokeRect(t*.035,t*.035,t*.93,t*.93)})}function KP(){let e=[],t=[],n=[],r=new Th;r.name=`ring`;let i=GP();n.push(i);let a=new $v({map:i,roughness:.88,metalness:0});t.push(a);let o=new zv(Ww*2,Ww*2);e.push(o);let s=new t_(o,a);s.rotation.x=-Math.PI/2,s.position.y=.002,s.receiveShadow=!0,r.add(s);let c=new $v({color:`#1c2b52`,roughness:.85});t.push(c);let l=new Bv(Ww*.98,Gw,4,1);e.push(l);let u=new t_(l,c);u.rotation.x=-Math.PI/2,u.rotation.z=Math.PI/4,u.position.y=.001,u.receiveShadow=!0,r.add(u);let d=new $v({color:`#0c1424`,roughness:.9});t.push(d);let f=new iv(Kw*2,1,Kw*2);e.push(f);let p=new t_(f,d);p.position.y=-.5,p.receiveShadow=!0,r.add(p);let m=new $v({color:`#101b33`,roughness:.95});t.push(m);for(let t=0;t<4;t+=1){let n=new zv(Kw*2,.95);e.push(n);let i=new t_(n,m),a=t*Math.PI/2;i.position.set(Math.sin(a)*(Kw-.001),-.48,Math.cos(a)*(Kw-.001)),i.rotation.y=a,r.add(i)}let h=new $v({color:`#9aa7b5`,roughness:.35,metalness:.75});t.push(h);let g=[Zw.neutral,Zw.red,Zw.neutral,Zw.blue],_=new sv(.055,.055,1.55,12);e.push(_);let v=new iv(.34,.52,.13);e.push(v);let y=new iv(.16,.07,.1);e.push(y);let b=[];for(let e=0;e<4;e+=1){let n=Math.PI/4+e*Math.PI/2,i=Math.sin(n)*qw*Math.SQRT2*.72,a=Math.cos(n)*qw*Math.SQRT2*.72;b.push(new J(i,0,a));let o=new t_(_,h);o.position.set(i,.78,a),o.castShadow=!0,r.add(o);let s=new $v({color:g[e],roughness:.55});t.push(s);for(let e of[.62,1.12]){let t=new t_(v,s);t.position.set(i*.985,e,a*.985),t.lookAt(0,e,0),t.castShadow=!0,r.add(t)}}let x=[new Km(0,0,0,0),new Km(0,0,0,0)],S={uRopeContactA:{value:x[0]},uRopeContactB:{value:x[1]}},C=[12131356,15067115,1920728],w=e=>{e.uniforms.uRopeContactA=S.uRopeContactA,e.uniforms.uRopeContactB=S.uRopeContactB,e.vertexShader=e.vertexShader.replace(`#include `,`#include \nuniform vec4 uRopeContactA;\nuniform vec4 uRopeContactB;\n${HP}`).replace(`#include `,`#include ${UP}`)},T=e=>{let n=new $v(e);return n.onBeforeCompile=w,t.push(n),n},E=new ty;E.onBeforeCompile=w,E.customProgramCacheKey=()=>`hands-rope-depth`,t.push(E);let D=e=>T({color:e,roughness:.42,metalness:.05}),O=C.map(D),k=C.map(D),A=T({color:14212840,roughness:.6}),j=T({color:14212840,roughness:.6});k.push(j);let ee=Yw[0]-RP-zP,te=Yw[Yw.length-1]-RP+zP,ne=new iv(.035,te-ee,.012,1,6,1);e.push(ne);let re=(e,t)=>{for(let[n,r]of[e,t].entries()){let e=x[n];if(r===null){e.set(0,0,0,0);continue}let t=BP(r.x,r.z);e.set(r.x,r.z,t.pressX,t.pressZ)}};for(let t=0;t<4;t+=1){let n=b[t],i=b[(t+1)%4];for(let[a,o]of Yw.entries()){let s=n.clone().add(i).multiplyScalar(.5);s.y=o-IP;let c=new Hv(new Fv(new J(n.x,o,n.z),s,new J(i.x,o,i.z)),72,.028,8,!1);e.push(c);let l=new t_(c,(t===DP?k:O)[a]);l.castShadow=!0,l.customDepthMaterial=E,t===DP&&(l.renderOrder=OP),r.add(l)}for(let e of LP){let a=n.x+(i.x-n.x)*e,o=n.z+(i.z-n.z)*e,s=new t_(ne,t===DP?j:A);s.position.set(a,(ee+te)/2,o),s.lookAt(0,s.position.y,0),t===DP&&(s.renderOrder=OP),r.add(s)}}for(let e of k)e.transparent=!0;return{group:r,materials:t,geometries:e,textures:n,setRopeContacts:re,ropeContacts:x,setNearRopeOpacity:e=>{for(let t of k)t.opacity=K.clamp(e,0,1),t.visible=t.opacity>.03,t.depthWrite=t.opacity>=1},nearRopeOpacity:()=>k[0].opacity}}function qP(e){for(let t of e.geometries)t.dispose();for(let t of e.materials)t.dispose();for(let t of e.textures)t.dispose()}var JP={MHeadMat0:`head`,GlovesMat0:`gloves`,MBodyMat0:`body`,ShoesMat0:`shoes`,PantsMat0:`pants`},YP=new Map,XP=new Map,ZP=null,QP=null;function $P(e){return e.colorSpace=Pp,e.flipY=!1,e}function eF(e){let t=YP.get(e);if(t!==void 0)return Promise.resolve(t);let n=XP.get(e);if(n!==void 0)return n;let r=new Ly().loadAsync(vj[e]).then(t=>(YP.set(e,$P(t)),t));return XP.set(e,r),r}function tF(){return Promise.all(Object.keys(vj).map(eF))}async function nF(){let e=Uint8Array.from(atob(gj),e=>e.charCodeAt(0)),t=new Response(e).body;if(t===null)throw Error(`fighter_glb_stream_unavailable`);return new Response(t.pipeThrough(new DecompressionStream(`gzip`))).arrayBuffer()}function rF(){if(ZP===null){let e=nF().then(e=>new Promise((t,n)=>{new gA().parse(e,``,t,e=>n(e instanceof Error?e:Error(String(e))))}));ZP=Promise.all([e,tF()]).then(([e])=>(QP=e.scene,e))}return ZP}function iF(){aF(QP,YP.values())}function aF(e,t){e?.traverse(e=>{e instanceof t_&&e.geometry.dispose()});for(let e of t)e.dispose()}function oF(e){e.traverse(e=>{e instanceof p_&&e.skeleton.dispose()})}function sF(e){let t=YP.get(e);if(t!==void 0)return t;let n=$P(new Ly().load(vj[e]));return YP.set(e,n),n}var cF=`{ vec4 pressedOntoCanvas = modelMatrix * vec4( transformed, 1.0 ); - if ( pressedOntoCanvas.y < ${0 .toFixed(4)} && max( abs( pressedOntoCanvas.x ), abs( pressedOntoCanvas.z ) ) < ${Sw.toFixed(4)} ) { + if ( pressedOntoCanvas.y < ${0 .toFixed(4)} && max( abs( pressedOntoCanvas.x ), abs( pressedOntoCanvas.z ) ) < ${Kw.toFixed(4)} ) { transformed += inverse( mat3( modelMatrix ) ) * vec3( 0.0, ${0 .toFixed(4)} - pressedOntoCanvas.y, 0.0 ); } -}`;function cP(e){let t=e.onBeforeCompile,n=Object.hasOwn(e,`customProgramCacheKey`)?e.customProgramCacheKey():`plain`;e.onBeforeCompile=(n,r)=>{t.call(e,n,r),n.vertexShader=n.vertexShader.replace(`#include `,`${sP}\n#include `)},e.customProgramCacheKey=()=>`${n}-on-canvas`,e.needsUpdate=!0}function lP(e,t){let n=t.outfit!==void 0,r=[],i=[],a=new Map,o=null,s={value:0},c=null,l=null;if(e.traverse(e=>{if(!(e instanceof Jg)||Array.isArray(e.material))return;let u=e.material.name,d=qN[u];if(d===void 0)throw Error(`fighter GLB has unsupported material ${u}`);let f=a.get(u);if(f===void 0){let e=u===`MHeadMat0`||u===`MBodyMat0`,p=t.outfit,m=u===`GlovesMat0`?t.gear:u===`PantsMat0`?p?.trousers??t.gear:u===`ShoesMat0`&&p!==void 0?p.shoes:16777215,h=oP(d);f=e&&!n?new Fv({map:h,color:m,roughness:.58,metalness:.02,clearcoat:.25,clearcoatRoughness:.6}):new Pv({map:h,color:m,roughness:e?.58:.4,metalness:e?.02:.03}),f.name=u,a.set(u,f),i.push(f),e&&r.push(f),u===`MHeadMat0`&&(c=new oD(n?null:f,UE,{core:ZE,lids:$E})),u===`MBodyMat0`&&(l=new oD(n?null:f,WE,{core:QE,wash:!0}));let g=uP[u];p!==void 0&&g!==void 0?RA(f,g,p):u===`PantsMat0`?s=mE(f,!1,`trunks`):u===`GlovesMat0`&&(o=mE(f)),cP(f)}e.material=f,e.castShadow=!n,e.receiveShadow=!0,e.frustumCulled=!1}),r.length!==2||o===null||i.length!==5||c===null||l===null)throw Error(`fighter GLB material contract failed: ${r.length} skin, ${i.length} total`);return{skin:r,gloveBlood:o,trunksBlood:s,owned:i,headInjury:c,bodyInjury:l}}var uP={MHeadMat0:`head`,MBodyMat0:`body`,ShoesMat0:`shoes`,PantsMat0:`pants`},dP=new Y().setRGB(.6,.32,.19,gp),fP=(e,t,n,r)=>e+(t-e)*(1-Math.exp(-n*r)),pP=(e,t,n,r)=>e+(((t-e+Math.PI)%(Math.PI*2)+Math.PI*2)%(Math.PI*2)-Math.PI)*(1-Math.exp(-n*r)),mP=K.clamp,hP=class{root=new oh;bones=new Map;rig;metrics;skinMaterials;ownedMaterials;gloveBlood;trunksBlood;headMeshes=[];handMeshes={left:[],right:[]};decapitated=!1;burst=!1;dismemberedHands={left:!1,right:!1};dressed;ownedGeometries=[];gearBaseColor;skinBaseColor;headInjury;bodyInjury;headLook;bareHand;constructor(e,t){let n=pk(e.scene);n.scale.setScalar(1),this.root.add(n);let r=lP(n,t);this.skinMaterials=r.skin,this.ownedMaterials=[...r.owned],this.gloveBlood=r.gloveBlood,this.trunksBlood=r.trunksBlood,this.headInjury=r.headInjury,this.bodyInjury=r.bodyInjury,this.gearBaseColor=new Y(t.gear),this.skinBaseColor=new Y(t.skin),this.dressed=t.outfit!==void 0,n.traverse(e=>{e instanceof Jg&&e.name===`BoxerHead`&&this.headMeshes.push(e),e instanceof Jg&&e.name===`BoxerGloveLeft`&&this.handMeshes.left.push(e),e instanceof Jg&&e.name===`BoxerGloveRight`&&this.handMeshes.right.push(e),e instanceof Yg&&this.bones.set(e.name,e)});let i=Object.values(gA).filter(e=>!this.bones.has(e));if(i.length>0)throw Error(`fighter GLB missing required bones: ${i.join(`, `)}`);if(this.headMeshes.length!==1)throw Error(`fighter GLB requires one BoxerHead mesh, found ${this.headMeshes.length}`);let a=this.headInjury.shadowMaterial();this.headMeshes[0].customDepthMaterial=a;let o=this.headMeshes[0].material;o.side=0,o.shadowSide=1,this.ownedMaterials.push(a);for(let e of[`left`,`right`])if(this.handMeshes[e].length!==1)throw Error(`fighter GLB requires one ${e} glove mesh, found ${this.handMeshes[e].length}`);this.root.updateMatrixWorld(!0),this.rig=new lj(this.root),this.headLook=new MD(this.headMeshes[0].material),this.bareHand=t.outfit===void 0?null:this.addHands(t.outfit),this.setLook(t.look??gD);let s=this.rig.metrics;this.metrics={armUpper:s.armL.upper,armFore:s.armL.lower,legThigh:s.legL.upper,legShin:s.legL.lower,headRestY:s.headHeight,chestRestY:s.chestHeight,ankleRestY:s.ankleHeight}}bone(e){return this.bones.get(gA[e]??e)??null}setGloveBlood(e){this.gloveBlood.value=mP(e,0,1)}get gloveBloodLevel(){return this.gloveBlood.value}setTrunksBlood(e){this.trunksBlood.value=mP(e,0,1)}get trunksBloodLevel(){return this.trunksBlood.value}get headMesh(){return this.headMeshes[0]}gloveMesh(e){return this.handMeshes[e][0]}get skin(){return this.skinMaterials[0]}get isDecapitated(){return this.decapitated}setDecapitated(e){this.decapitated=e,this.burst=!1,this.headInjury.setSevered(e),this.bone(`head`).visible=!e}get isHeadBurst(){return this.burst}setHeadBurst(e){this.burst=e,this.decapitated=!1,this.headInjury.setBurst(e),this.bone(`head`).visible=!e}isHandDismembered(e){return this.dismemberedHands[e]}setHandDismembered(e,t){this.dismemberedHands[e]=t;for(let n of this.handMeshes[e])n.visible=!t&&!this.dressed}setLook(e){this.headLook.set(e);for(let t of this.skinMaterials)t.color.setHex(e.tint);this.bareHand?.color.copy(dP).multiply(this.skinMaterials[0].color)}get look(){return this.headLook.look}addHands(e){let t=e.gloves!==null,n=new Pv({color:t?e.gloves:dP,roughness:t?.38:.6,metalness:.02}),r=t?n:new Pv({color:new Y(e.shirt).multiplyScalar(.9),roughness:.88,metalness:0});this.ownedMaterials.push(n),r!==n&&this.ownedMaterials.push(r);let i=HA();this.ownedGeometries.push(i);for(let e of[`left`,`right`]){for(let t of this.handMeshes[e])t.visible=!1;let t=VA(e);this.ownedGeometries.push(t);let a=e===`left`?`L`:`R`;for(let[o,s,c,l]of[[this.rig.bones[`glove${a}`],t,n,`hand-${e}`],[this.rig.bones[`elbow${a}`],i,r,`cuff-${e}`]]){let e=new Ig(s,c);e.name=l,e.castShadow=!1,e.receiveShadow=!0,o.add(e)}}return t?null:n}setSkinClearcoat(e){for(let t of this.skinMaterials)t instanceof Fv&&(t.clearcoat=e)}dispose(){for(let e of this.ownedMaterials)e.dispose();for(let e of this.ownedGeometries)e.dispose();aP(this.root)}},gP=(e,t,n,r,i)=>{let a=e.value,o=e.velocity;o.addScaledVector(a,-n*t).multiplyScalar(Math.exp(-r*t)),a.addScaledVector(o,t),a.length()>i&&a.setLength(i)},_P=.06,vP=150,yP=.58,bP=.25,xP=.32,SP=9,CP=1,wP=.08,TP=.3,EP=1,DP=1.6,OP=.25,kP=.12,AP=.3,jP=.3,MP=8;function NP(e,t,n,r){BN(e,t,n);let i=Math.hypot(n.x,n.z);if(i<=0)return r.x=0,r.z=0,0;let a=pj(0,OP,i),o=1+kP*a/i;return r.x=n.x*o,r.z=n.z*o,a}var PP=(e,t)=>e===0||Math.sign(t)===Math.sign(e)&&Math.abs(t)>Math.abs(e)?t:e,FP=.75,IP=.38,LP=.72,RP=.5,zP=.2,BP=.55,VP=.7,HP=6,UP=.4,WP=.2,GP=.3,KP=.5,qP=class{mapping;boxer;solver;yaw=0;yawInitialized=!1;rootX=null;rootZ=0;punchActive=!1;punchAgeTicks=0;punchTotalTicks=1;punchClass=`jab`;punchHand=`left`;punchTarget=`head`;punchPower=`normal`;punchTiming=A(`jab`,`head`,`normal`);actionId=null;completedActionId=null;ownActionId=null;ownLeadTicks=0;ownAuthoritativeAge=null;ownWaitedTicks=0;ownExpectedTicks=0;ownPulled=!1;ownSequence=null;ownStarted=!1;ownPressedAt=0;ownRefused=!1;ownQueued=null;contactId=null;contactParried=!1;shownFighter=null;shownOpponent=null;retiredOwnIds=[];anticipatedId=null;hitstop=0;hitstopScale=1;downState=`up`;fallAge=0;riseProgress=0;riseFrom=0;fallSide=0;fallProne=!1;fallKneel=!1;windedSide=-1;windedTime=0;winded=0;landProne=!1;landSide=0;landShift=new J;landSettled=!1;fallen=wF();fallenFromPhysics=!1;riseRoot=new J;riseRootFrom=new J;downPoles=[new J,new J,new J,new J];downPolesSet=!1;poleSettle=0;characterInverse=new Mm;place=new J;riseRootVelocity=new J;liveOpponentHead=new J;hasLiveHead=!1;guardOpponentHead=new J;opponentHeadOffset=new J;opponentSteadySeconds=0;followHead=0;aimActionId=null;headKick={value:new J,velocity:new J};torsoKick={value:new J,velocity:new J};rootKick={value:new J,velocity:new J};coverKick={value:new J,velocity:new J};foldDelay=0;pendingFold=0;guardKick=0;guardHigh=0;guardLow=0;guardSpent=0;slip=0;weave=0;weaveTime=0;pull=0;crouchExtra=0;bouncePhase=0;weightPhase=0;stunPhase=0;feintTimer=2;feint=0;stunAmount=0;tired=0;clinchWeight=0;foulWeight=0;tauntWeight=0;crowding=0;punchCommit=0;headSpace=new q;ownHead=new J;ropeHold=new J;ropeExcess={x:0,z:0};ropeOwn={x:0,z:0};ropeTheirs={x:0,z:0};ropeLeanTarget=0;ropeLean=0;ropeOutward=new J(1,0,0);ropeLocal=new J;tauntEnd=null;lastSpeed=0;stool;stoolRoot=new J;stoolYaw=0;enswell;bottle;treatProp=`enswell`;treatTarget=new J;treatScratch=new J;treatFacing=new J(0,0,-1);treatFacingLocal=new J;treatSide=1;treating=!1;treatWeight=0;resting=!1;seated=0;stillTime=0;celebrateTime=0;celebration=0;waveTime=0;wave=0;breakTime=0;breakWeight=0;breakFighters=[new J,new J];breakAimed=!1;attending=!1;verdictSide=0;verdict=null;squareWeight=0;raisedWeight=0;bowedWeight=0;wrists=[null,null];wristTargets=[new J,new J];wristWeights=[0,0];attendWeight=0;countdownTicks=null;countdownEnd=null;touchWeight=0;touchOffset=new J;touchVelocity=new J;debugHoldImpact=!1;feet=[{planted:new J,from:new J,to:new J,progress:1,stepping:!1,duration:.2},{planted:new J,from:new J,to:new J,progress:1,stepping:!1,duration:.2}];feetInitialized=!1;dislocation=null;scratch=new J;scratchB=new J;scratchC=new J;scratchD=new J;scratchE=new J;clinchCentre=new J;clinchForward=new J;clinchTemp=new J;scratchQ=new cm;headWorld=new J;hand={L:this.makeHand(),R:this.makeHand()};punchGuard=this.makeHand();punchDir=new J;punchContact=new J;punchStart=new J;punchSweepFrom=new J;punchSweepTo=new J;punchMid=new J;foot={L:this.makeFoot(),R:this.makeFoot()};torso={hips:new J,hipsYaw:0,hipsPitch:0,hipsRoll:0,shouldersYaw:0,spinePitch:0,spineRoll:0,headYaw:0,headPitch:0,headRoll:0,headOffset:new J};pose;downStanding=wF();downFrom=wF();downTo=wF();downResult=wF();downStand=1;fallStart=wF();fallStartStand=1;fallFromGetUp=!1;referee;refereeCount=0;refereeCounting=!1;countChangedTick=null;ragdoll;forcedDown=!1;heldDown=!1;authoredNextFall=!1;obstacle=null;blows=0;riseBlendAge=0;constructor(e,t,n={}){this.mapping=t,this.boxer=e,this.referee=n.referee===!0,this.solver=new Dj(e.rig),this.pose={torso:this.torso,handL:this.hand.L,handR:this.hand.R,footL:this.foot.L,footR:this.foot.R,shrugL:0,shrugR:0},this.stool=ZF(),this.stool.group.position.set(0,0,.02),e.root.add(this.stool.group),this.enswell=YF(),e.rig.bones.gloveL.add(this.enswell.group),this.bottle=XF(),e.rig.bones.gloveL.add(this.bottle.group),this.ragdoll=this.referee?null:new wN(e.rig,e.root)}primeReplayFall(){this.ragdoll?.prime()}useAuthoredFall(){this.authoredNextFall=!0}knockOut(){this.forcedDown=!0}stayDown(e){this.heldDown=e}setObstacle(e,t){this.obstacle??={x:e,z:t},this.obstacle.x=e,this.obstacle.z=t}get fallBody(){return this.ragdoll?.active===!0?this.ragdoll:null}setResting(e){this.resting=e}get stoolVisible(){return this.stool.group.visible}celebrate(e=4.4){this.celebrateTime=e}resetTransient(e=!1){this.forcedDown=!1;let t=this.ragdoll;t!==null&&(e?t.active?t.settle():t.restoreSettled():(t.stop(),t.clearRise())),this.downState=e?`down`:`up`,this.landSettled=!1,this.fallenFromPhysics=!1,this.riseRoot.set(0,0,0),this.riseRootFrom.set(0,0,0),this.riseRootVelocity.set(0,0,0),this.fallAge=e?FP:0,this.riseProgress=0,this.hitstop=0,this.hitstopScale=1;for(let e of[this.headKick,this.torsoKick,this.rootKick,this.coverKick])e.value.set(0,0,0),e.velocity.set(0,0,0);this.foldDelay=0,this.pendingFold=0,this.guardKick=0,this.stunAmount=0,this.windedTime=0,this.winded=0,this.celebrateTime=0,this.celebration=0,this.waveTime=0,this.wave=0,this.verdictSide=0,this.verdict=null,this.squareWeight=0,this.raisedWeight=0,this.bowedWeight=0,this.wrists.fill(null),this.wristWeights.fill(0),this.seated=0,this.stillTime=0,this.rootX=null,this.yawInitialized=!1,this.feetInitialized=!1,this.retirePunch(),this.ownQueued=null,this.completedActionId=null,this.retiredOwnIds.length=0,this.anticipatedId=null}waveOff(e=2.6){this.waveTime=e}setCountdown(e){this.countdownTicks=e}attend(e){this.attending=e}treat(e,t,n=1,r=`enswell`){this.treating=e!==null,e!==null&&(this.treatTarget.copy(e),t!==void 0&&this.treatFacing.copy(t),this.treatSide=n,this.treatProp=r)}awaitVerdict(e){this.verdictSide=e??0,e===null&&(this.verdict=null)}announce(e){this.verdict=e}raise(e,t){this.wrists[0]=e===null?null:this.wristTargets[0].copy(e),this.wrists[1]=t===null?null:this.wristTargets[1].copy(t)}breakClinch(e=1.3){this.breakTime=e}get breaking(){return this.breakTime>0}aimBreak(e,t){this.breakFighters[0].copy(e),this.breakFighters[1].copy(t),this.breakAimed=!0}makeHand(){return{position:new J,knuckles:new J(0,1,0),palm:new J(0,0,1),pole:new J(0,-1,0)}}makeFoot(){return{position:new J,toe:new J(0,0,1),heel:0,pole:new J(0,0,1)}}get currentRoot(){return{x:this.rootX??0,z:this.rootZ}}get isDown(){return this.downState!==`up`}setRefereeCount(e,t){(e!==this.refereeCounting||t!==this.refereeCount)&&(this.countChangedTick=null),this.refereeCounting=e,this.refereeCount=t}predict(e,t,n,r=0,i){if(e.kind!==`punch`||e.id===void 0)return;let a={action:{...e,id:e.id},timing:i??A(e.class,e.target,e.power),leadTicks:r,pressedAt:t,sequence:null,started:!1,waited:0};if(this.punchActive&&this.ownActionId!==null&&this.ownAuthoritativeAge===null&&!this.ownPulled&&!this.ownStarted&&(t-this.ownPressedAt)*n0||e.clinch_ticks>0||e.clinch_startup_ticks>0,a=this.ownQueued;if(a!==null&&(a.sequence??=r?.(a.action.id)??null,e.action_id===a.action.id?a.started=!0:!a.started&&(i||a.sequence!==null&&e.last_input_sequence>=a.sequence&&e.queued_actions===0)&&(this.ownQueued=null)),!this.punchActive||this.ownActionId===null||this.ownPulled||this.ownRefused)return;this.ownStarted||(this.ownSequence??=r?.(this.ownActionId)??null);let o=e.action_id===this.ownActionId;o&&(this.ownStarted=!0);let s=this.ownQueued;if(s!==null&&s.sequence!==null&&r!==null&&!this.ownStarted&&this.ownSequence===null&&this.ownAuthoritativeAge===null){this.ownActionId=null,this.ownQueued=null,this.retirePunch(),this.startOwnPunch(s,Math.max(0,s.leadTicks-s.waited));return}(o?i&&e.action_contact_tick===null:!this.ownStarted&&this.ownAuthoritativeAge===null&&(i||this.ownSequence!==null&&e.last_input_sequence>=this.ownSequence&&e.queued_actions===0))&&(this.ownRefused=!0,this.punchAgeTickse.action_startup_ticks*(1/nI-1)||this.punchActive&&this.punchAgeTicks/this.punchTotalTicks<=.55)return;this.anticipatedId=n;let r=e.action_target??`head`,i=e.action_power??`normal`,a={...A(e.action,r,i),startup:e.action_startup_ticks,active:e.action_active_ticks,recovery:e.action_recovery_ticks},o=e.action_hand??(e.stance===`orthodox`?`left`:`right`);this.startEarly(n,e.action,o,r,i,a,t,t)}startOwnPunch(e,t){let{action:n,timing:r}=e;this.startEarly(n.id,n.class,n.hand,n.target,n.power,r,t,Math.max(0,t)),this.ownSequence=e.sequence,this.ownStarted=e.started,this.ownPressedAt=e.pressedAt}startEarly(e,t,n,r,i,a,o,s){this.retirePunch(),this.punchClass=t,this.punchHand=n,this.punchTarget=r,this.punchPower=i,this.punchTiming=a,this.punchTotalTicks=Math.max(1,se(a)),this.punchAgeTicks=0,this.punchActive=!0,this.ownActionId=e,this.ownLeadTicks=mP(o,0,$F),this.ownExpectedTicks=s}followUpStartAge(e){let t=this.shownFighter,n=this.shownOpponent,r=this.actionId??this.ownActionId,i=r!==null&&r===this.contactId&&!this.contactParried;return t!==null&&n!==null&&y(this.punchClass,i,e.action,t.stamina,n.stunned_ticks>0,t.style)?v(this.punchTiming):this.punchTotalTicks+1}releaseQueuedPress(e,t){let n=this.ownQueued;n!==null&&(n.waited+=e*30,!(this.punchActive&&!this.ownPulled&&this.punchAgeTicks6&&this.retiredOwnIds.shift()),this.actionId=null,this.punchActive=!1,this.ownActionId=null,this.ownLeadTicks=0,this.ownAuthoritativeAge=null,this.ownWaitedTicks=0,this.ownExpectedTicks=0,this.ownPulled=!1,this.ownSequence=null,this.ownStarted=!1,this.ownRefused=!1}landedHit(e){this.hitstop=Math.max(this.hitstop,e?.045:.078)}setArcadeDislocation(e){this.dislocation=e,this.boxer.headInjury.setJaw(+(e===`jaw`))}react(e,t=`head`,n=1,r=null,i=null,a=90){let o=mP(a/vP,0,1),s=(.55+o*1.05)*(e===`block`?.35:1),c=i===`left`?1:i===`right`||n>=0?-1:1;if(t===`body`){switch(r){case`hook`:this.torsoKick.velocity.x+=3*s,this.torsoKick.velocity.z+=4.6*s*c,this.rootKick.velocity.x+=.5*s*c,this.coverKick.velocity.x+=2.2*s*c;break;case`uppercut`:this.rootKick.velocity.y+=.9*s,this.torsoKick.velocity.x-=1.6*s,this.foldDelay=.1,this.pendingFold=5.2*s;break;default:this.torsoKick.velocity.x+=4.6*s;break}this.rootKick.velocity.z-=.45*s,this.headKick.velocity.z-=.6*s,this.headKick.velocity.y-=.7*s,this.guardKick=Math.max(this.guardKick,.6*s)}else{switch(e===`hit`&&(this.guardKick=Math.max(this.guardKick,.4*s)),r){case`hook`:this.headKick.velocity.x+=2.6*s*c,this.headKick.velocity.z-=.7*s,this.torsoKick.velocity.z+=.9*s*c;break;case`uppercut`:this.headKick.velocity.y+=2.2*s,this.headKick.velocity.z-=1.2*s,this.torsoKick.velocity.x-=1.2*s;break;case`straight`:this.headKick.velocity.z-=2.4*s,this.torsoKick.velocity.x-=.6*s;break;default:this.headKick.velocity.z-=1.5*s,this.torsoKick.velocity.x-=.35*s;break}this.rootKick.velocity.z-=.45*s,e===`block`&&(this.guardKick=Math.max(this.guardKick,.9*s))}if(e===`hit`&&(this.dentSurface(t,c,r,o),this.fallSide=r===`hook`?c:c*.5,this.fallProne=r===`hook`||t===`body`),e===`hit`&&a>=10&&this.ragdoll!==null){let e=CN({target:t,punchClass:r,hand:i,lateral:c,amount:a}),n=this.scratchE.set(e.x,e.y,e.z).applyAxisAngle(QF,this.yaw),o=this.scratchD.set(e.driveX,e.driveY,e.driveZ).applyAxisAngle(QF,this.yaw);this.blows+=1,this.ragdoll.takeBlow(n,o,t,e.twist,iN(r,t,a,this.blows+Math.round(a)))}}stagger(){this.torsoKick.velocity.x-=2.6,this.headKick.velocity.z-=1.4,this.headKick.velocity.y+=.5,this.rootKick.velocity.z-=1.1,this.guardKick=Math.max(this.guardKick,1.1)}windedFor(e,t){this.windedTime=Math.max(this.windedTime,e),this.windedSide=t>=0?1:-1}fallToKnee(e){this.fallKneel=e,e&&(this.authoredNextFall=!0)}dentSurface(e,t,n,r){let i=1.1+r*2.1;if(e===`body`){let e=n===`hook`?t>0?`rightRibs`:`leftRibs`:`solarPlexus`;this.boxer.bodyInjury.impact(e,[n===`hook`?t*i*.8:0,0,-i],9);return}n===`hook`?this.boxer.headInjury.impact(t>0?`rightCheek`:`leftCheek`,[t*i,0,-i*.35],5.5):n===`uppercut`?this.boxer.headInjury.impact(`chin`,[0,i*.7,-i*.6],5):this.boxer.headInjury.impact(n===`jab`?`nose`:`mouth`,[0,0,-i],4.5)}stepFeet(e,t,n,r,i,a){let o=this.scratch,s=this.scratchQ.setFromAxisAngle(QF,a);for(let a=0;a<2;a+=1){let c=this.feet[a],l=a===0==t>0?Oj.leadFoot:Oj.rearFoot;if(this.referee||this.squareWeight>.5?o.set(a===0?.16:-.16,0,a===0?.02:-.02).applyQuaternion(s).add(i):o.set(l.x*t,0,l.z).applyQuaternion(s).add(i),o.y=0,!this.feetInitialized){c.planted.copy(o),c.progress=1,c.stepping=!1;continue}if(c.stepping){c.progress=Math.min(1,c.progress+e/c.duration),c.progress>=1&&(c.stepping=!1,c.planted.copy(c.to));continue}let u=this.feet[1-a];c.planted.distanceTo(o)>(n>.05?.09:.14)&&!u.stepping&&(c.stepping=!0,c.progress=0,c.duration=mP(.24-n*.07,.15,.24),c.from.copy(c.planted),c.to.copy(o).addScaledVector(r,c.duration*.6),c.to.y=0)}this.feetInitialized=!0}footWorld(e,t){let n=this.feet[e];if(!n.stepping)return t.copy(n.planted),0;let r=hj(n.progress,1.6);return t.copy(n.from).lerp(n.to,r),Math.sin(n.progress*Math.PI)*.055}update(e,t,n,r,i,a,o,s){let c=this.boxer,l=e.stance===`orthodox`?1:-1,u=i?.35:1,d=this.touchWalk(e,t,n,o);this.walkBackFromTheFall(n);let p=this.holdOnTheRopes(t,this.mapping.x(e.x)+d.x+this.riseRoot.x,this.mapping.z(e.y)+d.z+this.riseRoot.z),m=this.mapping.x(e.x)+d.x+this.riseRoot.x-p.x,h=this.mapping.z(e.y)+d.z+this.riseRoot.z-p.z;this.place.set(m,0,h),this.rootX===null&&(this.rootX=m,this.rootZ=h);let g=uI*Math.max(n,1/60);this.rootX+=mP(m-this.rootX,-g,g),this.rootZ+=mP(h-this.rootZ,-g,g);let _=Math.atan2(e.facing_x,-e.facing_y);this.yawInitialized||=(this.yaw=_,!0);let v=this.punchActive?3:this.downState===`up`?9:4;this.yaw=pP(this.yaw,_,v,n),c.root.position.set(this.rootX,0,this.rootZ),c.root.rotation.set(0,this.yaw,0),this.hitstop=Math.max(0,this.hitstop-n),this.hitstopScale=this.hitstop>0?.12:1;let y=n*this.hitstopScale;this.syncAction(e,t,o,y),this.debugHoldImpact||(this.boxer.headInjury.update(y),this.boxer.bodyInjury.update(y)),s!==void 0&&this.trackOpponentHead(t,s,n);let b=this.scratchB.set(this.mapping.x(e.velocity_x)*30,0,this.mapping.z(e.velocity_y)*30).add(this.touchVelocity).add(this.riseRootVelocity),x=b.length(),S=Math.hypot(b.x-this.riseRootVelocity.x,b.z-this.riseRootVelocity.z);this.lastSpeed=x,this.stillTime=x<.03?this.stillTime+n:0;let C=this.resting&&this.stillTime>.2&&this.downState===`up`;this.seated=fP(this.seated,+!!C,C?2.2:4,n);let w=this.resting&&this.stillTime>.05&&this.downState===`up`;w&&(this.stoolRoot.set(this.rootX,0,this.rootZ),this.stoolYaw=this.yaw),this.stool.group.visible=w||this.seated>YP&&this.downState===`up`,this.stool.group.position.set(this.stoolRoot.x-this.rootX,0,this.stoolRoot.z-this.rootZ).add(this.scratch.set(0,0,.02).applyAxisAngle(QF,this.stoolYaw)).applyAxisAngle(QF,-this.yaw),this.stool.group.rotation.y=this.stoolYaw-this.yaw,this.celebrateTime=Math.max(0,this.celebrateTime-n),this.celebration=fP(this.celebration,+(this.celebrateTime>0&&this.downState===`up`),3.5,n),this.waveTime=Math.max(0,this.waveTime-n),this.wave=fP(this.wave,+(this.waveTime>0&&this.downState===`up`),4,n),this.breakTime=Math.max(0,this.breakTime-n),this.breakWeight=fP(this.breakWeight,+(this.breakTime>0&&this.downState===`up`),6,n),this.attendWeight=fP(this.attendWeight,+!!this.attending,2.5,n),this.squareWeight=fP(this.squareWeight,this.verdictSide===0?0:1,3,n),this.raisedWeight=fP(this.raisedWeight,+(this.verdictSide!==0&&(this.verdict===`winner`||this.verdict===`level`)),3.2,n),this.bowedWeight=fP(this.bowedWeight,+(this.verdictSide!==0&&this.verdict===`loser`),2.2,n);for(let e of[0,1])this.wristWeights[e]=fP(this.wristWeights[e],this.wrists[e]===null?0:1,3.2,n);this.treatWeight=fP(this.treatWeight,+!!this.treating,3,n),this.windedTime=Math.max(0,this.windedTime-n);let T=this.fallKneel&&this.downState===`falling`;this.winded=fP(this.winded,this.windedTime>0&&this.downState===`up`||T?1:0,this.windedTime>0||T?12:4,n),this.enswell.group.visible=this.treatWeight>.4&&this.treatProp===`enswell`,this.bottle.group.visible=this.treatWeight>.4&&this.treatProp===`bottle`;let E=this.countdownTicks!==null&&this.countdownTicks<=eF&&this.countdownTicks>=tF;this.touchWeight=fP(this.touchWeight,+!!E,6,n);let D=e.stamina/Math.max(1,e.maximum_stamina);this.tired=fP(this.tired,mP((.55-D)/.5,0,1),2,n),this.stunAmount=fP(this.stunAmount,Math.min(1,e.stunned_ticks/24),8,n);let O=e.defense;this.guardHigh=fP(this.guardHigh,+(O===`guard_high`),14,n),this.guardLow=fP(this.guardLow,+(O===`guard_low`),14,n),this.guardSpent=fP(this.guardSpent,+(e.guard0||e.clinch_startup_ticks>0),10,n),this.foulWeight=fP(this.foulWeight,+!!e.is_foul_recovery_target,8,n),this.tauntWeight=fP(this.tauntWeight,+(e.taunt_ticks>0),10,n);let k=Math.hypot(this.mapping.x(t.x)-this.mapping.x(e.x),this.mapping.z(t.y)-this.mapping.z(e.y)),ne=this.referee||e.is_downed||t.is_downed?0:1-pj(yP,CP,k);this.crowding=fP(this.crowding,ne,9,n);let A=1/0;if(this.hasLiveHead&&!this.referee&&this.downState===`up`){let e=this.boxer.rig.bones.head.getWorldPosition(this.ownHead),t=e.x-this.liveOpponentHead.x,r=e.z-this.liveOpponentHead.z,i=Math.hypot(t,r);if(A=Math.hypot(t,e.y-this.liveOpponentHead.y,r),A1e-4){let e=(bP-A)/bP*SP*n,a=Math.cos(-this.yaw),o=Math.sin(-this.yaw);this.headSpace.x+=(t*a+r*o)/i*e,this.headSpace.y+=(-t*o+r*a)/i*e,this.headSpace.lengthSq()>1&&this.headSpace.normalize()}}A>xP&&this.headSpace.multiplyScalar(Math.exp(-3*n)),this.tauntEnd=qF(this.tauntEnd,o,e.taunt_ticks>0?e.taunt_ticks:null),gP(this.headKick,n,190,7.5,.24),gP(this.torsoKick,n,150,7,.7),gP(this.rootKick,n,120,8,.12),gP(this.coverKick,n,110,15,.3),this.foldDelay>0&&(this.foldDelay-=n,this.foldDelay<=0&&(this.torsoKick.velocity.x+=this.pendingFold,this.pendingFold=0)),this.guardKick=Math.max(0,this.guardKick-n*2.4),this.ragdoll?.tick(n),this.updateDownState(e,n,i,S);let re=(1.9-this.tired*.7)*(1-this.stunAmount*.6);this.bouncePhase+=n*re*Math.PI*2*u,this.weightPhase+=n*.55*Math.PI*2*u,this.stunPhase+=n*5.5,this.feintTimer-=n,this.feintTimer<=0&&!this.punchActive&&x<.05&&this.downState===`up`&&(this.feintTimer=2.5+this.bouncePhase%1.7,this.feint=1),this.feint=Math.max(0,this.feint-n*3.5);let ie=this.scratchC.set(this.rootX,0,this.rootZ);(this.downState===`up`||this.downState===`rising`)&&this.stepFeet(n,l,x,b,ie,this.yaw);let ae=this.scratchQ.setFromAxisAngle(QF,-this.yaw),oe=l>0?this.foot.L:this.foot.R,j=l>0?this.foot.R:this.foot.L,se=l>0?0:1,ce=+(l>0),le=this.footWorld(se,oe.position),ue=this.footWorld(ce,j.position);oe.position.sub(ie).applyQuaternion(ae),j.position.sub(ie).applyQuaternion(ae);let M=this.boxer.rig.metrics.ankleHeight;oe.position.y=M+le,j.position.y=M+ue,kj(Oj.leadToe,l,oe.toe),kj(Oj.rearToe,l,j.toe),oe.heel=0,j.heel=0,oe.pole.copy(oe.toe).setY(.35).normalize(),j.pole.copy(j.toe).setY(.35).normalize();let N=this.torso,de=Oj.bladeYaw*l,fe=Math.sin(this.bouncePhase)*.012*(1-this.stunAmount)*(x>.6?.6:1),pe=Math.sin(this.weightPhase)*.02,me=.012+this.tired*.03+this.stunAmount*.05;N.hips.set(pe*l+Math.sin(this.stunPhase*.9)*.05*this.stunAmount,Oj.hipsHeight-me+fe,0),N.hipsYaw=de,N.hipsPitch=.02+this.tired*.08,N.hipsRoll=Math.sin(this.stunPhase)*.09*this.stunAmount,N.shouldersYaw=de*.88,N.spinePitch=.16+this.tired*.16+Math.sin(r*(2.1+this.tired*1.8))*.012,N.spineRoll=Math.sin(this.stunPhase*1.3)*.06*this.stunAmount,N.headYaw=-.12*l+Math.sin(r*.9)*.05+Math.sin(this.stunPhase*.7)*.25*this.stunAmount,N.headPitch=.12+Math.sin(r*1.7)*.02+this.stunAmount*.18,N.headRoll=Math.sin(this.stunPhase*1.1)*.14*this.stunAmount,N.headOffset.set(0,0,0);let P=l>0?this.hand.L:this.hand.R,F=l>0?this.hand.R:this.hand.L,he=this.headRestChar(l),ge=mP(this.guardHigh+this.guardLow,0,1),_e=this.scratch.copy(Oj.relaxedLead).lerp(Oj.guardHighLead,this.guardHigh).lerp(Oj.guardLowLead,this.guardLow),ve=this.scratchB.copy(Oj.relaxedRear).lerp(Oj.guardHighRear,this.guardHigh).lerp(Oj.guardLowRear,this.guardLow);_e.y-=this.tired*.12+this.stunAmount*.22,ve.y-=this.tired*.1+this.stunAmount*.2,_e.y-=this.guardSpent*uF,ve.y-=this.guardSpent*uF,_e.z-=this.guardSpent*.04,ve.z-=this.guardSpent*.03,_e.z+=this.feint*.1+Math.sin(r*2.3)*.012*u,_e.x+=Math.sin(r*1.9)*.01*u,ve.y+=Math.cos(r*2.7)*.01*u,_e.z-=this.guardKick*.07,ve.z-=this.guardKick*.05,_e.y-=this.guardKick*.02,_e.add(he),ve.add(he),P.position.set(_e.x*l,_e.y,_e.z),F.position.set(ve.x*l,ve.y,ve.z),kj(Oj.leadKnuckles,l,P.knuckles),kj(Oj.leadPalm,l,P.palm),kj(Oj.rearKnuckles,l,F.knuckles),kj(Oj.rearPalm,l,F.palm),kj(Oj.leadPole,l,P.pole),kj(Oj.rearPole,l,F.pole);let ye=.15*ge,be=.25*ge;if(Math.abs(this.slip)>.001){let e=this.slip;N.headOffset.x+=e*.13,N.spineRoll+=-e*.28,N.hips.x+=e*.03,N.hips.y-=Math.abs(e)*.05,N.spinePitch+=Math.abs(e)*.12,N.headRoll+=-e*.2}if(this.weave>.001){let e=this.weave,t=mP(this.weaveTime/.42,0,1),n=Math.sin(t*Math.PI);N.hips.y-=e*.2,N.spinePitch+=e*.42,N.headOffset.x+=e*(1-2*t)*.16*l,N.headOffset.y-=e*n*.08,N.spineRoll+=e*(1-2*t)*.18*l,P.position.y-=e*.1,F.position.y-=e*.1}if(this.pull>.001){let e=this.pull;N.spinePitch-=e*.34,N.hips.z-=e*.11,N.hips.x-=e*.05*l,N.headOffset.z-=e*.06,N.headPitch-=e*.1}this.punchCommit=fP(this.punchCommit,+!!this.punchActive,10,n);let xe=this.crowding*(1-this.clinchWeight)*(1-this.punchCommit);if(xe>.001&&(N.headOffset.x-=xe*.075,N.headOffset.z-=xe*.05,N.headYaw-=xe*.2,N.spinePitch-=xe*.07,N.hips.z-=xe*.05,P.position.z-=xe*.14,P.position.x-=xe*.035*l,F.position.z-=xe*.07),Math.abs(this.headSpace.x)+Math.abs(this.headSpace.y)>.001){let e=this.headSpace.x,t=this.headSpace.y,n=1-this.clinchWeight;N.spinePitch+=t*.7*n,N.spineRoll-=e*.7*n,N.hips.z+=t*.1*n,N.hips.x+=e*.05*n,N.headOffset.x+=e*.05,N.headOffset.z+=t*.05,N.headPitch+=t*.2,N.headRoll-=e*.3}if(this.ropeLean=fP(this.ropeLean,this.referee||this.downState!==`up`?0:this.ropeLeanTarget,MP,n),this.ropeLean>.001){let e=this.ropeLocal.copy(this.ropeOutward).applyAxisAngle(QF,-this.yaw);N.hipsPitch+=e.z*AP*this.ropeLean,N.hipsRoll-=e.x*jP*this.ropeLean}N.headOffset.add(this.headKick.value),N.headPitch+=-this.headKick.value.z*2.4+this.headKick.value.y*1.6,N.headYaw+=this.headKick.value.x*2.2,N.headRoll+=-this.headKick.value.x*.9,N.spinePitch+=this.torsoKick.value.x,N.spineRoll+=this.torsoKick.value.z*.5,N.hips.x+=this.rootKick.value.x,N.hips.z+=this.rootKick.value.z,N.hips.y-=Math.max(0,this.torsoKick.value.x)*.08,this.torsoKick.value.x>.05&&(P.position.y-=this.torsoKick.value.x*.25,F.position.y-=this.torsoKick.value.x*.2,P.position.z-=this.torsoKick.value.x*.1);let I=Math.max(0,this.rootKick.value.y);N.hips.y+=I,oe.heel+=I*6,j.heel+=I*6;let Se=this.coverKick.value.x;if(Math.abs(Se)>.002){let e=Se>0?this.hand.R:this.hand.L;e.position.y-=Math.abs(Se)*.9,e.position.x+=Se*.2,e.position.z-=Math.abs(Se)*.25,e.pole.y-=Math.abs(Se)*3}if(this.punchActive){ye=0,be=0;let e=this.applyPunch(l,P,F,oe,j,he);this.punchHand===`left`==l>0?ye=e:be=e}if(this.referee&&this.applyRefereePose(l,P,F,oe,j,he,r,o),this.clinchWeight>.001&&this.applyClinchPose(this.clinchWeight,r,l,e,t,P,F,he),this.foulWeight>.001){let e=this.foulWeight;N.hips.y-=e*.16,N.spinePitch+=e*.55,N.headPitch+=e*.2,P.position.lerp(this.scratch.set(.06*l,.72,.16),e),F.position.lerp(this.scratch.set(-.05*l,.7,.14),e),P.pole.set(.6*l,-.6,.5),F.pole.set(-.6*l,-.6,.5)}if(this.tauntWeight>.001){let e=this.tauntEnd===null?0:mP(this.tauntEnd-o,0,cF);this.applyTauntPose(this.tauntWeight,(cF-e)/cF*lF,l,P,F,he)}if(this.dislocation===`shoulder_left`||this.dislocation===`shoulder_right`){let e=this.dislocation===`shoulder_left`?this.hand.L:this.hand.R,t=this.dislocation===`shoulder_left`?1:-1;e.position.set(.24*t,.55,.05),e.pole.set(.9*t,-.3,.2),e.knuckles.set(0,-1,.1),e.palm.set(-t,0,.2)}this.winded>.001&&(this.downState===`up`||T)&&this.applyWindedPose(this.winded,r,l,P,F),this.touchWeight>.001&&this.downState===`up`&&this.applyTouchGlovesPose(this.touchWeight,l,P,F),this.celebration>.001&&this.downState===`up`&&this.applyCelebratePose(this.celebration,r,l,P,F,oe,j),this.wave>.001&&this.downState===`up`&&this.applyWaveOffPose(this.wave,r,l,P,F),this.squareWeight>.001&&this.downState===`up`&&this.applyVerdictPose(this.squareWeight,r,l,P,F,oe,j,he),(this.wristWeights[0]>.001||this.wristWeights[1]>.001)&&this.downState===`up`&&this.applyRaisePose(l,P,F),this.breakWeight>.001&&this.downState===`up`&&this.applyBreakPose(this.breakWeight,l,P,F),this.attendWeight>.001&&this.downState===`up`&&this.applyAttendPose(this.attendWeight,r,l,P,F),this.treatWeight>.001&&this.downState===`up`&&this.applyTreatPose(this.treatWeight,r,l,P,F,oe,j),this.seated>.001&&this.downState===`up`&&this.applySeatedPose(this.seated,r,l,P,F,oe,j),this.downState!==`up`&&this.applyDownPose(l,P,F,oe,j),this.steadyJointPoles(l,P,F,oe,j,n),me=0;let Ce=this.pose;Ce.shrugL=l>0?ye:be,Ce.shrugR=l>0?be:ye;let we=this.ragdoll;if(we?.active===!0&&i&&(we.stop(),we.clearRise()),we?.active===!0&&!we.handingOver)we.setLost(c.isDecapitated,c.isHandDismembered(`left`),c.isHandDismembered(`right`)),we.update(n,this.obstacle);else{if(this.solver.apply(c.root,this.pose),we?.handingOver===!0)we.followPose(n,this.obstacle),this.riseProgress>=IP&&we.handOverSeconds>=GP&&(we.letGo(),this.riseBlendAge=0);else if(we!==null&&we.hasRisePose){let e=pj(0,WP,this.riseBlendAge);e<1&&this.downState!==`up`?we.blendRise(e):we.clearRise()}we?.sample(n)}this.applyDislocation();let L=Math.min(1,(t.trauma.bleeding+t.trauma.left_cut+t.trauma.right_cut)/620*(a===`off`?0:a===`reduced`?.3:1.5));c.setGloveBlood(L),c.setTrunksBlood(mD(e.trauma,a)),pD(c.headInjury,e.trauma,a),hD(c.bodyInjury,e.trauma,a),c.setSkinClearcoat(.25+(1-D)*.4)}applyTauntPose(e,t,n,r,i,a){let o=this.torso,s=.5-.5*Math.cos(t*Math.PI*2);i.position.lerp(this.scratch.set(-.3*n,a.y-.62,.02),e),i.pole.lerp(this.scratch.set(-.5*n,-.4,-.75),e).normalize(),i.knuckles.lerp(this.scratch.set(-.1*n,-.95,.3),e).normalize(),i.palm.lerp(this.scratch.set(0,.3,.95),e).normalize(),r.position.lerp(this.scratch.set(.26*n,a.y-.36+s*.1,.52-s*.24),e),r.pole.lerp(this.scratch.set(.7*n,-.7,.1),e).normalize(),r.knuckles.lerp(this.scratch.set(.1*n,.25+s*.6,.95-s*.7),e).normalize(),r.palm.lerp(this.scratch.set(-.2*n,.95,-.2-s*.5),e).normalize(),o.spinePitch-=e*.12,o.headPitch-=e*.22,o.headYaw+=Math.sin(t*Math.PI)*.15*e,o.shouldersYaw+=Math.sin(t*Math.PI*3)*.1*e,o.hips.x+=Math.sin(t*Math.PI)*.03*e*n,o.headOffset.z+=e*.03}applyClinchPose(e,t,n,r,i,a,o,s){let c=this.torso,l=r.player_idy&&(h.x*=y/v,h.z*=y/v),h.x+=o,h.z+=u,t.position.lerp(h,e),t.pole.lerp(this.clinchTemp.set(r*.85,l?.35:-.6,.25),e).normalize(),t.knuckles.lerp(this.clinchTemp.set(-p*r*.9+f.x*.3,l?-.25:.1,-m*r*.9+f.z*.3),e).normalize(),t.palm.lerp(this.clinchTemp.set(-f.x,l?.1:.35,-f.z),e).normalize()}}holdOnTheRopes(e,t,n){if(this.referee)return this.ropeLeanTarget=0,this.ropeHold.set(0,0,0);this.ropeLeanTarget=NP(t,n,this.ropeExcess,this.ropeOwn);let r=Math.hypot(this.ropeExcess.x,this.ropeExcess.z);r>0&&this.ropeOutward.set(this.ropeExcess.x/r,0,this.ropeExcess.z/r);let i=this.mapping.x(e.x),a=this.mapping.z(e.y);NP(i,a,this.ropeTheirs,this.ropeTheirs);let o=1-pj(EP,DP,Math.hypot(i-t,a-n));return this.ropeHold.set(PP(this.ropeOwn.x,this.ropeTheirs.x*o),0,PP(this.ropeOwn.z,this.ropeTheirs.z*o))}headRestChar(e){let t=this.boxer.rig.metrics;return this.headWorld.set(-.08,t.headHeight-t.hipsHeight+this.torso.hips.y,.02)}syncAction(e,t,n,r){this.shownFighter=e,this.shownOpponent=t;let i=this.ownQueued;if(i!==null&&e.action_id===i.action.id&&(this.ownQueued=null,this.retirePunch(),this.startOwnPunch(i,0)),e.action_id!==null&&e.action_id!==this.actionId&&e.action_id!==this.completedActionId&&!this.retiredOwnIds.includes(e.action_id)){let t=e.action;if(t!==null){let r=e.action_hand??(e.stance===`orthodox`?`left`:`right`),i=this.ownActionId===e.action_id&&this.punchActive,a=this.punchTiming;this.actionId=e.action_id,this.punchClass=t,this.punchHand=r,this.punchTarget=e.action_target??`head`,this.punchPower=e.action_power??`normal`,this.punchTiming={...A(this.punchClass,this.punchTarget,this.punchPower),startup:e.action_startup_ticks,active:e.action_active_ticks,recovery:e.action_recovery_ticks},this.punchTotalTicks=Math.max(1,e.action_startup_ticks+e.action_active_ticks+e.action_recovery_ticks);let o=Math.max(0,n-e.action_start_tick);i?(this.punchAgeTicks=lI(this.punchAgeTicks,a,this.punchTiming),this.ownAuthoritativeAge=o,this.ownRefused||(this.ownPulled=!1,o-this.punchAgeTicks>1&&(this.punchAgeTicks=o))):(this.punchAgeTicks=o,this.ownActionId=null,this.ownLeadTicks=0,this.ownAuthoritativeAge=null),this.ownWaitedTicks=0,this.punchActive=!0}}if(e.action_id===null)this.actionId=null,this.completedActionId=null;else if(e.action_id===this.actionId&&this.punchActive){let t=Math.max(0,n-e.action_start_tick);this.ownActionId===this.actionId?(this.ownAuthoritativeAge=t,!this.ownPulled&&t-this.punchAgeTicks>1.5&&(this.punchAgeTicks=t)):Math.abs(this.punchAgeTicks-t)>1.5&&(this.punchAgeTicks=t)}this.punchActive&&this.ownActionId!==null&&this.ownAuthoritativeAge===null&&!this.ownPulled&&(this.ownWaitedTicks+=r*30,this.ownWaitedTicks>this.ownExpectedTicks*1.5+eI&&this.punchAgeTicks=this.punchTotalTicks&&(this.retirePunch(),a=!0)),e.is_downed&&(this.punchActive&&this.retirePunch(),this.ownQueued=null),this.releaseQueuedPress(r,a);let o=this.actionId??this.ownActionId;o!==this.aimActionId&&(this.aimActionId=o,this.followHead=0),this.followHead=fP(this.followHead,+(o!==null&&o===this.contactId),sI,r)}trackOpponentHead(e,t,n){let r=this.guardOpponentHead.set(this.mapping.x(e.x),0,this.mapping.z(e.y));this.opponentSteadySeconds=aI.has(e.defense)?0:this.opponentSteadySeconds+n,(!this.hasLiveHead||this.opponentSteadySeconds>=oI)&&this.opponentHeadOffset.copy(t).sub(r),r.add(this.opponentHeadOffset),this.liveOpponentHead.copy(t),this.hasLiveHead=!0}ownPunchRate(){if(this.ownActionId===null)return 1;let e=this.punchTiming.startup,t=this.ownAuthoritativeAge;return t===null?this.punchAgeTicks0,h=m?t:n,g=m?n:t,_=m?1:-1,v=+(this.punchPower===`power`),y=+(this.punchTarget===`body`),b,x,S,C=1,w=1;if(u0){let t=this.scratchQ.setFromAxisAngle(QF,-j*e*T);r.toe.applyQuaternion(t),r.pole.applyQuaternion(t)}if(ae>.3){let t=this.scratchQ.setFromAxisAngle(QF,.45*e*T);i.toe.applyQuaternion(t),i.pole.applyQuaternion(t)}let F=this.scratchE;switch(this.punchClass){case`hook`:F.set(.22*_*e,-.06,-.12);break;case`uppercut`:F.set(.05*_*e,-.42,-.02);break;case`straight`:F.set(.02*_*e,-.03,-.09-.05*v);break;default:F.set(0,-.01,-.05-.04*v);break}let he=this.punchStart.copy(O).addScaledVector(F,Math.max(x,this.punchClass===`hook`||this.punchClass===`uppercut`?(1-E)*.6*C:0));if(this.punchClass===`hook`){let t=Math.hypot(he.x-N.x,he.z-N.z),n=Math.hypot(P.x-N.x,P.z-N.z),r=this.punchSweepFrom.copy(he).sub(N).setY(0).normalize(),i=this.punchSweepTo.copy(P).sub(N).setY(0).normalize(),a=Math.acos(mP(r.dot(i),-1,1)),o=r.z*i.x-r.x*i.z>=0?1:-1,s=pj(0,1,E),c=r.applyAxisAngle(QF,a*s*o).normalize();h.position.copy(N).addScaledVector(c,K.lerp(t,n,s)),h.position.y=K.lerp(he.y,P.y,s),h.pole.set(.95*_*e,.08,.3).normalize(),h.knuckles.copy(c).applyAxisAngle(QF,o*Math.PI/2).setY(.05).normalize(),h.palm.set(0,-1,0)}else if(this.punchClass===`uppercut`){let t=pj(0,1,E),n=he,r=this.punchMid.copy(P).lerp(n,.5);r.y=Math.min(n.y,P.y)-.04,r.z+=.08,h.position.copy(n).lerp(r,t*2>1?1:t*2),t>.5&&h.position.copy(r).lerp(P,(t-.5)*2),h.pole.set(.3*_*e,-.2,1),h.knuckles.set(.05*_*e,.9,.35).normalize(),h.palm.set(-.2*_*e,.3,-.95).normalize()}else{h.position.copy(he).lerp(P,Math.min(1,E)),h.position.y+=Math.sin(mP(E,0,1)*Math.PI)*.025,h.pole.set(.55*_*e,-.9,.35);let t=pj(.55,1,E);h.knuckles.copy(de).lerp(this.scratchC.set(.1*_*e,.55,.8),1-t).normalize(),h.palm.set(-.9*_*e,.2,-.3).lerp(this.scratchC.set(0,-1,.1),t).normalize()}if(D>0&&(h.position.lerp(O,D),h.knuckles.lerp(ee,D).normalize(),h.palm.lerp(te,D).normalize(),h.pole.lerp(k,D).normalize()),w<1){let t=(1-h.pole.dot(k)/Math.max(1e-6,h.pole.length()*k.length()))/2;h.knuckles.lerp(ee,1-w).normalize(),h.palm.lerp(te,1-w).normalize(),h.pole.lerp(k,1-w).addScaledVector(this.scratchC.set(_*e,0,0),cI*t*Math.sin(Math.PI*w)).normalize()}let ge=this.scratchE.set(-.1*_*e,s.y-.04,.12+s.z);return g.position.lerp(ge,T*.7),T}applyRefereePose(e,t,n,r,i,a,o,s){let c=this.torso;c.hipsYaw=0,c.shouldersYaw=0,c.hipsPitch=0,c.spinePitch=.06,c.headYaw=Math.sin(o*.7)*.08,c.headPitch=.08,c.hips.y=Oj.hipsHeight+.03,c.hips.x=0,c.hips.z=0,r.toe.set(.12*e,0,1).normalize(),i.toe.set(-.12*e,0,1).normalize(),r.pole.copy(r.toe).setY(.3).normalize(),i.pole.copy(i.toe).setY(.3).normalize();let l=Math.sin(o*1.3)*.01;if(t.position.set(.27*e,.86+l,.12),n.position.set(-.27*e,.86-l,.12),t.pole.set(.5*e,-.4,-.8).normalize(),n.pole.set(-.5*e,-.4,-.8).normalize(),t.knuckles.set(.15*e,-.9,.35).normalize(),n.knuckles.set(-.15*e,-.9,.35).normalize(),t.palm.set(-.9*e,.1,.35).normalize(),n.palm.set(.9*e,.1,.35).normalize(),this.refereeCounting){this.countChangedTick??=s;let r=mP((s-this.countChangedTick)/XP,0,1),i=r=FP&&(this.downState=`down`);else if(this.fallKneel)this.riseProgress=LP;else{let n=(!this.forcedDown&&!this.heldDown&&e.get_up_required>0?mP(e.get_up_meter/e.get_up_required,0,1):0)*LP;if(this.ragdoll?.active===!0&&!this.ragdoll.handingOver){if(n<=0)return;this.handOverFall(e)}this.riseProgress+=mP(n-this.riseProgress,-.4*t,BP*t)}return}if((this.downState===`down`||this.downState===`falling`)&&(this.downState=`rising`,this.ragdoll?.active===!0&&!this.ragdoll.handingOver&&this.handOverFall(e),this.fallKneel&&(this.riseProgress=Math.max(this.riseProgress,LP)),this.riseFrom=this.riseProgress,this.feetInitialized=!1),this.downState!==`rising`)return;let i=r>.3||this.punchActive,a=(1-this.riseFrom)/(i?zP:RP);this.riseProgress=Math.min(1,this.riseProgress+(this.riseProgress=1&&(this.downState=`up`,this.fallKneel=!1)}startFall(e){let t=this.ragdoll;t!==null&&(this.rootX!==null&&Math.hypot(this.place.x-this.rootX,this.place.z-this.rootZ)>KP&&(this.rootX=this.place.x,this.rootZ=this.place.z,this.boxer.root.position.set(this.rootX,0,this.rootZ)),t.start(`crumple`),e.get_up_count>0&&(t.settle(),this.fallAge=FP))}handOverFall(e){let t=this.ragdoll;if(t===null||!t.active||t.handingOver)return;let n=e.stance===`orthodox`?1:-1,r=this.boxer.rig.bones;this.boxer.root.updateMatrixWorld(!0);let i=this.scratchC.set(this.rootX??0,0,this.rootZ),a=this.scratchQ.setFromAxisAngle(QF,-this.yaw),o=this.fallen,s=(e,t)=>t.setFromMatrixPosition(e.matrixWorld).sub(i).applyQuaternion(a),c=(e,t,n,r)=>FF(bF.setFromQuaternion(e.getWorldQuaternion(yF).premultiply(a),`YXZ`),t,n,r);s(r.hips,o.hips),this.landProne=t.faceDown();let l=Math.abs(o.hips.x)>.12?Math.sign(o.hips.x):0,u=this.landProne?jF(this.downTo,DF,OF,n,l,this.boxer.rig.metrics.ankleHeight):jF(this.downTo,TF,EF,n,l,this.boxer.rig.metrics.ankleHeight);this.landSide=l,this.landShift.set(o.hips.x-u.hips.x,0,o.hips.z-u.hips.z);let d=c(r.hips,u.hipsPitch,u.hipsYaw,u.hipsRoll);o.hipsPitch=d.x,o.hipsYaw=d.y,o.hipsRoll=d.z;let f=c(r.upperChest,o.hipsPitch,o.hipsYaw,o.hipsRoll);o.shouldersYaw=f.y,o.spinePitch=f.x-o.hipsPitch,o.spineRoll=f.z-o.hipsRoll;let p=c(r.head,f.x,f.y,f.z);o.headPitch=p.x,o.turn=p.y,o.headRoll=p.z,s(n>0?r.gloveL:r.gloveR,o.leadHand),s(n>0?r.gloveR:r.gloveL,o.rearHand),s(n>0?r.ankleL:r.ankleR,o.leadFoot),s(n>0?r.ankleR:r.ankleL,o.rearFoot);let m=this.boxer.rig.metrics.ankleHeight;o.leadFoot.y=Math.max(o.leadFoot.y,m),o.rearFoot.y=Math.max(o.rearFoot.y,m);let h=(e,t,n,r,i)=>{let o=s(e,this.scratchB),c=s(n,this.scratchD).sub(o).normalize();s(t,r).sub(o),r.addScaledVector(fF.copy(i).applyQuaternion(e.getWorldQuaternion(yF)).applyQuaternion(a),vF),r.addScaledVector(c,-r.dot(c)),r.lengthSq()>1e-6?r.normalize():r.copy(i===hF?pF:mF)},g=n>0;h(g?r.hipL:r.hipR,g?r.kneeL:r.kneeR,g?r.ankleL:r.ankleR,o.leadKnee,hF),h(g?r.hipR:r.hipL,g?r.kneeR:r.kneeL,g?r.ankleR:r.ankleL,o.rearKnee,hF),h(g?r.shoulderL:r.shoulderR,g?r.elbowL:r.elbowR,g?r.gloveL:r.gloveR,o.leadElbow,g?gF:_F),h(g?r.shoulderR:r.shoulderL,g?r.elbowR:r.elbowL,g?r.gloveR:r.gloveL,o.rearElbow,g?_F:gF);let _=(e,t,n)=>{let r=e.getWorldQuaternion(yF).premultiply(a);t.set(0,1,0).applyQuaternion(r),n.set(0,0,1).applyQuaternion(r)};_(g?r.gloveL:r.gloveR,o.leadKnuckles,o.leadPalm),_(g?r.gloveR:r.gloveL,o.rearKnuckles,o.rearPalm),o.ownJoints=1,o.leadHeel=0,o.rearHeel=0,o.palmsDown=+!!this.landProne,this.fallenFromPhysics=!0,this.landSettled=!0,this.downPolesSet=!1,t.handOver(),this.riseBlendAge=0;let v=this.scratchE.set(t.pelvis(this.scratchD).x-(this.rootX??0),0,this.scratchD.z-this.rootZ),y=this.scratchB.copy(v).applyQuaternion(a);for(let e of[o.hips,o.leadHand,o.rearHand,o.leadFoot,o.rearFoot])e.x-=y.x,e.z-=y.z;t.shiftRise(this.scratchC.copy(v).negate()),this.rootX=(this.rootX??0)+v.x,this.rootZ+=v.z,this.boxer.root.position.set(this.rootX,0,this.rootZ),this.riseRoot.set(this.rootX-this.mapping.x(e.x)-this.touchOffset.x,0,this.rootZ-this.mapping.z(e.y)-this.touchOffset.z),this.riseRootFrom.copy(this.riseRoot)}walkBackFromTheFall(e){let t=this.downState===`rising`?1-pj(LP,1,this.riseProgress):this.downState===`up`?0:1,n=this.riseRootFrom.x*t,r=this.riseRootFrom.z*t;e>0?this.riseRootVelocity.set((n-this.riseRoot.x)/e,0,(r-this.riseRoot.z)/e):this.riseRootVelocity.set(0,0,0),this.riseRoot.set(n,0,r),t===0&&this.riseRootFrom.set(0,0,0)}steadyJointPoles(e,t,n,r,i,a){if(this.poleSettle=this.downState===`up`?Math.max(0,this.poleSettle-a):UP,this.poleSettle<=0||this.ragdoll?.active===!0&&!this.ragdoll.handingOver){this.downPolesSet=!1;return}let o=this.boxer.rig.bones,s=e>0;this.characterInverse.copy(this.boxer.root.matrixWorld).invert();for(let e=0;e<4;e+=1){let c=e<2,l=e%2==0,u=l===s,d=c?u?o.hipL:o.hipR:u?o.shoulderL:o.shoulderR,f=c?l?r:i:l?t:n,p=f.position,m=f.pole,h=this.downPoles[e];if(!this.downPolesSet){h.copy(m);continue}let g=this.scratchB.setFromMatrixPosition(d.matrixWorld).applyMatrix4(this.characterInverse).sub(p).negate();if(g.lengthSq()<1e-6){h.copy(m);continue}g.normalize();let _=this.scratchD.copy(h).addScaledVector(g,-h.dot(g)),v=this.scratchE.copy(m).addScaledVector(g,-m.dot(g));if(_.lengthSq()<1e-4||v.lengthSq()<1e-4){h.copy(m);continue}let y=Math.atan2(this.scratch.crossVectors(_,v).dot(g),_.dot(v)),b=HP*Math.max(a,1/120);if(Math.abs(y)<=b){h.copy(m);continue}m.copy(_.normalize().applyAxisAngle(g,Math.sign(y)*b)),h.copy(m)}this.downPolesSet=!0}applyWindedPose(e,t,n,r,i){let a=this.torso,o=K.lerp,s=this.windedSide,c=Math.sin(t*23)*.006;a.hips.y=o(a.hips.y,Oj.hipsHeight-.1,e),a.hips.z=o(a.hips.z,-.04,e),a.hipsPitch=o(a.hipsPitch,.2,e),a.spinePitch=o(a.spinePitch,.62+c,e),a.spineRoll=o(a.spineRoll,s*.16,e),a.headPitch=o(a.headPitch,.38,e);let l=s>0?this.hand.L:this.hand.R,u=l===r?i:r;l.position.lerp($.set(s*.13,.98,.17),e),l.palm.lerp($.set(-s*.6,0,-.8),e).normalize(),l.knuckles.lerp($.set(-s*.5,.5,.2),e).normalize(),l.pole.lerp($.set(s*.9,-.3,-.3),e).normalize(),u.position.lerp($.set(-s*.2,.86,.3),e),u.pole.lerp($.set(-s*.8,-.6,0),e).normalize()}applyTouchGlovesPose(e,t,n,r){let i=this.torso,a=K.lerp;i.hips.z=a(i.hips.z,.06,e),i.hipsYaw=a(i.hipsYaw,i.hipsYaw*.4,e),i.shouldersYaw=a(i.shouldersYaw,0,e),i.spinePitch=a(i.spinePitch,.12,e),i.headPitch=a(i.headPitch,.1,e),n.position.lerp($.set(.11*t,1.24,.5),e),r.position.lerp($.set(-.11*t,1.22,.47),e),n.palm.lerp($.set(-t,0,0),e).normalize(),r.palm.lerp($.set(t,0,0),e).normalize(),n.knuckles.lerp($.set(0,.15,1),e).normalize(),r.knuckles.lerp($.set(0,.15,1),e).normalize(),n.pole.lerp($.set(.7*t,-.7,0),e).normalize(),r.pole.lerp($.set(-.7*t,-.7,0),e).normalize()}touchWalk(e,t,n,r){this.countdownEnd=qF(this.countdownEnd,r,this.countdownTicks);let i=this.countdownEnd===null?0:JF(this.countdownEnd-r),a=this.mapping.x(t.x)-this.mapping.x(e.x),o=this.mapping.z(t.y)-this.mapping.z(e.y),s=Math.hypot(a,o),c=s>nF?(s-nF)/2/s*i:0;return this.touchVelocity.set(a*c-this.touchOffset.x,0,o*c-this.touchOffset.z).divideScalar(Math.max(n,.001)).clampLength(0,sF),this.touchOffset.set(a*c,0,o*c)}applyCelebratePose(e,t,n,r,i,a,o){let s=this.torso,c=K.lerp,l=Math.sin(t*6)*.04;s.hips.y=c(s.hips.y,Oj.hipsHeight+.035+l*.5,e),s.hipsYaw=c(s.hipsYaw,0,e),s.hipsPitch=c(s.hipsPitch,-.12,e),s.hipsRoll=c(s.hipsRoll,0,e),s.shouldersYaw=c(s.shouldersYaw,0,e),s.spinePitch=c(s.spinePitch,-.1,e),s.headPitch=c(s.headPitch,-.25,e),r.position.lerp($.set(.3*n,1.86+l,.08),e),i.position.lerp($.set(-.3*n,1.84+l,.06),e),r.palm.lerp($.set(0,0,1),e).normalize(),i.palm.lerp($.set(0,0,1),e).normalize(),r.knuckles.lerp($.set(.15*n,1,0),e).normalize(),i.knuckles.lerp($.set(-.15*n,1,0),e).normalize(),r.pole.lerp($.set(n,.1,-.3),e).normalize(),i.pole.lerp($.set(-n,.1,-.3),e).normalize(),a.heel=c(a.heel,.45,e),o.heel=c(o.heel,.45,e)}applyAttendPose(e,t,n,r,i){let a=this.torso,o=K.lerp,s=Math.sin(t*3.1)*.03;a.hips.z=o(a.hips.z,.12,e),a.hips.y=o(a.hips.y,Oj.hipsHeight-.04,e),a.hipsPitch=o(a.hipsPitch,.3,e),a.spinePitch=o(a.spinePitch,.42,e),a.headPitch=o(a.headPitch,.4,e),r.position.lerp($.set(.2*n,1.3+s,.62),e),i.position.lerp($.set(-.18*n,1.24-s,.58),e),r.palm.lerp($.set(0,-.6,.8),e).normalize(),i.palm.lerp($.set(0,-.6,.8),e).normalize(),r.knuckles.lerp($.set(.1*n,.5,1),e).normalize(),i.knuckles.lerp($.set(-.1*n,.5,1),e).normalize(),r.pole.lerp($.set(.8*n,-.5,-.1),e).normalize(),i.pole.lerp($.set(-.8*n,-.5,-.1),e).normalize()}applyTreatPose(e,t,n,r,i,a,o){let s=this.torso,c=K.lerp,l=this.treatScratch.set(this.rootX??0,0,this.rootZ),u=this.scratchQ.setFromAxisAngle(QF,-this.yaw),d=$.copy(this.treatTarget).sub(l).applyQuaternion(u),f=this.treatFacingLocal.copy(this.treatFacing).applyQuaternion(u),p=f.z,m=-f.x,h=Math.sin(t*2.6)*.006;s.hips.lerp(this.treatScratch.set(0,.62,.04),e),s.hipsYaw=c(s.hipsYaw,0,e),s.hipsPitch=c(s.hipsPitch,.22,e),s.hipsRoll=c(s.hipsRoll,0,e),s.shouldersYaw=c(s.shouldersYaw,0,e),s.spinePitch=c(s.spinePitch,.3,e),s.headPitch=c(s.headPitch,.2,e),a.position.x=c(a.position.x,.24*n,e),a.position.z=c(a.position.z,.14,e),o.position.x=c(o.position.x,-.2*n,e),o.position.z=c(o.position.z,-.2,e),o.heel=c(o.heel,.55,e),a.toe.lerp(this.treatScratch.set(.2*n,0,1),e).normalize(),o.toe.lerp(this.treatScratch.set(-.1*n,0,1),e).normalize(),a.pole.lerp(this.treatScratch.set(.25*n,.4,1),e).normalize(),o.pole.lerp(this.treatScratch.set(-.2*n,.4,1),e).normalize();let g=this.treatProp===`bottle`,_=g?.3:.08-h;r.position.lerp(this.treatScratch.set(d.x+f.x*_,d.y+(g?.02:-.07),d.z+f.z*_),e),g?r.knuckles.lerp(this.treatScratch.set(-f.x,-.25,-f.z),e).normalize():r.knuckles.lerp(this.treatScratch.set(0,1,.05),e).normalize(),r.palm.lerp(g?this.treatScratch.set(0,-1,0):this.treatScratch.set(-f.x,0,-f.z),e).normalize(),r.pole.lerp(this.treatScratch.set(.85*n,-.35,.1),e).normalize();let v=this.treatSide*.135;i.position.lerp(this.treatScratch.set(d.x-p*v+f.x*.05,d.y-.2,d.z-m*v+f.z*.05),e),i.knuckles.lerp(this.treatScratch.set(0,.9,.4),e).normalize(),i.palm.lerp(this.treatScratch.set(p*this.treatSide*.8-f.x*.6,.1,m*this.treatSide*.8-f.z*.6),e).normalize(),i.pole.lerp(this.treatScratch.set(-.85*n,-.4,.1),e).normalize()}applyBreakPose(e,t,n,r){let i=this.torso,a=K.lerp;i.hipsPitch=a(i.hipsPitch,.14,e),i.spinePitch=a(i.spinePitch,.08,e);let o=this.scratchC.set(.48*t,1.22,.52),s=this.scratchD.set(-.48*t,1.22,.52);if(this.breakAimed){let[e,n]=this.breakFighters,r=this.scratch.subVectors(n,e).setY(0).normalize(),i=this.scratchQ.setFromAxisAngle(QF,-this.yaw),a=this.scratchB.set(this.rootX??0,0,this.rootZ);o.copy(e).addScaledVector(r,QP).sub(a).applyQuaternion(i),s.copy(n).addScaledVector(r,-QP).sub(a).applyQuaternion(i),o.x*tFP*.15;let s=this.downResult;if(this.downState!==`falling`){let a=this.riseProgress,c=0;if(this.fallKneel)c=pj(LP,1,a),GF(s,this.placeKneel(this.downFrom,e),o,c);else if(a0==t>0;return e.hips.set(.02*t,.53,-.06),e.hipsYaw=Oj.bladeYaw*t*.3,e.hipsPitch=.24,e.hipsRoll=0,e.shouldersYaw=Oj.bladeYaw*t*.2,e.spinePitch=.62,e.headPitch=.48,(r?e.leadHand:e.rearHand).set(n*.13,.66,.2),(r?e.rearHand:e.leadHand).set(.13*t,.66,.37),e.leadFoot.set(.16*t,.125,.32),e.rearFoot.set(-.12*t,.12,-.5),e.leadHeel=0,e.rearHeel=0,e.palmsDown=1,e}placeLying(e){let t=this.boxer.rig.metrics.ankleHeight;return IF(this.landProne?jF(this.downFrom,DF,OF,e,this.landSide,t):jF(this.downFrom,TF,EF,e,this.landSide,t),this.landShift)}placeDown(e,t,n){return jF(e,t,null,n,0,this.boxer.rig.metrics.ankleHeight)}chooseLanding(e){let t=this.boxer.rig.metrics.ankleHeight,n=1/0;for(let r=0;r=n||(n=u.length()+o,this.landProne=s,this.landSide=c,this.landShift.copy(u))}}ropeShift(e,t){let n=this.scratchQ.setFromAxisAngle(QF,this.yaw);bF.set(e.hipsPitch+e.spinePitch*.7,e.hipsYaw,e.hipsRoll,`YXZ`),BF[0].set(0,RF,0).applyEuler(bF).add(e.hips),BF[1].set(.2,zF,0).applyEuler(bF).add(e.hips),BF[2].set(-.2,zF,0).applyEuler(bF).add(e.hips),BF[3].copy(e.leadHand),BF[4].copy(e.rearHand),BF[5].copy(e.leadFoot).z+=e.leadHeel>0?.25:.19,BF[6].copy(e.rearFoot).z+=e.rearHeel>0?.25:.19,BF[7].copy(e.hips);let r=1/0,i=-1/0,a=1/0,o=-1/0;for(let e=0;e0==t>0,c=s?n:r,l=s?r:n;i.pole.lerp($.set(.15*t,.35,1),e).normalize(),a.pole.lerp($.set(-.1*t,-1,.3),e).normalize(),i.toe.lerp($.set(.15*t,0,1),e).normalize(),a.toe.lerp($.set(0,-.35,-1),e).normalize(),c.palm.lerp($.set(-o*.75,0,-.65),e).normalize(),c.knuckles.lerp($.set(-o*.35,.25,.9),e).normalize(),c.pole.lerp($.set(o*.9,-.35,-.25),e).normalize(),l.palm.lerp($.set(0,-1,.1),e).normalize(),l.knuckles.lerp($.set(.2*t,-.2,1),e).normalize(),l.pole.lerp($.set(t*.7,.1,-.7),e).normalize()}writeDown(e,t,n,r,i,a,o,s){let c=this.torso,l=1-s;this.downStand=s,c.hips.copy(e.hips),c.hipsYaw=e.hipsYaw,c.hipsPitch=e.hipsPitch,c.hipsRoll=e.hipsRoll,c.shouldersYaw=e.shouldersYaw,c.spinePitch=e.spinePitch,c.spineRoll=c.spineRoll*s+e.spineRoll,c.headPitch=e.headPitch,c.headYaw=c.headYaw*s+e.turn,c.headRoll=c.headRoll*s+e.headRoll,c.headOffset.multiplyScalar(s),c.headOffset.z-=o,n.position.copy(e.leadHand),r.position.copy(e.rearHand),CF(n,t,e.palmsDown,l),CF(r,-t,e.palmsDown,l),i.position.copy(e.leadFoot),a.position.copy(e.rearFoot),i.toe.lerp(fF.set(.2*t,0,1).normalize(),l).normalize(),a.toe.lerp(fF.set(-.2*t,0,1).normalize(),l).normalize(),i.heel=e.leadHeel,a.heel=e.rearHeel;let u=fF.set(0,0,1).applyEuler(bF.set(e.hipsPitch,e.hipsYaw,e.hipsRoll,`YXZ`));if(i.pole.lerp(u,l),a.pole.lerp(u,l),e.ownJoints>0){let t=e.ownJoints*l;PF(i.pole,e.leadKnee,t),PF(a.pole,e.rearKnee,t),PF(n.pole,e.leadElbow,t),PF(r.pole,e.rearElbow,t),PF(n.knuckles,e.leadKnuckles,t),PF(n.palm,e.leadPalm,t),PF(r.knuckles,e.rearKnuckles,t),PF(r.palm,e.rearPalm,t)}}applyDislocation(){if(this.dislocation!==`jaw`)return;let e=this.boxer.bone(`head`);e!==null&&(e.quaternion.multiply(dF),e.updateWorldMatrix(!1,!0))}dispose(){this.stool.dispose(),this.enswell.dispose(),this.bottle.dispose(),this.boxer.dispose()}},JP=.44,YP=.2,XP=30,ZP=.75,QP=.26,$P=1.2,eF=48,tF=14,nF=1.34,rF=80,iF=56,aF=24,oF=4,sF=1.5,cF=60,lF=4,uF=.15,$=new J,dF=new cm().setFromEuler(new Hm(.08,.2,-.22)),fF=new J,pF=new J(0,0,1),mF=new J(0,-1,0),hF=new J(0,0,1),gF=new J(1,0,0),_F=new J(-1,0,0),vF=.04,yF=new cm,bF=new Hm,xF={pole:fj(.4,.9,.2),knuckles:fj(.6,.2,-.75).normalize(),palm:fj(0,1,.2).normalize()},SF={pole:fj(.6,.2,-.7),knuckles:fj(.25,-.1,1).normalize(),palm:fj(0,-1,.1).normalize()};function CF(e,t,n,r){fF.lerpVectors(xF.pole,SF.pole,n),fF.x*=t,e.pole.lerp(fF,r),fF.lerpVectors(xF.knuckles,SF.knuckles,n),fF.x*=t,e.knuckles.lerp(fF.normalize(),r).normalize(),fF.lerpVectors(xF.palm,SF.palm,n),fF.x*=t,e.palm.lerp(fF.normalize(),r).normalize()}function wF(e={}){return{hips:new J,hipsYaw:0,hipsPitch:0,hipsRoll:0,shouldersYaw:0,spinePitch:0,spineRoll:0,headPitch:0,headRoll:0,leadHand:new J,rearHand:new J,leadFoot:new J,rearFoot:new J,leadHeel:0,rearHeel:0,palmsDown:0,turn:0,leadKnee:new J(0,0,1),rearKnee:new J(0,0,1),leadElbow:new J(0,-1,0),rearElbow:new J(0,-1,0),leadKnuckles:new J(0,0,1),leadPalm:new J(0,-1,0),rearKnuckles:new J(0,0,1),rearPalm:new J(0,-1,0),ownJoints:0,...e}}var TF=wF({hips:fj(0,.14,-.4),hipsPitch:-1.42,spinePitch:.1,headPitch:-.5,leadHand:fj(.52,.1,-.62),rearHand:fj(-.5,.1,-.7),leadFoot:fj(.17,0,.16),rearFoot:fj(-.16,0,-.02)}),EF=wF({hips:fj(.22,0,0),hipsYaw:-.35,hipsRoll:-.25,shouldersYaw:-.2,leadFoot:fj(.05,0,0),rearFoot:fj(.05,0,0)}),DF=wF({hips:fj(0,.25,.32),hipsPitch:1.5,spinePitch:.05,headPitch:.2,palmsDown:1,leadHand:fj(.34,.12,.78),rearHand:fj(-.3,.12,.62),leadFoot:fj(.16,0,-.82),rearFoot:fj(-.15,0,-.86),leadHeel:1.3,rearHeel:1.3}),OF=wF({hips:fj(.12,0,0),hipsYaw:.3,hipsRoll:.15,shouldersYaw:.15,leadFoot:fj(.04,0,0),rearFoot:fj(.04,0,0)}),kF=wF({hips:fj(.05,.52,-.2),hipsYaw:Oj.bladeYaw*.15,hipsPitch:1.38,shouldersYaw:Oj.bladeYaw*.15,spinePitch:.35,headPitch:1,palmsDown:1,leadHand:fj(.2,.115,.36),rearHand:fj(-.2,.115,.32),leadFoot:fj(.15,0,-.74),rearFoot:fj(-.14,0,-.78),leadHeel:1.25,rearHeel:1.25}),AF=wF({hips:fj(0,.47,-.05),hipsYaw:Oj.bladeYaw*.12,hipsPitch:.2,shouldersYaw:Oj.bladeYaw*.4,spinePitch:.3,headPitch:.2,palmsDown:1,leadHand:fj(.15,.68,.32),rearHand:fj(-.26,.42,.02),leadFoot:fj(.15,0,.36),rearFoot:fj(-.13,0,-.7),rearHeel:1.2});function jF(e,t,n,r,i,a){return e.hips.set(t.hips.x*r,t.hips.y,t.hips.z),e.hipsYaw=t.hipsYaw*r,e.hipsPitch=t.hipsPitch,e.hipsRoll=t.hipsRoll*r,e.shouldersYaw=t.shouldersYaw*r,e.spinePitch=t.spinePitch,e.spineRoll=0,e.headPitch=t.headPitch,e.headRoll=0,kj(t.leadHand,r,e.leadHand),kj(t.rearHand,r,e.rearHand),kj(t.leadFoot,r,e.leadFoot).y+=a,kj(t.rearFoot,r,e.rearFoot).y+=a,e.leadHeel=t.leadHeel,e.rearHeel=t.rearHeel,e.palmsDown=t.palmsDown,e.turn=0,e.ownJoints=0,n===null||i===0?e:(e.hips.addScaledVector(n.hips,i),e.hipsYaw+=n.hipsYaw*i,e.hipsPitch+=n.hipsPitch*i,e.hipsRoll+=n.hipsRoll*i,e.shouldersYaw+=n.shouldersYaw*i,e.spinePitch+=n.spinePitch*i,e.headPitch+=n.headPitch*i,e.leadHand.addScaledVector(n.leadHand,i),e.rearHand.addScaledVector(n.rearHand,i),e.leadFoot.addScaledVector(n.leadFoot,i),e.rearFoot.addScaledVector(n.rearFoot,i),e)}var MF=e=>Math.atan2(Math.sin(e),Math.cos(e)),NF=new J;function PF(e,t,n){if(n<=0)return e;e.normalize();let r=e.angleTo(t);return r<1e-4?e:(NF.crossVectors(e,t),NF.lengthSq()<1e-8&&NF.crossVectors(e,Math.abs(e.y)<.9?QF:pF),e.applyAxisAngle(NF.normalize(),r*Math.min(1,n)))}function FF(e,t,n,r){let i=t+MF(e.x-t),a=n+MF(e.y-n),o=r+MF(e.z-r),s=t+MF(Math.PI-e.x-t),c=n+MF(e.y+Math.PI-n),l=r+MF(e.z+Math.PI-r);return Math.abs(i-t)+Math.abs(a-n)+Math.abs(o-r)<=Math.abs(s-t)+Math.abs(c-n)+Math.abs(l-r)?e.set(i,a,o,`YXZ`):e.set(s,c,l,`YXZ`)}function IF(e,t){return e.hips.add(t),e.leadHand.add(t),e.rearHand.add(t),e.leadFoot.add(t),e.rearFoot.add(t),e}var LF=Cw*.72-.05,RF=.78,zF=.5,BF=Array.from({length:8},()=>new J),VF=[.17,.22,.22,.13,.13,.12,.12,.2],HF=[[!1,1,0],[!1,0,.15],[!1,-1,.3],[!0,1,.4],[!0,0,.5],[!0,-1,.6]];function UF(e,t){return e<-LF&&t>LF?-(e+t)/2:e<-LF?-LF-e:t>LF?LF-t:0}function WF(e,t){return GF(e,t,t,0)}function GF(e,t,n,r){let i=K.lerp;return e.hips.copy(t.hips).lerp(n.hips,r),e.hipsYaw=i(t.hipsYaw,n.hipsYaw,r),e.hipsPitch=i(t.hipsPitch,n.hipsPitch,r),e.hipsRoll=i(t.hipsRoll,n.hipsRoll,r),e.shouldersYaw=i(t.shouldersYaw,n.shouldersYaw,r),e.spinePitch=i(t.spinePitch,n.spinePitch,r),e.spineRoll=i(t.spineRoll,n.spineRoll,r),e.headPitch=i(t.headPitch,n.headPitch,r),e.headRoll=i(t.headRoll,n.headRoll,r),e.leadHand.copy(t.leadHand).lerp(n.leadHand,r),e.rearHand.copy(t.rearHand).lerp(n.rearHand,r),e.leadFoot.copy(t.leadFoot).lerp(n.leadFoot,r),e.rearFoot.copy(t.rearFoot).lerp(n.rearFoot,r),e.leadHeel=i(t.leadHeel,n.leadHeel,r),e.rearHeel=i(t.rearHeel,n.rearHeel,r),e.palmsDown=i(t.palmsDown,n.palmsDown,r),e.turn=i(t.turn,n.turn,r),PF(e.leadKnee.copy(t.leadKnee),n.leadKnee,r),PF(e.rearKnee.copy(t.rearKnee),n.rearKnee,r),PF(e.leadElbow.copy(t.leadElbow),n.leadElbow,r),PF(e.rearElbow.copy(t.rearElbow),n.rearElbow,r),PF(e.leadKnuckles.copy(t.leadKnuckles),n.leadKnuckles,r),PF(e.leadPalm.copy(t.leadPalm),n.leadPalm,r),PF(e.rearKnuckles.copy(t.rearKnuckles),n.rearKnuckles,r),PF(e.rearPalm.copy(t.rearPalm),n.rearPalm,r),e.ownJoints=i(t.ownJoints,n.ownJoints,r),e}var KF=3;function qF(e,t,n){if(n===null)return null;let r=t+n;return e===null||Math.abs(r-e)>KF?r:e}function JF(e){return(1-pj(iF,rF,e))*pj(oF,aF,e)}function YF(){let e=new oh;e.name=`enswell`,e.visible=!1;let t=new H_(3.2,3.2,.9,20),n=new H_(.8,.8,6,10),r=new Pv({color:13159634,roughness:.3,metalness:.9}),i=new Ig(t,r);i.rotation.x=Math.PI/2,i.position.set(0,9.5,3.4),e.add(i);let a=new Ig(n,r);return a.position.set(0,5.5,2.4),e.add(a),{group:e,dispose:()=>{t.dispose(),n.dispose(),r.dispose()}}}function XF(){let e=new oh;e.name=`bottle`,e.visible=!1;let t=new H_(3.3,3.3,15,18),n=new H_(1.3,3.3,3,18),r=new H_(.7,1.1,3.2,10),i=new Pv({color:14280430,roughness:.32,metalness:0}),a=new Pv({color:1920728,roughness:.5,metalness:0}),o=new Ig(t,i);o.position.set(0,9,2.6);let s=new Ig(n,i);s.position.set(0,18,2.6);let c=new Ig(r,a);return c.position.set(0,21,2.6),e.add(o,s,c),{group:e,dispose:()=>{t.dispose(),n.dispose(),r.dispose(),i.dispose(),a.dispose()}}}function ZF(){let e=new oh;e.name=`stool`,e.visible=!1;let t=new H_(.17,.17,.035,18),n=new H_(.012,.014,JP-.02,8),r=new Pv({color:13222581,roughness:.85}),i=new Pv({color:2764083,roughness:.45,metalness:.6}),a=new Ig(t,r);a.position.y=JP-.0175,a.castShadow=!0,e.add(a);for(let t=0;t<4;t+=1){let r=Math.PI/4+t*Math.PI/2,a=new Ig(n,i);a.position.set(Math.cos(r)*.13,(JP-.02)/2,Math.sin(r)*.13),a.rotation.set(-Math.sin(r)*.12,0,Math.cos(r)*.12),a.castShadow=!0,e.add(a)}return{group:e,dispose:()=>{t.dispose(),n.dispose(),r.dispose(),i.dispose()}}}var QF=new J(0,1,0),$F=6,eI=5,tI=1.5,nI=.5,rI=.5,iI=new Set([`hit`,`counter_hit`,`block`,`perfect_block`]),aI=new Set([`slip_left`,`slip_right`,`weave`,`pull`]),oI=.25,sI=30,cI=2;function lI(e,t,n){if(e0)||e>1e3||(this.elapsed+=e,this.frames+=1,this.elapsede.before*.9)return this.scale=e.previous,this.holdWindows=Math.min(mI,fI*2**this.fruitlessAttempts),this.fruitlessAttempts+=1,!0;this.fruitlessAttempts=0}if(this.raised!==null){let e=this.raised;if(t>this.options.slowMs)return this.raised=null,this.scale=e.previous,this.fastWindows=0,this.raiseHoldWindows=Math.min(mI,pI*2**this.failedRaises),this.failedRaises+=1,!0;e.windows+=1,e.windows>=gI&&(this.raised=null,this.failedRaises=0)}if(t>this.options.slowMs){if(this.fastWindows=0,this.holdWindows>0)return--this.holdWindows,!1;if(this.scale<=this.options.minimum)return!1;let e=this.scale;return this.scale=Math.max(this.options.minimum,this.scale-this.options.step),this.pending={before:t,previous:e},!0}return t0?(--this.raiseHoldWindows,!1):this.fastWindows>=hI&&this.scalethis.value?7:.9;return this.value+=(e-this.value)*(1-Math.exp(-n*Math.max(0,t))),e===0&&this.value<.003&&(this.value=0),this.value}},SI=.4,CI=.5;function wI(e,t,n=30,r=SI){let i=t.tick-42,a=t.tick+33,o=e.filter(e=>e.tick>=i-1&&e.tick<=a+1),s=o.at(-1),c=s!==void 0&&s.result!==null&&s.tick({...s,tick:s.tick+t+1,events:[]}))]:o,l=c[0],u=c.at(-1);if(l===void 0||u===void 0||c.length<8||l.tick>t.tick-12||u.tickOI?Math.min(1,(i-OI)/4):0;this.strength+=(a-this.strength)*Math.min(1,t*18);let o=this.history.length>=EI?this.history.shift():new J;if(o.copy(e),this.history.push(o),this.strength<.02||this.history.length<3){this.mesh.visible=!1;return}let s=this.history.length;for(let e=0;e3*t}function NI(e,t,n){let r=e.detail.endsWith(`:head`)||e.detail.endsWith(`:body`);return t===void 0||![`hit`,`counter_hit`].includes(e.kind)||!r||n===null||n.winner_id===null||n.winner_id!==e.actor_id?!1:n.finish_method===`flash_ko`||(n.finish_method===`ko`||n.finish_method===`tko`)&&t.is_downed}function PI(e){for(let t of e.passes)t.dispose?.();e.dispose()}function FI(e,t,n,r,i){e.setRenderTarget(t.readBuffer);let a=e.compileAsync(n,r,i);return e.setRenderTarget(null),a}var II=-4e-4,LI=10;function RI(e,t,n){e.autoUpdate=!t,e.intensity=+!t,e.bias=t?LI:II,(t&&e.map!==null||e.mapSize.x!==n)&&(e.mapSize.set(n,n),e.map?.dispose(),e.map=null)}function zI(e,t){let n=t.fighters.findIndex(t=>t.player_id===e.target_id),r=t.fighters.findIndex(t=>t.player_id===e.actor_id),i=e.kind===`block`||e.kind===`perfect_block`;return{recipientIndex:i?r:n,puncherIndex:i?n:r}}function BI(e,t,n){if(e===void 0||t===void 0)return;let r=n.x(t.x)-n.x(e.x),i=n.z(t.y)-n.z(e.y),a=Math.hypot(r,i);return Number.isFinite(a)&&a>.001?{x:r/a,z:i/a}:void 0}var VI=e=>e.kind===`hit`||e.kind===`counter_hit`,HI=e=>e.kind===`block`||e.kind===`perfect_block`,UI=480,WI=.56,GI=1.8,KI=1.7,qI=1.2,JI=1.6,YI=30,XI=6.5,ZI=.4,QI=600,$I=2.8,eL=.6,tL=[[1,0],[-1,0],[.75,-.66],[-.75,-.66],[.75,.66],[-.75,.66]],nL=.15,rL=.6,iL=2.3,aL=.5,oL=3.42,sL=2.2,cL=.9,lL=`body`,uL=.55,dL=.5,fL=.5,pL=.28,mL=104,hL=260,gL=.05,_L=2.95,vL=2.4,yL=1.6,bL=.98,xL={uniforms:{tDiffuse:{value:null},uTime:{value:0},uVignette:{value:.32},uGrain:{value:.035},uRocked:{value:0}},vertexShader:` +}`;function lF(e){let t=e.onBeforeCompile,n=Object.hasOwn(e,`customProgramCacheKey`)?e.customProgramCacheKey():`plain`;e.onBeforeCompile=(n,r)=>{t.call(e,n,r),n.vertexShader=n.vertexShader.replace(`#include `,`${cF}\n#include `)},e.customProgramCacheKey=()=>`${n}-on-canvas`,e.needsUpdate=!0}function uF(e,t){let n=t.outfit!==void 0,r=!n||t.wounds===!0,i=[],a=[],o=new Map,s=null,c={value:0},l=null,u=null;if(e.traverse(e=>{if(!(e instanceof p_)||Array.isArray(e.material))return;let d=e.material.name,f=JP[d];if(f===void 0)throw Error(`fighter GLB has unsupported material ${d}`);let p=o.get(d);if(p===void 0){let e=d===`MHeadMat0`||d===`MBodyMat0`,m=t.outfit,h=d===`GlovesMat0`?t.gear:d===`PantsMat0`?m?.trousers??t.gear:d===`ShoesMat0`&&m!==void 0?m.shoes:16777215,g=sF(f);p=e&&!n?new ey({map:g,color:h,roughness:.58,metalness:.02,clearcoat:.25,clearcoatRoughness:.6}):new $v({map:g,color:h,roughness:e?.58:.4,metalness:e?.02:.03}),p.name=d,o.set(d,p),a.push(p),e&&i.push(p),d===`MHeadMat0`&&(l=new AD(r?p:null,pD,{core:xD,lids:CD})),d===`MBodyMat0`&&(u=new AD(r?p:null,mD,{core:SD,wash:!0}));let _=dF[d];m!==void 0&&_!==void 0?zj(p,_,m):d===`PantsMat0`?c=RE(p,!1,`trunks`):d===`GlovesMat0`&&(s=RE(p)),lF(p)}e.material=p,e.castShadow=!n,e.receiveShadow=!0,e.frustumCulled=!1}),i.length!==2||s===null||a.length!==5||l===null||u===null)throw Error(`fighter GLB material contract failed: ${i.length} skin, ${a.length} total`);return{skin:i,gloveBlood:s,trunksBlood:c,owned:a,headInjury:l,bodyInjury:u}}var dF={MHeadMat0:`head`,MBodyMat0:`body`,ShoesMat0:`shoes`,PantsMat0:`pants`},fF=new Y().setRGB(.6,.32,.19,Fp),pF=(e,t,n,r)=>e+(t-e)*(1-Math.exp(-n*r)),mF=(e,t,n,r)=>e+(((t-e+Math.PI)%(Math.PI*2)+Math.PI*2)%(Math.PI*2)-Math.PI)*(1-Math.exp(-n*r)),hF=K.clamp,gF=class{root=new Th;bones=new Map;rig;metrics;skinMaterials;ownedMaterials;gloveBlood;trunksBlood;headMeshes=[];handMeshes={left:[],right:[]};decapitated=!1;burst=!1;dismemberedHands={left:!1,right:!1};dressed;ownedGeometries=[];gearBaseColor;skinBaseColor;headInjury;bodyInjury;headLook;bareHand;constructor(e,t){let n=mA(e.scene);n.scale.setScalar(1),this.root.add(n);let r=uF(n,t);this.skinMaterials=r.skin,this.ownedMaterials=[...r.owned],this.gloveBlood=r.gloveBlood,this.trunksBlood=r.trunksBlood,this.headInjury=r.headInjury,this.bodyInjury=r.bodyInjury,this.gearBaseColor=new Y(t.gear),this.skinBaseColor=new Y(t.skin),this.dressed=t.outfit!==void 0,n.traverse(e=>{e instanceof p_&&e.name===`BoxerHead`&&this.headMeshes.push(e),e instanceof p_&&e.name===`BoxerGloveLeft`&&this.handMeshes.left.push(e),e instanceof p_&&e.name===`BoxerGloveRight`&&this.handMeshes.right.push(e),e instanceof m_&&this.bones.set(e.name,e)});let i=Object.values(_j).filter(e=>!this.bones.has(e));if(i.length>0)throw Error(`fighter GLB missing required bones: ${i.join(`, `)}`);if(this.headMeshes.length!==1)throw Error(`fighter GLB requires one BoxerHead mesh, found ${this.headMeshes.length}`);let a=this.headInjury.shadowMaterial();this.headMeshes[0].customDepthMaterial=a;let o=this.headMeshes[0].material;o.side=0,o.shadowSide=1,this.ownedMaterials.push(a);for(let e of[`left`,`right`])if(this.handMeshes[e].length!==1)throw Error(`fighter GLB requires one ${e} glove mesh, found ${this.handMeshes[e].length}`);this.root.updateMatrixWorld(!0),this.rig=new uM(this.root),this.headLook=new fO(this.headMeshes[0].material),this.bareHand=t.outfit===void 0?null:this.addHands(t.outfit),this.setLook(t.look??XD);let s=this.rig.metrics;this.metrics={armUpper:s.armL.upper,armFore:s.armL.lower,legThigh:s.legL.upper,legShin:s.legL.lower,headRestY:s.headHeight,chestRestY:s.chestHeight,ankleRestY:s.ankleHeight}}bone(e){return this.bones.get(_j[e]??e)??null}setGloveBlood(e){this.gloveBlood.value=hF(e,0,1)}get gloveBloodLevel(){return this.gloveBlood.value}setTrunksBlood(e){this.trunksBlood.value=hF(e,0,1)}get trunksBloodLevel(){return this.trunksBlood.value}get headMesh(){return this.headMeshes[0]}gloveMesh(e){return this.handMeshes[e][0]}get skin(){return this.skinMaterials[0]}get isDecapitated(){return this.decapitated}setDecapitated(e){this.decapitated=e,this.burst=!1,this.headInjury.setSevered(e),this.bone(`head`).visible=!e}get isHeadBurst(){return this.burst}setHeadBurst(e){this.burst=e,this.decapitated=!1,this.headInjury.setBurst(e),this.bone(`head`).visible=!e}isHandDismembered(e){return this.dismemberedHands[e]}setHandDismembered(e,t){this.dismemberedHands[e]=t;for(let n of this.handMeshes[e])n.visible=!t&&!this.dressed}setLook(e){this.headLook.set(e);for(let t of this.skinMaterials)t.color.setHex(e.tint);this.bareHand?.color.copy(fF).multiply(this.skinMaterials[0].color)}get look(){return this.headLook.look}addHands(e){let t=e.gloves!==null,n=new $v({color:t?e.gloves:fF,roughness:t?.38:.6,metalness:.02}),r=t?n:new $v({color:new Y(e.shirt).multiplyScalar(.9),roughness:.88,metalness:0});this.ownedMaterials.push(n),r!==n&&this.ownedMaterials.push(r);let i=Uj();this.ownedGeometries.push(i);for(let e of[`left`,`right`]){for(let t of this.handMeshes[e])t.visible=!1;let t=Hj(e);this.ownedGeometries.push(t);let a=e===`left`?`L`:`R`;for(let[o,s,c,l]of[[this.rig.bones[`glove${a}`],t,n,`hand-${e}`],[this.rig.bones[`elbow${a}`],i,r,`cuff-${e}`]]){let e=new t_(s,c);e.name=l,e.castShadow=!1,e.receiveShadow=!0,o.add(e)}}return t?null:n}setSkinClearcoat(e){for(let t of this.skinMaterials)t instanceof ey&&(t.clearcoat=e)}dispose(){for(let e of this.ownedMaterials)e.dispose();for(let e of this.ownedGeometries)e.dispose();oF(this.root)}},_F=(e,t,n,r,i)=>{let a=e.value,o=e.velocity;o.addScaledVector(a,-n*t).multiplyScalar(Math.exp(-r*t)),a.addScaledVector(o,t),a.length()>i&&a.setLength(i)},vF=.06,yF=150,bF=.58,xF=.25,SF=.32,CF=9,wF=1,TF=.08,EF=.3,DF=1,OF=1.6,kF=.25,AF=.12,jF=.3,MF=.3,NF=8;function PF(e,t,n,r){VP(e,t,n);let i=Math.hypot(n.x,n.z);if(i<=0)return r.x=0,r.z=0,0;let a=mM(0,kF,i),o=1+AF*a/i;return r.x=n.x*o,r.z=n.z*o,a}var FF=(e,t)=>e===0||Math.sign(t)===Math.sign(e)&&Math.abs(t)>Math.abs(e)?t:e,IF=.75,LF=.38,RF=.72,zF=.5,BF=.2,VF=.55,HF=.7,UF=6,WF=.4,GF=.2,KF=.3,qF=.5,JF=class{mapping;boxer;solver;yaw=0;yawInitialized=!1;rootX=null;rootZ=0;punchActive=!1;punchAgeTicks=0;punchTotalTicks=1;punchClass=`jab`;punchHand=`left`;punchTarget=`head`;punchPower=`normal`;punchTiming=se(`jab`,`head`,`normal`);actionId=null;completedActionId=null;ownActionId=null;ownPress=!1;ownLeadTicks=0;ownAuthoritativeAge=null;ownWaitedTicks=0;ownExpectedTicks=0;ownPulled=!1;ownSequence=null;ownStarted=!1;ownPressedAt=0;ownRefused=!1;ownCut=!1;recoveryCut=!1;ownQueued=null;contactId=null;contactParried=!1;shownFighter=null;shownOpponent=null;retiredOwnIds=[];pressesLanded=[];anticipatedId=null;hitstop=0;hitstopScale=1;hitstopLag=0;downState=`up`;fallAge=0;riseProgress=0;riseFrom=0;fallSide=0;fallProne=!1;fallKneel=!1;windedSide=-1;windedTime=0;winded=0;landProne=!1;landSide=0;landShift=new J;landSettled=!1;fallen=wI();fallenFromPhysics=!1;riseRoot=new J;riseRootFrom=new J;downPoles=[new J,new J,new J,new J];downPolesSet=!1;poleSettle=0;characterInverse=new Zm;place=new J;riseRootVelocity=new J;liveOpponentHead=new J;hasLiveHead=!1;guardOpponentHead=new J;opponentHeadOffset=new J;opponentSteadySeconds=0;followHead=0;aimActionId=null;refereeContactId=null;refereeHead=new J;hasRefereeHead=!1;followReferee=0;headKick={value:new J,velocity:new J};torsoKick={value:new J,velocity:new J};rootKick={value:new J,velocity:new J};coverKick={value:new J,velocity:new J};foldDelay=0;pendingFold=0;guardKick=0;guardHigh=0;guardLow=0;guardSpent=0;slip=0;weave=0;weaveTime=0;pull=0;crouchExtra=0;bouncePhase=0;weightPhase=0;stunPhase=0;feintTimer=2;feint=0;stunAmount=0;tired=0;clinchWeight=0;foulWeight=0;tauntWeight=0;crowding=0;punchCommit=0;headSpace=new q;ownHead=new J;ropeHold=new J;ropeExcess={x:0,z:0};ropeOwn={x:0,z:0};ropeTheirs={x:0,z:0};ropeLeanTarget=0;ropeLean=0;ropeOutward=new J(1,0,0);ropeLocal=new J;tauntEnd=null;lastSpeed=0;stool;stoolRoot=new J;stoolYaw=0;enswell;bottle;treatProp=`enswell`;treatTarget=new J;treatScratch=new J;treatFacing=new J(0,0,-1);treatFacingLocal=new J;treatSide=1;treating=!1;treatWeight=0;resting=!1;seated=0;stillTime=0;celebrateTime=0;celebration=0;waveTime=0;wave=0;breakTime=0;breakWeight=0;breakFighters=[new J,new J];breakAimed=!1;attending=!1;verdictSide=0;verdict=null;squareWeight=0;raisedWeight=0;bowedWeight=0;wrists=[null,null];wristTargets=[new J,new J];wristWeights=[0,0];attendWeight=0;countdownTicks=null;countdownEnd=null;touchWeight=0;touchOffset=new J;touchVelocity=new J;debugHoldImpact=!1;feet=[{planted:new J,from:new J,to:new J,progress:1,stepping:!1,duration:.2},{planted:new J,from:new J,to:new J,progress:1,stepping:!1,duration:.2}];feetInitialized=!1;dislocation=null;scratch=new J;scratchB=new J;scratchC=new J;scratchD=new J;scratchE=new J;clinchCentre=new J;clinchForward=new J;clinchTemp=new J;scratchQ=new Dm;headWorld=new J;hand={L:this.makeHand(),R:this.makeHand()};punchGuard=this.makeHand();punchDir=new J;punchContact=new J;punchStart=new J;punchSweepFrom=new J;punchSweepTo=new J;punchMid=new J;foot={L:this.makeFoot(),R:this.makeFoot()};torso={hips:new J,hipsYaw:0,hipsPitch:0,hipsRoll:0,shouldersYaw:0,spinePitch:0,spineRoll:0,headYaw:0,headPitch:0,headRoll:0,headOffset:new J};pose;downStanding=wI();downFrom=wI();downTo=wI();downResult=wI();downStand=1;fallStart=wI();fallStartStand=1;fallFromGetUp=!1;referee;refereeCount=0;refereeCounting=!1;countChangedTick=null;ragdoll;forcedDown=!1;heldDown=!1;authoredNextFall=!1;obstacle=null;blows=0;riseBlendAge=0;constructor(e,t,n={}){this.mapping=t,this.boxer=e,this.referee=n.referee===!0,this.solver=new OM(e.rig),this.pose={torso:this.torso,handL:this.hand.L,handR:this.hand.R,footL:this.foot.L,footR:this.foot.R,shrugL:0,shrugR:0},this.stool=ZI(),this.stool.group.position.set(0,0,.02),e.root.add(this.stool.group),this.enswell=YI(),e.rig.bones.gloveL.add(this.enswell.group),this.bottle=XI(),e.rig.bones.gloveL.add(this.bottle.group),this.ragdoll=this.referee&&n.knockout!==!0?null:new TP(e.rig,e.root)}primeReplayFall(){this.ragdoll?.prime()}useAuthoredFall(){this.authoredNextFall=!0}knockOut(){this.forcedDown=!0}stayDown(e){this.heldDown=e}setObstacle(e,t){this.obstacle??={x:e,z:t},this.obstacle.x=e,this.obstacle.z=t}get fallBody(){return this.ragdoll?.active===!0?this.ragdoll:null}setResting(e){this.resting=e}get stoolVisible(){return this.stool.group.visible}celebrate(e=4.4){this.celebrateTime=e}resetTransient(e=!1){this.forcedDown=!1;let t=this.ragdoll;t!==null&&(e?t.active?t.settle():t.restoreSettled():(t.stop(),t.clearRise())),this.downState=e?`down`:`up`,this.landSettled=!1,this.fallenFromPhysics=!1,this.riseRoot.set(0,0,0),this.riseRootFrom.set(0,0,0),this.riseRootVelocity.set(0,0,0),this.fallAge=e?IF:0,this.riseProgress=0,this.hitstop=0,this.hitstopScale=1,this.hitstopLag=0;for(let e of[this.headKick,this.torsoKick,this.rootKick,this.coverKick])e.value.set(0,0,0),e.velocity.set(0,0,0);this.foldDelay=0,this.pendingFold=0,this.guardKick=0,this.stunAmount=0,this.windedTime=0,this.winded=0,this.celebrateTime=0,this.celebration=0,this.waveTime=0,this.wave=0,this.verdictSide=0,this.verdict=null,this.squareWeight=0,this.raisedWeight=0,this.bowedWeight=0,this.wrists.fill(null),this.wristWeights.fill(0),this.seated=0,this.stillTime=0,this.rootX=null,this.yawInitialized=!1,this.feetInitialized=!1,this.retirePunch(),this.ownQueued=null,this.completedActionId=null,this.retiredOwnIds.length=0,this.anticipatedId=null}waveOff(e=2.6){this.waveTime=e}setCountdown(e){this.countdownTicks=e}attend(e){this.attending=e}treat(e,t,n=1,r=`enswell`){this.treating=e!==null,e!==null&&(this.treatTarget.copy(e),t!==void 0&&this.treatFacing.copy(t),this.treatSide=n,this.treatProp=r)}awaitVerdict(e){this.verdictSide=e??0,e===null&&(this.verdict=null)}announce(e){this.verdict=e}raise(e,t){this.wrists[0]=e===null?null:this.wristTargets[0].copy(e),this.wrists[1]=t===null?null:this.wristTargets[1].copy(t)}breakClinch(e=1.3){this.breakTime=e}get breaking(){return this.breakTime>0}aimBreak(e,t){this.breakFighters[0].copy(e),this.breakFighters[1].copy(t),this.breakAimed=!0}makeHand(){return{position:new J,knuckles:new J(0,1,0),palm:new J(0,0,1),pole:new J(0,-1,0)}}makeFoot(){return{position:new J,toe:new J(0,0,1),heel:0,pole:new J(0,0,1)}}get currentRoot(){return{x:this.rootX??0,z:this.rootZ}}get isDown(){return this.downState!==`up`}setRefereeCount(e,t){(e!==this.refereeCounting||t!==this.refereeCount)&&(this.countChangedTick=null),this.refereeCounting=e,this.refereeCount=t}predict(e,t,n,r=0,i,a=r){if(e.kind!==`punch`||e.id===void 0)return;let o={action:{...e,id:e.id},timing:i??se(e.class,e.target,e.power),leadTicks:r,answerTicks:a,pressedAt:t,sequence:null,started:!1,waited:0};if(this.punchActive&&this.ownActionId!==null&&this.ownAuthoritativeAge===null&&!this.ownPulled&&!this.ownStarted&&(t-this.ownPressedAt)*n0||e.clinch_ticks>0||e.clinch_startup_ticks>0,a=this.ownQueued;if(a!==null&&(a.sequence??=r?.(a.action.id)??null,e.action_id===a.action.id?a.started=!0:!a.started&&(i||a.sequence!==null&&e.last_input_sequence>=a.sequence&&e.queued_actions===0)&&(this.ownQueued=null)),!this.punchActive||this.ownActionId===null||this.ownPulled||this.ownRefused)return;this.ownStarted||(this.ownSequence??=r?.(this.ownActionId)??null);let o=e.action_id===this.ownActionId;o&&(this.ownStarted=!0);let s=this.ownQueued;if(s!==null&&s.sequence!==null&&r!==null&&!this.ownStarted&&this.ownSequence===null&&this.ownAuthoritativeAge===null){this.ownActionId=null,this.ownQueued=null,this.retirePunch(),this.startOwnPunch(s);return}(o?i&&e.action_contact_tick===null:!this.ownStarted&&this.ownAuthoritativeAge===null&&(i||this.ownSequence!==null&&e.last_input_sequence>=this.ownSequence&&e.queued_actions===0))&&(this.ownRefused=!0,this.takeBack())}takeBack(){this.punchAgeTickse.action_startup_ticks*(1/lL-1)||this.punchActive&&this.punchAgeTicks/this.punchTotalTicks<=.55)return;this.anticipatedId=n;let r=e.action_target??`head`,i=e.action_power??`normal`,a={...se(e.action,r,i),startup:e.action_startup_ticks,active:e.action_active_ticks,recovery:e.action_recovery_ticks},o=e.action_hand??(e.stance===`orthodox`?`left`:`right`);this.startEarly(n,e.action,o,r,i,a,t,t)}startOwnPunch(e){let{action:t,timing:n}=e;this.startEarly(t.id,t.class,t.hand,t.target,t.power,n,0,Math.max(0,e.answerTicks)),this.ownPress=!0,this.ownSequence=e.sequence,this.ownStarted=e.started,this.ownPressedAt=e.pressedAt}startEarly(e,t,n,r,i,a,o,s){this.retirePunch(),this.punchClass=t,this.punchHand=n,this.punchTarget=r,this.punchPower=i,this.punchTiming=a,this.punchTotalTicks=Math.max(1,fe(a)),this.punchAgeTicks=0,this.punchActive=!0,this.ownActionId=e,this.ownLeadTicks=hF(o,0,$I),this.ownExpectedTicks=s}followUpStartAge(e){let t=this.shownFighter,n=this.shownOpponent,r=this.actionId??this.ownActionId,i=r!==null&&r===this.contactId&&!this.contactParried;return t!==null&&n!==null&&D(this.punchClass,i,e.action,t.stamina,n.stunned_ticks>0,t.style)?E(this.punchTiming):this.punchTotalTicks}releaseQueuedPress(e){let t=this.ownQueued;t!==null&&(t.waited+=e*30,!(this.punchActive&&!this.ownPulled&&this.punchAgeTicks+this.serverLag(t.leadTicks)6&&this.retiredOwnIds.shift()),this.actionId=null,this.punchActive=!1,this.ownActionId=null,this.ownPress=!1,this.ownLeadTicks=0,this.ownAuthoritativeAge=null,this.ownWaitedTicks=0,this.ownExpectedTicks=0,this.ownPulled=!1,this.ownSequence=null,this.ownStarted=!1,this.ownRefused=!1,this.ownCut=!1,this.recoveryCut=!1,this.hitstopLag=0}setRefereeHead(e){this.hasRefereeHead=e!==null,e!==null&&this.refereeHead.copy(e)}landedHit(e,t,n=!1){!this.punchActive||e===null||e!==(this.actionId??this.ownActionId)||this.punchAgeTicks>=this.punchTiming.startup+this.punchTiming.active+1||(this.hitstop=Math.max(this.hitstop,(t?o.block:n?o.power:o.hit)/1e3))}powerHeat(e){if(!this.punchActive||this.punchPower!==`power`||this.punchHand!==e||this.ownPulled)return 0;let{startup:t,active:n,recovery:r}=this.punchTiming,i=this.punchAgeTicks;return i=0?-1:1;if(t===`body`){switch(r){case`hook`:this.torsoKick.velocity.x+=3*s,this.torsoKick.velocity.z+=4.6*s*c,this.rootKick.velocity.x+=.5*s*c,this.coverKick.velocity.x+=2.2*s*c;break;case`uppercut`:this.rootKick.velocity.y+=.9*s,this.torsoKick.velocity.x-=1.6*s,this.foldDelay=.1,this.pendingFold=5.2*s;break;default:this.torsoKick.velocity.x+=4.6*s;break}this.rootKick.velocity.z-=.45*s,this.headKick.velocity.z-=.6*s,this.headKick.velocity.y-=.7*s,this.guardKick=Math.max(this.guardKick,.6*s)}else{switch(e===`hit`&&(this.guardKick=Math.max(this.guardKick,.4*s)),r){case`hook`:this.headKick.velocity.x+=2.6*s*c,this.headKick.velocity.z-=.7*s,this.torsoKick.velocity.z+=.9*s*c;break;case`uppercut`:this.headKick.velocity.y+=2.2*s,this.headKick.velocity.z-=1.2*s,this.torsoKick.velocity.x-=1.2*s;break;case`straight`:this.headKick.velocity.z-=2.4*s,this.torsoKick.velocity.x-=.6*s;break;default:this.headKick.velocity.z-=1.5*s,this.torsoKick.velocity.x-=.35*s;break}this.rootKick.velocity.z-=.45*s,e===`block`&&(this.guardKick=Math.max(this.guardKick,.9*s))}if(e===`hit`&&(this.dentSurface(t,c,r,o),this.fallSide=r===`hook`?c:c*.5,this.fallProne=r===`hook`||t===`body`),e===`hit`&&a>=10&&this.ragdoll!==null){let e=wP({target:t,punchClass:r,hand:i,lateral:c,amount:a}),n=this.scratchE.set(e.x,e.y,e.z).applyAxisAngle(QI,this.yaw),o=this.scratchD.set(e.driveX,e.driveY,e.driveZ).applyAxisAngle(QI,this.yaw);this.blows+=1,this.ragdoll.takeBlow(n,o,t,e.twist,aP(r,t,a,this.blows+Math.round(a)))}}stagger(){this.torsoKick.velocity.x-=2.6,this.headKick.velocity.z-=1.4,this.headKick.velocity.y+=.5,this.rootKick.velocity.z-=1.1,this.guardKick=Math.max(this.guardKick,1.1)}windedFor(e,t){this.windedTime=Math.max(this.windedTime,e),this.windedSide=t>=0?1:-1}fallToKnee(e){this.fallKneel=e,e&&(this.authoredNextFall=!0)}dentSurface(e,t,n,r){let i=1.1+r*2.1;if(e===`body`){let e=n===`hook`?t>0?`rightRibs`:`leftRibs`:`solarPlexus`;this.boxer.bodyInjury.impact(e,[n===`hook`?t*i*.8:0,0,-i],9);return}n===`hook`?this.boxer.headInjury.impact(t>0?`rightCheek`:`leftCheek`,[t*i,0,-i*.35],5.5):n===`uppercut`?this.boxer.headInjury.impact(`chin`,[0,i*.7,-i*.6],5):this.boxer.headInjury.impact(n===`jab`?`nose`:`mouth`,[0,0,-i],4.5)}stepFeet(e,t,n,r,i,a){let o=this.scratch,s=this.scratchQ.setFromAxisAngle(QI,a);for(let a=0;a<2;a+=1){let c=this.feet[a],l=a===0==t>0?kM.leadFoot:kM.rearFoot;if(this.referee||this.squareWeight>.5?o.set(a===0?.16:-.16,0,a===0?.02:-.02).applyQuaternion(s).add(i):o.set(l.x*t,0,l.z).applyQuaternion(s).add(i),o.y=0,!this.feetInitialized){c.planted.copy(o),c.progress=1,c.stepping=!1;continue}if(c.stepping){c.progress=Math.min(1,c.progress+e/c.duration),c.progress>=1&&(c.stepping=!1,c.planted.copy(c.to));continue}let u=this.feet[1-a];c.planted.distanceTo(o)>(n>.05?.09:.14)&&!u.stepping&&(c.stepping=!0,c.progress=0,c.duration=hF(.24-n*.07,.15,.24),c.from.copy(c.planted),c.to.copy(o).addScaledVector(r,c.duration*.6),c.to.y=0)}this.feetInitialized=!0}footWorld(e,t){let n=this.feet[e];if(!n.stepping)return t.copy(n.planted),0;let r=gM(n.progress,1.6);return t.copy(n.from).lerp(n.to,r),Math.sin(n.progress*Math.PI)*.055}update(e,t,n,r,i,a,o,s){let c=this.boxer,l=e.stance===`orthodox`?1:-1,u=i?.35:1,d=this.touchWalk(e,t,n,o);this.walkBackFromTheFall(n);let f=this.holdOnTheRopes(t,this.mapping.x(e.x)+d.x+this.riseRoot.x,this.mapping.z(e.y)+d.z+this.riseRoot.z),p=this.mapping.x(e.x)+d.x+this.riseRoot.x-f.x,h=this.mapping.z(e.y)+d.z+this.riseRoot.z-f.z;this.place.set(p,0,h),this.rootX===null&&(this.rootX=p,this.rootZ=h);let g=yL*Math.max(n,1/60);this.rootX+=hF(p-this.rootX,-g,g),this.rootZ+=hF(h-this.rootZ,-g,g);let _=Math.atan2(e.facing_x,-e.facing_y);this.yawInitialized||=(this.yaw=_,!0);let v=this.punchActive&&this.punchAgeTicks0?.12:1;let y=n*this.hitstopScale;this.punchActive&&this.hitstop>0&&(this.hitstopLag+=(n-y)*30),this.syncAction(e,t,o,y),this.debugHoldImpact||(this.boxer.headInjury.update(y),this.boxer.bodyInjury.update(y)),s!==void 0&&this.trackOpponentHead(t,s,n);let b=this.scratchB.set(this.mapping.x(e.velocity_x)*30,0,this.mapping.z(e.velocity_y)*30).add(this.touchVelocity).add(this.riseRootVelocity),x=b.length(),S=Math.hypot(b.x-this.riseRootVelocity.x,b.z-this.riseRootVelocity.z);this.lastSpeed=x,this.stillTime=x<.03?this.stillTime+n:0;let C=this.resting&&this.stillTime>.2&&this.downState===`up`;this.seated=pF(this.seated,+!!C,C?2.2:4,n);let w=this.resting&&this.stillTime>.05&&this.downState===`up`;w&&(this.stoolRoot.set(this.rootX,0,this.rootZ),this.stoolYaw=this.yaw),this.stool.group.visible=w||this.seated>XF&&this.downState===`up`,this.stool.group.position.set(this.stoolRoot.x-this.rootX,0,this.stoolRoot.z-this.rootZ).add(this.scratch.set(0,0,.02).applyAxisAngle(QI,this.stoolYaw)).applyAxisAngle(QI,-this.yaw),this.stool.group.rotation.y=this.stoolYaw-this.yaw,this.celebrateTime=Math.max(0,this.celebrateTime-n),this.celebration=pF(this.celebration,+(this.celebrateTime>0&&this.downState===`up`),3.5,n),this.waveTime=Math.max(0,this.waveTime-n),this.wave=pF(this.wave,+(this.waveTime>0&&this.downState===`up`),4,n),this.breakTime=Math.max(0,this.breakTime-n),this.breakWeight=pF(this.breakWeight,+(this.breakTime>0&&this.downState===`up`),6,n),this.attendWeight=pF(this.attendWeight,+!!this.attending,2.5,n),this.squareWeight=pF(this.squareWeight,this.verdictSide===0?0:1,3,n),this.raisedWeight=pF(this.raisedWeight,+(this.verdictSide!==0&&(this.verdict===`winner`||this.verdict===`level`)),3.2,n),this.bowedWeight=pF(this.bowedWeight,+(this.verdictSide!==0&&this.verdict===`loser`),2.2,n);for(let e of[0,1])this.wristWeights[e]=pF(this.wristWeights[e],this.wrists[e]===null?0:1,3.2,n);this.treatWeight=pF(this.treatWeight,+!!this.treating,3,n),this.windedTime=Math.max(0,this.windedTime-n);let T=this.fallKneel&&this.downState===`falling`;this.winded=pF(this.winded,this.windedTime>0&&this.downState===`up`||T?1:0,this.windedTime>0||T?12:4,n),this.enswell.group.visible=this.treatWeight>.4&&this.treatProp===`enswell`,this.bottle.group.visible=this.treatWeight>.4&&this.treatProp===`bottle`;let E=this.countdownTicks!==null&&this.countdownTicks<=eI&&this.countdownTicks>=tI;this.touchWeight=pF(this.touchWeight,+!!E,6,n);let D=e.stamina/Math.max(1,e.maximum_stamina);this.tired=pF(this.tired,hF((.55-D)/.5,0,1),2,n),this.stunAmount=pF(this.stunAmount,Math.min(1,e.stunned_ticks/24),8,n);let O=e.defense;this.guardHigh=pF(this.guardHigh,+(O===`guard_high`),pL,n),this.guardLow=pF(this.guardLow,+(O===`guard_low`),pL,n),this.guardSpent=pF(this.guardSpent,+(e.guard0||e.clinch_startup_ticks>0),10,n),this.foulWeight=pF(this.foulWeight,+!!e.is_foul_recovery_target,8,n),this.tauntWeight=pF(this.tauntWeight,+(e.taunt_ticks>0),10,n);let j=Math.hypot(this.mapping.x(t.x)-this.mapping.x(e.x),this.mapping.z(t.y)-this.mapping.z(e.y)),ee=this.referee||e.is_downed||t.is_downed?0:1-mM(bF,wF,j);this.crowding=pF(this.crowding,ee,9,n);let te=1/0;if(this.hasLiveHead&&!this.referee&&this.downState===`up`){let e=this.boxer.rig.bones.head.getWorldPosition(this.ownHead),t=e.x-this.liveOpponentHead.x,r=e.z-this.liveOpponentHead.z,i=Math.hypot(t,r);if(te=Math.hypot(t,e.y-this.liveOpponentHead.y,r),te1e-4){let e=(xF-te)/xF*CF*n,a=Math.cos(-this.yaw),o=Math.sin(-this.yaw);this.headSpace.x+=(t*a+r*o)/i*e,this.headSpace.y+=(-t*o+r*a)/i*e,this.headSpace.lengthSq()>1&&this.headSpace.normalize()}}te>SF&&this.headSpace.multiplyScalar(Math.exp(-3*n)),this.tauntEnd=qI(this.tauntEnd,o,e.taunt_ticks>0?e.taunt_ticks:null),_F(this.headKick,n,190,7.5,.24),_F(this.torsoKick,n,150,7,.7),_F(this.rootKick,n,120,8,.12),_F(this.coverKick,n,110,15,.3),this.foldDelay>0&&(this.foldDelay-=n,this.foldDelay<=0&&(this.torsoKick.velocity.x+=this.pendingFold,this.pendingFold=0)),this.guardKick=Math.max(0,this.guardKick-n*2.4),this.ragdoll?.tick(n),this.updateDownState(e,n,i,S);let ne=(1.9-this.tired*.7)*(1-this.stunAmount*.6);this.bouncePhase+=n*ne*Math.PI*2*u,this.weightPhase+=n*.55*Math.PI*2*u,this.stunPhase+=n*5.5,this.feintTimer-=n,this.feintTimer<=0&&!this.punchActive&&x<.05&&this.downState===`up`&&(this.feintTimer=2.5+this.bouncePhase%1.7,this.feint=1),this.feint=Math.max(0,this.feint-n*3.5);let re=this.scratchC.set(this.rootX,0,this.rootZ);(this.downState===`up`||this.downState===`rising`)&&this.stepFeet(n,l,x,b,re,this.yaw);let ie=this.scratchQ.setFromAxisAngle(QI,-this.yaw),ae=l>0?this.foot.L:this.foot.R,M=l>0?this.foot.R:this.foot.L,oe=l>0?0:1,se=+(l>0),ce=this.footWorld(oe,ae.position),le=this.footWorld(se,M.position);ae.position.sub(re).applyQuaternion(ie),M.position.sub(re).applyQuaternion(ie);let ue=this.boxer.rig.metrics.ankleHeight;ae.position.y=ue+ce,M.position.y=ue+le,AM(kM.leadToe,l,ae.toe),AM(kM.rearToe,l,M.toe),ae.heel=0,M.heel=0,ae.pole.copy(ae.toe).setY(.35).normalize(),M.pole.copy(M.toe).setY(.35).normalize();let N=this.torso,de=kM.bladeYaw*l,fe=Math.sin(this.bouncePhase)*.012*(1-this.stunAmount)*(x>.6?.6:1),pe=Math.sin(this.weightPhase)*.02,me=.012+this.tired*.03+this.stunAmount*.05;N.hips.set(pe*l+Math.sin(this.stunPhase*.9)*.05*this.stunAmount,kM.hipsHeight-me+fe,0),N.hipsYaw=de,N.hipsPitch=.02+this.tired*.08,N.hipsRoll=Math.sin(this.stunPhase)*.09*this.stunAmount,N.shouldersYaw=de*.88,N.spinePitch=.16+this.tired*.16+Math.sin(r*(2.1+this.tired*1.8))*.012,N.spineRoll=Math.sin(this.stunPhase*1.3)*.06*this.stunAmount,N.headYaw=-.12*l+Math.sin(r*.9)*.05+Math.sin(this.stunPhase*.7)*.25*this.stunAmount,N.headPitch=.12+Math.sin(r*1.7)*.02+this.stunAmount*.18,N.headRoll=Math.sin(this.stunPhase*1.1)*.14*this.stunAmount,N.headOffset.set(0,0,0);let he=l>0?this.hand.L:this.hand.R,P=l>0?this.hand.R:this.hand.L,ge=this.headRestChar(l),_e=hF(this.guardHigh+this.guardLow,0,1),ve=this.scratch.copy(kM.relaxedLead).lerp(kM.guardHighLead,this.guardHigh).lerp(kM.guardLowLead,this.guardLow),ye=this.scratchB.copy(kM.relaxedRear).lerp(kM.guardHighRear,this.guardHigh).lerp(kM.guardLowRear,this.guardLow);ve.y-=this.tired*.12+this.stunAmount*.22,ye.y-=this.tired*.1+this.stunAmount*.2,ve.y-=this.guardSpent*uI,ye.y-=this.guardSpent*uI,ve.z-=this.guardSpent*.04,ye.z-=this.guardSpent*.03,ve.z+=this.feint*.1+Math.sin(r*2.3)*.012*u,ve.x+=Math.sin(r*1.9)*.01*u,ye.y+=Math.cos(r*2.7)*.01*u,ve.z-=this.guardKick*.07,ye.z-=this.guardKick*.05,ve.y-=this.guardKick*.02,ve.add(ge),ye.add(ge),he.position.set(ve.x*l,ve.y,ve.z),P.position.set(ye.x*l,ye.y,ye.z),AM(kM.leadKnuckles,l,he.knuckles),AM(kM.leadPalm,l,he.palm),AM(kM.rearKnuckles,l,P.knuckles),AM(kM.rearPalm,l,P.palm),AM(kM.leadPole,l,he.pole),AM(kM.rearPole,l,P.pole);let be=.15*_e,xe=.25*_e;if(Math.abs(this.slip)>.001){let e=this.slip;N.headOffset.x+=e*.13,N.spineRoll+=-e*.28,N.hips.x+=e*.03,N.hips.y-=Math.abs(e)*.05,N.spinePitch+=Math.abs(e)*.12,N.headRoll+=-e*.2}if(this.weave>.001){let e=this.weave,t=hF(this.weaveTime/mL,0,1),n=Math.sin(t*Math.PI);N.hips.y-=e*.2,N.spinePitch+=e*.42,N.headOffset.x+=e*(1-2*t)*.16*l,N.headOffset.y-=e*n*.08,N.spineRoll+=e*(1-2*t)*.18*l,he.position.y-=e*.1,P.position.y-=e*.1}if(this.pull>.001){let e=this.pull;N.spinePitch-=e*.34,N.hips.z-=e*.11,N.hips.x-=e*.05*l,N.headOffset.z-=e*.06,N.headPitch-=e*.1}this.punchCommit=pF(this.punchCommit,+!!this.punchActive,10,n);let F=this.crowding*(1-this.clinchWeight)*(1-this.punchCommit);if(F>.001&&(N.headOffset.x-=F*.075,N.headOffset.z-=F*.05,N.headYaw-=F*.2,N.spinePitch-=F*.07,N.hips.z-=F*.05,he.position.z-=F*.14,he.position.x-=F*.035*l,P.position.z-=F*.07),Math.abs(this.headSpace.x)+Math.abs(this.headSpace.y)>.001){let e=this.headSpace.x,t=this.headSpace.y,n=1-this.clinchWeight;N.spinePitch+=t*.7*n,N.spineRoll-=e*.7*n,N.hips.z+=t*.1*n,N.hips.x+=e*.05*n,N.headOffset.x+=e*.05,N.headOffset.z+=t*.05,N.headPitch+=t*.2,N.headRoll-=e*.3}if(this.ropeLean=pF(this.ropeLean,this.referee||this.downState!==`up`?0:this.ropeLeanTarget,NF,n),this.ropeLean>.001){let e=this.ropeLocal.copy(this.ropeOutward).applyAxisAngle(QI,-this.yaw);N.hipsPitch+=e.z*jF*this.ropeLean,N.hipsRoll-=e.x*MF*this.ropeLean}if(this.referee||this.applyReactions(he,P,ae,M),this.punchActive){be=0,xe=0;let e=this.applyPunch(l,he,P,ae,M,ge);this.punchHand===`left`==l>0?be=e:xe=e}if(this.referee&&(this.applyRefereePose(l,he,P,ae,M,ge,r,o,e.stunned_ticks),this.applyReactions(he,P,ae,M)),this.clinchWeight>.001&&this.applyClinchPose(this.clinchWeight,r,l,e,t,he,P,ge),this.foulWeight>.001){let e=this.foulWeight;N.hips.y-=e*.16,N.spinePitch+=e*.55,N.headPitch+=e*.2,he.position.lerp(this.scratch.set(.06*l,.72,.16),e),P.position.lerp(this.scratch.set(-.05*l,.7,.14),e),he.pole.set(.6*l,-.6,.5),P.pole.set(-.6*l,-.6,.5)}if(this.tauntWeight>.001){let e=this.tauntEnd===null?0:hF(this.tauntEnd-o,0,cI);this.applyTauntPose(this.tauntWeight,(cI-e)/cI*lI,l,he,P,ge)}if(this.dislocation===`shoulder_left`||this.dislocation===`shoulder_right`){let e=this.dislocation===`shoulder_left`?this.hand.L:this.hand.R,t=this.dislocation===`shoulder_left`?1:-1;e.position.set(.24*t,.55,.05),e.pole.set(.9*t,-.3,.2),e.knuckles.set(0,-1,.1),e.palm.set(-t,0,.2)}this.winded>.001&&(this.downState===`up`||T)&&this.applyWindedPose(this.winded,r,l,he,P),this.touchWeight>.001&&this.downState===`up`&&this.applyTouchGlovesPose(this.touchWeight,l,he,P),this.celebration>.001&&this.downState===`up`&&this.applyCelebratePose(this.celebration,r,l,he,P,ae,M),this.wave>.001&&this.downState===`up`&&this.applyWaveOffPose(this.wave,r,l,he,P),this.squareWeight>.001&&this.downState===`up`&&this.applyVerdictPose(this.squareWeight,r,l,he,P,ae,M,ge),(this.wristWeights[0]>.001||this.wristWeights[1]>.001)&&this.downState===`up`&&this.applyRaisePose(l,he,P),this.breakWeight>.001&&this.downState===`up`&&this.applyBreakPose(this.breakWeight,l,he,P),this.attendWeight>.001&&this.downState===`up`&&this.applyAttendPose(this.attendWeight,r,l,he,P),this.treatWeight>.001&&this.downState===`up`&&this.applyTreatPose(this.treatWeight,r,l,he,P,ae,M),this.seated>.001&&this.downState===`up`&&this.applySeatedPose(this.seated,r,l,he,P,ae,M),this.downState!==`up`&&this.applyDownPose(l,he,P,ae,M),this.steadyJointPoles(l,he,P,ae,M,n),me=0;let I=this.pose;I.shrugL=l>0?be:xe,I.shrugR=l>0?xe:be;let L=this.ragdoll;if(L?.active===!0&&i&&(L.stop(),L.clearRise()),L?.active===!0&&!L.handingOver)L.setLost(c.isDecapitated,c.isHandDismembered(`left`),c.isHandDismembered(`right`)),L.update(n,this.obstacle);else{if(this.solver.apply(c.root,this.pose),L?.handingOver===!0)L.followPose(n,this.obstacle),this.riseProgress>=LF&&L.handOverSeconds>=KF&&(L.letGo(),this.riseBlendAge=0);else if(L!==null&&L.hasRisePose){let e=mM(0,GF,this.riseBlendAge);e<1&&this.downState!==`up`?L.blendRise(e):L.clearRise()}L?.sample(n)}this.applyDislocation();let Se=Math.min(1,(t.trauma.bleeding+t.trauma.left_cut+t.trauma.right_cut+t.trauma.head/4)/300*(a===`off`?0:a===`reduced`?.15:1.5));c.setGloveBlood(Se),c.setTrunksBlood(zD(e.trauma,a)),RD(c.headInjury,e.trauma,a),BD(c.bodyInjury,e.trauma,a),c.setSkinClearcoat(.25+(1-D)*.4)}applyTauntPose(e,t,n,r,i,a){let o=this.torso,s=.5-.5*Math.cos(t*Math.PI*2);i.position.lerp(this.scratch.set(-.3*n,a.y-.62,.02),e),i.pole.lerp(this.scratch.set(-.5*n,-.4,-.75),e).normalize(),i.knuckles.lerp(this.scratch.set(-.1*n,-.95,.3),e).normalize(),i.palm.lerp(this.scratch.set(0,.3,.95),e).normalize(),r.position.lerp(this.scratch.set(.26*n,a.y-.36+s*.1,.52-s*.24),e),r.pole.lerp(this.scratch.set(.7*n,-.7,.1),e).normalize(),r.knuckles.lerp(this.scratch.set(.1*n,.25+s*.6,.95-s*.7),e).normalize(),r.palm.lerp(this.scratch.set(-.2*n,.95,-.2-s*.5),e).normalize(),o.spinePitch-=e*.12,o.headPitch-=e*.22,o.headYaw+=Math.sin(t*Math.PI)*.15*e,o.shouldersYaw+=Math.sin(t*Math.PI*3)*.1*e,o.hips.x+=Math.sin(t*Math.PI)*.03*e*n,o.headOffset.z+=e*.03}applyClinchPose(e,t,n,r,i,a,o,s){let c=this.torso,l=r.player_idy&&(h.x*=y/v,h.z*=y/v),h.x+=o,h.z+=u,t.position.lerp(h,e),t.pole.lerp(this.clinchTemp.set(r*.85,l?.35:-.6,.25),e).normalize(),t.knuckles.lerp(this.clinchTemp.set(-p*r*.9+f.x*.3,l?-.25:.1,-m*r*.9+f.z*.3),e).normalize(),t.palm.lerp(this.clinchTemp.set(-f.x,l?.1:.35,-f.z),e).normalize()}}holdOnTheRopes(e,t,n){if(this.referee)return this.ropeLeanTarget=0,this.ropeHold.set(0,0,0);this.ropeLeanTarget=PF(t,n,this.ropeExcess,this.ropeOwn);let r=Math.hypot(this.ropeExcess.x,this.ropeExcess.z);r>0&&this.ropeOutward.set(this.ropeExcess.x/r,0,this.ropeExcess.z/r);let i=this.mapping.x(e.x),a=this.mapping.z(e.y);PF(i,a,this.ropeTheirs,this.ropeTheirs);let o=1-mM(DF,OF,Math.hypot(i-t,a-n));return this.ropeHold.set(FF(this.ropeOwn.x,this.ropeTheirs.x*o),0,FF(this.ropeOwn.z,this.ropeTheirs.z*o))}headRestChar(e){let t=this.boxer.rig.metrics;return this.headWorld.set(-.08,t.headHeight-t.hipsHeight+this.torso.hips.y,.02)}syncAction(e,t,n,r){this.shownFighter=e,this.shownOpponent=t;let i=this.ownQueued;if(i!==null&&e.action_id===i.action.id&&(this.ownQueued=null,this.retirePunch(),this.startOwnPunch(i),this.ownPress=!1),e.action_id!==null&&e.action_id!==this.actionId&&e.action_id!==this.completedActionId&&!this.retiredOwnIds.includes(e.action_id)){let t=e.action;if(t!==null){let r=e.action_hand??(e.stance===`orthodox`?`left`:`right`),i=this.ownActionId===e.action_id&&this.punchActive,a=this.punchTiming;this.actionId=e.action_id,this.punchClass=t,this.punchHand=r,this.punchTarget=e.action_target??`head`,this.punchPower=e.action_power??`normal`,this.punchTiming={...se(this.punchClass,this.punchTarget,this.punchPower),startup:e.action_startup_ticks,active:e.action_active_ticks,recovery:e.action_recovery_ticks},this.punchTotalTicks=Math.max(1,e.action_startup_ticks+e.action_active_ticks+e.action_recovery_ticks);let o=Math.max(0,n-e.action_start_tick);i?(this.punchAgeTicks=vL(this.punchAgeTicks,a,this.punchTiming),this.ownAuthoritativeAge=o,this.ownRefused||(this.ownPulled=!1,this.ownCut=!1,o-this.punchAgeTicks>1&&(this.punchAgeTicks=o))):(this.punchAgeTicks=o,this.ownActionId=null,this.ownPress=!1,this.ownLeadTicks=0,this.ownAuthoritativeAge=null),this.ownWaitedTicks=0,this.punchActive=!0}}if(e.action_id===null)this.actionId=null,this.completedActionId=null;else if(e.action_id===this.actionId&&this.punchActive){let t=Math.max(0,n-e.action_start_tick);this.ownActionId===this.actionId?(this.ownAuthoritativeAge=t,!this.ownPulled&&t-this.punchAgeTicks-this.hitstopLag>1.5&&(this.punchAgeTicks=t)):Math.abs(this.punchAgeTicks+this.hitstopLag-t)>1.5&&(this.punchAgeTicks=t,this.hitstopLag=0)}if(this.punchActive&&this.ownActionId!==null&&this.ownAuthoritativeAge===null&&!this.ownPulled&&!this.ownCut&&(this.ownWaitedTicks+=r*30,this.ownWaitedTicks>this.ownExpectedTicks*1.5+eL&&(this.ownPress?!this.ownStarted:this.punchAgeTicks=e,n=this.hitstop>0?0:Math.min(this.hitstopLag,r*30*rL);this.hitstopLag-=n,this.punchAgeTicks+=r*30*(t?nL:this.ownPunchRate())+n,this.ownPress&&this.ownActionId!==null&&!this.ownCut&&this.punchAgeTicks>=this.punchTiming.startup&&this.pressesLanded.at(-1)!==this.ownActionId&&(this.pressesLanded.push(this.ownActionId),this.pressesLanded.length>6&&this.pressesLanded.shift()),this.punchAgeTicks>=this.punchTotalTicks&&this.retirePunch()}e.is_downed&&(this.punchActive&&this.retirePunch(),this.ownQueued=null),this.releaseQueuedPress(r);let a=this.actionId??this.ownActionId;a!==this.aimActionId&&(this.aimActionId=a,this.followHead=0),this.followHead=pF(this.followHead,+(a!==null&&a===this.contactId),gL,r),this.followReferee=pF(this.followReferee,+(a!==null&&a===this.refereeContactId),gL,r)}trackOpponentHead(e,t,n){let r=this.guardOpponentHead.set(this.mapping.x(e.x),0,this.mapping.z(e.y));this.opponentSteadySeconds=fL.has(e.defense)?0:this.opponentSteadySeconds+n,(!this.hasLiveHead||this.opponentSteadySeconds>=hL)&&this.opponentHeadOffset.copy(t).sub(r),r.add(this.opponentHeadOffset),this.liveOpponentHead.copy(t),this.hasLiveHead=!0}ownPunchRate(){if(this.ownActionId===null||this.ownPress)return 1;let e=this.punchTiming.startup,t=this.ownAuthoritativeAge;return t===null?this.punchAgeTicks0,h=m?t:n,g=m?n:t,_=m?1:-1,v=+(this.punchPower===`power`),y=+(this.punchTarget===`body`),b,x,S,C=1,w=1,T=0;if(u0){let t=this.scratchQ.setFromAxisAngle(QI,-oe*e*E);r.toe.applyQuaternion(t),r.pole.applyQuaternion(t)}if(ae>.3){let t=this.scratchQ.setFromAxisAngle(QI,.45*e*E);i.toe.applyQuaternion(t),i.pole.applyQuaternion(t)}let _e=this.scratchE;switch(this.punchClass){case`hook`:_e.set(.22*_*e,-.06,-.12);break;case`uppercut`:_e.set(.05*_*e,-.42,-.02);break;case`straight`:_e.set(.02*_*e,-.03,-.09-.05*v);break;default:_e.set(0,-.01,-.05-.04*v);break}_e.x+=(this.punchClass===`hook`?.08:0)*_*e*v,_e.y-=.05*v,_e.z-=.12*v;let ve=this.punchStart.copy(k).addScaledVector(_e,Math.max(x,this.punchClass===`hook`||this.punchClass===`uppercut`?(1-D)*.6*C:0));if(this.punchClass===`hook`){let t=Math.hypot(ve.x-fe.x,ve.z-fe.z),n=Math.hypot(ge.x-fe.x,ge.z-fe.z),r=this.punchSweepFrom.copy(ve).sub(fe).setY(0).normalize(),i=this.punchSweepTo.copy(ge).sub(fe).setY(0).normalize(),a=Math.acos(hF(r.dot(i),-1,1)),o=r.z*i.x-r.x*i.z>=0?1:-1,s=mM(0,1,D),c=r.applyAxisAngle(QI,a*s*o).normalize();h.position.copy(fe).addScaledVector(c,K.lerp(t,n,s)),h.position.y=K.lerp(ve.y,ge.y,s),h.pole.set(.95*_*e,.08,.3).normalize(),h.knuckles.copy(c).applyAxisAngle(QI,o*Math.PI/2).setY(.05).normalize(),h.palm.set(0,-1,0)}else if(this.punchClass===`uppercut`){let t=mM(0,1,D),n=ve,r=this.punchMid.copy(ge).lerp(n,.5);r.y=Math.min(n.y,ge.y)-.04,r.z+=.08,h.position.copy(n).lerp(r,t*2>1?1:t*2),t>.5&&h.position.copy(r).lerp(ge,(t-.5)*2),h.pole.set(.3*_*e,-.2,1),h.knuckles.set(.05*_*e,.9,.35).normalize(),h.palm.set(-.2*_*e,.3,-.95).normalize()}else{h.position.copy(ve).lerp(ge,Math.min(1,D)),h.position.y+=Math.sin(hF(D,0,1)*Math.PI)*.025,h.pole.set(.55*_*e,-.9,.35);let t=mM(.55,1,D);h.knuckles.copy(pe).lerp(this.scratchC.set(.1*_*e,.55,.8),1-t).normalize(),h.palm.set(-.9*_*e,.2,-.3).lerp(this.scratchC.set(0,-1,.1),t).normalize()}if(O>0&&(h.position.lerp(k,O),h.knuckles.lerp(A,O).normalize(),h.palm.lerp(j,O).normalize(),h.pole.lerp(ee,O).normalize()),w<1){let t=(1-h.pole.dot(ee)/Math.max(1e-6,h.pole.length()*ee.length()))/2;h.knuckles.lerp(A,1-w).normalize(),h.palm.lerp(j,1-w).normalize(),h.pole.lerp(ee,1-w).addScaledVector(this.scratchC.set(_*e,0,0),_L*t*Math.sin(Math.PI*w)).normalize()}let ye=this.scratchE.set(-.1*_*e,a.y-.04,.12+a.z);return g.position.lerp(ye,E*.7),E}applyReactions(e,t,n,r){let i=this.torso;i.headOffset.add(this.headKick.value),i.headPitch+=-this.headKick.value.z*2.4+this.headKick.value.y*1.6,i.headYaw+=this.headKick.value.x*2.2,i.headRoll+=-this.headKick.value.x*.9,i.spinePitch+=this.torsoKick.value.x,i.spineRoll+=this.torsoKick.value.z*.5,i.hips.x+=this.rootKick.value.x,i.hips.z+=this.rootKick.value.z,i.hips.y-=Math.max(0,this.torsoKick.value.x)*.08,this.torsoKick.value.x>.05&&(e.position.y-=this.torsoKick.value.x*.25,t.position.y-=this.torsoKick.value.x*.2,e.position.z-=this.torsoKick.value.x*.1);let a=Math.max(0,this.rootKick.value.y);i.hips.y+=a,n.heel+=a*6,r.heel+=a*6;let o=this.coverKick.value.x;if(Math.abs(o)>.002){let e=o>0?this.hand.R:this.hand.L;e.position.y-=Math.abs(o)*.9,e.position.x+=o*.2,e.position.z-=Math.abs(o)*.25,e.pole.y-=Math.abs(o)*3}}applyRefereePose(e,t,n,r,i,a,o,s,c=0){let l=this.torso;l.hipsYaw=0,l.shouldersYaw=0,l.hipsPitch=0,l.spinePitch=.06,l.headYaw=Math.sin(o*.7)*.08,l.headPitch=.08,l.hips.y=kM.hipsHeight+.03,l.hips.x=0,l.hips.z=0,r.toe.set(.12*e,0,1).normalize(),i.toe.set(-.12*e,0,1).normalize(),r.pole.copy(r.toe).setY(.3).normalize(),i.pole.copy(i.toe).setY(.3).normalize();let u=Math.sin(o*1.3)*.01;if(t.position.set(.27*e,.86+u,.12),n.position.set(-.27*e,.86-u,.12),t.pole.set(.5*e,-.4,-.8).normalize(),n.pole.set(-.5*e,-.4,-.8).normalize(),t.knuckles.set(.15*e,-.9,.35).normalize(),n.knuckles.set(-.15*e,-.9,.35).normalize(),t.palm.set(-.9*e,.1,.35).normalize(),n.palm.set(.9*e,.1,.35).normalize(),this.refereeCounting){this.countChangedTick??=s;let r=hF((s-this.countChangedTick)/ee,0,1),i=r0){let r=Math.min(1,c/12),i=Math.sin(o*9.5);l.hips.y-=.09*r,l.hips.x+=i*.05*r,l.spineRoll+=i*.18*r,l.headRoll-=i*.35*r,l.headPitch+=.25*r,t.position.x+=.18*e*r,n.position.x-=.18*e*r,t.position.y-=.1*r,n.position.y-=.1*r}}updateDownState(e,t,n,r){if(this.riseBlendAge+=t,e.is_downed||this.forcedDown){if(this.downState===`up`||this.downState===`rising`)this.fallFromGetUp=this.downState===`rising`,this.fallFromGetUp&&(WI(this.fallStart,this.downResult),this.fallStartStand=this.downStand),this.downState=`falling`,this.fallAge=0,this.riseProgress=0,this.riseRootFrom.copy(this.riseRoot),this.landSettled=!1,this.fallenFromPhysics=!1,this.downPolesSet=!1,this.ragdoll?.clearRise(),this.authoredNextFall?this.ragdoll?.forget():n||this.startFall(e),this.authoredNextFall=!1;else if(this.downState===`falling`)this.fallAge+=t,this.fallAge>=IF&&(this.downState=`down`);else if(this.fallKneel)this.riseProgress=RF;else{let n=(!this.forcedDown&&!this.heldDown&&e.get_up_required>0?hF(e.get_up_meter/e.get_up_required,0,1):0)*RF;if(this.ragdoll?.active===!0&&!this.ragdoll.handingOver){if(n<=0)return;this.handOverFall(e)}this.riseProgress+=hF(n-this.riseProgress,-.4*t,VF*t)}return}if((this.downState===`down`||this.downState===`falling`)&&(this.downState=`rising`,this.ragdoll?.active===!0&&!this.ragdoll.handingOver&&this.handOverFall(e),this.fallKneel&&(this.riseProgress=Math.max(this.riseProgress,RF)),this.riseFrom=this.riseProgress,this.feetInitialized=!1),this.downState!==`rising`)return;let i=r>.3||this.punchActive,a=(1-this.riseFrom)/(i?BF:zF);this.riseProgress=Math.min(1,this.riseProgress+(this.riseProgress=1&&(this.downState=`up`,this.fallKneel=!1)}startFall(e){let t=this.ragdoll;t!==null&&(this.rootX!==null&&Math.hypot(this.place.x-this.rootX,this.place.z-this.rootZ)>qF&&(this.rootX=this.place.x,this.rootZ=this.place.z,this.boxer.root.position.set(this.rootX,0,this.rootZ)),t.start(`crumple`),e.get_up_count>0&&(t.settle(),this.fallAge=IF))}handOverFall(e){let t=this.ragdoll;if(t===null||!t.active||t.handingOver)return;let n=e.stance===`orthodox`?1:-1,r=this.boxer.rig.bones;this.boxer.root.updateMatrixWorld(!0);let i=this.scratchC.set(this.rootX??0,0,this.rootZ),a=this.scratchQ.setFromAxisAngle(QI,-this.yaw),o=this.fallen,s=(e,t)=>t.setFromMatrixPosition(e.matrixWorld).sub(i).applyQuaternion(a),c=(e,t,n,r)=>FI(bI.setFromQuaternion(e.getWorldQuaternion(yI).premultiply(a),`YXZ`),t,n,r);s(r.hips,o.hips),this.landProne=t.faceDown();let l=Math.abs(o.hips.x)>.12?Math.sign(o.hips.x):0,u=this.landProne?jI(this.downTo,DI,OI,n,l,this.boxer.rig.metrics.ankleHeight):jI(this.downTo,TI,EI,n,l,this.boxer.rig.metrics.ankleHeight);this.landSide=l,this.landShift.set(o.hips.x-u.hips.x,0,o.hips.z-u.hips.z);let d=c(r.hips,u.hipsPitch,u.hipsYaw,u.hipsRoll);o.hipsPitch=d.x,o.hipsYaw=d.y,o.hipsRoll=d.z;let f=c(r.upperChest,o.hipsPitch,o.hipsYaw,o.hipsRoll);o.shouldersYaw=f.y,o.spinePitch=f.x-o.hipsPitch,o.spineRoll=f.z-o.hipsRoll;let p=c(r.head,f.x,f.y,f.z);o.headPitch=p.x,o.turn=p.y,o.headRoll=p.z,s(n>0?r.gloveL:r.gloveR,o.leadHand),s(n>0?r.gloveR:r.gloveL,o.rearHand),s(n>0?r.ankleL:r.ankleR,o.leadFoot),s(n>0?r.ankleR:r.ankleL,o.rearFoot);let m=this.boxer.rig.metrics.ankleHeight;o.leadFoot.y=Math.max(o.leadFoot.y,m),o.rearFoot.y=Math.max(o.rearFoot.y,m);let h=(e,t,n,r,i)=>{let o=s(e,this.scratchB),c=s(n,this.scratchD).sub(o).normalize();s(t,r).sub(o),r.addScaledVector(fI.copy(i).applyQuaternion(e.getWorldQuaternion(yI)).applyQuaternion(a),vI),r.addScaledVector(c,-r.dot(c)),r.lengthSq()>1e-6?r.normalize():r.copy(i===hI?pI:mI)},g=n>0;h(g?r.hipL:r.hipR,g?r.kneeL:r.kneeR,g?r.ankleL:r.ankleR,o.leadKnee,hI),h(g?r.hipR:r.hipL,g?r.kneeR:r.kneeL,g?r.ankleR:r.ankleL,o.rearKnee,hI),h(g?r.shoulderL:r.shoulderR,g?r.elbowL:r.elbowR,g?r.gloveL:r.gloveR,o.leadElbow,g?gI:_I),h(g?r.shoulderR:r.shoulderL,g?r.elbowR:r.elbowL,g?r.gloveR:r.gloveL,o.rearElbow,g?_I:gI);let _=(e,t,n)=>{let r=e.getWorldQuaternion(yI).premultiply(a);t.set(0,1,0).applyQuaternion(r),n.set(0,0,1).applyQuaternion(r)};_(g?r.gloveL:r.gloveR,o.leadKnuckles,o.leadPalm),_(g?r.gloveR:r.gloveL,o.rearKnuckles,o.rearPalm),o.ownJoints=1,o.leadHeel=0,o.rearHeel=0,o.palmsDown=+!!this.landProne,this.fallenFromPhysics=!0,this.landSettled=!0,this.downPolesSet=!1,t.handOver(),this.riseBlendAge=0;let v=this.scratchE.set(t.pelvis(this.scratchD).x-(this.rootX??0),0,this.scratchD.z-this.rootZ),y=this.scratchB.copy(v).applyQuaternion(a);for(let e of[o.hips,o.leadHand,o.rearHand,o.leadFoot,o.rearFoot])e.x-=y.x,e.z-=y.z;t.shiftRise(this.scratchC.copy(v).negate()),this.rootX=(this.rootX??0)+v.x,this.rootZ+=v.z,this.boxer.root.position.set(this.rootX,0,this.rootZ),this.riseRoot.set(this.rootX-this.mapping.x(e.x)-this.touchOffset.x,0,this.rootZ-this.mapping.z(e.y)-this.touchOffset.z),this.riseRootFrom.copy(this.riseRoot)}walkBackFromTheFall(e){let t=this.downState===`rising`?1-mM(RF,1,this.riseProgress):this.downState===`up`?0:1,n=this.riseRootFrom.x*t,r=this.riseRootFrom.z*t;e>0?this.riseRootVelocity.set((n-this.riseRoot.x)/e,0,(r-this.riseRoot.z)/e):this.riseRootVelocity.set(0,0,0),this.riseRoot.set(n,0,r),t===0&&this.riseRootFrom.set(0,0,0)}steadyJointPoles(e,t,n,r,i,a){if(this.poleSettle=this.downState===`up`?Math.max(0,this.poleSettle-a):WF,this.poleSettle<=0||this.ragdoll?.active===!0&&!this.ragdoll.handingOver){this.downPolesSet=!1;return}let o=this.boxer.rig.bones,s=e>0;this.characterInverse.copy(this.boxer.root.matrixWorld).invert();for(let e=0;e<4;e+=1){let c=e<2,l=e%2==0,u=l===s,d=c?u?o.hipL:o.hipR:u?o.shoulderL:o.shoulderR,f=c?l?r:i:l?t:n,p=f.position,m=f.pole,h=this.downPoles[e];if(!this.downPolesSet){h.copy(m);continue}let g=this.scratchB.setFromMatrixPosition(d.matrixWorld).applyMatrix4(this.characterInverse).sub(p).negate();if(g.lengthSq()<1e-6){h.copy(m);continue}g.normalize();let _=this.scratchD.copy(h).addScaledVector(g,-h.dot(g)),v=this.scratchE.copy(m).addScaledVector(g,-m.dot(g));if(_.lengthSq()<1e-4||v.lengthSq()<1e-4){h.copy(m);continue}let y=Math.atan2(this.scratch.crossVectors(_,v).dot(g),_.dot(v)),b=UF*Math.max(a,1/120);if(Math.abs(y)<=b){h.copy(m);continue}m.copy(_.normalize().applyAxisAngle(g,Math.sign(y)*b)),h.copy(m)}this.downPolesSet=!0}applyWindedPose(e,t,n,r,i){let a=this.torso,o=K.lerp,s=this.windedSide,c=Math.sin(t*23)*.006;a.hips.y=o(a.hips.y,kM.hipsHeight-.1,e),a.hips.z=o(a.hips.z,-.04,e),a.hipsPitch=o(a.hipsPitch,.2,e),a.spinePitch=o(a.spinePitch,.62+c,e),a.spineRoll=o(a.spineRoll,s*.16,e),a.headPitch=o(a.headPitch,.38,e);let l=s>0?this.hand.L:this.hand.R,u=l===r?i:r;l.position.lerp($.set(s*.13,.98,.17),e),l.palm.lerp($.set(-s*.6,0,-.8),e).normalize(),l.knuckles.lerp($.set(-s*.5,.5,.2),e).normalize(),l.pole.lerp($.set(s*.9,-.3,-.3),e).normalize(),u.position.lerp($.set(-s*.2,.86,.3),e),u.pole.lerp($.set(-s*.8,-.6,0),e).normalize()}applyTouchGlovesPose(e,t,n,r){let i=this.torso,a=K.lerp;i.hips.z=a(i.hips.z,.06,e),i.hipsYaw=a(i.hipsYaw,i.hipsYaw*.4,e),i.shouldersYaw=a(i.shouldersYaw,0,e),i.spinePitch=a(i.spinePitch,.12,e),i.headPitch=a(i.headPitch,.1,e),n.position.lerp($.set(.11*t,1.24,.5),e),r.position.lerp($.set(-.11*t,1.22,.47),e),n.palm.lerp($.set(-t,0,0),e).normalize(),r.palm.lerp($.set(t,0,0),e).normalize(),n.knuckles.lerp($.set(0,.15,1),e).normalize(),r.knuckles.lerp($.set(0,.15,1),e).normalize(),n.pole.lerp($.set(.7*t,-.7,0),e).normalize(),r.pole.lerp($.set(-.7*t,-.7,0),e).normalize()}touchWalk(e,t,n,r){this.countdownEnd=qI(this.countdownEnd,r,this.countdownTicks);let i=this.countdownEnd===null?0:JI(this.countdownEnd-r),a=this.mapping.x(t.x)-this.mapping.x(e.x),o=this.mapping.z(t.y)-this.mapping.z(e.y),s=Math.hypot(a,o),c=s>nI?(s-nI)/2/s*i:0;return this.touchVelocity.set(a*c-this.touchOffset.x,0,o*c-this.touchOffset.z).divideScalar(Math.max(n,.001)).clampLength(0,sI),this.touchOffset.set(a*c,0,o*c)}applyCelebratePose(e,t,n,r,i,a,o){let s=this.torso,c=K.lerp,l=Math.sin(t*6)*.04;s.hips.y=c(s.hips.y,kM.hipsHeight+.035+l*.5,e),s.hipsYaw=c(s.hipsYaw,0,e),s.hipsPitch=c(s.hipsPitch,-.12,e),s.hipsRoll=c(s.hipsRoll,0,e),s.shouldersYaw=c(s.shouldersYaw,0,e),s.spinePitch=c(s.spinePitch,-.1,e),s.headPitch=c(s.headPitch,-.25,e),r.position.lerp($.set(.3*n,1.86+l,.08),e),i.position.lerp($.set(-.3*n,1.84+l,.06),e),r.palm.lerp($.set(0,0,1),e).normalize(),i.palm.lerp($.set(0,0,1),e).normalize(),r.knuckles.lerp($.set(.15*n,1,0),e).normalize(),i.knuckles.lerp($.set(-.15*n,1,0),e).normalize(),r.pole.lerp($.set(n,.1,-.3),e).normalize(),i.pole.lerp($.set(-n,.1,-.3),e).normalize(),a.heel=c(a.heel,.45,e),o.heel=c(o.heel,.45,e)}applyAttendPose(e,t,n,r,i){let a=this.torso,o=K.lerp,s=Math.sin(t*3.1)*.03;a.hips.z=o(a.hips.z,.12,e),a.hips.y=o(a.hips.y,kM.hipsHeight-.04,e),a.hipsPitch=o(a.hipsPitch,.3,e),a.spinePitch=o(a.spinePitch,.42,e),a.headPitch=o(a.headPitch,.4,e),r.position.lerp($.set(.2*n,1.3+s,.62),e),i.position.lerp($.set(-.18*n,1.24-s,.58),e),r.palm.lerp($.set(0,-.6,.8),e).normalize(),i.palm.lerp($.set(0,-.6,.8),e).normalize(),r.knuckles.lerp($.set(.1*n,.5,1),e).normalize(),i.knuckles.lerp($.set(-.1*n,.5,1),e).normalize(),r.pole.lerp($.set(.8*n,-.5,-.1),e).normalize(),i.pole.lerp($.set(-.8*n,-.5,-.1),e).normalize()}applyTreatPose(e,t,n,r,i,a,o){let s=this.torso,c=K.lerp,l=this.treatScratch.set(this.rootX??0,0,this.rootZ),u=this.scratchQ.setFromAxisAngle(QI,-this.yaw),d=$.copy(this.treatTarget).sub(l).applyQuaternion(u),f=this.treatFacingLocal.copy(this.treatFacing).applyQuaternion(u),p=f.z,m=-f.x,h=Math.sin(t*2.6)*.006;s.hips.lerp(this.treatScratch.set(0,.62,.04),e),s.hipsYaw=c(s.hipsYaw,0,e),s.hipsPitch=c(s.hipsPitch,.22,e),s.hipsRoll=c(s.hipsRoll,0,e),s.shouldersYaw=c(s.shouldersYaw,0,e),s.spinePitch=c(s.spinePitch,.3,e),s.headPitch=c(s.headPitch,.2,e),a.position.x=c(a.position.x,.24*n,e),a.position.z=c(a.position.z,.14,e),o.position.x=c(o.position.x,-.2*n,e),o.position.z=c(o.position.z,-.2,e),o.heel=c(o.heel,.55,e),a.toe.lerp(this.treatScratch.set(.2*n,0,1),e).normalize(),o.toe.lerp(this.treatScratch.set(-.1*n,0,1),e).normalize(),a.pole.lerp(this.treatScratch.set(.25*n,.4,1),e).normalize(),o.pole.lerp(this.treatScratch.set(-.2*n,.4,1),e).normalize();let g=this.treatProp===`bottle`,_=g?.3:.08-h;r.position.lerp(this.treatScratch.set(d.x+f.x*_,d.y+(g?.02:-.07),d.z+f.z*_),e),g?r.knuckles.lerp(this.treatScratch.set(-f.x,-.25,-f.z),e).normalize():r.knuckles.lerp(this.treatScratch.set(0,1,.05),e).normalize(),r.palm.lerp(g?this.treatScratch.set(0,-1,0):this.treatScratch.set(-f.x,0,-f.z),e).normalize(),r.pole.lerp(this.treatScratch.set(.85*n,-.35,.1),e).normalize();let v=this.treatSide*.135;i.position.lerp(this.treatScratch.set(d.x-p*v+f.x*.05,d.y-.2,d.z-m*v+f.z*.05),e),i.knuckles.lerp(this.treatScratch.set(0,.9,.4),e).normalize(),i.palm.lerp(this.treatScratch.set(p*this.treatSide*.8-f.x*.6,.1,m*this.treatSide*.8-f.z*.6),e).normalize(),i.pole.lerp(this.treatScratch.set(-.85*n,-.4,.1),e).normalize()}applyBreakPose(e,t,n,r){let i=this.torso,a=K.lerp;i.hipsPitch=a(i.hipsPitch,.14,e),i.spinePitch=a(i.spinePitch,.08,e);let o=this.scratchC.set(.48*t,1.22,.52),s=this.scratchD.set(-.48*t,1.22,.52);if(this.breakAimed){let[e,n]=this.breakFighters,r=this.scratch.subVectors(n,e).setY(0).normalize(),i=this.scratchQ.setFromAxisAngle(QI,-this.yaw),a=this.scratchB.set(this.rootX??0,0,this.rootZ);o.copy(e).addScaledVector(r,QF).sub(a).applyQuaternion(i),s.copy(n).addScaledVector(r,-QF).sub(a).applyQuaternion(i),o.x*tIF*.15;let s=this.downResult;if(this.downState!==`falling`){let a=this.riseProgress,c=0;if(this.fallKneel)c=mM(RF,1,a),GI(s,this.placeKneel(this.downFrom,e),o,c);else if(a0==t>0;return e.hips.set(.02*t,.53,-.06),e.hipsYaw=kM.bladeYaw*t*.3,e.hipsPitch=.24,e.hipsRoll=0,e.shouldersYaw=kM.bladeYaw*t*.2,e.spinePitch=.62,e.headPitch=.48,(r?e.leadHand:e.rearHand).set(n*.13,.66,.2),(r?e.rearHand:e.leadHand).set(.13*t,.66,.37),e.leadFoot.set(.16*t,.125,.32),e.rearFoot.set(-.12*t,.12,-.5),e.leadHeel=0,e.rearHeel=0,e.palmsDown=1,e}placeLying(e){let t=this.boxer.rig.metrics.ankleHeight;return II(this.landProne?jI(this.downFrom,DI,OI,e,this.landSide,t):jI(this.downFrom,TI,EI,e,this.landSide,t),this.landShift)}placeDown(e,t,n){return jI(e,t,null,n,0,this.boxer.rig.metrics.ankleHeight)}chooseLanding(e){let t=this.boxer.rig.metrics.ankleHeight,n=1/0;for(let r=0;r=n||(n=u.length()+o,this.landProne=s,this.landSide=c,this.landShift.copy(u))}}ropeShift(e,t){let n=this.scratchQ.setFromAxisAngle(QI,this.yaw);bI.set(e.hipsPitch+e.spinePitch*.7,e.hipsYaw,e.hipsRoll,`YXZ`),BI[0].set(0,RI,0).applyEuler(bI).add(e.hips),BI[1].set(.2,zI,0).applyEuler(bI).add(e.hips),BI[2].set(-.2,zI,0).applyEuler(bI).add(e.hips),BI[3].copy(e.leadHand),BI[4].copy(e.rearHand),BI[5].copy(e.leadFoot).z+=e.leadHeel>0?.25:.19,BI[6].copy(e.rearFoot).z+=e.rearHeel>0?.25:.19,BI[7].copy(e.hips);let r=1/0,i=-1/0,a=1/0,o=-1/0;for(let e=0;e0==t>0,c=s?n:r,l=s?r:n;i.pole.lerp($.set(.15*t,.35,1),e).normalize(),a.pole.lerp($.set(-.1*t,-1,.3),e).normalize(),i.toe.lerp($.set(.15*t,0,1),e).normalize(),a.toe.lerp($.set(0,-.35,-1),e).normalize(),c.palm.lerp($.set(-o*.75,0,-.65),e).normalize(),c.knuckles.lerp($.set(-o*.35,.25,.9),e).normalize(),c.pole.lerp($.set(o*.9,-.35,-.25),e).normalize(),l.palm.lerp($.set(0,-1,.1),e).normalize(),l.knuckles.lerp($.set(.2*t,-.2,1),e).normalize(),l.pole.lerp($.set(t*.7,.1,-.7),e).normalize()}writeDown(e,t,n,r,i,a,o,s){let c=this.torso,l=1-s;this.downStand=s,c.hips.copy(e.hips),c.hipsYaw=e.hipsYaw,c.hipsPitch=e.hipsPitch,c.hipsRoll=e.hipsRoll,c.shouldersYaw=e.shouldersYaw,c.spinePitch=e.spinePitch,c.spineRoll=c.spineRoll*s+e.spineRoll,c.headPitch=e.headPitch,c.headYaw=c.headYaw*s+e.turn,c.headRoll=c.headRoll*s+e.headRoll,c.headOffset.multiplyScalar(s),c.headOffset.z-=o,n.position.copy(e.leadHand),r.position.copy(e.rearHand),CI(n,t,e.palmsDown,l),CI(r,-t,e.palmsDown,l),i.position.copy(e.leadFoot),a.position.copy(e.rearFoot),i.toe.lerp(fI.set(.2*t,0,1).normalize(),l).normalize(),a.toe.lerp(fI.set(-.2*t,0,1).normalize(),l).normalize(),i.heel=e.leadHeel,a.heel=e.rearHeel;let u=fI.set(0,0,1).applyEuler(bI.set(e.hipsPitch,e.hipsYaw,e.hipsRoll,`YXZ`));if(i.pole.lerp(u,l),a.pole.lerp(u,l),e.ownJoints>0){let t=e.ownJoints*l;PI(i.pole,e.leadKnee,t),PI(a.pole,e.rearKnee,t),PI(n.pole,e.leadElbow,t),PI(r.pole,e.rearElbow,t),PI(n.knuckles,e.leadKnuckles,t),PI(n.palm,e.leadPalm,t),PI(r.knuckles,e.rearKnuckles,t),PI(r.palm,e.rearPalm,t)}}applyDislocation(){if(this.dislocation!==`jaw`)return;let e=this.boxer.bone(`head`);e!==null&&(e.quaternion.multiply(dI),e.updateWorldMatrix(!1,!0))}dispose(){this.stool.dispose(),this.enswell.dispose(),this.bottle.dispose(),this.boxer.dispose()}},YF=.44,XF=.2,ZF=.75,QF=.26,$F=1.2,eI=48,tI=14,nI=1.34,rI=80,iI=56,aI=24,oI=4,sI=1.5,cI=60,lI=4,uI=.15,$=new J,dI=new Dm().setFromEuler(new sh(.08,.2,-.22)),fI=new J,pI=new J(0,0,1),mI=new J(0,-1,0),hI=new J(0,0,1),gI=new J(1,0,0),_I=new J(-1,0,0),vI=.04,yI=new Dm,bI=new sh,xI={pole:pM(.4,.9,.2),knuckles:pM(.6,.2,-.75).normalize(),palm:pM(0,1,.2).normalize()},SI={pole:pM(.6,.2,-.7),knuckles:pM(.25,-.1,1).normalize(),palm:pM(0,-1,.1).normalize()};function CI(e,t,n,r){fI.lerpVectors(xI.pole,SI.pole,n),fI.x*=t,e.pole.lerp(fI,r),fI.lerpVectors(xI.knuckles,SI.knuckles,n),fI.x*=t,e.knuckles.lerp(fI.normalize(),r).normalize(),fI.lerpVectors(xI.palm,SI.palm,n),fI.x*=t,e.palm.lerp(fI.normalize(),r).normalize()}function wI(e={}){return{hips:new J,hipsYaw:0,hipsPitch:0,hipsRoll:0,shouldersYaw:0,spinePitch:0,spineRoll:0,headPitch:0,headRoll:0,leadHand:new J,rearHand:new J,leadFoot:new J,rearFoot:new J,leadHeel:0,rearHeel:0,palmsDown:0,turn:0,leadKnee:new J(0,0,1),rearKnee:new J(0,0,1),leadElbow:new J(0,-1,0),rearElbow:new J(0,-1,0),leadKnuckles:new J(0,0,1),leadPalm:new J(0,-1,0),rearKnuckles:new J(0,0,1),rearPalm:new J(0,-1,0),ownJoints:0,...e}}var TI=wI({hips:pM(0,.14,-.4),hipsPitch:-1.42,spinePitch:.1,headPitch:-.5,leadHand:pM(.52,.1,-.62),rearHand:pM(-.5,.1,-.7),leadFoot:pM(.17,0,.16),rearFoot:pM(-.16,0,-.02)}),EI=wI({hips:pM(.22,0,0),hipsYaw:-.35,hipsRoll:-.25,shouldersYaw:-.2,leadFoot:pM(.05,0,0),rearFoot:pM(.05,0,0)}),DI=wI({hips:pM(0,.25,.32),hipsPitch:1.5,spinePitch:.05,headPitch:.2,palmsDown:1,leadHand:pM(.34,.12,.78),rearHand:pM(-.3,.12,.62),leadFoot:pM(.16,0,-.82),rearFoot:pM(-.15,0,-.86),leadHeel:1.3,rearHeel:1.3}),OI=wI({hips:pM(.12,0,0),hipsYaw:.3,hipsRoll:.15,shouldersYaw:.15,leadFoot:pM(.04,0,0),rearFoot:pM(.04,0,0)}),kI=wI({hips:pM(.05,.52,-.2),hipsYaw:kM.bladeYaw*.15,hipsPitch:1.38,shouldersYaw:kM.bladeYaw*.15,spinePitch:.35,headPitch:1,palmsDown:1,leadHand:pM(.2,.115,.36),rearHand:pM(-.2,.115,.32),leadFoot:pM(.15,0,-.74),rearFoot:pM(-.14,0,-.78),leadHeel:1.25,rearHeel:1.25}),AI=wI({hips:pM(0,.47,-.05),hipsYaw:kM.bladeYaw*.12,hipsPitch:.2,shouldersYaw:kM.bladeYaw*.4,spinePitch:.3,headPitch:.2,palmsDown:1,leadHand:pM(.15,.68,.32),rearHand:pM(-.26,.42,.02),leadFoot:pM(.15,0,.36),rearFoot:pM(-.13,0,-.7),rearHeel:1.2});function jI(e,t,n,r,i,a){return e.hips.set(t.hips.x*r,t.hips.y,t.hips.z),e.hipsYaw=t.hipsYaw*r,e.hipsPitch=t.hipsPitch,e.hipsRoll=t.hipsRoll*r,e.shouldersYaw=t.shouldersYaw*r,e.spinePitch=t.spinePitch,e.spineRoll=0,e.headPitch=t.headPitch,e.headRoll=0,AM(t.leadHand,r,e.leadHand),AM(t.rearHand,r,e.rearHand),AM(t.leadFoot,r,e.leadFoot).y+=a,AM(t.rearFoot,r,e.rearFoot).y+=a,e.leadHeel=t.leadHeel,e.rearHeel=t.rearHeel,e.palmsDown=t.palmsDown,e.turn=0,e.ownJoints=0,n===null||i===0?e:(e.hips.addScaledVector(n.hips,i),e.hipsYaw+=n.hipsYaw*i,e.hipsPitch+=n.hipsPitch*i,e.hipsRoll+=n.hipsRoll*i,e.shouldersYaw+=n.shouldersYaw*i,e.spinePitch+=n.spinePitch*i,e.headPitch+=n.headPitch*i,e.leadHand.addScaledVector(n.leadHand,i),e.rearHand.addScaledVector(n.rearHand,i),e.leadFoot.addScaledVector(n.leadFoot,i),e.rearFoot.addScaledVector(n.rearFoot,i),e)}var MI=e=>Math.atan2(Math.sin(e),Math.cos(e)),NI=new J;function PI(e,t,n){if(n<=0)return e;e.normalize();let r=e.angleTo(t);return r<1e-4?e:(NI.crossVectors(e,t),NI.lengthSq()<1e-8&&NI.crossVectors(e,Math.abs(e.y)<.9?QI:pI),e.applyAxisAngle(NI.normalize(),r*Math.min(1,n)))}function FI(e,t,n,r){let i=t+MI(e.x-t),a=n+MI(e.y-n),o=r+MI(e.z-r),s=t+MI(Math.PI-e.x-t),c=n+MI(e.y+Math.PI-n),l=r+MI(e.z+Math.PI-r);return Math.abs(i-t)+Math.abs(a-n)+Math.abs(o-r)<=Math.abs(s-t)+Math.abs(c-n)+Math.abs(l-r)?e.set(i,a,o,`YXZ`):e.set(s,c,l,`YXZ`)}function II(e,t){return e.hips.add(t),e.leadHand.add(t),e.rearHand.add(t),e.leadFoot.add(t),e.rearFoot.add(t),e}var LI=qw*.72-.05,RI=.78,zI=.5,BI=Array.from({length:8},()=>new J),VI=[.17,.22,.22,.13,.13,.12,.12,.2],HI=[[!1,1,0],[!1,0,.15],[!1,-1,.3],[!0,1,.4],[!0,0,.5],[!0,-1,.6]];function UI(e,t){return e<-LI&&t>LI?-(e+t)/2:e<-LI?-LI-e:t>LI?LI-t:0}function WI(e,t){return GI(e,t,t,0)}function GI(e,t,n,r){let i=K.lerp;return e.hips.copy(t.hips).lerp(n.hips,r),e.hipsYaw=i(t.hipsYaw,n.hipsYaw,r),e.hipsPitch=i(t.hipsPitch,n.hipsPitch,r),e.hipsRoll=i(t.hipsRoll,n.hipsRoll,r),e.shouldersYaw=i(t.shouldersYaw,n.shouldersYaw,r),e.spinePitch=i(t.spinePitch,n.spinePitch,r),e.spineRoll=i(t.spineRoll,n.spineRoll,r),e.headPitch=i(t.headPitch,n.headPitch,r),e.headRoll=i(t.headRoll,n.headRoll,r),e.leadHand.copy(t.leadHand).lerp(n.leadHand,r),e.rearHand.copy(t.rearHand).lerp(n.rearHand,r),e.leadFoot.copy(t.leadFoot).lerp(n.leadFoot,r),e.rearFoot.copy(t.rearFoot).lerp(n.rearFoot,r),e.leadHeel=i(t.leadHeel,n.leadHeel,r),e.rearHeel=i(t.rearHeel,n.rearHeel,r),e.palmsDown=i(t.palmsDown,n.palmsDown,r),e.turn=i(t.turn,n.turn,r),PI(e.leadKnee.copy(t.leadKnee),n.leadKnee,r),PI(e.rearKnee.copy(t.rearKnee),n.rearKnee,r),PI(e.leadElbow.copy(t.leadElbow),n.leadElbow,r),PI(e.rearElbow.copy(t.rearElbow),n.rearElbow,r),PI(e.leadKnuckles.copy(t.leadKnuckles),n.leadKnuckles,r),PI(e.leadPalm.copy(t.leadPalm),n.leadPalm,r),PI(e.rearKnuckles.copy(t.rearKnuckles),n.rearKnuckles,r),PI(e.rearPalm.copy(t.rearPalm),n.rearPalm,r),e.ownJoints=i(t.ownJoints,n.ownJoints,r),e}var KI=3;function qI(e,t,n){if(n===null)return null;let r=t+n;return e===null||Math.abs(r-e)>KI?r:e}function JI(e){return(1-mM(iI,rI,e))*mM(oI,aI,e)}function YI(){let e=new Th;e.name=`enswell`,e.visible=!1;let t=new sv(3.2,3.2,.9,20),n=new sv(.8,.8,6,10),r=new $v({color:13159634,roughness:.3,metalness:.9}),i=new t_(t,r);i.rotation.x=Math.PI/2,i.position.set(0,9.5,3.4),e.add(i);let a=new t_(n,r);return a.position.set(0,5.5,2.4),e.add(a),{group:e,dispose:()=>{t.dispose(),n.dispose(),r.dispose()}}}function XI(){let e=new Th;e.name=`bottle`,e.visible=!1;let t=new sv(3.3,3.3,15,18),n=new sv(1.3,3.3,3,18),r=new sv(.7,1.1,3.2,10),i=new $v({color:14280430,roughness:.32,metalness:0}),a=new $v({color:1920728,roughness:.5,metalness:0}),o=new t_(t,i);o.position.set(0,9,2.6);let s=new t_(n,i);s.position.set(0,18,2.6);let c=new t_(r,a);return c.position.set(0,21,2.6),e.add(o,s,c),{group:e,dispose:()=>{t.dispose(),n.dispose(),r.dispose(),i.dispose(),a.dispose()}}}function ZI(){let e=new Th;e.name=`stool`,e.visible=!1;let t=new sv(.17,.17,.035,18),n=new sv(.012,.014,YF-.02,8),r=new $v({color:13222581,roughness:.85}),i=new $v({color:2764083,roughness:.45,metalness:.6}),a=new t_(t,r);a.position.y=YF-.0175,a.castShadow=!0,e.add(a);for(let t=0;t<4;t+=1){let r=Math.PI/4+t*Math.PI/2,a=new t_(n,i);a.position.set(Math.cos(r)*.13,(YF-.02)/2,Math.sin(r)*.13),a.rotation.set(-Math.sin(r)*.12,0,Math.cos(r)*.12),a.castShadow=!0,e.add(a)}return{group:e,dispose:()=>{t.dispose(),n.dispose(),r.dispose(),i.dispose()}}}var QI=new J(0,1,0),$I=6,eL=3,tL=1.5,nL=2.5,rL=1.5,iL=.55,aL=2.1,oL=.42,sL=.22,cL=.08,lL=.5,uL=.5,dL=new Set([`hit`,`counter_hit`,`block`,`perfect_block`,`referee_hit`]),fL=new Set([`slip_left`,`slip_right`,`weave`,`pull`]),pL=40,mL=y/a,hL=.12,gL=30,_L=2;function vL(e,t,n){if(e0)||e>1e3||(this.elapsed+=e,this.frames+=1,this.elapsede.before*.9)return this.scale=e.previous,this.holdWindows=Math.min(CL,xL*2**this.fruitlessAttempts),this.fruitlessAttempts+=1,!0;this.fruitlessAttempts=0}if(this.raised!==null){let e=this.raised;if(t>this.options.slowMs)return this.raised=null,this.scale=e.previous,this.fastWindows=0,this.raiseHoldWindows=Math.min(CL,SL*2**this.failedRaises),this.failedRaises+=1,!0;e.windows+=1,e.windows>=TL&&(this.raised=null,this.failedRaises=0)}if(t>this.options.slowMs){if(this.fastWindows=0,this.holdWindows>0)return--this.holdWindows,!1;if(this.scale<=this.options.minimum)return!1;let e=this.scale;return this.scale=Math.max(this.options.minimum,this.scale-this.options.step),this.pending={before:t,previous:e},!0}return t0?(--this.raiseHoldWindows,!1):this.fastWindows>=wL&&this.scalethis.value?7:.9;return this.value+=(e-this.value)*(1-Math.exp(-n*Math.max(0,t))),e===0&&this.value<.003&&(this.value=0),this.value}},jL=.4,ML=.5,NL={before:24,after:24,speed:.5};function PL(e,t,n=30,r=jL,i=42,a=33){let o=t.tick-i,s=t.tick+a,c=e.filter(e=>e.tick>=o-1&&e.tick<=s+1),l=c.at(-1),u=l!==void 0&&l.result!==null&&l.tick({...l,tick:l.tick+t+1,events:[]}))]:c,d=u[0],f=u.at(-1);if(d===void 0||f===void 0||u.length<8||d.tick>t.tick-12||f.tick=1&&this.lastHeat<1&&!r&&(this.flare=1),this.lastHeat=t,this.flare=Math.max(0,this.flare-n/zL);let a=this.mesh.material;if(a.opacity=Math.min(1,t*.8+this.flare*.6),this.mesh.visible=a.opacity>.01,!this.mesh.visible)return;this.mesh.position.copy(e),this.mesh.quaternion.copy(i.quaternion);let o=LL*(.55+.45*t)*(1+this.flare*RL);this.mesh.scale.set(o,o,1)}get active(){return this.mesh.visible}standIn(){return new t_(this.mesh.geometry,this.mesh.material)}reset(){this.flare=0,this.lastHeat=0,this.mesh.material.opacity=0,this.mesh.visible=!1}dispose(){this.mesh.geometry.dispose(),this.mesh.material.dispose()}},qL=class{group=new Th;flash;ring;age=1/0;constructor(e){this.flash=GL(e,new Y(1,.86,.62)),this.flash.material.depthTest=!1,this.ring=new t_(new Bv(.42,.5,40),new Ug({color:IL,blending:2,depthWrite:!1,transparent:!0,side:2})),this.flash.renderOrder=6,this.ring.renderOrder=6,this.group.add(this.flash,this.ring),this.group.visible=!1}fire(e){this.age=0,this.group.position.copy(e)}update(e,t){this.age+=e;let n=this.age/BL,r=this.age/HL;if(this.group.visible=r<1,!this.group.visible)return;this.group.quaternion.copy(t.quaternion),this.flash.visible=n<1;let i=VL*(.35+.65*Math.sqrt(Math.min(1,n)));this.flash.scale.set(i,i,1),this.flash.material.opacity=(1-Math.min(1,n))**2;let a=UL*(.15+.85*(1-(1-r)**3));this.ring.scale.set(a,a,a),this.ring.material.opacity=.9*(1-r)}get active(){return this.group.visible}standIns(){return[new t_(this.flash.geometry,this.flash.material),new t_(this.ring.geometry,this.ring.material)]}reset(){this.age=1/0,this.group.visible=!1}dispose(){this.flash.geometry.dispose(),this.flash.material.dispose(),this.ring.geometry.dispose(),this.ring.material.dispose()}},JL=10,YL=.055,XL=3.2,ZL=1.4,QL=.45,$L=class{color;mesh;geometry;positions=new Float32Array(JL*2*3);colors=new Float32Array(JL*2*4);history=[];last=new J;hasLast=!1;tangent=new J;side=new J;toCamera=new J;shade=new Y;strength=0;heat=0;constructor(e){this.color=e,this.geometry=new Og,this.geometry.setAttribute(`position`,new pg(this.positions,3).setUsage(Bp)),this.geometry.setAttribute(`color`,new pg(this.colors,4).setUsage(Bp));let t=[];for(let e=0;ethis.heat?i:this.heat+(i-this.heat)*Math.min(1,t*6);let o=XL*(1-(1-QL)*this.heat),s=r&&a>o?Math.min(1,(a-o)/4+this.heat*.4):0;this.strength+=(s-this.strength)*Math.min(1,t*18);let c=this.history.length>=JL?this.history.shift():new J;if(c.copy(e),this.history.push(c),this.strength<.02||this.history.length<3){this.mesh.visible=!1;return}let l=this.history.length,u=this.shade.copy(this.color).lerp(IL,this.heat),d=YL*(1+ZL*this.heat);for(let e=0;e3*t}function rR(e,t,n){let r=e.detail.endsWith(`:head`)||e.detail.endsWith(`:body`);return t===void 0||![`hit`,`counter_hit`].includes(e.kind)||!r||n===null||n.winner_id===null||n.winner_id!==e.actor_id?!1:n.finish_method===`flash_ko`||(n.finish_method===`ko`||n.finish_method===`tko`)&&t.is_downed}function iR(e){for(let t of e.passes)t.dispose?.();e.dispose()}function aR(e,t,n,r,i){e.setRenderTarget(t.readBuffer);let a=e.compileAsync(n,r,i);return e.setRenderTarget(null),a}var oR=-4e-4,sR=10;function cR(e,t,n){e.autoUpdate=!t,e.intensity=+!t,e.bias=t?sR:oR,(t&&e.map!==null||e.mapSize.x!==n)&&(e.mapSize.set(n,n),e.map?.dispose(),e.map=null)}function lR(e,t){let n=t.fighters.findIndex(t=>t.player_id===e.target_id),r=t.fighters.findIndex(t=>t.player_id===e.actor_id),i=e.kind===`block`||e.kind===`perfect_block`;return{recipientIndex:i?r:n,puncherIndex:i?n:r}}function uR(e,t,n){if(e===void 0||t===void 0)return;let r=n.x(t.x)-n.x(e.x),i=n.z(t.y)-n.z(e.y),a=Math.hypot(r,i);return Number.isFinite(a)&&a>.001?{x:r/a,z:i/a}:void 0}var dR=e=>e.kind===`hit`||e.kind===`counter_hit`,fR=e=>e.kind===`block`||e.kind===`perfect_block`,pR=480,mR=.56,hR=1.8,gR=1.7,_R=1.2,vR=1.6,yR=30,bR=6.5,xR=.4,SR=600,CR=2.8,wR=.6,TR=[[1,0],[-1,0],[.75,-.66],[-.75,-.66],[.75,.66],[-.75,.66]],ER=.15,DR=.6,OR=2.3,kR=.5,AR=3.42,jR=2.2,MR=.9,NR=`body`,PR=.55,FR=.5,IR=.5,LR=.28,RR=104,zR=260,BR=.05,VR=2.95,HR=2.4,UR=1.6,WR=.98,GR={uniforms:{tDiffuse:{value:null},uTime:{value:0},uVignette:{value:.32},uGrain:{value:.035},uRocked:{value:0}},vertexShader:` varying vec2 vUv; void main() { vUv = uv; @@ -4984,8 +4985,8 @@ void main() { float grain = (hash(floor(vUv * vec2(960.0, 540.0))) - 0.5) * uGrain; color.rgb += grain * (0.15 + color.rgb); gl_FragColor = color; -}`},SL=[{x:-102,y:-16},{x:102,y:-16}],CL=[0,1],wL=.5,TL={x:0,z:-.2},EL=0,DL=200,OL=1.3,kL=.7,AL=4.5;function jL(e,t,n,r){let i=n.x-e,a=n.y-t,o=Math.hypot(i,a);return o<=Math.max(r,1e-6)?{x:n.x,y:n.y,arrived:!0}:{x:e+i/o*r,y:t+a/o*r,arrived:!1}}var ML=16,NL=.6,PL={hit:.18,counter_hit:.3,guard_break:.25,knockdown:1,block:.04,perfect_block:.1,parry:.22,body_collapse:.45},FL=new Set([`hit`,`counter_hit`,`block`,`perfect_block`,`guard_break`,`knockdown`,`parry`,`body_collapse`,`eye_shut`]),IL=new Set([`parry`,`body_collapse`,`eye_shut`]),LL=1.2,RL={parry:{text:`PARRIED`,seconds:1},eye_shut:{text:`EYE SWOLLEN SHUT`,seconds:1.6}},zL=e=>e.kind===`knockdown`&&e.detail===`body`;function BL(e,t){if(!(!VI(e)||e.action_id===null))return t.find(t=>HI(t)&&t.action_id===e.action_id&&t.actor_id===e.target_id&&t.target_id===e.actor_id)}function VL(e,t){if(!(!HI(e)||e.action_id===null))return t.find(t=>VI(t)&&t.action_id===e.action_id&&t.actor_id===e.target_id&&t.target_id===e.actor_id)}function HL(e,t){return e.map((n,r)=>{if(IL.has(n.kind))return{event:n,presentationEvent:n,presentImpact:!1,reactAmount:null};let{puncherIndex:i}=zI(n,t),a=t.fighters[i],o=a?.action_key?.split(`:`)??[],s=o.length>=3?`${o[0]}:${o[2]}`:n.detail,c=VL(n,e);if(HI(n))return{event:n,presentationEvent:{...n,detail:c?.detail||s,direction:c?.direction??a?.facing??n.direction,blood:c?.blood??n.blood},presentImpact:!0,reactAmount:n.amount};if(BL(n,e)!==void 0)return{event:n,presentationEvent:n,presentImpact:!1,reactAmount:n.amount};if(n.kind===`knockdown`){let t=e.slice(0,r).reverse().find(e=>VI(e)&&e.tick===n.tick&&e.actor_id===n.actor_id&&e.target_id===n.target_id);if(t!==void 0)return{event:n,presentationEvent:{...n,detail:t.detail,direction:t.direction,blood:t.blood,action_id:t.action_id},presentImpact:!0,reactAmount:BL(t,e)===void 0?null:t.amount}}return{event:n,presentationEvent:n,presentImpact:!0,reactAmount:n.amount}})}function UL(e){let t=e?.trauma;if(t===void 0)return{side:1,lift:.08,lateral:.035,prop:`enswell`};switch(e?.corner_choice){case`cut`:return{side:t.right_cut>t.left_cut?-1:1,lift:.11,lateral:.04,prop:`enswell`};case`swelling`:return{side:t.right_eye>t.left_eye?-1:1,lift:.08,lateral:.035,prop:`enswell`};case`breath`:return{side:1,lift:-.015,lateral:0,prop:`bottle`};default:return{side:t.right_eye+t.right_cut>t.left_eye+t.left_cut?-1:1,lift:.08,lateral:.035,prop:`enswell`}}}function WL(e){return e?.split(`:`)[1]===`right`?1:-1}function GL(e){return e.result===null?e.tick-1:e.tick}var KL=80,qL=[`jab`,`straight`,`hook`,`uppercut`];function JL(e,t,n,r){if(!NI(e,t,n))return null;let i=r?.action_key?.split(`:`),a=e.detail.split(`:`).find(e=>qL.includes(e))??i?.[0],o=i?.[1]===`right`?`left`:`right`,s=e.amount;return e.detail.endsWith(`:head`)?n?.finish_method===`flash_ko`||e.kind===`counter_hit`&&s>=95?`head_burst`:a===`uppercut`&&s>=70||a===`straight`&&s>=KL?`decapitation`:a===`hook`&&s>=70?`eye_${o}`:`jaw_dislocation`:a===`hook`&&s>=95?`dismember_${o}`:a===`hook`&&s>=70?`shoulder_${o}`:`ribs_${o}`}function YL(){let e=document.createElement(`canvas`);e.width=128,e.height=128;let t=e.getContext(`2d`);if(t!==null){let e=t.createRadialGradient(64,64,8,64,64,62);e.addColorStop(0,`rgba(0,0,0,0.68)`),e.addColorStop(.6,`rgba(0,0,0,0.34)`),e.addColorStop(1,`rgba(0,0,0,0)`),t.fillStyle=e,t.fillRect(0,0,128,128)}return new F_(e)}var XL=new J(0,.12,.02),ZL=new J(0,1,0),QL=new WeakMap;function $L(e){let t=QL.get(e);return t===void 0&&(t=OE(e,vR),QL.set(e,t)),t}function eR(e){return e.y>qE-1.4}var tR=new WeakMap;function nR(e){let t=tR.get(e);return t===void 0&&(t=OE(e,eR),tR.set(e,t)),t}function rR(e,t,n){let r=e.bone(`head`);if(r===null)return null;e.root.updateMatrixWorld(!0);let i=e.headMesh,a=nR(i.geometry);if(a.length===0)return null;let o=t.length===a.length*3?t:new Float32Array(a.length*3);n.position.set(0,0,0);for(let[t,r]of a.entries())fR(e,r,n.scratch),n.scratch.toArray(o,t*3),n.position.add(n.scratch);return n.position.multiplyScalar(1/a.length),r.getWorldQuaternion(n.quaternion),n.across.set(1,0,0).applyQuaternion(n.quaternion),n.scratch.set(0,1,0).applyQuaternion(n.quaternion),n.quaternion.setFromUnitVectors(ZL,n.scratch),o}function iR(e,t,n,r){let i=e?.currentRoot;return r.set(i?.x??n.x(t.x),0,i?.z??n.z(t.y))}function aR(e,t,n,r,i){let a=Math.hypot(e-n,t-r);return a>=i?{x:e,z:t}:a<1e-6?{x:n,z:r-i}:{x:n+(e-n)/a*i,z:r+(t-r)/a*i}}var oR=[0,1.05,-1.05,2.1,-2.1,Math.PI];function sR(e,t,n,r,i,a,o=[]){let s=n===null?0:Math.hypot(n.x,n.z),c=n!==null&&s>=.35?[Math.atan2(n.x,n.z)]:[];for(let e of oR)c.push(a+e);for(let n of c){let a=K.clamp(e+Math.sin(n)*r,-i,i),s=K.clamp(t+Math.cos(n)*r,-i,i),c=Math.hypot(a-e,s-t);if(!(c{let r=K.clamp(((n.x-e)*(a-e)+(n.z-t)*(s-t))/(c*c),.25,1);return Math.hypot(e+(a-e)*r-n.x,t+(s-t)*r-n.z)1e-9&&(s=Math.min(s,(Math.sign(n)*i-e)/n)),Math.abs(r)>1e-9&&(s=Math.min(s,(Math.sign(r)*a-t)/r));for(let i of[-1,1])for(let a of[-1,1]){let c=i*n+a*r;c>1e-9&&(s=Math.min(s,(o-i*e-a*t)/c))}return Math.max(0,s)}function lR(e,t,n,r,i,a,o,s=1/0){let c=Math.hypot(n-e,r-t);if(c>=i)return null;let l=c<1e-6?1:(n-e)/c,u=c<1e-6?0:(r-t)/c,d=i-c,f=cR(e,t,-l,-u,a,o,s),p=cR(n,r,l,u,a,o,s),m=Math.min(d/2,f),h=Math.min(d-m,p);m=Math.min(d-h,f);let g=K.clamp;return{ax:g(e-l*m,-a,a),ay:g(t-u*m,-o,o),bx:g(n+l*h,-a,a),by:g(r+u*h,-o,o)}}var uR=new WeakMap;function dR(e,t,n,r,i,a,o){let s=uR.get(e);if(s!==void 0&&s.width===t&&s.height===n)return s.top;let c=_n(t,n,mn(e,r,i,r.map(e=>a.total(e.player_id))),!0).y;return uR.set(e,{width:t,height:n,top:c}),c}function fR(e,t,n){let r=e.headMesh;return kD(n.fromBufferAttribute(r.geometry.getAttribute(`position`),t),e.look,n),r.applyBoneTransform(t,n).applyMatrix4(r.matrixWorld)}var pR=new Dm,mR=new Dm,hR=new Mm;function gR(e,t,n){let r=e.geometry;pR.fromBufferAttribute(r.getAttribute(`skinIndex`),t),mR.fromBufferAttribute(r.getAttribute(`skinWeight`),t),n.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);for(let t=0;t<4;t+=1){let r=mR.getComponent(t);if(r===0)continue;let i=pR.getComponent(t);hR.multiplyMatrices(e.skeleton.bones[i].matrixWorld,e.skeleton.boneInverses[i]);for(let e=0;e<16;e+=1)n.elements[e]+=hR.elements[e]*r}return n.premultiply(e.bindMatrixInverse).multiply(e.bindMatrix)}var _R=new J(-1,0,0);function vR(e){return e.y>GE-KE*(e.z- -4)-.3}var yR={tick_rate:30,ring_half_width:500,ring_half_height:500};function bR(e,t,n,r,i,a){let o=e.geometry,s=o.getAttribute(`position`),c=o.getIndex(),l=[],u=c!==null&&r===void 0?[]:null;if(c===null||u===null)for(let e=0;e=i.start+o))return{action:i.punchClass,action_hand:i.hand,action_target:`head`,action_power:`normal`,action_id:`idle-${n}-${r}`,action_key:`${i.punchClass}:${i.hand}:head:normal`,action_start_tick:e-(t-i.start),action_startup_ticks:a.startup,action_active_ticks:a.active,action_recovery_ticks:a.recovery,action_contact_tick:e-(t-i.start)+a.startup}}return{}}var ER=1000003,DR=1.6;function OR(e,t,n,r,i,a){let o=r<0?-1:1,s=o=>Math.hypot(K.clamp(e+n*o*i,-a,a)-e,K.clamp(t+r*o*i,-a,a)-t);return s(o)>=i*.8||s(o)>=s(-o)?o:-o}function kR(e){return!e.is_downed&&e.stunned_ticks===0&&e.clinch_ticks===0&&e.clinch_startup_ticks===0&&e.taunt_ticks===0&&!e.is_foul_recovery_target}function AR(e,t){if(e===null)return null;let n=t.fighters.find(t=>t.player_id===e.target_id),r=t.fighters.find(t=>t.player_id===e.actor_id);return JL(e,n===void 0?void 0:{...n,is_downed:!0},{finish_method:`ko`,winner_id:e.actor_id},r)}var jR=.2,MR=2,NR=.42,PR=new Set([`decapitation`,`head_burst`,`eye_left`,`eye_right`,`dismember_left`,`dismember_right`,`ribs_left`,`ribs_right`]),FR=1.6,IR=3,LR=.8,RR=new J(0,-.1,.08);function zR(e,t,n=NR){return Math.min(n,.05+.045*Math.sqrt(Math.max(0,e))*Math.min(1.6,Math.max(0,t)))}function BR(e,t,n){return e.is_downed||t?.isDown===!0||n!==void 0&&e.player_id===n}var VR=6,HR=11,UR=.9,WR=7;function GR(e,t){let n=t===`left`?`leftRibs`:`rightRibs`;e.impact(n,[t===`left`?-6:VR,-6*.15,-6*.25],HR),e.set(n,{bruise:1.2,swell:0,blood:1.4})}function KR(e){return e!==`jaw_dislocation`&&e!==`shoulder_left`&&e!==`shoulder_right`}var qR=new WeakMap;function JR(e,t){let n=qR.get(e);if(n===void 0){let t=e.getAttribute(`position`),r=new J,i=new J,a=$E.map(e=>{let n=0,a=1/0;i.set(e[0],e[1],e[2]);for(let e=0;ethis.onAnnouncement?.(e),cue:e=>this.onCrowdCue?.(e)});touchControls=$l();resultAnnounced=!1;captionText=``;rocked=new xI;tmpA=new J;tmpB=new J;contactPoint=new J;cornerPanelTop=null;mouthPoint=new J;tmpHead=new J;tmpHeadQuaternion=new cm;tmpStump=new J;tmpStumpOffset=new J;tmpStumpQuaternion=new cm;tmpStumpAcross=new J;tmpPart=new J;tmpPartQuaternion=new cm;constructor(e,t=yR,n,r={}){this.canvas=e,this.simulation=t,this.settings=n,this.manualClock=r.manualClock===!0,this.localInput=r.localInput??null,this.inputSequenceOf=r.inputSequenceOf??null,this.buffer=new Ru(8,t.tick_rate),this.mapping=Ew(t),this.renderer=new PC({canvas:e,antialias:!0,powerPreference:`high-performance`,preserveDrawingBuffer:r.manualClock===!0}),this.renderer.shadowMap.enabled=!0,this.renderer.shadowMap.type=1,this.renderer.toneMapping=4,this.renderer.toneMappingExposure=1,this.renderer.setPixelRatio(this.basePixelRatio),this.scene.background=new Y(`#04060b`),this.scene.fog=new mh(`#04060b`,.042),this.camera=new My(36,1,.1,80),this.camera.position.set(0,2.05,5.9),this.camera.lookAt(0,1.05,0),this.setupLights(),this.ring=GN(),this.scene.add(this.ring.group),this.arena=aT(),this.scene.add(this.arena.group),this.effects=new fk(this.scene,$l()?1024:2048),this.effects.useUploader(this.renderer),this.blobTexture=YL();let i=new bv(1,1);for(let e=0;e<3;e+=1){let t=new Ig(i,new wg({map:this.blobTexture,transparent:!0,depthWrite:!1}));t.rotation.x=-Math.PI/2,t.position.y=.006+e*4e-4,t.renderOrder=1,this.blobShadows.push(t),this.scene.add(t)}this.composer=new UC(this.renderer),this.composer.addPass(new WC(this.scene,this.camera));let a=new KC(new q(1280,720),.2,.45,1.08);this.bloomPass=a,this.composer.addPass(a),this.finishPass=new BC(xL),this.composer.addPass(this.finishPass),this.composer.addPass(new JC),this.hudCanvas=document.createElement(`canvas`),this.hudCanvas.className=`fight-hud`,this.hudCanvas.style.cssText=`position:absolute;inset:0;width:100%;height:100%;pointer-events:none`,e.insertAdjacentElement(`afterend`,this.hudCanvas),this.bloodLevel=n().blood,this.effects.setBloodLevel(this.bloodLevel),this.ensureGraphs(),this.manualClock||(this.raf=requestAnimationFrame(e=>this.draw(e)))}ensureGraphs(){this.glbLoading||this.graphs!==null||(this.glbLoading=!0,this.graphsReady=nP().then(async e=>{if(this.destroyed)return;let t=new hP(e,{skin:11563071,gear:1920728}),n=new hP(e,{skin:7225640,gear:12131356});this.graphs=[new qP(t,this.mapping),new qP(n,this.mapping)],this.lookIds.fill(null),this.syncInjuryPresentation(0),this.syncInjuryPresentation(1);let r=new hP(e,{skin:13081462,gear:3889080,look:_D.referee,outfit:xA});this.referee=new qP(r,this.mapping,{referee:!0});let i=new hP(e,{skin:9067067,gear:1778224,look:_D.blueCorner,outfit:SA}),a=new hP(e,{skin:14264188,gear:1778224,look:_D.redCorner,outfit:CA});this.cornermen=[new qP(i,this.mapping,{referee:!0}),new qP(a,this.mapping,{referee:!0})];let o=new hP(e,{skin:12160102,gear:1778224,look:_D.blueCutman,outfit:wA}),s=new hP(e,{skin:5913126,gear:1778224,look:_D.redCutman,outfit:wA});this.cutmen=[new qP(o,this.mapping,{referee:!0}),new qP(s,this.mapping,{referee:!0})],o.root.visible=!1,s.root.visible=!1,this.trails=[1920728,12131356].flatMap(e=>[0,1].map(()=>new kI(new Y(e).lerp(new Y(16777215),.55))));let c=new oh;c.add(t.root,n.root,r.root,i.root,a.root,o.root,s.root,...this.trails.map(e=>e.mesh),...this.effects.compileStandIns());let l=t.headInjury.open;t.headInjury.setOpen(!0);try{await FI(this.renderer,this.composer,c,this.camera,this.scene)}catch{}if(!this.destroyed){this.scene.add(t.root,n.root,r.root,i.root,a.root,o.root,s.root);for(let e of this.trails)this.scene.add(e.mesh);this.compileShadowsOf(c),t.headInjury.setOpen(l)}}).catch(e=>{this.glbLoading=!1,console.error(`boxer_glb_load_failed`,e)}))}compileShadowsOf(e){let t=this.keyLight;if(!(t===null||e.children.length===0)){for(let t of e.children)t.frustumCulled=!1,t.onBeforeShadow=(e,t,n,r,i,a)=>{a.needsUpdate=!0};this.scene.add(e),t.shadow.needsUpdate=!0,this.renderer.setRenderTarget(this.composer.readBuffer);try{this.renderer.render(this.scene,this.camera)}catch{}finally{this.renderer.setRenderTarget(null),this.scene.remove(e)}}}get ready(){return this.graphsReady}get labRigs(){let e=this.graphs;return e===null?[]:[e[0].boxer.root,e[1].boxer.root]}get labScene(){return this.scene}get labEffects(){return this.effects}labSetCameraOverride(e,t){this.cameraOverride={position:new J(...e),lookAt:new J(...t)}}labFrame(e,t=!0){this.draw(e*1e3,!0,t)}setCornerPanelTop(e){this.cornerPanelTop=e}viewForward(){return this.ownViewActive?(this.ownForward.x=this.fighterCam.forwardX,this.ownForward.z=this.fighterCam.forwardZ,this.ownForward):null}setPlayers(e,t,n=Object.keys(e)){this.players=e,this.viewerId=t,this.playerOrder=n}updateIdleFighters(e,t,n){let r=this.graphs;if(r===null)return;let i=this.playerOrder.filter(e=>this.players[e]!==void 0).length<2;for(let[a,o]of r.entries()){let r=this.playerOrder[a]??`seat-${a}`,s=!i||r===this.viewerId||this.viewerId===null&&a===0;if(o.boxer.root.visible=s,!s)continue;this.wearLook(a===0?0:1,r);let c=a===0?-1:1,l=Math.floor(t*this.simulation.tick_rate),u={...SR(r),x:i?0:c*180,y:i?-70:0,facing:i?1:-c,facing_x:i?0:-c*1e3,facing_y:i?-1e3:0,...i?TR(l):{}},d={...SR(this.playerOrder[1-a]??`opponent`),x:i?0:-c*180,y:i?-150:0};o.setResting(!1),o.update(u,d,e,t,this.settings().reducedMotion,this.bloodLevel,i?l:n)}}setFinal(e){if(e!==null&&e.match_id===this.final?.match_id||(this.final=e,this.stoppageWinner=-1,this.stoppageRaiseAt=1/0,this.stoppageSpot=null,this.raiseFramed=!1,this.ceremony=this.ceremonyFor(e),this.finalRevealAt=this.frameSeconds+(this.ceremony===null?sn(e):AL),this.ovationUntil=e===null?0:this.frameSeconds+ML,e!==null&&this.commentary.finish(e,this.players,this.ceremony!==null,this.frameSeconds),this.ceremony===null&&this.endCeremony(),this.pendingFinish=null,e===null||!rn.has(e.method)))return;let t=this.lastKnockdown===null?null:wI(this.history,this.lastKnockdown.hit??this.lastKnockdown.knockdown,this.simulation.tick_rate),n=this.finishingInjury(e);if(t!==null&&this.graphs!==null&&!this.settings().reducedMotion){n!==null&&(this.replayInjuries[n.index]={injury:n.injury,event:n.event}),this.startReplay(t);return}if(n!==null){let e=this.pendingContacts.find(e=>e.event.event_id===n.event.event_id);e===void 0?this.applyArcadeInjury(n.index,n.injury,n.event):e.injury??=n.injury}let r=this.buffer.latest()?.result?.tick;r===void 0?this.presentFinish(e):this.pendingFinish={final:e,tick:r,latestAt:this.frameSeconds+aL}}presentFinishWhenShown(e){let t=this.pendingFinish;t===null||ee.player_id===t.hit.target_id)??-1;return r<0||this.arcadeInjuries[r]!==null?null:{index:r,injury:t.finisher,event:t.hit}}ceremonyFor(e){let t=this.buffer.latest()?.fighters;if(e===null||t===void 0||e.method!==`decision`&&e.method!==`draw`||t.some(e=>e.is_downed))return null;let n=t.findIndex(t=>t.player_id===e.winner_id);return{winnerSeat:n===0||n===1?n:null,positions:null,refereeArrived:!1,arrivedAt:null,announced:!1}}endCeremony(){for(let e of this.graphs??[])e.awaitVerdict(null);this.referee?.raise(null,null)}ceremonyFighters(e,t,n,r,i=null){e.positions===null&&(e.positions=[{x:t[0].x+(i?.[0].x??0),y:t[0].y+(i?.[0].y??0)},{x:t[1].x+(i?.[1].x??0),y:t[1].y+(i?.[1].y??0)}],e.marks=e.positions[0].x<=e.positions[1].x?[0,1]:[1,0]);let a=e.marks??CL,o=e.refereeArrived;for(let r of[0,1]){let i=e.positions[r],s=a[r],c=jL(i.x,i.y,SL[s],DL*n),l=Math.hypot(c.x-i.x,c.y-i.y),u=n>0?1/(n*this.simulation.tick_rate):0,d=!c.arrived&&l>1e-6;Object.assign(this.drawnFighters[r],t[r],{x:c.x,y:c.y,velocity_x:(c.x-i.x)*u,velocity_y:(c.y-i.y)*u,facing_x:d?Math.round((c.x-i.x)/l*1e3):0,facing_y:d?Math.round((c.y-i.y)/l*1e3):-1e3,facing:d&&c.x=kL){e.announced=!0,this.commentary.verdict(this.frameSeconds);for(let t of[0,1])this.graphs?.[t]?.announce(e.winnerSeat===null?`level`:e.winnerSeat===t?`winner`:`loser`);this.finalRevealAt=Math.min(this.finalRevealAt,this.frameSeconds+.35),this.arena.excite(1)}if(e.announced){let t=t=>{let n=a[0]===t?0:1,r=e.winnerSeat===null||e.winnerSeat===n,i=this.graphs?.[n]?.boxer.rig.bones[t===0?`gloveL`:`gloveR`];return r&&i!==void 0?i.getWorldPosition(this.ceremonyWrists[t]):null};this.referee?.raise(t(1),t(0))}return this.drawnFighters}ceremonyFrame(e){let t=this.ceremony,n=this.buffer.latest();if(t===null||t.arrivedAt===null||this.replay!==null||this.final===null||n===null)return null;let{width:r,height:i}=this.hudViewport,a=dR(this.final,r,i,n.fighters,this.players,this.roundStats,this.viewerId),o=wT(this.camera.aspect,this.camera.fov,(i-a)/Math.max(1,i)),s=this.settings().reducedMotion?0:Math.sin((e-t.arrivedAt)*.35)*.06*o.distance;return this.cornerPosition.set(s,o.height+.05*o.distance,o.distance),this.cornerLookAt.set(0,o.height,0),{position:this.cornerPosition,lookAt:this.cornerLookAt,framed:!0}}raiseFrame(e,t,n){let r=this.buffer.latest();if(this.stoppageWinner<0||this.final===null||this.replay!==null||this.ceremony!==null||r===null||e0?-1:1)*eL,o=this.stoppageSpot?.z??0;this.raiseFramed||this.raiseCentre.set(i.x+a/2,0,i.z+o/2),this.raiseCentre.lerp(this.tmpCamera.set(i.x+a/2,0,i.z+o/2),1-Math.exp(-3*t)),this.raiseFramed=!0;let{width:s,height:c}=this.hudViewport,l=dR(this.final,s,c,r.fighters,this.players,this.roundStats,this.viewerId),u=wT(this.camera.aspect,this.baseFov,(c-l)/Math.max(1,c)),d=e-(this.stoppageRaiseAt-$I),f=n?0:Math.sin(d*.35)*.06*u.distance;return this.cornerPosition.set(K.clamp(this.raiseCentre.x,-1.4,1.4)+f,u.height+.05*u.distance,this.raiseCentre.z+u.distance),this.cornerLookAt.set(this.raiseCentre.x,u.height,this.raiseCentre.z),{position:this.cornerPosition,lookAt:this.cornerLookAt,framed:!0}}presentFinish(e){this.referee?.waveOff();let t=this.buffer.latest()?.fighters,n=t?.findIndex(t=>t.player_id!==e.winner_id&&t.player_id!==null)??-1;if(n>=0&&this.headCacheValid[n]&&!this.settings().reducedMotion&&(this.finishCloseUpIndex=n,this.finishCloseUpUntil=this.frameSeconds+KI,this.finishCloseUpBearing=null,this.finishCloseUpAt=this.frameSeconds),e.winner_id===null)return;let r=t?.findIndex(t=>t.player_id===e.winner_id)??-1;r<0||(this.graphs?.[r]?.celebrate(QI),this.stoppageWinner=r,this.stoppageRaiseAt=this.frameSeconds+$I)}cornerShotFrame(e,t,n){if(t===null||t.phase!==`rest`||n||this.graphs===null)return null;let r=t.fighters.findIndex(e=>e.player_id===this.viewerId),i=e-this.restStartedAt,a=gT(i,t.phase_ticks_remaining/this.simulation.tick_rate,+(r===1));return a===null||!this.graphs[a].stoolVisible||this.cutmen!==null&&this.cutmanProgress[a]e.player_id===this.viewerId)===1),n=this.mapping.x(s);return xT(t,n,-3.5,YI,this.cornerPosition).setY(XI),xT(t,n,0,0,this.cornerLookAt),this.cornerLookAt.lerp(xT(+(t===0),n,0,0,this.tmpCamera),ZI).setY(.9),{position:this.cornerPosition,lookAt:this.cornerLookAt,framed:!0}}closeUpFrame(e){if(e>=this.finishCloseUpUntil||this.finishCloseUpIndex<0||!this.headCacheValid[this.finishCloseUpIndex])return null;let t=this.arcadeInjuries[this.finishCloseUpIndex],n=t===`decapitation`&&this.effects.severedHeadPosition(this.finishCloseUpIndex,this.closeUpTarget),r=n?null:this.graphs?.[this.finishCloseUpIndex]?.fallBody??null;if(this.finishCloseUpBearing===null&&r!==null&&!r.body.asleep&&e-this.finishCloseUpAt.4?l:.9,c)}let u=this.finishCloseUpBearing+c;return this.closeUpPosition.set(K.clamp(o.x+Math.sin(u)*s,-2.2,sL),o.y+(n?.42:a?.5:.75),K.clamp(o.z+Math.cos(u)*s,-2.2,sL)),this.replayLookAt.copy(o),{position:this.closeUpPosition,lookAt:this.replayLookAt,tight:!0}}raiseSpot(e,t){let n=e.x>0?-1:1,r={x:n*eL,z:0},i=-1/0;for(let[a,o]of tL){let s=e.x+n*a*eL,c=e.z+o*eL,l=Math.min(iL-Math.abs(s),iL-Math.abs(c),Math.hypot(s-t.x,c-t.z)-rL);for(let e of this.graphs??[]){let t=e.fallBody;if(t!==null)for(let e of[0,1,2,3,4])t.bodyPoint(e,this.bodyPoint),l=Math.min(l,Math.hypot(s-this.bodyPoint.x,c-this.bodyPoint.z)-uL-.05)}for(let e of[0,1])this.effects.severedHeadPosition(e,this.closeUpTarget)&&(l=Math.min(l,Math.hypot(s-this.closeUpTarget.x,c-this.closeUpTarget.z)-cL-.05));if(l>=0)return{x:s-e.x,z:c-e.z};l>i&&(i=l,r={x:s-e.x,z:c-e.z})}return r}nearerGlove(e,t){e.getWorldPosition(this.stoppageWrist),t.getWorldPosition(this.stoppageOtherWrist);let n=e=>Math.hypot(e.x-this.refereePosition.x,e.z-this.refereePosition.z);return n(this.stoppageOtherWrist)-.5*n.length()}startReplay(e){let t=new Ru(e.snapshots.length+2,this.simulation.tick_rate);for(let n of e.snapshots)t.push(n);this.replay={plan:e,buffer:t,startedAt:this.frameSeconds,impactFired:!1,side:null},this.drawnOffsetsLive=!1,this.commentary.replay(this.frameSeconds),this.replayFollow=0,this.replayFollowAt=0;for(let e of[0,1]){let t=this.arcadeInjuries[e],n=this.arcadeInjuryEvents[e];t!==null&&n!==null&&KR(t)&&(this.replayInjuries[e]={injury:t,event:n},this.restoreInjury(e))}for(let t of this.pendingContacts.splice(0)){let n=t.recipientIndex;t.injury!==null&&(n===0||n===1)&&this.replayInjuries[n]===null&&this.arcadeInjuries[n]===null&&(this.replayInjuries[n]={injury:t.injury,event:t.event}),t.event.event_id!==e.impact.event_id&&(t.injury=null,t.contactTick=1/0,this.pendingContacts.push(t))}let n=e.snapshots[0]?.fighters.findIndex(t=>t.player_id===e.impact.target_id)??-1;n>=0&&e.impact.detail.endsWith(`:head`)&&this.effects.returnMouthpiece(n);let r=this.lastKnockdown?.knockdown.detail===lL;for(let[t,i]of(this.graphs??[]).entries()){let a=this.liveFallTicks[t]??null;i.resetTransient(!1),a!==null&&a>=e.impact.tick-1&&i.primeReplayFall(),t===n&&r&&i.fallToKnee(!0)}this.finalRevealAt=this.frameSeconds+e.durationSeconds+sn(this.final)}endReplay(){this.replay=null,this.drawnOffsetsLive=!1,this.reapplyReplayInjuries();let e=this.buffer.latest();for(let[t,n]of(this.graphs??[]).entries()){let r=e?.fighters[t],i=r!==void 0&&r.player_id===this.flashKnockout?.loserId;n.resetTransient(r?.is_downed===!0||i),i&&n.knockOut()}this.final!==null&&this.presentFinish(this.final)}fireReplayImpact(e){let t=this.lastKnockdown;if(t===null)return;let n=t.hit??{...t.knockdown,kind:`hit`,amount:420,blood:60},{recipientIndex:r,puncherIndex:i}=zI(n,e),a=e.fighters[r];if(a===void 0)return;iR(this.graphs?.[r],a,this.mapping,this.contactPoint);let o=BI(e.fighters[i],a,this.mapping);this.effects.addEvent(n,this.contactPoint,this.settings().reducedMotion,o);let s=i>=0?e.fighters[i]:void 0,c=s?.action_key?.split(`:`)??[],l=c[0]??null,u=c[1]??null;this.graphs?.[r]?.react(`hit`,n.detail.endsWith(`:body`)?`body`:`head`,n.direction,l,u,n.amount),t.knockdown.detail===`body`&&t.knockdown.tick>n.tick&&this.graphs?.[r]?.windedFor((t.knockdown.tick-n.tick)/this.simulation.tick_rate+.15,WL(s?.action_key??null)),a.player_id===this.flashKnockout?.loserId&&this.graphs?.[r]?.knockOut(),i>=0&&this.graphs?.[i]?.landedHit(!1),n.detail.endsWith(`:head`)&&!this.settings().reducedMotion&&this.knockOutMouthpiece(r,o??n.direction,n.event_id+ER,!0),this.onContact?.(n),this.reapplyReplayInjuries(o);for(let t of this.pendingContacts)t.contactTick===1/0&&(t.contactTick=this.replay?.plan.impact.tick??e.tick)}replayFrame(e,t){let[n,r]=e.fighters,i=this.mapping.x(n.x),a=this.mapping.z(n.y),o=this.mapping.x(r.x),s=this.mapping.z(r.y),c=e.fighters.findIndex(e=>e.player_id===this.replay?.plan.impact.target_id),l=this.replay?.impactFired===!0&&c>=0&&this.headCacheValid[c]===!0,u=1-Math.exp(-3*Math.max(0,t-this.replayFollowAt));this.replayFollowAt=t,this.replayFollow+=(+!!l-this.replayFollow)*u;let d=c<0?0:Math.max(this.portraitPull>1.3?.7:0,this.replayFollow*.8),f=l?this.headCache[c].x:c===1?o:i,p=l?this.headCache[c].z:c===1?s:a,m=(i+o)/2+(f-(i+o)/2)*d,h=(a+s)/2+(p-(a+s)/2)*d,g=-(s-a),_=o-i,v=Math.hypot(g,_)||1;g/=v,_/=v;let y=2.5,b=this.replay;b!==null&&b.side===null&&(b.side=OR(m,h,g,_,y,sL));let x=b?.side??(_<0?-1:1);g*=x,_*=x;let S=.35*Math.sin(t*.7),C=g*Math.cos(S)-_*Math.sin(S),w=g*Math.sin(S)+_*Math.cos(S);this.replayCameraPosition.set(K.clamp(m+C*y,-2.2,sL),1.38-Math.min(.25,t*.05),K.clamp(h+w*y,-2.2,sL));let T=Math.hypot(this.replayCameraPosition.x-m,this.replayCameraPosition.z-h),E=Math.hypot(m,h);if(T.01){let e=DR-T;this.replayCameraPosition.x=K.clamp(this.replayCameraPosition.x-m/E*e,-2.2,sL),this.replayCameraPosition.z=K.clamp(this.replayCameraPosition.z-h/E*e,-2.2,sL)}let D=l?K.clamp(this.headCache[c].y,.45,1.28):1.28;return this.replayLookAt.set(m,1.28+(D-1.28)*this.replayFollow,h),{position:this.replayCameraPosition,lookAt:this.replayLookAt,tight:!0}}setInputLatency(e){this.inputLatencyMs=e,this.lagWarned=ln(e,this.lagWarned)}resyncClock(){this.buffer.resync()}setReconnect(e){this.reconnectMs=e}setBloodLevel(e){e!==`full`&&this.bloodLevel===`full`&&this.restoreAllInjuries(),this.bloodLevel=e,e===`off`&&this.downedPoolAccumulators.fill(0),this.effects.setBloodLevel(e)}setReducedMotion(e){e&&(this.restoreAllInjuries(),this.effects.clearDynamic())}syncInjuryPresentation(e){let t=this.arcadeInjuries[e],n=this.graphs;if(n!==null){let r=n[e];t===`head_burst`?r.boxer.setHeadBurst(!0):r.boxer.setDecapitated(t===`decapitation`),r.boxer.headInjury.setEyeOut(t===`eye_left`?`left`:t===`eye_right`?`right`:null),r.boxer.setHandDismembered(`left`,t===`dismember_left`),r.boxer.setHandDismembered(`right`,t===`dismember_right`);let i=t===`jaw_dislocation`?`jaw`:t===`shoulder_left`||t===`shoulder_right`?t:null;r.setArcadeDislocation(i)}}applyArcadeInjury(e,t,n,r){let i=this.graphs!==null&&(t===`jaw_dislocation`||t===`shoulder_left`||t===`shoulder_right`);if(t===`decapitation`){let t=this.headWorldPose(e);if(t!==null){let a=this.graphs?.[e],o=a===void 0?void 0:xR(a.boxer,t.position,t.quaternion);this.effects.decapitate(e,t.position,t.quaternion,r??n.direction,n.event_id,this.skinColor(e),o);let s=this.stumpWorldPose(e);s!==null&&this.effects.anchorStump(e,s.position,s.quaternion,s.rim,s.across),i=!0}}else if(t===`head_burst`){let t=this.headWorldPose(e);if(t!==null){this.effects.burstHead(e,t.position,r??n.direction,n.event_id);let a=this.burstStumpPose(e);a!==null&&this.effects.anchorStump(e,a.position,a.quaternion,a.rim,a.across),i=!0}}else if(t===`eye_left`||t===`eye_right`){let a=this.graphs?.[e]?.boxer;a!==void 0&&YR(a,t===`eye_left`?`left`:`right`,this.tmpPart,this.tmpStumpOffset,this.tmpPartQuaternion)&&(this.effects.gougeEye(e,this.tmpPart,this.tmpStumpOffset,r??n.direction,n.event_id),i=!0)}else if(t===`dismember_left`||t===`dismember_right`){let a=t===`dismember_left`?`left`:`right`,o=this.handWorldPose(e,a);if(o!==null){let t=this.graphs?.[e],s=t===void 0?void 0:{...bR(t.boxer.gloveMesh(a),o.position,o.quaternion),gloveBlood:t.boxer.gloveBloodLevel};this.effects.dismemberHand(e,a,o.position,o.quaternion,r??n.direction,n.event_id,this.gearColor(e),s),this.effects.anchorHandStump(e,a,o.position,o.quaternion),i=!0}}else if(t===`ribs_left`||t===`ribs_right`){let t=this.graphs?.[e],a=this.buffer.latest()?.fighters[e];if(t!==void 0&&a!==void 0){if(t.boxer.rig.bones.upperChest.getWorldPosition(this.tmpPart).y>UR){iR(t,a,this.mapping,this.contactPoint);let e={...n,event_id:n.event_id+WR,kind:`counter_hit`,detail:`hook:body`,amount:Math.max(n.amount,95),blood:100};this.effects.addEvent(e,this.contactPoint,!1,r)}i=!0}}return i?(this.arcadeInjuries[e]=t,this.arcadeInjuryEvents[e]=n,this.observedInjuryDown[e]=!1,this.syncInjuryPresentation(e),this.onArcadeInjury?.(t,n),!0):!1}reapplyReplayInjuries(e){for(let t of[0,1]){let n=this.replayInjuries[t];if(n===null)continue;this.replayInjuries[t]=null;let r=this.settings();r.blood!==`full`||r.reducedMotion||this.applyArcadeInjury(t,n.injury,{...n.event,event_id:n.event.event_id+ER},e)}}restoreInjury(e){this.arcadeInjuries[e]!==null&&(this.arcadeInjuries[e]=null,this.arcadeInjuryEvents[e]=null,this.observedInjuryDown[e]=!1,this.syncInjuryPresentation(e),this.effects.restoreFighter(e))}restoreAllInjuries(){this.restoreInjury(0),this.restoreInjury(1),this.effects.clearArcadeGore()}headWorldPose(e){let t=this.graphs,n=t===null?null:t[e].boxer.bone(`head`);return n===null||t===null?null:(t[e].boxer.root.updateMatrixWorld(!0),n.getWorldPosition(this.tmpHead),n.getWorldQuaternion(this.tmpHeadQuaternion),this.tmpStumpOffset.copy(XL).applyQuaternion(this.tmpHeadQuaternion),this.tmpHead.add(this.tmpStumpOffset),{position:this.tmpHead,quaternion:this.tmpHeadQuaternion})}handWorldPose(e,t){let n=this.graphs,r=n===null?null:n[e].boxer.bone(t===`left`?`gloveL`:`gloveR`);return r===null||n===null?null:(n[e].boxer.root.updateMatrixWorld(!0),r.getWorldPosition(this.tmpPart),r.getWorldQuaternion(this.tmpPartQuaternion),{position:this.tmpPart,quaternion:this.tmpPartQuaternion})}gearColor(e){return this.graphs?.[e]?.boxer.gearBaseColor.getHex()??1920728}skinColor(e){return this.graphs?.[e]?.boxer.skinBaseColor.getHex()??11563071}stumpWorldPose(e){let t=this.graphs?.[e]?.boxer,n=t?.bone(`head`);if(t===void 0||n==null)return null;t.root.updateMatrixWorld(!0);let r=t.headMesh,i=$L(r.geometry);if(i.length===0)return null;this.stumpRim.length!==i.length*3&&(this.stumpRim=new Float32Array(i.length*3)),this.tmpStump.set(0,0,0);for(let[e,n]of i.entries())fR(t,n,this.tmpStumpOffset),this.tmpStumpOffset.toArray(this.stumpRim,e*3),this.tmpStump.add(this.tmpStumpOffset);return this.tmpStump.multiplyScalar(1/i.length),n.getWorldPosition(this.tmpStumpOffset).sub(this.tmpStump).normalize(),this.tmpStumpAcross.set(1,0,0).applyQuaternion(n.getWorldQuaternion(this.tmpStumpQuaternion)),this.tmpStumpQuaternion.setFromUnitVectors(ZL,this.tmpStumpOffset),{position:this.tmpStump,quaternion:this.tmpStumpQuaternion,rim:this.stumpRim,across:this.tmpStumpAcross}}burstStumpPose(e){let t=this.graphs?.[e]?.boxer;if(t===void 0)return null;let n=rR(t,this.stumpRim,this.burstStump);return n===null?null:(this.stumpRim=n,{position:this.burstStump.position,quaternion:this.burstStump.quaternion,rim:n,across:this.burstStump.across})}predictAction(e){let t=this.buffer.latest();if(t===null||this.viewerId===null||this.replay!==null)return;let n=t.fighters.findIndex(e=>e.player_id===this.viewerId);if(n<0)return;let r=t.fighters[n];if(t.phase!==`fight`||!kR(r))return;let i=(this.inputLatencyMs??60)/1e3*this.simulation.tick_rate+this.buffer.interpolationDelayTicks;if(pw(e.kind)){!(this.graphs?.[n]?.ownPunchActive===!0||nw(r,t.tick)>0||r.queued_actions>0)&&e.id!==void 0&&r.stamina>=25&&this.evasion.press(e.kind,e.id,this.manualClock?this.lastManualTime:performance.now(),i,this.simulation.tick_rate,10+oe(r.style).evasionTicks);return}e.kind===`punch`&&this.graphs?.[n]?.predict(e,performance.now()/1e3,this.simulation.tick_rate,i,tw(r,e,t.tick+1))}acknowledgeActions(e,t){for(let[n,r]of e.fighters.entries()){let i=r.player_id===this.viewerId;i&&this.evasion.acknowledge(r,e.phase===`fight`,this.inputSequenceOf);let a=t.filter(t=>zI(t,e).puncherIndex===n);this.graphs?.[n]?.acknowledge(r,e.phase===`fight`,a,i?this.inputSequenceOf:null)}}push(e){if(!this.buffer.push(e,this.manualClock?this.lastManualTime:performance.now()))return;let t=this.dedupe.accept(e.events);this.acknowledgeActions(e,t),this.history.push(e),this.history.length>UI&&this.history.shift();for(let n of t){if(this.roundStats.record(n,t),n.kind===`knockdown`){let r=t.find(e=>VI(e)&&e.target_id===n.target_id&&e.tick===n.tick)??(n.detail===`body`?this.recordedHit(n):null);this.lastKnockdown={knockdown:n,hit:r,finisher:r!==null&&en(r,e.events)?null:AR(r,e)};let i=e.fighters.findIndex(e=>e.player_id===n.target_id);this.graphs?.[i]?.fallToKnee(n.detail===lL)}if(n.kind===`result`&&n.detail===`flash_ko`){let e=t.findLast(e=>(e.kind===`hit`||e.kind===`counter_hit`)&&e.actor_id===n.actor_id)??null;e!==null&&e.target_id!==null&&(this.flashKnockout={hitEventId:e.event_id,loserId:e.target_id},this.lastKnockdown={knockdown:{...e,kind:`knockdown`},hit:e,finisher:null})}n.kind===`referee_break`&&this.referee?.breakClinch(),n.kind===`box`&&(this.eventCallout={text:`BOX!`,until:this.frameSeconds+LL}),n.kind===`body_collapse`&&n.target_id===this.viewerId&&(this.ownCollapseUntil=n.tick+n.amount),this.movement.observe(n,this.viewerId)}this.commentary.observe(e,t,this.players,this.simulation.tick_rate,this.frameSeconds);for(let{event:n,presentationEvent:r,presentImpact:i,reactAmount:a}of HL(t,e)){let t=e.fighters.findIndex(e=>e.player_id===n.target_id),o=e.fighters.findIndex(e=>e.player_id===n.actor_id),{recipientIndex:s,puncherIndex:c}=zI(n,e),l=e.fighters[s]??e.fighters[t]??e.fighters[o]??e.fighters[0];if(iR(this.graphs?.[e.fighters.indexOf(l)],l,this.mapping,this.contactPoint),FL.has(n.kind)){let t=c>=0?e.fighters[c]:null;this.pendingContacts.push({event:n,presentationEvent:r,presentImpact:i,reactAmount:a,contactTick:t?.action_contact_tick??n.tick,recipientIndex:s,puncherIndex:c,injury:JL(n,e.fighters[s],e.result,t??void 0)})}else n.kind===`bleed`&&this.effects.addEvent(n,this.contactPoint,this.settings().reducedMotion)}}fireContacts(e){for(let t=0;te){t+=1;continue}this.pendingContacts.splice(t,1);let{event:r,presentationEvent:i,reactAmount:a,recipientIndex:o,puncherIndex:s,injury:c}=n,l=n.presentImpact&&!zL(i),u=this.buffer.latest()?.fighters[o],d=BI(this.buffer.latest()?.fighters[s],u,this.mapping);this.presentFightEvent(r,o,s),l&&u!==void 0&&(iR(this.graphs?.[o],u,this.mapping,this.contactPoint),this.effects.addEvent(i,this.contactPoint,this.settings().reducedMotion,d));let f=this.settings();(n.presentImpact||IL.has(r.kind))&&this.arena.excite(PL[r.kind]??0),l&&o>=0&&this.viewerId!==null&&this.buffer.latest()?.fighters[o]?.player_id===this.viewerId&&[`hit`,`counter_hit`,`knockdown`].includes(r.kind)&&(this.viewerHitFlash=Math.max(this.viewerHitFlash,Math.min(1,.35+r.amount/400))),c!==null&&o>=0&&this.arcadeInjuries[o]===null&&f.blood===`full`&&!f.reducedMotion&&this.applyArcadeInjury(o,c,r,d);let p=this.graphs;l&&o>=0&&!f.reducedMotion&&zD(r.kind,r.amount,i.detail.endsWith(`:head`))&&this.knockOutMouthpiece(o,d??i.direction,r.event_id,!1);let m=l&&o>=0?_E(r.kind,r.amount,i.detail.endsWith(`:head`)):0;if(m>0&&!f.reducedMotion&&f.blood!==`off`){let e=this.headWorldPose(o);e!==null&&(this.mouthPoint.set(0,-.07,.1).applyQuaternion(e.quaternion).add(e.position),this.effects.spawnTeeth(this.mouthPoint,d??i.direction,m,r.event_id))}if(l&&o>=0&&a!==null&&[`hit`,`counter_hit`,`block`,`perfect_block`,`knockdown`].includes(r.kind)){let e=r.kind===`block`||r.kind===`perfect_block`,t=i.detail.endsWith(`:body`)?`body`:`head`;if(p!==null){let n=(s>=0?this.buffer.latest()?.fighters[s]:void 0)?.action_key?.split(`:`)??[],c=n[0]??i.detail.split(`:`)[0]??null,l=n[1]??null;p[o].react(e?`block`:`hit`,t,i.direction,c,l,a),this.flashKnockout?.hitEventId===r.event_id&&p[o].knockOut()}}l&&s>=0&&[`hit`,`counter_hit`,`block`,`perfect_block`,`guard_break`].includes(r.kind)&&p?.[s]?.landedHit(r.kind===`block`||r.kind===`perfect_block`),(n.presentImpact||!VI(r))&&this.onContact?.(r)}}presentFightEvent(e,t,n){let r=RL[e.kind];r!==void 0&&(this.eventCallout={text:r.text,until:this.frameSeconds+r.seconds});let i=this.graphs;if(!(i===null||t<0)&&(e.kind===`parry`&&i[t]?.stagger(),e.kind===`body_collapse`)){let r=n>=0?this.buffer.latest()?.fighters[n]:void 0;i[t]?.windedFor(e.amount/this.simulation.tick_rate+.15,WL(r?.action_key??null))}}recordedHit(e){if(e.action_id===null)return null;for(let t=this.history.length-1;t>=0;--t){let n=this.history[t].events.find(t=>(t.kind===`hit`||t.kind===`counter_hit`)&&t.action_id===e.action_id&&t.target_id===e.target_id);if(n!==void 0)return n}return null}enterRest(e){this.restStartedAt=e,this.effects.clearMouthpieces()}knockOutMouthpiece(e,t,n,r){let i=this.headWorldPose(e);i!==null&&(this.mouthPoint.set(0,-.075,.1).applyQuaternion(i.quaternion).add(i.position),this.effects.ejectMouthpiece(e,this.mouthPoint,i.quaternion,t,n,this.gearColor(e),r))}get resultVisible(){return this.final!==null&&this.frameSeconds>=this.finalRevealAt}get resolutionScale(){return this.scaler.scale}get diagnostics(){let e=this.renderer.getContext(),t=e.getExtension(`WEBGL_debug_renderer_info`),n=t===null?e.getParameter(e.RENDERER):e.getParameter(t.UNMASKED_RENDERER_WEBGL);return{frameMs:this.frameMsAverage,resolutionScale:this.scaler.scale,gpu:this.memoryInfo,graphics:String(n)}}get memoryInfo(){return{geometries:this.renderer.info.memory.geometries,textures:this.renderer.info.memory.textures,programs:this.renderer.info.programs?.length??0}}applyResolutionScale(){let e=this.basePixelRatio*this.scaler.scale;this.renderer.setPixelRatio(e),this.composer.setPixelRatio(e);let t=this.scaler.scale<=WI;this.bloomPass.enabled=!t,this.keyLight!==null&&RI(this.keyLight.shadow,t,this.scaler.scale<.8?1024:2048),this.arena.setLowTier(t),this.effects.setLowTier(t)}setupLights(){let e=new by(`#3c4a72`,`#07080c`,.55);this.scene.add(e),this.lights.push(e);let t=new Py(`#fff1dc`,150,24,.56,.55,1.7);t.position.set(.6,7.4,1.2),t.target.position.set(0,.6,0),t.castShadow=!0,t.shadow.mapSize.set(2048,2048),t.shadow.bias=II,t.shadow.camera.near=3,t.shadow.camera.far=14,this.keyLight=t,this.scene.add(t,t.target),this.lights.push(t);let n=new Py(`#ffe6c8`,95,24,.6,.6,1.7);n.position.set(-2.6,7,-2.2),n.target.position.set(0,.8,0),this.scene.add(n,n.target),this.lights.push(n);for(let[e,t,n,r]of[[`#8fa8ff`,-5.5,3.8,-5.4],[`#7f95e8`,5.6,3.6,-5.6]]){let i=new Py(e,34,30,.72,.9,1.8);i.position.set(t,n,r),i.target.position.set(0,1.2,0),this.scene.add(i,i.target),this.lights.push(i)}let r=new Py(`#ffe8d0`,48,22,.32,.8,1.5);r.position.set(0,5.8,5.4),r.target.position.set(0,1,0),this.scene.add(r,r.target),this.lights.push(r),this.followSpot=r}draw(e,t=!1,n=!0){if(this.destroyed)return;let r=e-this.previous,i=t?1/60:Math.min(.05,Math.max(.001,r/1e3));this.previous=e,!t&&this.scaler.record(r)&&this.applyResolutionScale(),!t&&r>0&&r<1e3&&(this.frameMsAverage+=(r-this.frameMsAverage)*.05);let a=Math.min(this.pixelRatioCap,window.devicePixelRatio||1);a!==this.basePixelRatio&&(this.basePixelRatio=a,this.applyResolutionScale());let o=this.canvas.clientWidth,s=this.canvas.clientHeight;o>0&&s>0&&(this.renderer.getSize(this.sizeCheck),(this.sizeCheck.x!==o||this.sizeCheck.y!==s)&&(this.renderer.setSize(o,s,!1),this.composer.setSize(o,s),this.camera.aspect=o/s,this.portraitPull=K.clamp(1.2/this.camera.aspect,1,2.2),this.baseFov=36*Math.min(1.3,Math.sqrt(this.portraitPull)),this.camera.fov=this.baseFov,this.camera.updateProjectionMatrix()));let c=e/1e3;this.frameSeconds=c,this.finishPass.uniforms.uTime.value=c%1e3,t&&(this.lastManualTime=e);let l=this.settings();this.setBloodLevel(l.blood);let u=this.buffer.latest(),d=i,f=u?.result!==null&&u?.result!==void 0&&rn.has(u.result.finish_method);if(this.cheer(c,i),f&&!this.finishSeen&&(this.finishSeen=!0,this.finishSlowMotion=2.2,this.arena.excite(1)),this.finishSlowMotion>0&&!l.reducedMotion){this.finishSlowMotion=Math.max(0,this.finishSlowMotion-i);let e=Math.min(1,this.finishSlowMotion/.5);i*=.3+.7*(1-e)}this.viewerHitFlash=Math.max(0,this.viewerHitFlash-i*3.2);let p=u===null?0:t?GL(u):this.buffer.renderTick(e),m=this.updateRocked(u===null?null:this.shownAt(p),d,l.reducedMotion);m!==null&&u!==null&&this.onRocked?.(m,u.tick);let h=u===null?null:this.applyLocalPrediction(this.buffer.sample(p),i,e),g=this.replay;if(g!==null){let e=c-g.startedAt;e>=g.plan.durationSeconds?this.endReplay():(p=TI(g.plan,e,this.simulation.tick_rate),h=g.buffer.sample(p)??h,!g.impactFired&&p>=g.plan.impact.tick&&h!==null&&(g.impactFired=!0,this.fireReplayImpact(h)))}let _=this.replay===null?i:i*this.replay.plan.speed,v=1.8,y=!1,b=null;if(h!==null){let e=this.replay===null?this.ceremony:null,[t,n]=e===null?this.standApart(h.fighters,_):this.ceremonyFighters(e,h.fighters,_,c,this.drawnOffsets);for(let[e,t]of h.fighters.entries())this.arcadeInjuries[e]===null||this.replay!==null||(t.is_downed?this.observedInjuryDown[e]=!0:this.observedInjuryDown[e]&&h.result===null&&this.restoreInjury(e));let r=this.graphs;if(r!==null){this.wearLook(0,t.player_id),this.wearLook(1,n.player_id);let e=this.headCacheValid[0]?this.headCache[0]:void 0,i=this.headCacheValid[1]?this.headCache[1]:void 0;r[0].boxer.root.visible=!0,r[1].boxer.root.visible=!0;let a=MI(h,this.simulation.tick_rate);r[0].setResting(a),r[1].setResting(a);let o=h.phase===`countdown`?h.phase_ticks_remaining:null;r[0].setCountdown(o),r[1].setCountdown(o);let s=this.replay!==null||h.phase===`complete`;r[0].stayDown(s),r[1].stayDown(s),h.phase===`fight`&&this.lastPhase===`rest`&&this.replay===null&&(this.roundCalloutUntil=c+GI,this.roundCalloutRound=h.round_number),h.phase===`rest`&&this.lastPhase!==`rest`&&this.enterRest(c),this.lastPhase=h.phase,this.anticipatePunches(u,p),r[0].setObstacle(r[1].boxer.root.position.x,r[1].boxer.root.position.z),r[1].setObstacle(r[0].boxer.root.position.x,r[0].boxer.root.position.z),r[0].update(t,n,_,c,l.reducedMotion,l.blood,p,i),r[1].update(n,t,_,c,l.reducedMotion,l.blood,p,e);for(let[e,t]of r.entries()){let n=t.boxer.bone(`head`);n!==null&&(t.boxer.root.updateMatrixWorld(!0),n.getWorldPosition(this.headCache[e]),this.headCacheValid[e]=!0);let r=t.fallBody!==null;r&&!this.fallingLive[e]&&this.replay===null&&(this.liveFallTicks[e]=p),this.fallingLive[e]=r}}for(let e=0;ee.player_id===this.viewerId),C=l.camera===`fighter`&&S>=0&&jI(h)?this.fighterCam.update(i,c,S===0?this.tmpA:this.tmpB,S===0?this.tmpB:this.tmpA,this.effects.shakeAmount,l.reducedMotion,this.camera.aspect):null;C===null&&this.fighterCam.reset();let w=this.replay,T=this.cameraOverride??(w!==null&&h!==null?this.replayFrame(h,c-w.startedAt):this.closeUpFrame(c)??this.raiseFrame(c,i,l.reducedMotion)??this.cornerShotFrame(c,h,l.reducedMotion)??this.restWideFrame(h)??this.ceremonyFrame(c)??C??x);this.ownViewActive=C!==null&&T===C;let E=this.ownViewActive?this.baseFov*AT:this.baseFov;if(this.camera.fov!==E&&(this.camera.fov=E,this.camera.updateProjectionMatrix()),this.cameraOverride===null&&this.portraitPull>1&&T.framed!==!0&&!this.ownViewActive){let e=T.tight===!0,t=this.portraitPull/Math.min(1.3,Math.sqrt(this.portraitPull)),n=e?Math.min(t,1.25):t;this.tmpCamera.subVectors(T.position,T.lookAt).multiplyScalar(n),this.camera.position.copy(T.lookAt).add(this.tmpCamera),e&&(this.camera.position.x=K.clamp(this.camera.position.x,-2.2,sL),this.camera.position.z=K.clamp(this.camera.position.z,-2.2,sL)),this.camera.lookAt(T.lookAt.x,T.lookAt.y-(this.portraitPull-1)*(e?.08:.45),T.lookAt.z)}else this.camera.position.copy(T.position),this.camera.lookAt(T.lookAt);this.effects.setViewDistance(this.camera.position.distanceTo(T.lookAt)),this.arena.makeRoomForCamera(this.camera.position);let D=T===x?ON(Math.max(this.tmpA.z,this.tmpB.z)):T.framed===!0?EL:1;this.ring.setNearRopeOpacity(this.ring.nearRopeOpacity()+(D-this.ring.nearRopeOpacity())*(1-Math.exp(-6*i))),n&&(this.composer.render(),this.drawHudOverlay(h)),!this.destroyed&&!this.manualClock&&(this.raf=requestAnimationFrame(e=>this.draw(e)))}applyLocalPrediction(e,t,n){if(e===null||this.localInput===null||this.viewerId===null)return e;let r=e.fighters.findIndex(e=>e.player_id===this.viewerId),i=this.localInput()??{moveX:0,moveY:0,defense:`none`},a=(this.inputLatencyMs??60)/1e3*this.simulation.tick_rate+this.buffer.interpolationDelayTicks,o=this.ownCollapseUntil>e.tick,s=r>=0&&e.phase===`fight`&&!o?e.fighters[r]:null,c=this.graphs?.[r]?.ownPunchActive===!0||this.evasion.holdsFeet(n,this.simulation.tick_rate),l=this.movement.update(s,i,c,n,a,e.tick,t,this.simulation.tick_rate),u=this.evasion.pose(n);if(r<0)return e;let d=e.fighters[r],f=s===null?d.defense:mw(s,i,u);if(Math.abs(l.dx)<.01&&Math.abs(l.dy)<.01&&f===d.defense)return e;let p=fw(d,l,e.fighters[+(r===0)]??null),m={...d,x:d.x+p.dx,y:d.y+p.dy,defense:f},h=r===0?[m,e.fighters[1]]:[e.fighters[0],m];return{...e,fighters:h}}anticipatePunches(e,t){if(!(this.replay!==null||e===null||e.phase!==`fight`))for(let[n,r]of(this.graphs??[]).entries()){let i=e.fighters[n];i!==void 0&&!i.is_downed&&r.anticipate(i,i.action_start_tick-t)}}cheer(e,t){ee.clinch_ticks>0||e.clinch_startup_ticks>0||e.is_downed)?null:lR(n.x,n.y,r.x,r.y,mL,c-u,l-u,m),[a,o]=this.drawnTargets;a.x=i===null?0:i.ax-n.x,a.y=i===null?0:i.ay-n.y,o.x=i===null?0:i.bx-r.x,o.y=i===null?0:i.by-r.y,this.clearOfTheFallen(e);let s=1-Math.exp(-14*t);for(let e of[0,1]){let n=this.drawnOffsets[e],r=this.drawnTargets[e],i=r.x-n.x,a=r.y-n.y;if(this.drawnOffsetsLive){i*=s,a*=s;let e=Math.hypot(i,a);e>hL*t&&(i*=hL*t/e,a*=hL*t/e)}n.x+=i,n.y+=a}return this.drawnOffsetsLive=!0,[this.drawnAt(0,n),this.drawnAt(1,r)]}drawnAt(e,t){let n=this.drawnOffsets[e];if(Math.abs(n.x)<.01&&Math.abs(n.y)<.01)return t;let r=dw(t.x+n.x,t.y+n.y);return Object.assign(this.drawnFighters[e],t,{x:r.x,y:r.y})}clearOfTheFallen(e){for(let t of[0,1]){let n=this.graphs?.[t]?.fallBody??null,r=+(t===0),i=e[r];if(n===null||i.is_downed||(this.graphs?.[r]?.fallBody??null)!==null)continue;let a=this.drawnTargets[r],o=this.mapping.x(i.x+a.x),s=this.mapping.z(i.y+a.y),c=this.clearOf(n,o,s);a.x+=(c.x-o)/this.mapping.x(1),a.y+=(c.z-s)/this.mapping.z(1);return}}clearOf(e,t,n){let r={x:t,z:n};for(let t of[0,1,2,3,4])e.bodyPoint(t,this.bodyPoint),r=aR(r.x,r.z,this.bodyPoint.x,this.bodyPoint.z,dL);let i=this.insideRopes(r.x,r.z);if(Math.hypot(i.x-r.x,i.z-r.z)<1e-6)return r;let a=t=>[0,1,2,3,4].every(n=>(e.bodyPoint(n,this.bodyPoint),Math.hypot(t.x-this.bodyPoint.x,t.z-this.bodyPoint.z)>=dL-1e-6));for(let e=gL;e<=2.000000001;e+=gL)for(let[t,n]of[[1,0],[-1,0],[0,1],[0,-1]]){let r=this.insideRopes(i.x+t*e,i.z+n*e);if(a(r))return r}return i}insideRopes(e,t){let n=dw(e/this.mapping.x(1),t/this.mapping.z(1));return{x:this.mapping.x(n.x),z:this.mapping.z(n.y)}}headHeightOf(e){return(this.graphs?.[e]?.boxer.metrics.headRestY??1.52)+.04}bleed(e,t,n){for(let[r,i]of e.entries()){let e=BR(i,this.graphs?.[r],this.flashKnockout?.loserId),a=this.arcadeInjuries[r]??null,o=a!==null&&PR.has(a),s=(i.trauma.bleeding+i.trauma.left_cut+i.trauma.right_cut)/380,c=o?Math.max(s,FR):s;if(c>.05&&!e)this.downedPoolAccumulators[r]=0,this.downedPoolCounts[r]=0,this.effects.drip(this.dripPoint(r),c,n.reducedMotion,r);else if(c>jR&&e&&n.blood!==`off`){this.effects.stopDrip(r),this.downedPoolAccumulators[r]+=t*MR*(o?IR:1);let e=this.poolSource(r,a);for(;this.downedPoolAccumulators[r]>=1;){--this.downedPoolAccumulators[r];let t=this.downedPoolCounts[r];this.downedPoolCounts[r]=t+1;let n=zR(t,c,o?LR:NR),i=t*2.399963+r*Math.PI;this.effects.pool(e.x+Math.sin(i)*n*.25,e.z+Math.cos(i)*n*.25,n,t+r*7)}}else this.effects.stopDrip(r),this.downedPoolAccumulators[r]=0,e||(this.downedPoolCounts[r]=0)}}dripPoint(e){let t=this.headWorldPose(e);if(t!==null)return t.position.add(this.tmpStumpOffset.copy(RR).applyQuaternion(t.quaternion));if(this.headCacheValid[e])return this.tmpHead.copy(this.headCache[e]);let n=e===0?this.tmpA:this.tmpB;return this.tmpHead.set(n.x,this.headHeightOf(e),n.z)}poolSource(e,t){if(t===`dismember_left`||t===`dismember_right`){let n=this.handWorldPose(e,t===`dismember_left`?`left`:`right`);if(n!==null)return n.position}return this.headCacheValid[e]?this.headCache[e]:e===0?this.tmpA:this.tmpB}updateBlobShadows(){let e=[this.tmpA,this.tmpB,this.refereePosition];for(let[t,n]of this.blobShadows.entries()){let r=t<2?this.graphs?.[t]:void 0,i=r?.fallBody?.centre(this.bodyPoint)??null??(r?.boxer.root.visible===!0?r.currentRoot:e[t]);n.position.x=i.x,n.position.z=i.z;let a=t<2?this.buffer.latest()?.fighters[t]:void 0,o=a!==void 0&&BR(a,r,this.flashKnockout?.loserId);n.scale.set(o?2.1:1.25,o?.9:.85,1)}}updateReferee(e,t,n,r){let i=this.referee;if(i===null)return;i.boxer.root.visible=this.replay===null;let a=this.blobShadows[2];a!==void 0&&(a.visible=this.replay===null);let o=n?.fighters.find(e=>e.is_downed)??(n?.phase===`knockdown`?n.fighters.find(e=>e.player_id===this.lastKnockdown?.knockdown.target_id):void 0)??null,s=n?.fighters.some(e=>e.clinch_ticks>0||e.clinch_startup_ticks>0)??!1,c=o===null&&i.breaking,l=o===null?void 0:this.graphs?.[n?.fighters.indexOf(o)??-1],u=l?.fallBody?.centre(this.bodyPoint)??null,d=o!==null&&!o.is_downed?l?.currentRoot??null:null,f=o===null?(this.tmpA.x+this.tmpB.x)/2:u?.x??d?.x??this.mapping.x(o.x),p=o===null?(this.tmpA.z+this.tmpB.z)/2:u?.z??d?.z??this.mapping.z(o.y),m=this.refereeAway.set(this.refereePosition.x-f,0,this.refereePosition.z-p);if(m.lengthSq()<.01&&m.set(0,0,-1),m.normalize(),c){let e=this.tmpB.z-this.tmpA.z,t=this.tmpA.x-this.tmpB.x,n=Math.hypot(e,t),r=e*m.x+t*m.z>=0?1:-1;n>.01&&m.set(e/n*r,0,t/n*r)}let{standoff:h,clearance:g}=XR(o!==null,s,c),_=K.clamp(f+m.x*h,-2.4,2.4),v=K.clamp(p+m.z*h,-2.4,2.4),y=this.refereePosition.x,b=this.refereePosition.z,x=this.replay===null&&this.ceremony?.positions!==null?this.ceremony:null,S=x===null&&this.replay===null&&this.stoppageWinner>=0&&this.frameSeconds>=this.stoppageRaiseAt?this.stoppageWinner===0?this.tmpA:this.tmpB:null,C=S===null?null:this.stoppageSpot??=this.raiseSpot(S,this.stoppageWinner===0?this.tmpB:this.tmpA),w=C!==null&&C.x<0?-1:1;if(S!==null&&C!==null){let t=jL(this.refereePosition.x,this.refereePosition.z,{x:S.x+C.x,y:S.z+C.z},OL*e);this.refereePosition.x=t.x,this.refereePosition.z=t.y}else if(x!==null){let t=jL(this.refereePosition.x,this.refereePosition.z,{x:TL.x,y:TL.z},OL*e);this.refereePosition.x=t.x,this.refereePosition.z=t.y,x.refereeArrived=t.arrived}else{let t=1-Math.exp(-(c?8:1.6)*e),n=c?Math.min(1,vL*e/Math.max(1e-6,Math.hypot(_-this.refereePosition.x,v-this.refereePosition.z)*t)):1;this.refereePosition.x+=(_-this.refereePosition.x)*t*n,this.refereePosition.z+=(v-this.refereePosition.z)*t*n}let T=S===null?x===null?g:x.refereeArrived?0:wL:eL*.85;for(let e of T>0?[this.tmpA,this.tmpB]:[]){let t=this.refereePosition.x-e.x,n=this.refereePosition.z-e.z,r=Math.hypot(t,n);r.001&&(this.refereePosition.x=e.x+t/r*T,this.refereePosition.z=e.z+n/r*T)}for(let e of x===null?this.graphs??[]:[]){let t=e.fallBody;if(t!==null)for(let e of[0,1,2,3,4]){t.bodyPoint(e,this.bodyPoint);let n=aR(this.refereePosition.x,this.refereePosition.z,this.bodyPoint.x,this.bodyPoint.z,uL);this.refereePosition.x=n.x,this.refereePosition.z=n.z}}for(let e of[0,1]){if(!this.effects.severedHeadPosition(e,this.closeUpTarget))continue;let t=aR(this.refereePosition.x,this.refereePosition.z,this.closeUpTarget.x,this.closeUpTarget.z,cL);this.refereePosition.x=t.x,this.refereePosition.z=t.z}e>0&&this.refereeVelocity.set((this.refereePosition.x-y)/e,0,(this.refereePosition.z-b)/e);let E=S!==null&&C!==null&&Math.hypot(this.refereePosition.x-S.x-C.x,this.refereePosition.z-S.z-C.z)<=nL,D=x!==null&&!x.refereeArrived,O=S===null?x===null?Math.atan2(f-this.refereePosition.x,p-this.refereePosition.z):D?Math.atan2(TL.x-this.refereePosition.x,TL.z-this.refereePosition.z):0:E?0:Math.atan2(S.x-this.refereePosition.x,S.z-this.refereePosition.z);if(S!==null){let e=this.graphs?.[this.stoppageWinner]?.boxer.rig.bones,t=E&&e!==void 0?this.nearerGlove(e.gloveL,e.gloveR):null;i.raise(w<0?t:null,w>0?t:null)}let ee=((O-this.refereeYaw+Math.PI)%(Math.PI*2)+Math.PI*2)%(Math.PI*2)-Math.PI;this.refereeYaw+=ee*(1-Math.exp(-(c?8:3)*e));let te=ZR(this.refereePosition,this.refereeYaw,this.refereeVelocity,this.mapping);i.setRefereeCount(o!==null,o?.get_up_count??0),i.aimBreak(this.tmpA,this.tmpB),i.update(te.self,te.focus,e,t,!1,`off`,r)}updateTrails(e,t){let n=this.graphs;if(!(n===null||this.trails.length<4))for(let[r,i]of n.entries())for(let[n,a]of[`gloveL`,`gloveR`].entries()){let o=this.trails[r*2+n];if(!i.boxer.root.visible){o.reset();continue}i.boxer.rig.bones[a].getWorldPosition(this.trailGlove),o.update(this.trailGlove,e,this.camera.position,!t&&this.replay===null&&!i.isDown)}}updateCornermen(e,t,n,r){let i=this.cornermen;if(i===null)return;let a=MI(n,this.simulation.tick_rate);for(let[n,o]of i.entries()){let i=n===0?-1:1,s=a?_L:oL;this.cornermanPosition.set(i*s,0,-i*s);let c=n===0?3*Math.PI/4:-Math.PI/4;o.attend(a);let l=ZR(this.cornermanPosition,c,this.cornermanVelocity,this.mapping);o.update(l.self,l.focus,e,t,!1,`off`,r)}}updateCutmen(e,t,n,r){let i=this.cutmen,a=this.graphs;if(i===null||a===null)return;let o=n?.phase===`rest`,c=this.mapping.x(s);for(let[s,l]of i.entries()){let i=s===0?-1:1,u=o&&a[s].stoolVisible?1:0,d=this.cutmanProgress[s],f=d+Math.sign(u-d)*Math.min(Math.abs(u-d),e/yL);this.cutmanProgress[s]=f;let p=l.boxer.root.visible;if(l.boxer.root.visible=f>.005,!l.boxer.root.visible)continue;this.cutmanFrom.set(i*oL,0,-i*(oL-1)),xT(s===0?0:1,c,vT,32,this.cutmanTo);let m=f*f*(3-2*f);this.cornermanPosition.copy(this.cutmanFrom).lerp(this.cutmanTo,m);let h=this.cutmanLast[s];p||h.copy(this.cornermanPosition),this.cornermanVelocity.copy(this.cornermanPosition).sub(h).divideScalar(Math.max(e,.001)),h.copy(this.cornermanPosition);let g=f>.02&&f=bL?_===null?Math.atan2(i,-i):Math.atan2(_.x-this.cutmanTo.x,_.z-this.cutmanTo.z):Math.atan2(-this.cutmanFrom.x,-this.cutmanFrom.z),y=UL(n?.fighters[s]);if(f>=bL&&_!==null){let e=a[s].boxer.root.rotation.y;this.cutmanFacing.set(Math.sin(e),0,Math.cos(e)),this.cutmanEye.copy(_).addScaledVector(this.cutmanFacing,.09),this.cutmanEye.x+=Math.cos(e)*y.side*y.lateral,this.cutmanEye.z-=Math.sin(e)*y.side*y.lateral,this.cutmanEye.y+=y.lift,l.treat(this.cutmanEye,this.cutmanFacing,y.side,y.prop)}else l.treat(null);let b=ZR(this.cornermanPosition,v,this.cornermanVelocity,this.mapping);l.update(b.self,b.focus,e,t,!1,`off`,r)}}drawHudOverlay(e){let t=AI(this.hudCanvas);if(t===null)return;let{context:n,viewport:r}=t;if(this.hudViewport.width=r.width,this.hudViewport.height=r.height,n.clearRect(0,0,r.width,r.height),e===null)return;if(this.viewerHitFlash>.01&&!this.settings().reducedMotion){let e=n.createRadialGradient(r.width/2,r.height/2,r.width*.12,r.width/2,r.height/2,r.width*.7);e.addColorStop(0,`rgba(255,235,225,${(this.viewerHitFlash*.18).toFixed(3)})`),e.addColorStop(1,`rgba(140,0,10,${(this.viewerHitFlash*.55).toFixed(3)})`),n.fillStyle=e,n.fillRect(0,0,r.width,r.height)}let i=Math.max(...e.fighters.map(e=>e.trauma.head+e.trauma.body));if(i>350){let e=n.createRadialGradient(r.width/2,r.height/2,r.width*.2,r.width/2,r.height/2,r.width*.72);e.addColorStop(0,`rgba(90,0,8,0)`),e.addColorStop(1,`rgba(75,0,8,${Math.min(.3,i/4600)})`),n.fillStyle=e,n.fillRect(0,0,r.width,r.height)}un(n,r.width,r.height,e,this.players,this.viewerId,this.frameSeconds>=this.finalRevealAt?this.final:null,this.reconnectMs,this.simulation.tick_rate,this.roundStats,this.replay===null?null:`KNOCKOUT REPLAY`,this.lagWarned?this.inputLatencyMs:null,this.frameSecondsthis.avatars.get(e),this.lastKnockdown?.knockdown.target_id??null,this.touchControls&&e.fighters.some(e=>e.player_id===this.viewerId)),this.drawCaption(n,r.width,r.height,e)}updateRocked(e,t,n){let r=e?.fighters.find(e=>e.player_id===this.viewerId),i=e===null||this.replay!==null||this.final!==null?0:bI(r,e.phase),a=this.rocked.update(n?0:i,t);return this.finishPass.uniforms.uRocked.value=n?0:a,r===void 0?null:i}shownAt(e){for(let t=this.history.length-1;t>=0;--t)if(this.history[t].tick<=e)return this.history[t];return null}drawCaption(e,t,n,r){let i=this.final!==null&&this.frameSeconds>=this.finalRevealAt?this.final:null;i!==null&&!this.resultAnnounced&&(this.resultAnnounced=!0,this.commentary.resultShown(this.frameSeconds));let a=this.commentary.current(this.frameSeconds),o=this.settings(),s=a===null||!o.commentary?``:a.line.text;if(s!==this.captionText&&(this.captionText=s,this.hudCanvas.dataset.caption=s),a===null||!o.commentary)return;let c=r.fighters.find(e=>e.player_id===this.viewerId),l=Nt(t,n),u=i===null?null:dR(i,t,n,r.fighters,this.players,this.roundStats,this.viewerId)/l,d=this.frameSeconds0});p!==null&&(e.save(),e.scale(l,l),XT(e,a,p,o.reducedMotion),e.restore())}destroy(){if(!this.destroyed){if(this.destroyed=!0,cancelAnimationFrame(this.raf),this.raf=0,this.buffer.clear(),this.dedupe.reset(),this.pendingContacts.length=0,this.effects.dispose(),this.avatars.dispose(),this.arena.dispose(),KN(this.ring),this.graphs!==null){for(let e of this.graphs)this.scene.remove(e.boxer.root),e.dispose();this.graphs=null}this.referee!==null&&(this.scene.remove(this.referee.boxer.root),this.referee.dispose(),this.referee=null);for(let e of this.trails)this.scene.remove(e.mesh),e.dispose();if(this.trails=[],this.cornermen!==null){for(let e of this.cornermen)this.scene.remove(e.boxer.root),e.dispose();this.cornermen=null}if(this.cutmen!==null){for(let e of this.cutmen)this.scene.remove(e.boxer.root),e.dispose();this.cutmen=null}for(let e of this.lights)this.scene.remove(e);this.keyLight?.shadow.map?.dispose(),this.keyLight?.shadow.dispose(),this.blobTexture.dispose();for(let e of this.blobShadows)this.scene.remove(e),e.geometry.dispose(),e.material.dispose();this.renderer.renderLists.dispose(),PI(this.composer),this.bloomPass.materialHighPassFilter.dispose(),rP(),this.renderer.dispose(),this.hudCanvas.remove()}}},$R=[`broadcast`,`close`,`fighter`],ez=`hands.preferences.v1`,tz={length:0,clear:()=>void 0,getItem:()=>null,key:()=>null,removeItem:()=>void 0,setItem:()=>void 0},nz=()=>{try{return window.localStorage}catch{return tz}},rz=()=>({volume:.7,haptics:!0,reducedMotion:window.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches??!1,blood:`full`,commentary:!0,announcer:!0,camera:`broadcast`});function iz(e=nz()){let t=rz();try{let n=JSON.parse(e.getItem(ez)??`null`);if(typeof n!=`object`||!n||Array.isArray(n))return t;let r=n;return{volume:typeof r.volume==`number`&&Number.isFinite(r.volume)?Math.max(0,Math.min(1,r.volume)):t.volume,haptics:typeof r.haptics==`boolean`?r.haptics:t.haptics,reducedMotion:typeof r.reducedMotion==`boolean`?r.reducedMotion:t.reducedMotion,blood:r.blood===`reduced`||r.blood===`off`||r.blood===`full`?r.blood:t.blood,commentary:typeof r.commentary==`boolean`?r.commentary:t.commentary,announcer:typeof r.announcer==`boolean`?r.announcer:t.announcer,camera:$R.includes(r.camera)?r.camera:t.camera}}catch{return t}}function az(e,t=nz()){try{t.setItem(ez,JSON.stringify({volume:Math.max(0,Math.min(1,e.volume)),haptics:e.haptics,reducedMotion:e.reducedMotion,blood:e.blood,commentary:e.commentary,announcer:e.announcer,camera:e.camera}))}catch{}}var oz=class{value;listeners=new Set;constructor(e=nz()){this.storage=e,this.value=iz(e)}storage;get current(){return this.value}update(e){this.value={...this.value,...e},az(this.value,this.storage);for(let e of this.listeners)e(this.value)}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}destroy(){this.listeners.clear()}},sz={stage:`bootstrapping`,player:null,playerId:null,role:null,players:{},playerOrder:[],simulation:null,snapshot:null,final:null,select:null,serverTick:0,nextSequence:0,reconnectMs:0,safeError:null},cz=e=>Object.fromEntries(e.map(e=>[e.id,e]));function lz(e,t){if(t.type===`bootstrap`)return{...e,stage:`authorizing`,simulation:t.simulation,safeError:null};if(t.type===`authorized`)return{...e,stage:`connecting`,player:t.player,safeError:null};if(t.type===`connecting`)return{...e,stage:`connecting`};if(t.type===`reconnect-tick`)return{...e,stage:`paused`,reconnectMs:Math.max(0,t.remainingMs)};if(t.type===`fatal`)return{...e,stage:`fatal`,safeError:t.code,reconnectMs:0};let n=t.message;switch(n.type){case`welcome`:return{...e,playerId:n.role===`fighter`?n.player_id:null,role:n.role,players:cz(n.players),playerOrder:n.players.map(e=>e.id),serverTick:n.server_tick,nextSequence:n.role===`fighter`?n.next_sequence:0,safeError:null};case`ticket`:return e;case`waiting`:return{...e,stage:`waiting`,select:null};case`select`:return{...e,stage:`select`,select:n,players:cz(n.players),playerOrder:n.players.map(e=>e.id)};case`ready`:return{...e,stage:e.snapshot?.phase??`countdown`,select:null,players:cz(n.players),playerOrder:n.players.map(e=>e.id)};case`paused`:return{...e,stage:`paused`,reconnectMs:n.grace_ms};case`resumed`:return{...e,stage:e.snapshot?.phase??`countdown`,reconnectMs:0};case`snapshot`:return{...e,stage:n.payload.phase,snapshot:n.payload,serverTick:Math.max(e.serverTick,n.payload.tick)};case`final`:return{...e,stage:`complete`,final:n,reconnectMs:0};case`error`:return{...e,stage:`fatal`,safeError:n.code,reconnectMs:0}}}var uz=new Set([`hit`,`counter_hit`,`block`,`perfect_block`,`guard_break`,`knockdown`,`parry`,`body_collapse`,`eye_shut`]),dz=11e3,fz=1500,pz=4e3,mz=3e3,hz=6,gz=5e3,_z=[{level:`rookie`,label:`Rookie`,detail:`Slow hands, leaves openings`},{level:`contender`,label:`Contender`,detail:`Works the body, punishes mistakes`},{level:`champion`,label:`Champion`,detail:`Slips, counters, finishes`}],vz=e=>Ye.includes(e),yz=class{root;reloadPage;authorizer;state=sz;settings=new oz;input=new Eu;audio=new zn(()=>this.settings.current);haptics=new iu(()=>this.settings.current);voice=new Tn(()=>this.settings.current);feedbackEvents=new zu;renderer=null;network=null;session=null;abort=new AbortController;destroyed=!1;generation=0;reloadOnRetry=!1;reloading=!1;canvas;status;overlay;roleIndicator;controlsButton;controlsPanel;retry;rematchButton;hint;cpuPicker;cpuPrompt;cpuLevel=null;rematchOpponent=null;lastPhase=null;cpuRematchLevel=null;cpuRematch=null;cpuRematchTimer=null;diagnosticsTimer=null;finalReceivedAt=0;lastFinalMatchId=null;rematchAttempts=0;rematchTimer=null;rematchCountdownTimer=null;resultRevealTimer=null;resultWaitTimer=null;completeSince=null;summaryClock=new Qt;fightSummary;liveFightStatus;finalSummary;corner;stylePicker;constructor(e,t=()=>window.location.reload(),n=new Rl){this.root=e,this.reloadPage=t,this.authorizer=n,e.innerHTML=`
HANDStwo-player boxing

`,this.canvas=e.querySelector(`canvas`),this.status=e.querySelector(`[data-status]`),this.overlay=e.querySelector(`[data-overlay]`),this.roleIndicator=e.querySelector(`[data-role]`),this.controlsButton=e.querySelector(`[data-controls]`),this.controlsPanel=e.querySelector(`[data-controls-panel]`),this.retry=e.querySelector(`[data-retry]`),this.rematchButton=e.querySelector(`[data-rematch]`),this.hint=e.querySelector(`[data-hint]`),this.cpuPicker=e.querySelector(`[data-cpu]`),this.cpuPrompt=e.querySelector(`[data-cpu-prompt]`),this.cpuPicker.addEventListener(`click`,this.onCpuPick),this.rematchButton.addEventListener(`click`,this.onRematch),this.fightSummary=e.querySelector(`[data-fight-summary]`),this.liveFightStatus=e.querySelector(`[data-fight-status]`),this.finalSummary=e.querySelector(`[data-final]`),this.retry.addEventListener(`click`,this.onRetry),this.bindPanels(),this.syncSettings(),this.input.attachTouch(e.querySelector(`.activity`)),this.corner=new Xl(e.querySelector(`.activity`),e=>this.network?.sendCornerChoice(e)??!1),this.stylePicker=new pt(e.querySelector(`.activity`),(e,t)=>this.network?.chooseStyle(e,t)??!1),this.input.setViewForward(()=>this.renderer?.viewForward()??null),window.addEventListener(`keydown`,this.onCameraKey)}onCameraKey=e=>{if(e.code!==`KeyK`||e.repeat||e.ctrlKey||e.metaKey||e.altKey)return;let t=e.target;if(t instanceof HTMLInputElement||t instanceof HTMLSelectElement||t instanceof HTMLTextAreaElement)return;e.preventDefault();let n=$R[($R.indexOf(this.settings.current.camera)+1)%$R.length];this.settings.update({camera:n}),this.root.querySelector(`[data-camera]`).value=n};start(){this.authorize()}resetForAuthorization(){this.reloadOnRetry=!1,this.network?.dispose(),this.network=null,this.session?.destroy(),this.session=null,this.renderer?.destroy(),this.renderer=null,this.voice.cancel(),this.audio.reset(),this.abort.abort(),this.abort=new AbortController,this.state=sz,this.feedbackEvents.reset(),this.input.setActive(!1),this.input.reset(),this.finalSummary.textContent=``,this.fightSummary.textContent=``,this.liveFightStatus.textContent=``,this.clearRematchTimers(),this.rematchButton.hidden=!0,this.cpuLevel=null,this.lastPhase=null}onCpuPick=e=>{let t=e.target?.closest(`[data-cpu-level]`)?.dataset.cpuLevel;!vz(t)||this.state.stage!==`waiting`||this.state.role!==`fighter`||this.cpuLevel!==null||this.callCpu(t)};callCpu(e){this.network?.requestCpu(e)===!0&&(this.cpuLevel=e,this.renderState())}get cpuBout(){return Object.values(this.state.players).some(e=>e.cpu===!0)}onRematch=()=>{this.rematchButton.disabled||this.state.stage!==`complete`||(this.rematchAttempts=1,this.rematchOpponent=this.cpuBout||this.state.role!==`fighter`?null:Object.values(this.state.players).find(e=>e.id!==this.state.playerId)?.name??null,this.authorize())};clearRematchTimers(){this.rematchTimer!==null&&window.clearTimeout(this.rematchTimer),this.rematchCountdownTimer!==null&&window.clearInterval(this.rematchCountdownTimer),this.rematchTimer=null,this.rematchCountdownTimer=null,this.clearCpuRematch()}scheduleCpuRematch(e){this.clearCpuRematch(),this.cpuRematch={level:e,at:Date.now()+gz},this.cpuRematchTimer=window.setInterval(()=>{let e=this.cpuRematch;e===null||this.state.stage!==`waiting`||this.state.role!==`fighter`||this.cpuLevel!==null?this.clearCpuRematch():Date.now()>=e.at&&(this.clearCpuRematch(),this.callCpu(e.level)),this.renderState()},250)}clearCpuRematch(){this.cpuRematchTimer!==null&&window.clearInterval(this.cpuRematchTimer),this.cpuRematchTimer=null,this.cpuRematch=null}awaitResultReveal(){this.resultRevealTimer!==null&&window.clearInterval(this.resultRevealTimer);let e=()=>{let e=this.renderer?.resultVisible??!0;this.overlay.hidden=this.state.stage===`complete`&&!e,(e||this.state.stage!==`complete`)&&this.resultRevealTimer!==null&&(window.clearInterval(this.resultRevealTimer),this.resultRevealTimer=null)};this.resultRevealTimer=window.setInterval(e,200),e()}startRematchCountdown(){this.clearRematchTimers();let e=this.state.role===`fighter`?`Rematch`:`Next bout`,t=()=>{let t=Math.ceil((this.finalReceivedAt+dz-Date.now())/1e3);this.rematchButton.hidden=this.state.stage!==`complete`,this.rematchButton.disabled=t>0,this.setText(this.rematchButton,t>0?`${e} in ${t}s`:e),t<=0&&this.rematchCountdownTimer!==null&&(window.clearInterval(this.rematchCountdownTimer),this.rematchCountdownTimer=null)};t(),this.rematchCountdownTimer=window.setInterval(t,1e3)}scheduleRematchRetry(){if(this.rematchTimer===null){if(this.rematchAttempts>=hz){this.fail(`rematch_unavailable`);return}this.rematchAttempts+=1,this.setText(this.status,`The ring is still being cleared… trying again.`),this.rematchTimer=window.setTimeout(()=>{this.rematchTimer=null,this.authorize()},mz)}}async authorize(){let e=++this.generation;this.resetForAuthorization(),this.dispatch({type:`connecting`}),this.setText(this.status,`Securing Discord Activity session…`),this.retry.hidden=!0;try{let t=await this.authorizer.authorize(this.abort.signal);if(this.destroyed||e!==this.generation){t.destroy();return}this.session=t,this.dispatch({type:`bootstrap`,simulation:t.bootstrap.simulation}),this.dispatch({type:`authorized`,player:t.player}),this.input.onAction(e=>{this.renderer?.predictAction?.(e),this.network?.notifyAction()});let n=t.takeTicket();if(n===null)throw Error(`ticket_unavailable`);let r=new Yu(n,()=>this.input.frame(),{onMessage:e=>this.receive(e),onReconnect:e=>{this.dispatch({type:`reconnect-tick`,remainingMs:e}),this.renderer?.setReconnect(e),this.renderState()},onFatal:e=>this.fail(e),onFreshAuth:()=>{e===this.generation&&this.authorize()}});this.network=r,r.start(),this.setText(this.status,`Connecting to the ring…`)}catch(t){!this.abort.signal.aborted&&e===this.generation&&(this.reloadOnRetry=t instanceof Bn&&t.reloadRequired,this.fail(Kn(t)))}}ensureRenderer(){if(this.renderer!==null||this.session===null||this.destroyed)return;let e=new QR(this.canvas,this.session.bootstrap.simulation,()=>this.settings.current,{localInput:()=>this.input.held(),inputSequenceOf:e=>this.network?.sequenceOf(e)??null});e.onContact=e=>{this.audio.event(e),this.haptics.event(e)},e.onArcadeInjury=e=>this.audio.injury(e),e.onAnnouncement=e=>this.voice.speak(e),e.onCrowdCue=()=>this.audio.chant(),e.onRocked=(e,t)=>this.audio.rocked(e,t),this.renderer=e}receive(e){if(e.type===`error`){this.fail(e.code);return}e.type===`welcome`&&this.ensureRenderer(),(e.type===`welcome`||e.type===`resumed`)&&this.renderer?.resyncClock();let t=this.rematchAttempts>0;if((e.type===`waiting`||e.type===`ready`)&&(this.rematchAttempts=0),e.type===`ready`&&(this.rematchOpponent=null),e.type===`ready`&&this.rememberStyle(e.players),e.type===`final`&&this.rematchAttempts>0&&e.match_id===this.lastFinalMatchId){this.scheduleRematchRetry();return}this.dispatch({type:`message`,message:e}),e.type===`snapshot`&&this.receiveSnapshot(e.payload),(e.type===`select`||e.type===`ready`)&&!e.players.some(e=>e.cpu===!0)&&(this.cpuLevel=null),e.type===`waiting`&&(this.cpuLevel===null?t&&this.cpuRematchLevel!==null&&this.scheduleCpuRematch(this.cpuRematchLevel):this.callCpu(this.cpuLevel)),e.type===`final`&&(this.cpuRematchLevel=this.cpuBout?this.cpuLevel:null,this.rematchAttempts=0,this.lastFinalMatchId=e.match_id,this.finalReceivedAt=Date.now(),this.renderer?.setFinal(e),this.audio.result(e),this.startRematchCountdown(),this.awaitResultReveal()),this.renderer?.setPlayers(this.state.players,this.state.playerId,this.state.playerOrder),this.renderer?.setReconnect(this.state.reconnectMs),this.renderState()}get networkStats(){return{inputLatencyMs:this.network?.inputLatencyMs??null,resolutionScale:this.renderer?.resolutionScale??null,gpu:this.renderer?.memoryInfo??null}}receiveSnapshot(e){this.lastPhase===`countdown`&&e.phase!==`countdown`&&this.voice.finishLine(fz),this.lastPhase=e.phase,this.renderer?.setInputLatency(this.network?.inputLatencyMs??null),this.renderer?.push(e);let t=e.fighters.find(e=>e.player_id===this.state.playerId);this.input.setKnockdown(t?.is_downed===!0),t!==void 0&&this.audio.snapshot(e.tick,t.stamina,t.maximum_stamina,t.trauma.head+t.trauma.body),this.audio.roundClock(e.phase,e.round_number,e.phase_ticks_remaining,this.state.simulation?.tick_rate??30),this.audio.tension(zd(e));for(let t of this.feedbackEvents.accept(e.events))uz.has(t.kind)||(this.audio.event(t),this.haptics.event(t))}rememberStyle(e){let t=e.find(e=>e.id===this.state.playerId)?.style;this.state.role===`fighter`&&t!==void 0&&ot(t)}dispatch(e){this.state=lz(this.state,e)}setText(e,t){e.textContent!==t&&(e.textContent=t)}renderState(){let e={bootstrapping:`Loading…`,authorizing:`Authorizing with Discord…`,connecting:`Connecting securely…`,waiting:this.state.role===`spectator`?`Waiting for the fighters…`:this.cpuLevel===null?this.cpuRematch===null?this.rematchOpponent===null?`Waiting for an opponent. Anyone in this channel can join with Play now.`:`Waiting for ${this.rematchOpponent} to take the rematch…`:`Rematch with the ${_z.find(e=>e.level===this.cpuRematch?.level)?.label??`computer`} in ${Math.max(1,Math.ceil((this.cpuRematch.at-Date.now())/1e3))}s, unless someone joins first.`:`Calling in the computer…`,select:`Pick how your fighter boxes.`,countdown:`Bout countdown.`,fight:`Round ${this.state.snapshot?.round_number??1} in progress.`,knockdown:`Knockdown count ${this.state.snapshot?.fighters.find(e=>e.player_id===this.state.playerId)?.get_up_count??0}.`,foul_recovery:`Foul recovery in progress.`,rest:`Between-round rest.`,paused:`Connection paused. ${Math.ceil(this.state.reconnectMs/1e3)} seconds remain.`,complete:this.cpuBout?`Bout complete. Scorecards are displayed. Bouts against the computer are unrated.`:`Bout complete. Scorecards and rating changes are displayed.`,fatal:Ql(this.state.safeError??`safe_error`)},t=this.state.role===`spectator`;this.setText(this.status,t?`Spectating — ${e[this.state.stage]}`:e[this.state.stage]);let n=this.state.stage===`complete`&&this.state.final!==null;if(this.status.hidden=n||[`select`,`countdown`,`fight`,`knockdown`,`foul_recovery`,`rest`].includes(this.state.stage),this.overlay.toggleAttribute(`data-raised`,this.state.snapshot!==null),this.overlay.toggleAttribute(`data-result`,n),this.state.stage!==`complete`)this.overlay.hidden=!1,this.completeSince=null;else if(this.state.final===null){this.completeSince??=Date.now();let e=Date.now()-this.completeSince;this.overlay.hidden=e{this.resultWaitTimer=null,this.renderState()},pz-e+50))}this.roleIndicator.hidden=!t,this.controlsButton.hidden=t,t&&(this.controlsPanel.hidden=!0,this.controlsButton.setAttribute(`aria-expanded`,`false`));let r=this.state.snapshot?.fighters.find(e=>e.player_id===this.state.playerId),i=t?`Spectating. ${e[this.state.stage]}`:this.state.stage===`knockdown`&&r?.is_downed===!0?`Knockdown. Count ${r.get_up_count}. ${r.get_up_prompt===null?`Wait for your private rhythm instruction.`:`Press ${r.get_up_prompt===`get_up_left`?`left`:`right`} now.`}`:this.state.stage===`paused`?`Connection paused.`:e[this.state.stage];this.setText(this.liveFightStatus,i),this.corner.update(this.state.snapshot,this.state.playerId,this.state.role===`fighter`&&this.state.stage===`rest`),this.renderer?.setCornerPanelTop(this.corner.top()),this.stylePicker.update(this.state.stage===`select`?this.state.select:null,this.state.playerId,this.state.role),this.retry.hidden=this.state.stage!==`fatal`,this.setText(this.retry,this.reloadOnRetry?`Reload`:`Retry securely`),this.state.stage!==`complete`&&(this.rematchButton.hidden=!0),this.cpuPicker.hidden=t||this.state.stage!==`waiting`||this.cpuLevel!==null,this.setText(this.cpuPrompt,this.cpuRematch===null?this.rematchOpponent===null?`No one here yet? Fight the computer.`:`Or fight the computer instead:`:`Or start now:`);let a=!t&&(this.state.stage===`waiting`||this.state.stage===`countdown`);this.hint.hidden=!a,a&&this.setText(this.hint,fu($l(),window.innerWidth)),this.overlay.toggleAttribute(`data-touch-hint`,a&&this.state.stage===`countdown`&&$l());let o=!t&&[`countdown`,`fight`,`knockdown`,`foul_recovery`].includes(this.state.stage),s=!t&&this.state.snapshot!==null&&(this.state.stage===`rest`||this.state.stage===`paused`);if(this.input.setActive(o,o||s),this.network?.setActive(o),this.renderFightSummary(),this.state.final!==null){let e=this.state.final;this.setText(this.finalSummary,`${e.method.replaceAll(`_`,` `)}. ${e.winner_id===null?`Draw`:`${this.state.players[e.winner_id]?.name??`Winner`} wins`}. Scorecards: ${e.scorecards.map(e=>`${e.judge}: ${e.player_one.reduce((e,t)=>e+t,0)} to ${e.player_two.reduce((e,t)=>e+t,0)}`).join(`; `)}. ${this.cpuBout?`Unrated bout against the computer.`:`Ratings: ${Object.entries(e.ratings).map(([e,t])=>`${this.state.players[e]?.name??`fighter`} ${t.before} to ${t.after}`).join(`; `)}.`}`)}}renderFightSummary(){let e=this.state.snapshot;if(e===null)return;let t=this.state.simulation?.tick_rate??30,n=Math.floor(this.summaryClock.ticks(e)/t),r=`${Math.floor(n/60)}:${String(n%60).padStart(2,`0`)}`,i=e.fighters.map(e=>{let t=this.state.players[e.player_id];return`${t?.name??`Fighter`}, ${t?.cpu===!0?`computer opponent`:`ELO ${t?.rating??`unknown`}`}, stamina ${Math.round(e.stamina)} of ${Math.round(e.maximum_stamina)}, guard ${Math.round(e.guard)}, poise ${Math.round(e.poise)}, conditioning ${Math.round(e.conditioning)}, ${e.warnings} warnings, ${e.knockdowns} knockdowns`}),a=e.fighters.find(e=>e.player_id===this.state.playerId),o=a?.is_downed===!0?a.get_up_prompt===null?`You are down. Count ${a.get_up_count}. Wait for your private rhythm instruction.`:`You are down. Count ${a.get_up_count}. Press ${a.get_up_prompt===`get_up_left`?`left`:`right`} now. Get-up progress ${a.get_up_meter} of ${a.get_up_required}.`:``;this.setText(this.fightSummary,`Round ${e.round_number}. ${e.phase.replace(`_`,` `)}. Clock ${r}. ${i.join(`. `)}. ${o}`.trim())}onRetry=()=>{if(this.reloadOnRetry){this.reloading=!0,this.reloadPage();return}this.authorize()};bindPanels(){let e=(e,t)=>{let n=this.root.querySelector(e),r=this.root.querySelector(t);n.addEventListener(`click`,()=>{r.hidden=!r.hidden,n.setAttribute(`aria-expanded`,String(!r.hidden))})};e(`[data-controls]`,`[data-controls-panel]`),e(`[data-settings]`,`[data-settings-panel]`);let t=this.root.querySelector(`[data-settings-panel]`);this.root.querySelector(`[data-settings]`).addEventListener(`click`,()=>{this.diagnosticsTimer!==null&&window.clearInterval(this.diagnosticsTimer),this.diagnosticsTimer=null,!t.hidden&&(this.refreshDiagnostics(),this.diagnosticsTimer=window.setInterval(()=>this.refreshDiagnostics(),1e3))});let n=this.root.querySelector(`[data-copy-diagnostics]`);n.addEventListener(`click`,()=>{let e=this.diagnosticsText(),t=()=>{this.setText(n,`Copied`),window.setTimeout(()=>this.setText(n,`Copy diagnostics`),1500)},r=()=>{let e=this.root.querySelector(`[data-diagnostics]`),t=window.getSelection();if(t===null)return;let r=document.createRange();r.selectNodeContents(e),t.removeAllRanges(),t.addRange(r),this.setText(n,`Selected. Copy manually`),window.setTimeout(()=>this.setText(n,`Copy diagnostics`),2500)},i=navigator.clipboard;if(i===void 0||typeof i.writeText!=`function`){r();return}i.writeText(e).then(t).catch(r)}),this.root.querySelector(`[data-volume]`).addEventListener(`input`,e=>{this.settings.update({volume:Number(e.target.value)}),this.audio.setVolume(),this.voice.settingsChanged()}),this.root.querySelector(`[data-haptics]`).addEventListener(`change`,e=>{this.settings.update({haptics:e.target.checked})}),this.root.querySelector(`[data-motion]`).addEventListener(`change`,e=>{let t=e.target.checked;this.settings.update({reducedMotion:t}),this.renderer?.setReducedMotion(t)}),this.root.querySelector(`[data-commentary]`).addEventListener(`change`,e=>{this.settings.update({commentary:e.target.checked})}),this.root.querySelector(`[data-announcer]`).addEventListener(`change`,e=>{let t=e.target.checked;this.settings.update({announcer:t}),t||this.voice.cancel()}),this.root.querySelector(`[data-blood]`).addEventListener(`change`,e=>{let t=e.target.value;this.settings.update({blood:t}),this.renderer?.setBloodLevel(t)}),this.root.querySelector(`[data-camera]`).addEventListener(`change`,e=>{let t=$R.find(t=>t===e.target.value);t!==void 0&&this.settings.update({camera:t})})}diagnosticsText(){let e=this.networkStats,t=this.renderer?.diagnostics,n=t===void 0||t.frameMs<=0?`-`:(1e3/t.frameMs).toFixed(0);return[`stage: ${this.state.stage} · role: ${this.state.role??`-`}`,`input latency: ${e.inputLatencyMs===null?`-`:`${Math.round(e.inputLatencyMs)} ms`}`,`frame: ${t===void 0?`-`:`${t.frameMs.toFixed(1)} ms (${n} fps)`} · render scale: ${t?.resolutionScale??`-`}`,`gpu objects: ${t===void 0?`-`:`${t.gpu.geometries} geometries, ${t.gpu.textures} textures, ${t.gpu.programs} programs`}`,`graphics: ${t?.graphics??`-`}`,`browser: ${navigator.userAgent}`,`pointer: ${$l()?`coarse`:`fine`} · viewport: ${window.innerWidth}x${window.innerHeight} @${window.devicePixelRatio}`,`last error: ${this.state.safeError??`none`}`,`match: ${this.state.final?.match_id??`-`}`].join(` -`)}refreshDiagnostics(){this.setText(this.root.querySelector(`[data-diagnostics]`),this.diagnosticsText())}syncSettings(){let e=this.settings.current;this.root.querySelector(`[data-volume]`).value=String(e.volume),this.root.querySelector(`[data-haptics]`).checked=e.haptics,this.root.querySelector(`[data-motion]`).checked=e.reducedMotion,this.root.querySelector(`[data-blood]`).value=e.blood,this.root.querySelector(`[data-commentary]`).checked=e.commentary,this.syncAnnouncerSetting(),this.voice.onVoicesChanged=()=>this.syncAnnouncerSetting(),this.root.querySelector(`[data-camera]`).value=e.camera}syncAnnouncerSetting(){let e=this.root.querySelector(`[data-announcer]`),t=this.voice.hasVoice;e.checked=this.settings.current.announcer&&t,e.disabled=!t;let n=this.voice.supported?t?null:`This device has no English voice of its own`:`This browser cannot speak`;n===null?e.parentElement.removeAttribute(`title`):e.parentElement.title=n}fail(e){if(e===`room_closed`&&this.rematchAttempts>0){this.scheduleRematchRetry();return}e===`client_outdated`&&(this.reloadOnRetry=!0),this.dispatch({type:`fatal`,code:e}),this.rematchOpponent=null,this.voice.cancel(),this.network?.dispose(),this.network=null,this.session?.destroy(),this.session=null,this.renderer?.destroy(),this.renderer=null,this.input.setActive(!1),this.input.reset(),this.renderState()}destroy(){this.destroyed||(this.destroyed=!0,this.generation+=1,this.abort.abort(),this.network?.dispose(),this.session?.destroy(),this.reloading||this.authorizer.close(),this.renderer?.destroy(),window.removeEventListener(`keydown`,this.onCameraKey),this.input.destroy(),this.corner.destroy(),this.stylePicker.destroy(),this.audio.destroy(),this.voice.destroy(),this.settings.destroy(),this.retry.removeEventListener(`click`,this.onRetry),this.rematchButton.removeEventListener(`click`,this.onRematch),this.cpuPicker.removeEventListener(`click`,this.onCpuPick),this.clearRematchTimers(),this.diagnosticsTimer!==null&&window.clearInterval(this.diagnosticsTimer),this.resultRevealTimer!==null&&window.clearInterval(this.resultRevealTimer),this.resultWaitTimer!==null&&window.clearTimeout(this.resultWaitTimer),this.diagnosticsTimer=null,this.root.replaceChildren())}};(new URLSearchParams(window.location.search).get(`styles`)??``).split(`,`);var bz={broadcast:{position:[0,1.88,7.15],lookAt:[0,1.12,0]},side:{position:[7.4,1.6,0],lookAt:[0,1.1,0]},top:{position:[.01,8.5,.01],lookAt:[0,0,0]},ringside:{position:[1.6,1.5,4.1],lookAt:[.2,1.25,0]}},xz=[[`hips`,`spine`],[`spine`,`head`],[`chest`,`shoulderL`],[`shoulderL`,`elbowL`],[`elbowL`,`gloveL`],[`chest`,`shoulderR`],[`shoulderR`,`elbowR`],[`elbowR`,`gloveR`],[`hips`,`hipL`],[`hipL`,`kneeL`],[`kneeL`,`ankleL`],[`hips`,`hipR`],[`hipR`,`kneeR`],[`kneeR`,`ankleR`]],Sz=class{root;renderer=null;replay=null;raf=0;playing=!1;speed=1;virtualTick=0;carry=0;latencyMs=0;pendingQueue=[];destroyed=!1;overlays={skeleton:!1,hurtbox:!1,hitbox:!1};skeletonLines=[];hurtboxMeshes=[];hitboxMeshes=[];statusEl;metricsEl;canvas;constructor(e){this.root=e,e.innerHTML=`
+}`},KR=[{x:-102,y:-16},{x:102,y:-16}],qR=[0,1],JR=.5,YR={x:0,z:-.2},XR=0,ZR=200,QR=1.3,$R=.7,ez=4.5;function tz(e,t,n,r){let i=n.x-e,a=n.y-t,o=Math.hypot(i,a);return o<=Math.max(r,1e-6)?{x:n.x,y:n.y,arrived:!0}:{x:e+i/o*r,y:t+a/o*r,arrived:!1}}var nz=16,rz=.6,iz={hit:.18,counter_hit:.3,guard_break:.25,knockdown:1,block:.04,perfect_block:.1,parry:.22,body_collapse:.45},az=new Set([`hit`,`counter_hit`,`block`,`perfect_block`,`guard_break`,`knockdown`,`parry`,`body_collapse`,`eye_shut`]),oz=new Set([`parry`,`body_collapse`,`eye_shut`]),sz=new Set([`hit`,`counter_hit`,`block`,`perfect_block`]),cz=1.2,lz=.8,uz=2.4,dz=2.5,fz=new Set([`referee_hit`,`referee_down`]),pz=.05,mz=.08,hz={parry:{text:`PARRIED`,seconds:1},eye_shut:{text:`EYE SWOLLEN SHUT`,seconds:1.6}},gz=e=>e.kind===`knockdown`&&e.detail===`body`;function _z(e,t){if(!(!dR(e)||e.action_id===null))return t.find(t=>fR(t)&&t.action_id===e.action_id&&t.actor_id===e.target_id&&t.target_id===e.actor_id)}function vz(e,t){if(!(!fR(e)||e.action_id===null))return t.find(t=>dR(t)&&t.action_id===e.action_id&&t.actor_id===e.target_id&&t.target_id===e.actor_id)}function yz(e,t){return e.map((n,r)=>{if(oz.has(n.kind))return{event:n,presentationEvent:n,presentImpact:!1,reactAmount:null};let{puncherIndex:i}=lR(n,t),a=t.fighters[i],o=a?.action_key?.split(`:`)??[],s=o.length>=3?`${o[0]}:${o[2]}`:n.detail,c=vz(n,e);if(fR(n))return{event:n,presentationEvent:{...n,detail:c?.detail||s,direction:c?.direction??a?.facing??n.direction,blood:c?.blood??n.blood},presentImpact:!0,reactAmount:n.amount};if(_z(n,e)!==void 0)return{event:n,presentationEvent:n,presentImpact:!1,reactAmount:n.amount};if(n.kind===`knockdown`){let t=e.slice(0,r).reverse().find(e=>dR(e)&&e.tick===n.tick&&e.actor_id===n.actor_id&&e.target_id===n.target_id);if(t!==void 0)return{event:n,presentationEvent:{...n,detail:t.detail,direction:t.direction,blood:t.blood,action_id:t.action_id},presentImpact:!0,reactAmount:_z(t,e)===void 0?null:t.amount}}return{event:n,presentationEvent:n,presentImpact:!0,reactAmount:n.amount}})}function bz(e){let t=e?.trauma;if(t===void 0)return{side:1,lift:.08,lateral:.035,prop:`enswell`};switch(e?.corner_choice){case`cut`:return{side:t.right_cut>t.left_cut?-1:1,lift:.11,lateral:.04,prop:`enswell`};case`swelling`:return{side:t.right_eye>t.left_eye?-1:1,lift:.08,lateral:.035,prop:`enswell`};case`breath`:return{side:1,lift:-.015,lateral:0,prop:`bottle`};default:return{side:t.right_eye+t.right_cut>t.left_eye+t.left_cut?-1:1,lift:.08,lateral:.035,prop:`enswell`}}}function xz(e){return e?.split(`:`)[1]===`right`?1:-1}function Sz(e){return e.result===null?e.tick-1:e.tick}var Cz=50,wz=40,Tz=40,Ez=50,Dz=[`jab`,`straight`,`hook`,`uppercut`];function Oz(e,t,n,r){if(!rR(e,t,n))return null;let i=r?.action_key?.split(`:`),a=e.detail.split(`:`).find(e=>Dz.includes(e))??i?.[0],o=i?.[1]===`right`?`left`:`right`,s=e.amount;return e.detail.endsWith(`:head`)?n?.finish_method===`flash_ko`||e.kind===`counter_hit`&&s>=70?`head_burst`:a===`uppercut`&&s>=wz||a===`straight`&&s>=Cz?`decapitation`:(a===`hook`||a===`jab`)&&s>=Tz?`eye_${o}`:`jaw_dislocation`:a===`hook`?s>=Ez?`dismember_${o}`:`shoulder_${o}`:`ribs_${o}`}function kz(){let e=document.createElement(`canvas`);e.width=128,e.height=128;let t=e.getContext(`2d`);if(t!==null){let e=t.createRadialGradient(64,64,8,64,64,62);e.addColorStop(0,`rgba(0,0,0,0.68)`),e.addColorStop(.6,`rgba(0,0,0,0.34)`),e.addColorStop(1,`rgba(0,0,0,0)`),t.fillStyle=e,t.fillRect(0,0,128,128)}return new ev(e)}var Az=new J(0,.12,.02),jz=new J(0,1,0),Mz=new WeakMap;function Nz(e){let t=Mz.get(e);return t===void 0&&(t=QE(e,Qz),Mz.set(e,t)),t}function Pz(e){return e.y>_D-1.4}var Fz=new WeakMap;function Iz(e){let t=Fz.get(e);return t===void 0&&(t=QE(e,Pz),Fz.set(e,t)),t}function Lz(e,t,n){let r=e.bone(`head`);if(r===null)return null;e.root.updateMatrixWorld(!0);let i=e.headMesh,a=Iz(i.geometry);if(a.length===0)return null;let o=t.length===a.length*3?t:new Float32Array(a.length*3);n.position.set(0,0,0);for(let[t,r]of a.entries())Kz(e,r,n.scratch),n.scratch.toArray(o,t*3),n.position.add(n.scratch);return n.position.multiplyScalar(1/a.length),r.getWorldQuaternion(n.quaternion),n.across.set(1,0,0).applyQuaternion(n.quaternion),n.scratch.set(0,1,0).applyQuaternion(n.quaternion),n.quaternion.setFromUnitVectors(jz,n.scratch),o}function Rz(e,t,n,r){let i=e?.currentRoot;return r.set(i?.x??n.x(t.x),0,i?.z??n.z(t.y))}function zz(e,t,n,r,i){let a=Math.hypot(e-n,t-r);return a>=i?{x:e,z:t}:a<1e-6?{x:n,z:r-i}:{x:n+(e-n)/a*i,z:r+(t-r)/a*i}}var Bz=[0,1.05,-1.05,2.1,-2.1,Math.PI];function Vz(e,t,n,r,i,a,o=[]){let s=n===null?0:Math.hypot(n.x,n.z),c=n!==null&&s>=.35?[Math.atan2(n.x,n.z)]:[];for(let e of Bz)c.push(a+e);for(let n of c){let a=K.clamp(e+Math.sin(n)*r,-i,i),s=K.clamp(t+Math.cos(n)*r,-i,i),c=Math.hypot(a-e,s-t);if(!(c{let r=K.clamp(((n.x-e)*(a-e)+(n.z-t)*(s-t))/(c*c),.25,1);return Math.hypot(e+(a-e)*r-n.x,t+(s-t)*r-n.z)1e-9&&(s=Math.min(s,(Math.sign(n)*i-e)/n)),Math.abs(r)>1e-9&&(s=Math.min(s,(Math.sign(r)*a-t)/r));for(let i of[-1,1])for(let a of[-1,1]){let c=i*n+a*r;c>1e-9&&(s=Math.min(s,(o-i*e-a*t)/c))}return Math.max(0,s)}function Uz(e,t,n,r,i,a,o,s=1/0){let c=Math.hypot(n-e,r-t);if(c>=i)return null;let l=c<1e-6?1:(n-e)/c,u=c<1e-6?0:(r-t)/c,d=i-c,f=Hz(e,t,-l,-u,a,o,s),p=Hz(n,r,l,u,a,o,s),m=Math.min(d/2,f),h=Math.min(d-m,p);m=Math.min(d-h,f);let g=K.clamp;return{ax:g(e-l*m,-a,a),ay:g(t-u*m,-o,o),bx:g(n+l*h,-a,a),by:g(r+u*h,-o,o)}}var Wz=new WeakMap;function Gz(e,t,n,r,i,a,o){let s=Wz.get(e);if(s!==void 0&&s.width===t&&s.height===n)return s.top;let c=En(t,n,Cn(e,r,i,r.map(e=>a.total(e.player_id))),!0).y;return Wz.set(e,{width:t,height:n,top:c}),c}function Kz(e,t,n){let r=e.headMesh;return lO(n.fromBufferAttribute(r.geometry.getAttribute(`position`),t),e.look,n),r.applyBoneTransform(t,n).applyMatrix4(r.matrixWorld)}var qz=new Km,Jz=new Km,Yz=new Zm;function Xz(e,t,n){let r=e.geometry;qz.fromBufferAttribute(r.getAttribute(`skinIndex`),t),Jz.fromBufferAttribute(r.getAttribute(`skinWeight`),t),n.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);for(let t=0;t<4;t+=1){let r=Jz.getComponent(t);if(r===0)continue;let i=qz.getComponent(t);Yz.multiplyMatrices(e.skeleton.bones[i].matrixWorld,e.skeleton.boneInverses[i]);for(let e=0;e<16;e+=1)n.elements[e]+=Yz.elements[e]*r}return n.premultiply(e.bindMatrixInverse).multiply(e.bindMatrix)}var Zz=new J(-1,0,0);function Qz(e){return e.y>hD-gD*(e.z- -4)-.3}var $z={tick_rate:30,ring_half_width:500,ring_half_height:500};function eB(e,t,n,r,i,a){let o=e.geometry,s=o.getAttribute(`position`),c=o.getIndex(),l=[],u=c!==null&&r===void 0?[]:null;if(c===null||u===null)for(let e=0;e=i.start+o))return{action:i.punchClass,action_hand:i.hand,action_target:`head`,action_power:`normal`,action_id:`idle-${n}-${r}`,action_key:`${i.punchClass}:${i.hand}:head:normal`,action_start_tick:e-(t-i.start),action_startup_ticks:a.startup,action_active_ticks:a.active,action_recovery_ticks:a.recovery,action_contact_tick:e-(t-i.start)+a.startup}}return{}}var oB=1000003,sB=1.6;function cB(e,t,n,r,i,a){let o=r<0?-1:1,s=o=>Math.hypot(K.clamp(e+n*o*i,-a,a)-e,K.clamp(t+r*o*i,-a,a)-t);return s(o)>=i*.8||s(o)>=s(-o)?o:-o}function lB(e,t,n){return t?e.kind===`knockdown`?1:Math.min(1,.35+e.amount/400):(n===`full`?1:n===`reduced`?.4:0)*(e.kind===`knockdown`?.85:e.amount>=50?Math.min(.75,(e.amount-30)/140):0)}function uB(e){if(e.kind!==`hit`&&e.kind!==`counter_hit`||e.amount<(e.detail.endsWith(`:body`)?70:50))return null;let t=Math.min(100,Math.max(0,e.blood));return{seconds:.6+t/50,rate:150+e.amount*1.5+t*2}}function dB(e,t){return t===`full`?e>100?Math.min(.65,e/1800):0:e>350?Math.min(.3,e/4600):0}function fB(e){return!e.is_downed&&e.stunned_ticks===0&&e.clinch_ticks===0&&e.clinch_startup_ticks===0&&e.taunt_ticks===0&&!e.is_foul_recovery_target}function pB(e,t){if(e===null)return null;let n=t.fighters.find(t=>t.player_id===e.target_id),r=t.fighters.find(t=>t.player_id===e.actor_id);return Oz(e,n===void 0?void 0:{...n,is_downed:!0},{finish_method:`ko`,winner_id:e.actor_id},r)}var mB=.2,hB=1.1,gB=1.6,_B=2.4,vB=2,yB=new J(0,-.1,.08),bB=new J(0,-.07,.1),xB=new J(0,-.35,1),SB=3,CB=320,wB=8,TB=.08,EB=.12,DB=e=>e===`shoulder_left`||e===`shoulder_right`||e===`ribs_left`||e===`ribs_right`?e:`mouth`;function OB(e,t,n=hB){return Math.min(n,.06+.08*Math.sqrt(Math.max(0,e))*Math.min(1.6,Math.max(0,t)))}function kB(e,t,n){return e.is_downed||t?.isDown===!0||n!==void 0&&e.player_id===n}var AB=6,jB=11,MB=.13;function NB(e,t){let n=t===`left`?`leftRibs`:`rightRibs`;e.impact(n,[t===`left`?-6:AB,-6*.15,-6*.25],jB),e.set(n,{bruise:1.2,swell:0,blood:1.4})}function PB(e,t){e.set(`mouth`,{cut:1,blood:1.4}),e.set(`chin`,{bruise:1.2}),t.set(`neckSmear`,{blood:1.4})}function FB(e,t){e.set(t===`left`?`leftShoulderSmear`:`rightShoulderSmear`,{blood:1.4}),e.set(t===`left`?`leftPec`:`rightPec`,{bruise:1.1})}var IB=new WeakMap;function LB(e,t){let n=IB.get(e);if(n===void 0){let t=e.getAttribute(`position`),r=new J,i=new J,a=CD.map(e=>{let n=0,a=1/0;i.set(e[0],e[1],e[2]);for(let e=0;ethis.onAnnouncement?.(e),cue:e=>this.onCrowdCue?.(e)});touchControls=lu();resultAnnounced=!1;captionText=``;rocked=new AL;tmpA=new J;tmpB=new J;contactPoint=new J;cornerPanelTop=null;mouthPoint=new J;tmpHead=new J;tmpHeadQuaternion=new Dm;tmpStump=new J;tmpStumpOffset=new J;tmpStumpQuaternion=new Dm;tmpStumpAcross=new J;tmpPart=new J;tmpPartQuaternion=new Dm;woundPoint=new J;woundAxis=new J;constructor(e,t=$z,n,r={}){this.canvas=e,this.simulation=t,this.settings=n,this.manualClock=r.manualClock===!0,this.localInput=r.localInput??null,this.powerHeld=r.powerHeld??null,this.inputSequenceOf=r.inputSequenceOf??null,this.buffer=new td(8,t.tick_rate),this.mapping=Xw(t),this.renderer=new $C({canvas:e,antialias:!0,powerPreference:`high-performance`,preserveDrawingBuffer:r.manualClock===!0}),this.renderer.shadowMap.enabled=!0,this.renderer.shadowMap.type=1,this.renderer.toneMapping=4,this.renderer.toneMappingExposure=1,this.renderer.setPixelRatio(this.basePixelRatio),this.scene.background=new Y(`#04060b`),this.scene.fog=new Nh(`#04060b`,.042),this.camera=new Zy(36,1,.1,80),this.camera.position.set(0,2.05,5.9),this.camera.lookAt(0,1.05,0),this.setupLights(),this.ring=KP(),this.scene.add(this.ring.group),this.arena=kT(),this.scene.add(this.arena.group),this.effects=new pA(this.scene,lu()?1024:2048,lu()?NO:MO),this.effects.useUploader(this.renderer),this.effects.setCamera(this.camera),this.blobTexture=kz();let i=new zv(1,1);for(let e=0;e<3;e+=1){let t=new t_(i,new Ug({map:this.blobTexture,transparent:!0,depthWrite:!1}));t.rotation.x=-Math.PI/2,t.position.y=.006+e*4e-4,t.renderOrder=1,this.blobShadows.push(t),this.scene.add(t)}this.composer=new cw(this.renderer),this.composer.addPass(new lw(this.scene,this.camera));let a=new dw(new q(1280,720),.2,.45,1.08);this.bloomPass=a,this.composer.addPass(a),this.finishPass=new aw(GR),this.composer.addPass(this.finishPass),this.composer.addPass(new pw),this.hudCanvas=document.createElement(`canvas`),this.hudCanvas.className=`fight-hud`,this.hudCanvas.style.cssText=`position:absolute;inset:0;width:100%;height:100%;pointer-events:none`,e.insertAdjacentElement(`afterend`,this.hudCanvas),this.bloodLevel=n().blood,this.effects.setBloodLevel(this.bloodLevel),this.ensureGraphs(),this.manualClock||(this.raf=requestAnimationFrame(e=>this.draw(e)))}ensureGraphs(){this.glbLoading||this.graphs!==null||(this.glbLoading=!0,this.graphsReady=rF().then(async e=>{if(this.destroyed)return;let t=new gF(e,{skin:11563071,gear:1920728}),n=new gF(e,{skin:7225640,gear:12131356});this.graphs=[new JF(t,this.mapping),new JF(n,this.mapping)],this.lookIds.fill(null),this.syncInjuryPresentation(0),this.syncInjuryPresentation(1);let r=new gF(e,{skin:13081462,gear:3889080,look:ZD.referee,outfit:Sj,wounds:!0});this.referee=new JF(r,this.mapping,{referee:!0,knockout:!0});let i=new gF(e,{skin:9067067,gear:1778224,look:ZD.blueCorner,outfit:Cj}),a=new gF(e,{skin:14264188,gear:1778224,look:ZD.redCorner,outfit:wj});this.cornermen=[new JF(i,this.mapping,{referee:!0}),new JF(a,this.mapping,{referee:!0})];let o=new gF(e,{skin:12160102,gear:1778224,look:ZD.blueCutman,outfit:Tj}),s=new gF(e,{skin:5913126,gear:1778224,look:ZD.redCutman,outfit:Tj});this.cutmen=[new JF(o,this.mapping,{referee:!0}),new JF(s,this.mapping,{referee:!0})],o.root.visible=!1,s.root.visible=!1,this.trails=[1920728,12131356].flatMap(e=>[0,1].map(()=>new $L(new Y(e).lerp(new Y(16777215),.55))));let c=WL();this.glowMap=c,this.glows=[0,1,2,3].map(()=>new KL(c)),this.impactFlashes=[0,1].map(()=>new qL(c));let l=new Th;l.add(t.root,n.root,r.root,i.root,a.root,o.root,s.root,...this.trails.map(e=>e.mesh),...this.effects.compileStandIns(),this.glows[0].standIn(),...this.impactFlashes[0].standIns());let u=t.headInjury.open;t.headInjury.setOpen(!0);try{await aR(this.renderer,this.composer,l,this.camera,this.scene)}catch{}if(!this.destroyed){this.scene.add(t.root,n.root,r.root,i.root,a.root,o.root,s.root);for(let e of this.trails)this.scene.add(e.mesh);for(let e of this.glows)this.scene.add(e.mesh);for(let e of this.impactFlashes)this.scene.add(e.group);this.compileShadowsOf(l),t.headInjury.setOpen(u)}}).catch(e=>{this.glbLoading=!1,console.error(`boxer_glb_load_failed`,e)}))}compileShadowsOf(e){let t=this.keyLight;if(!(t===null||e.children.length===0)){for(let t of e.children)t.frustumCulled=!1,t.onBeforeShadow=(e,t,n,r,i,a)=>{a.needsUpdate=!0};this.scene.add(e),t.shadow.needsUpdate=!0,this.renderer.setRenderTarget(this.composer.readBuffer);try{this.renderer.render(this.scene,this.camera)}catch{}finally{this.renderer.setRenderTarget(null),this.scene.remove(e)}}}get ready(){return this.graphsReady}get labRigs(){let e=this.graphs;return e===null?[]:[e[0].boxer.root,e[1].boxer.root]}get labScene(){return this.scene}get labEffects(){return this.effects}labSetCameraOverride(e,t){this.cameraOverride={position:new J(...e),lookAt:new J(...t)}}labFrame(e,t=!0){this.draw(e*1e3,!0,t)}setCornerPanelTop(e){this.cornerPanelTop=e}viewForward(){return this.ownViewActive?(this.ownForward.x=this.fighterCam.forwardX,this.ownForward.z=this.fighterCam.forwardZ,this.ownForward):null}setPlayers(e,t,n=Object.keys(e)){this.players=e,this.viewerId=t,this.playerOrder=n}updateIdleFighters(e,t,n){let r=this.graphs;if(r===null)return;let i=this.playerOrder.filter(e=>this.players[e]!==void 0).length<2;for(let[a,o]of r.entries()){let r=this.playerOrder[a]??`seat-${a}`,s=!i||r===this.viewerId||this.viewerId===null&&a===0;if(o.boxer.root.visible=s,!s)continue;this.wearLook(a===0?0:1,r);let c=a===0?-1:1,l=Math.floor(t*this.simulation.tick_rate),u={...nB(r),x:i?0:c*180,y:i?-70:0,facing:i?1:-c,facing_x:i?0:-c*1e3,facing_y:i?-1e3:0,...i?aB(l):{}},d={...nB(this.playerOrder[1-a]??`opponent`),x:i?0:-c*180,y:i?-150:0};o.setResting(!1),o.update(u,d,e,t,this.settings().reducedMotion,this.bloodLevel,i?l:n)}}setFinal(e){if(e!==null&&e.match_id===this.final?.match_id||(this.final=e,this.stoppageWinner=-1,this.stoppageRaiseAt=1/0,this.stoppageSpot=null,this.raiseFramed=!1,this.ceremony=this.ceremonyFor(e),this.finalRevealAt=this.frameSeconds+(this.ceremony===null?gn(e):ez),this.ovationUntil=e===null?0:this.frameSeconds+nz,e!==null&&this.commentary.finish(e,this.players,this.ceremony!==null,this.frameSeconds),this.ceremony===null&&this.endCeremony(),this.pendingFinish=null,e===null||!pn.has(e.method)))return;let t=this.lastKnockdown===null?null:PL(this.history,this.lastKnockdown.hit??this.lastKnockdown.knockdown,this.simulation.tick_rate),n=this.finishingInjury(e);if(t!==null&&this.graphs!==null&&!this.settings().reducedMotion){n!==null&&(this.replayInjuries[n.index]={injury:n.injury,event:n.event}),this.startReplay(t);return}if(n!==null){let e=this.pendingContacts.find(e=>e.event.event_id===n.event.event_id);e===void 0?this.applyArcadeInjury(n.index,n.injury,n.event):e.injury??=n.injury}let r=this.buffer.latest()?.result?.tick;r===void 0?this.presentFinish(e):this.pendingFinish={final:e,tick:r,latestAt:this.frameSeconds+kR}}presentFinishWhenShown(e){let t=this.pendingFinish;t===null||ee.player_id===t.hit.target_id)??-1;return r<0||this.arcadeInjuries[r]!==null?null:{index:r,injury:t.finisher,event:t.hit}}ceremonyFor(e){let t=this.buffer.latest()?.fighters;if(e===null||t===void 0||e.method!==`decision`&&e.method!==`draw`||t.some(e=>e.is_downed))return null;let n=t.findIndex(t=>t.player_id===e.winner_id);return{winnerSeat:n===0||n===1?n:null,positions:null,refereeArrived:!1,arrivedAt:null,announced:!1}}endCeremony(){for(let e of this.graphs??[])e.awaitVerdict(null);this.referee?.raise(null,null)}ceremonyFighters(e,t,n,r,i=null){e.positions===null&&(e.positions=[{x:t[0].x+(i?.[0].x??0),y:t[0].y+(i?.[0].y??0)},{x:t[1].x+(i?.[1].x??0),y:t[1].y+(i?.[1].y??0)}],e.marks=e.positions[0].x<=e.positions[1].x?[0,1]:[1,0]);let a=e.marks??qR,o=e.refereeArrived;for(let r of[0,1]){let i=e.positions[r],s=a[r],c=tz(i.x,i.y,KR[s],ZR*n),l=Math.hypot(c.x-i.x,c.y-i.y),u=n>0?1/(n*this.simulation.tick_rate):0,d=!c.arrived&&l>1e-6;Object.assign(this.drawnFighters[r],t[r],{x:c.x,y:c.y,velocity_x:(c.x-i.x)*u,velocity_y:(c.y-i.y)*u,facing_x:d?Math.round((c.x-i.x)/l*1e3):0,facing_y:d?Math.round((c.y-i.y)/l*1e3):-1e3,facing:d&&c.x=$R){e.announced=!0,this.commentary.verdict(this.frameSeconds);for(let t of[0,1])this.graphs?.[t]?.announce(e.winnerSeat===null?`level`:e.winnerSeat===t?`winner`:`loser`);this.finalRevealAt=Math.min(this.finalRevealAt,this.frameSeconds+.35),this.arena.excite(1)}if(e.announced){let t=t=>{let n=a[0]===t?0:1,r=e.winnerSeat===null||e.winnerSeat===n,i=this.graphs?.[n]?.boxer.rig.bones[t===0?`gloveL`:`gloveR`];return r&&i!==void 0?i.getWorldPosition(this.ceremonyWrists[t]):null};this.referee?.isDown!==!0&&this.referee?.raise(t(1),t(0))}return this.drawnFighters}ceremonyFrame(e){let t=this.ceremony,n=this.buffer.latest();if(t===null||t.arrivedAt===null||this.replay!==null||this.final===null||n===null)return null;let{width:r,height:i}=this.hudViewport,a=Gz(this.final,r,i,n.fighters,this.players,this.roundStats,this.viewerId),o=JT(this.camera.aspect,this.camera.fov,(i-a)/Math.max(1,i)),s=this.settings().reducedMotion?0:Math.sin((e-t.arrivedAt)*.35)*.06*o.distance;return this.cornerPosition.set(s,o.height+.05*o.distance,o.distance),this.cornerLookAt.set(0,o.height,0),{position:this.cornerPosition,lookAt:this.cornerLookAt,framed:!0}}raiseFrame(e,t,n){let r=this.buffer.latest();if(this.stoppageWinner<0||this.final===null||this.replay!==null||this.ceremony!==null||r===null||e0?-1:1)*wR,o=this.stoppageSpot?.z??0;this.raiseFramed||this.raiseCentre.set(i.x+a/2,0,i.z+o/2),this.raiseCentre.lerp(this.tmpCamera.set(i.x+a/2,0,i.z+o/2),1-Math.exp(-3*t)),this.raiseFramed=!0;let{width:s,height:c}=this.hudViewport,l=Gz(this.final,s,c,r.fighters,this.players,this.roundStats,this.viewerId),u=JT(this.camera.aspect,this.baseFov,(c-l)/Math.max(1,c)),d=e-(this.stoppageRaiseAt-CR),f=n?0:Math.sin(d*.35)*.06*u.distance;return this.cornerPosition.set(K.clamp(this.raiseCentre.x,-1.4,1.4)+f,u.height+.05*u.distance,this.raiseCentre.z+u.distance),this.cornerLookAt.set(this.raiseCentre.x,u.height,this.raiseCentre.z),{position:this.cornerPosition,lookAt:this.cornerLookAt,framed:!0}}presentFinish(e){let t=this.buffer.latest()?.referee.alive===!1;t||this.referee?.waveOff();let n=this.buffer.latest()?.fighters,r=n?.findIndex(t=>t.player_id!==e.winner_id&&t.player_id!==null)??-1;if(r>=0&&this.headCacheValid[r]&&!this.settings().reducedMotion&&(this.finishCloseUpIndex=r,this.finishCloseUpUntil=this.frameSeconds+gR,this.finishCloseUpBearing=null,this.finishCloseUpAt=this.frameSeconds),e.winner_id===null)return;let i=n?.findIndex(t=>t.player_id===e.winner_id)??-1;i<0||(this.graphs?.[i]?.celebrate(SR),!t&&(this.stoppageWinner=i,this.stoppageRaiseAt=this.frameSeconds+CR))}cornerShotFrame(e,t,n){if(t===null||t.phase!==`rest`||n||this.graphs===null)return null;let r=t.fighters.findIndex(e=>e.player_id===this.viewerId),i=e-this.restStartedAt,a=BT(i,t.phase_ticks_remaining/this.simulation.tick_rate,+(r===1));return a===null||!this.graphs[a].stoolVisible||this.cutmen!==null&&this.cutmanProgress[a]e.player_id===this.viewerId)===1),n=this.mapping.x(l);return GT(t,n,-3.5,yR,this.cornerPosition).setY(bR),GT(t,n,0,0,this.cornerLookAt),this.cornerLookAt.lerp(GT(+(t===0),n,0,0,this.tmpCamera),xR).setY(.9),{position:this.cornerPosition,lookAt:this.cornerLookAt,framed:!0}}closeUpFrame(e){if(e>=this.finishCloseUpUntil||this.finishCloseUpIndex<0||!this.headCacheValid[this.finishCloseUpIndex])return null;let t=this.arcadeInjuries[this.finishCloseUpIndex],n=t===`decapitation`&&this.effects.severedHeadPosition(this.finishCloseUpIndex,this.closeUpTarget),r=n?null:this.graphs?.[this.finishCloseUpIndex]?.fallBody??null;if(this.finishCloseUpBearing===null&&r!==null&&!r.body.asleep&&e-this.finishCloseUpAt<_R)return this.finishCloseUpUntil=e+gR,null;let i=!n&&(t===`eye_left`||t===`eye_right`)&&this.effects.eyePosition(this.finishCloseUpIndex,this.closeUpTarget);this.finishCloseUpBearing===null&&(this.finishCloseUpHanging=i&&this.eyeInSight(this.closeUpTarget));let a=i&&this.finishCloseUpHanging,o=n||a?this.closeUpTarget:this.headCache[this.finishCloseUpIndex],s=n?.8:a?.45:1.05,c=(e-(this.finishCloseUpUntil-gR))*.25-.2,l=Math.atan2(-o.x,-o.z);if(this.finishCloseUpBearing===null){let e=a?this.headWorldPose(this.finishCloseUpIndex):null,t=n&&this.effects.severedHeadFacing(this.finishCloseUpIndex,this.closeUpFacing)?this.closeUpFacing:e===null?r?.faceDirection(this.closeUpFacing)??null:this.closeUpFacing.copy(o).sub(e.position).normalize(),i=this.finishCloseUpIndex===0?this.tmpB:this.tmpA,c=[{x:i.x,z:i.z,radius:IR},{x:this.refereePosition.x,z:this.refereePosition.z,radius:IR}];if(r!==null)for(let e of[1,2,3,4])r.bodyPoint(e,this.bodyPoint),c.push({x:this.bodyPoint.x,z:this.bodyPoint.z,radius:LR});this.finishCloseUpBearing=Vz(o.x,o.z,t,s,jR,Math.hypot(o.x,o.z)>.4?l:.9,c)}let u=this.finishCloseUpBearing+c;return this.closeUpPosition.set(K.clamp(o.x+Math.sin(u)*s,-2.2,jR),o.y+(n?.42:a?.5:.75),K.clamp(o.z+Math.cos(u)*s,-2.2,jR)),this.replayLookAt.copy(o),{position:this.closeUpPosition,lookAt:this.replayLookAt,tight:!0}}raiseSpot(e,t){let n=e.x>0?-1:1,r={x:n*wR,z:0},i=-1/0;for(let[a,o]of TR){let s=e.x+n*a*wR,c=e.z+o*wR,l=Math.min(OR-Math.abs(s),OR-Math.abs(c),Math.hypot(s-t.x,c-t.z)-DR);for(let e of this.graphs??[]){let t=e.fallBody;if(t!==null)for(let e of[0,1,2,3,4])t.bodyPoint(e,this.bodyPoint),l=Math.min(l,Math.hypot(s-this.bodyPoint.x,c-this.bodyPoint.z)-PR-.05)}for(let e of[0,1])this.effects.severedHeadPosition(e,this.closeUpTarget)&&(l=Math.min(l,Math.hypot(s-this.closeUpTarget.x,c-this.closeUpTarget.z)-MR-.05));if(l>=0)return{x:s-e.x,z:c-e.z};l>i&&(i=l,r={x:s-e.x,z:c-e.z})}return r}nearerGlove(e,t){e.getWorldPosition(this.stoppageWrist),t.getWorldPosition(this.stoppageOtherWrist);let n=e=>Math.hypot(e.x-this.refereePosition.x,e.z-this.refereePosition.z);return n(this.stoppageOtherWrist)-.5*n.length()}startReplay(e){let t=new td(e.snapshots.length+2,this.simulation.tick_rate);for(let n of e.snapshots)t.push(n);if(this.replay={plan:e,buffer:t,startedAt:this.frameSeconds,impactFired:!1,side:null},this.drawnOffsetsLive=!1,this.commentary.replay(this.frameSeconds,e.impact),this.replayFollow=0,this.replayFollowAt=0,e.impact.kind===`referee_down`){this.referee?.resetTransient(!1),this.referee?.primeReplayFall(),this.effects.stopGush(2);return}for(let e of[0,1]){this.effects.stopGush(e);let t=this.arcadeInjuries[e],n=this.arcadeInjuryEvents[e];t!==null&&n!==null&&(this.replayInjuries[e]={injury:t,event:n},this.restoreInjury(e))}for(let t of this.pendingContacts.splice(0)){let n=t.recipientIndex;t.injury!==null&&(n===0||n===1)&&this.replayInjuries[n]===null&&this.arcadeInjuries[n]===null&&(this.replayInjuries[n]={injury:t.injury,event:t.event}),t.event.event_id!==e.impact.event_id&&(t.injury=null,t.contactTick=1/0,this.pendingContacts.push(t))}let n=e.snapshots[0]?.fighters.findIndex(t=>t.player_id===e.impact.target_id)??-1;n>=0&&e.impact.detail.endsWith(`:head`)&&this.effects.returnMouthpiece(n);let r=this.lastKnockdown?.knockdown.detail===NR;for(let[t,i]of(this.graphs??[]).entries()){let a=this.liveFallTicks[t]??null;i.resetTransient(!1),a!==null&&a>=e.impact.tick-1&&i.primeReplayFall(),t===n&&r&&i.fallToKnee(!0)}this.finalRevealAt=this.frameSeconds+e.durationSeconds+gn(this.final)}endReplay(){let e=this.replay?.plan.impact.kind===`referee_down`;if(this.replay=null,e){this.drawnOffsetsLive=!1;let e=this.buffer.latest();for(let[t,n]of(this.graphs??[]).entries())n.resetTransient(e?.fighters[t]?.is_downed===!0);return}this.drawnOffsetsLive=!1,this.reapplyReplayInjuries();let t=this.buffer.latest();for(let[e,n]of(this.graphs??[]).entries()){let r=t?.fighters[e],i=r!==void 0&&r.player_id===this.flashKnockout?.loserId;n.resetTransient(r?.is_downed===!0||i),i&&n.knockOut()}this.final!==null&&this.presentFinish(this.final)}fireRefereeEvents(e){for(let t=0;te){t+=1;continue}this.pendingRefereeEvents.splice(t,1);let r=this.buffer.latest();n.kind===`referee_down`?(r!==null&&this.fireRefereeFall(n,r),this.eventCallout={text:`THE REFEREE IS DEAD!`,until:this.frameSeconds+uz},this.refereeReplayAt={at:this.frameSeconds+lz,impact:n}):n.kind===`referee_hit`?r!==null&&this.punchReferee(n,r,!1):this.referee!==null&&(this.referee.boxer.rig.bones.head.getWorldPosition(this.refereeHead),this.effects.addEvent(n,this.refereeHead,this.settings().reducedMotion))}}punchReferee(e,t,n){let r=this.referee;if(r===null)return;let[i,a]=e.detail.split(`:`),o=t.fighters.findIndex(t=>t.player_id===e.actor_id),s=t.fighters[o],c=s?.action_key?.split(`:`)[1]??null;r.react(`hit`,a===`body`?`body`:`head`,e.direction,i,c,n?Math.max(e.amount,140):e.amount),r.boxer.rig.bones.head.getWorldPosition(this.refereeHead);let l=s===void 0?void 0:uR(s,{...s,x:t.referee.x,y:t.referee.y},this.mapping),u=this.settings().reducedMotion;this.effects.addEvent({...e,kind:n?`knockdown`:`hit`},this.refereeHead,u,l);let d=n||u?null:uB({...e,kind:`hit`}),f=d===null?null:this.refereeMouth();d!==null&&f!==null&&this.effects.gush(2,f.position,f.axis,d.seconds,d.rate,e.event_id);let p=this.refereePunchPower(e);o>=0&&this.graphs?.[o]?.landedHit(e.action_id,!1,p),this.onContact?.(e,p)}fireRefereeFall(e,t,n=!1){let r=this.referee;if(r===null)return;let i=n?this.refereeBlow(e):null;i===null?(r.boxer.rig.bones.head.getWorldPosition(this.refereeHead),this.effects.addEvent({...e,kind:`knockdown`,amount:160,blood:80},this.refereeHead,this.settings().reducedMotion)):this.punchReferee(i,t,!0);let a=this.settings().reducedMotion?null:this.refereeMouth();a!==null&&this.effects.gush(2,a.position,a.axis,SB,CB,e.event_id),r.knockOut(),this.onContact?.(e,!1)}refereePunchPower(e){for(let t=this.history.length-1;t>=0;--t){let n=this.history[t];if(n.tickt.player_id===e.actor_id);return r!==void 0&&r.action_id===e.action_id&&r.action_power===`power`}return!1}refereeBlow(e){if(e.action_id===null)return null;for(let t=this.history.length-1;t>=0;--t){let n=this.history[t],r=n.events.find(t=>t.kind===`referee_hit`&&t.action_id===e.action_id&&t.tick===e.tick);if(r!==void 0)return r;if(n.tick=0?e.fighters[a]:void 0,l=c?.action_key?.split(`:`)??[],u=l[0]??null,d=l[1]??null,f=l[3]===`power`;this.graphs?.[i]?.react(`hit`,r.detail.endsWith(`:body`)?`body`:`head`,r.direction,u,d,r.amount),n.knockdown.detail===`body`&&n.knockdown.tick>r.tick&&this.graphs?.[i]?.windedFor((n.knockdown.tick-r.tick)/this.simulation.tick_rate+.15,xz(c?.action_key??null)),o.player_id===this.flashKnockout?.loserId&&this.graphs?.[i]?.knockOut(),a>=0&&this.graphs?.[a]?.landedHit(r.action_id,n.blocked,f),r.detail.endsWith(`:head`)&&!this.settings().reducedMotion&&this.knockOutMouthpiece(i,s??r.direction,r.event_id+oB,!0),f&&!n.blocked&&!this.settings().reducedMotion&&this.presentPowerHit(i,r),this.onContact?.(r,f),this.reapplyReplayInjuries(s);for(let t of this.pendingContacts)t.contactTick===1/0&&(t.contactTick=this.replay?.plan.impact.tick??e.tick)}replayFrame(e,t){let[n,r]=e.fighters,i=this.mapping.x(n.x),a=this.mapping.z(n.y),o=this.mapping.x(r.x),s=this.mapping.z(r.y),c=this.replay?.plan.impact.kind===`referee_down`,l=e.fighters.findIndex(e=>e.player_id===this.replay?.plan.impact.target_id),u=this.replay?.impactFired===!0&&l>=0&&this.headCacheValid[l]===!0;if(c&&this.referee!==null)return this.refereeReplayFrame(e,t);let d=1-Math.exp(-3*Math.max(0,t-this.replayFollowAt));this.replayFollowAt=t,this.replayFollow+=(+!!u-this.replayFollow)*d;let f=l<0?0:Math.max(this.portraitPull>1.3?.7:0,this.replayFollow*.8),p=u?this.headCache[l].x:l===1?o:i,m=u?this.headCache[l].z:l===1?s:a,h=(i+o)/2+(p-(i+o)/2)*f,g=(a+s)/2+(m-(a+s)/2)*f,_=-(s-a),v=o-i,y=Math.hypot(_,v)||1;_/=y,v/=y;let b=2.5,x=this.replay;x!==null&&x.side===null&&(x.side=cB(h,g,_,v,b,jR));let S=x?.side??(v<0?-1:1);_*=S,v*=S;let C=.35*Math.sin(t*.7),w=_*Math.cos(C)-v*Math.sin(C),T=_*Math.sin(C)+v*Math.cos(C);this.replayCameraPosition.set(K.clamp(h+w*b,-2.2,jR),1.38-Math.min(.25,t*.05),K.clamp(g+T*b,-2.2,jR));let E=Math.hypot(this.replayCameraPosition.x-h,this.replayCameraPosition.z-g),D=Math.hypot(h,g);if(E.01){let e=sB-E;this.replayCameraPosition.x=K.clamp(this.replayCameraPosition.x-h/D*e,-2.2,jR),this.replayCameraPosition.z=K.clamp(this.replayCameraPosition.z-g/D*e,-2.2,jR)}let O=u?K.clamp(this.headCache[l].y,.45,1.28):1.28;this.replayLookAt.set(h,1.28+(O-1.28)*this.replayFollow,g);let k=this.settings().reducedMotion?0:this.powerShake;if(k>5e-4){let e=t*61;this.replayCameraPosition.x=K.clamp(this.replayCameraPosition.x+Math.sin(e*1.31)*k,-2.2,jR),this.replayCameraPosition.y+=Math.cos(e*1.97)*k*.6,this.replayLookAt.x+=Math.sin(e*1.53)*k*.5,this.replayLookAt.y+=Math.cos(e*2.11)*k*.35}return{position:this.replayCameraPosition,lookAt:this.replayLookAt,tight:!0}}setInputLatency(e){this.inputLatencyMs=e,this.lagWarned=vn(e,this.lagWarned)}resyncClock(){this.buffer.resync()}setReconnect(e){this.reconnectMs=e}setBloodLevel(e){e!==`full`&&this.bloodLevel===`full`&&this.restoreAllInjuries(),this.bloodLevel=e,e===`off`&&this.downedPoolAccumulators.fill(0),this.effects.setBloodLevel(e)}setReducedMotion(e){e&&(this.restoreAllInjuries(),this.effects.clearDynamic())}syncInjuryPresentation(e){let t=this.arcadeInjuries[e],n=this.graphs;if(n!==null){let r=n[e];t===`head_burst`?r.boxer.setHeadBurst(!0):r.boxer.setDecapitated(t===`decapitation`),r.boxer.headInjury.setEyeOut(t===`eye_left`||t===`eye_right`?`both`:null),r.boxer.setHandDismembered(`left`,t===`dismember_left`),r.boxer.setHandDismembered(`right`,t===`dismember_right`);let i=t===`jaw_dislocation`?`jaw`:t===`shoulder_left`||t===`shoulder_right`?t:null;r.setArcadeDislocation(i)}}applyArcadeInjury(e,t,n,r){let i=!1;if(t===`decapitation`){let t=this.headWorldPose(e);if(t!==null){let a=this.graphs?.[e],o=a===void 0?void 0:tB(a.boxer,t.position,t.quaternion);this.effects.decapitate(e,t.position,t.quaternion,r??n.direction,n.event_id,this.skinColor(e),o);let s=this.stumpWorldPose(e);s!==null&&this.effects.anchorStump(e,s.position,s.quaternion,s.rim,s.across),i=!0}}else if(t===`head_burst`){let t=this.headWorldPose(e);if(t!==null){this.effects.burstHead(e,t.position,r??n.direction,n.event_id);let a=this.burstStumpPose(e);a!==null&&this.effects.anchorStump(e,a.position,a.quaternion,a.rim,a.across),i=!0}}else if(t===`eye_left`||t===`eye_right`){let a=this.graphs?.[e]?.boxer;a!==void 0&&RB(a,t===`eye_left`?`left`:`right`,this.tmpPart,this.tmpStumpOffset,this.tmpPartQuaternion)&&(this.effects.gougeEye(e,this.tmpPart,this.tmpStumpOffset,r??n.direction,n.event_id),i=!0)}else if(t===`dismember_left`||t===`dismember_right`){let a=t===`dismember_left`?`left`:`right`,o=this.handWorldPose(e,a);if(o!==null){let t=this.graphs?.[e],s=t===void 0?void 0:{...eB(t.boxer.gloveMesh(a),o.position,o.quaternion),gloveBlood:t.boxer.gloveBloodLevel};this.effects.dismemberHand(e,a,o.position,o.quaternion,r??n.direction,n.event_id,this.gearColor(e),s),this.effects.anchorHandStump(e,a,o.position,o.quaternion),i=!0}}else if(t===`jaw_dislocation`||t===`shoulder_left`||t===`shoulder_right`||t===`ribs_left`||t===`ribs_right`){let a=this.tornWound(e,DB(t));a!==null&&(this.effects.tearOpen(e,a.position,a.axis,r??n.direction,n.event_id,t===`jaw_dislocation`?wB:0),i=!0)}return i?(this.arcadeInjuries[e]=t,this.arcadeInjuryEvents[e]=n,this.observedInjuryDown[e]=!1,this.syncInjuryPresentation(e),this.onArcadeInjury?.(t,n),!0):!1}reapplyReplayInjuries(e){for(let t of[0,1]){let n=this.replayInjuries[t];if(n===null)continue;this.replayInjuries[t]=null;let r=this.settings();r.blood!==`full`||r.reducedMotion||this.applyArcadeInjury(t,n.injury,{...n.event,event_id:n.event.event_id+oB},e)}}restoreInjury(e){this.arcadeInjuries[e]!==null&&(this.arcadeInjuries[e]=null,this.arcadeInjuryEvents[e]=null,this.observedInjuryDown[e]=!1,this.syncInjuryPresentation(e),this.effects.restoreFighter(e))}restoreAllInjuries(){this.restoreInjury(0),this.restoreInjury(1),this.effects.clearArcadeGore()}headWorldPose(e){let t=this.graphs,n=t===null?null:t[e].boxer.bone(`head`);return n===null||t===null?null:(t[e].boxer.root.updateMatrixWorld(!0),n.getWorldPosition(this.tmpHead),n.getWorldQuaternion(this.tmpHeadQuaternion),this.tmpStumpOffset.copy(Az).applyQuaternion(this.tmpHeadQuaternion),this.tmpHead.add(this.tmpStumpOffset),{position:this.tmpHead,quaternion:this.tmpHeadQuaternion})}handWorldPose(e,t){let n=this.graphs,r=n===null?null:n[e].boxer.bone(t===`left`?`gloveL`:`gloveR`);return r===null||n===null?null:(n[e].boxer.root.updateMatrixWorld(!0),r.getWorldPosition(this.tmpPart),r.getWorldQuaternion(this.tmpPartQuaternion),{position:this.tmpPart,quaternion:this.tmpPartQuaternion})}gearColor(e){return this.graphs?.[e]?.boxer.gearBaseColor.getHex()??1920728}skinColor(e){return this.graphs?.[e]?.boxer.skinBaseColor.getHex()??11563071}stumpWorldPose(e){let t=this.graphs?.[e]?.boxer,n=t?.bone(`head`);if(t===void 0||n==null)return null;t.root.updateMatrixWorld(!0);let r=t.headMesh,i=Nz(r.geometry);if(i.length===0)return null;this.stumpRim.length!==i.length*3&&(this.stumpRim=new Float32Array(i.length*3)),this.tmpStump.set(0,0,0);for(let[e,n]of i.entries())Kz(t,n,this.tmpStumpOffset),this.tmpStumpOffset.toArray(this.stumpRim,e*3),this.tmpStump.add(this.tmpStumpOffset);return this.tmpStump.multiplyScalar(1/i.length),n.getWorldPosition(this.tmpStumpOffset).sub(this.tmpStump).normalize(),this.tmpStumpAcross.set(1,0,0).applyQuaternion(n.getWorldQuaternion(this.tmpStumpQuaternion)),this.tmpStumpQuaternion.setFromUnitVectors(jz,this.tmpStumpOffset),{position:this.tmpStump,quaternion:this.tmpStumpQuaternion,rim:this.stumpRim,across:this.tmpStumpAcross}}burstStumpPose(e){let t=this.graphs?.[e]?.boxer;if(t===void 0)return null;let n=Lz(t,this.stumpRim,this.burstStump);return n===null?null:(this.stumpRim=n,{position:this.burstStump.position,quaternion:this.burstStump.quaternion,rim:n,across:this.burstStump.across})}predictAction(e){let t=this.buffer.latest();if(t===null||this.viewerId===null||this.replay!==null)return;let n=t.fighters.findIndex(e=>e.player_id===this.viewerId);if(n<0)return;let r=t.fighters[n];if(t.phase!==`fight`||!fB(r))return;let i=(this.inputLatencyMs??60)/1e3*this.simulation.tick_rate,a=i+this.buffer.interpolationDelayTicks,o=this.manualClock?this.lastManualTime:performance.now(),s=this.graphs?.[n];if(Lw(e.kind)){let n=s?.ownPunchActive===!0;if(e.id===void 0||r.stamina0||!n&&bw(r,t.tick)>0)return;let i=n?s.ownTicksToRecovery:0;n&&s.cutOwnRecovery(),this.evasion.press(e.kind,e.id,o,a,this.simulation.tick_rate,y+N(r.style).evasionTicks,o+i*1e3/this.simulation.tick_rate);return}e.kind===`punch`&&(this.evasion.drop(o)&&s?.keepOwnRecovery(),s?.predict(e,performance.now()/1e3,this.simulation.tick_rate,a,yw(r,e,t.tick+1),i))}acknowledgeActions(e,t){for(let[n,r]of e.fighters.entries()){let i=r.player_id===this.viewerId;i&&this.evasion.acknowledge(r,e.phase===`fight`,this.inputSequenceOf)&&this.graphs?.[n]?.keepOwnRecovery();let a=t.filter(t=>lR(t,e).puncherIndex===n);this.graphs?.[n]?.acknowledge(r,e.phase===`fight`,a,i?this.inputSequenceOf:null)}}push(e){if(!this.buffer.push(e,this.manualClock?this.lastManualTime:performance.now()))return;let t=this.dedupe.accept(e.events);this.acknowledgeActions(e,t),this.history.push(e),this.history.length>pR&&this.history.shift();for(let n of t){if(this.roundStats.record(n,t),n.kind===`knockdown`){let r=t.find(e=>dR(e)&&e.target_id===n.target_id&&e.tick===n.tick)??(n.detail===`body`?this.recordedHit(n):null),i=r!==null&&un(r,e.events);this.lastKnockdown={knockdown:n,hit:r,blocked:i,finisher:i?null:pB(r,e)};let a=e.fighters.findIndex(e=>e.player_id===n.target_id);this.graphs?.[a]?.fallToKnee(n.detail===NR)}if(n.kind===`result`&&n.detail===`flash_ko`){let e=t.findLast(e=>(e.kind===`hit`||e.kind===`counter_hit`)&&e.actor_id===n.actor_id)??null;e!==null&&e.target_id!==null&&(this.flashKnockout={hitEventId:e.event_id,loserId:e.target_id},this.lastKnockdown={knockdown:{...e,kind:`knockdown`},hit:e,blocked:!1,finisher:null})}n.kind===`referee_break`&&this.referee?.breakClinch(),(fz.has(n.kind)||n.kind===`bleed`&&n.actor_id===`referee`)&&this.pendingRefereeEvents.push(n),n.kind===`box`&&(this.eventCallout={text:`BOX!`,until:this.frameSeconds+cz}),n.kind===`body_collapse`&&n.target_id===this.viewerId&&(this.ownCollapseUntil=n.tick+n.amount),this.movement.observe(n,this.viewerId)}this.commentary.observe(e,t,this.players,this.simulation.tick_rate,this.frameSeconds);let n=e.fighters.findIndex(e=>e.player_id===this.viewerId),r=e.result===null&&!t.some(e=>e.kind===`knockdown`);for(let{event:i,presentationEvent:a,presentImpact:o,reactAmount:s}of yz(t,e)){let t=e.fighters.findIndex(e=>e.player_id===i.target_id),c=e.fighters.findIndex(e=>e.player_id===i.actor_id),{recipientIndex:l,puncherIndex:u}=lR(i,e),d=e.fighters[l]??e.fighters[t]??e.fighters[c]??e.fighters[0];if(Rz(this.graphs?.[e.fighters.indexOf(d)],d,this.mapping,this.contactPoint),az.has(i.kind)){let t=u>=0?e.fighters[u]:null;this.pendingContacts.push({event:i,presentationEvent:a,presentImpact:o,reactAmount:s,contactTick:r&&u===n&&sz.has(i.kind)&&this.graphs?.[u]?.pressLanded(i.action_id)===!0?-1/0:t?.action_contact_tick??i.tick,recipientIndex:l,puncherIndex:u,injury:Oz(i,e.fighters[l],e.result,t??void 0),power:t!==null&&t.action_id===i.action_id&&t.action_power===`power`})}else i.kind===`bleed`&&i.actor_id!==`referee`&&this.effects.addEvent(i,this.contactPoint,this.settings().reducedMotion)}}fireContacts(e){for(let t=0;te){t+=1;continue}this.pendingContacts.splice(t,1);let{event:r,presentationEvent:i,reactAmount:a,recipientIndex:o,puncherIndex:s,injury:c}=n,l=n.presentImpact&&!gz(i),u=this.buffer.latest()?.fighters[o],d=uR(this.buffer.latest()?.fighters[s],u,this.mapping);this.presentFightEvent(r,o,s),l&&u!==void 0&&(this.contactOn(o,u,i.detail.endsWith(`:body`),d,i.direction),this.effects.addEvent(i,this.contactPoint,this.settings().reducedMotion,d));let f=this.settings();if(n.power&&l&&dR(r)&&u!==void 0&&!f.reducedMotion&&this.presentPowerHit(o,i),(n.presentImpact||oz.has(r.kind))&&this.arena.excite(iz[r.kind]??0),l&&o>=0&&[`hit`,`counter_hit`,`knockdown`].includes(r.kind)){let e=this.viewerId!==null&&this.buffer.latest()?.fighters[o]?.player_id===this.viewerId;this.viewerHitFlash=Math.max(this.viewerHitFlash,lB(r,e,f.blood))}c!==null&&o>=0&&this.arcadeInjuries[o]===null&&f.blood===`full`&&!f.reducedMotion&&this.applyArcadeInjury(o,c,r,d);let p=this.graphs;l&&o>=0&&!f.reducedMotion&&yO(r.kind,r.amount,i.detail.endsWith(`:head`))&&this.knockOutMouthpiece(o,d??i.direction,r.event_id,!1);let m=l&&!f.reducedMotion?uB(r):null;m!==null&&o>=0&&this.gushFromMouth(o,r.event_id,m.seconds,m.rate),n.presentImpact&&o>=0&&r.kind===`knockdown`&&!f.reducedMotion&&this.gushFromMouth(o,r.event_id,SB,CB);let h=l&&o>=0?VE(r.kind,r.amount,i.detail.endsWith(`:head`)):0;if(h>0&&!f.reducedMotion&&f.blood!==`off`){let e=this.headWorldPose(o);e!==null&&(this.mouthPoint.set(0,-.07,.1).applyQuaternion(e.quaternion).add(e.position),this.effects.spawnTeeth(this.mouthPoint,d??i.direction,h,r.event_id))}if(l&&o>=0&&a!==null&&[`hit`,`counter_hit`,`block`,`perfect_block`,`knockdown`].includes(r.kind)){let e=r.kind===`block`||r.kind===`perfect_block`,t=i.detail.endsWith(`:body`)?`body`:`head`;if(p!==null){let n=(s>=0?this.buffer.latest()?.fighters[s]:void 0)?.action_key?.split(`:`)??[],c=n[0]??i.detail.split(`:`)[0]??null,l=n[1]??null;p[o].react(e?`block`:`hit`,t,i.direction,c,l,a),this.flashKnockout?.hitEventId===r.event_id&&p[o].knockOut()}}l&&s>=0&&[`hit`,`counter_hit`,`block`,`perfect_block`,`guard_break`].includes(r.kind)&&p?.[s]?.landedHit(r.action_id,r.kind===`block`||r.kind===`perfect_block`,n.power),(n.presentImpact||!dR(r))&&this.onContact?.(r,n.power===!0)}this.replay===null&&this.fireRefereeEvents(e);let t=this.refereeReplayAt;if(t!==null&&this.replay===null&&this.frameSeconds>=t.at){this.refereeReplayAt=null;let e=PL(this.history,t.impact,this.simulation.tick_rate,NL.speed,NL.before,NL.after),n=this.buffer.latest(),r=e!==null&&n!==null&&n.phase===`referee_down`&&n.phase_ticks_remaining/this.simulation.tick_rate>=e.durationSeconds-.5;e!==null&&r&&!this.settings().reducedMotion&&this.startReplay(e)}}presentFightEvent(e,t,n){let r=hz[e.kind];r!==void 0&&(this.eventCallout={text:r.text,until:this.frameSeconds+r.seconds});let i=this.graphs;if(!(i===null||t<0)&&(e.kind===`parry`&&i[t]?.stagger(),e.kind===`body_collapse`)){let r=n>=0?this.buffer.latest()?.fighters[n]:void 0;i[t]?.windedFor(e.amount/this.simulation.tick_rate+.15,xz(r?.action_key??null))}}recordedHit(e){if(e.action_id===null)return null;for(let t=this.history.length-1;t>=0;--t){let n=this.history[t].events.find(t=>(t.kind===`hit`||t.kind===`counter_hit`)&&t.action_id===e.action_id&&t.target_id===e.target_id);if(n!==void 0)return n}return null}enterRest(e){this.restStartedAt=e,this.effects.clearMouthpieces()}contactOn(e,t,n,r,i){let a=n?null:this.headWorldPose(e),o=n?this.graphs?.[e]?.boxer.rig.bones.upperChest:void 0,s=a?.position??o?.getWorldPosition(this.contactPoint)??null;if(s===null)return Rz(this.graphs?.[e],t,this.mapping,this.contactPoint);let c=r??{x:i<0?-1:1,z:0},l=n?EB:TB;return this.contactPoint.set(s.x-c.x*l,s.y,s.z-c.z*l)}gushFromMouth(e,t,n,r){let i=this.tornWound(e,`mouth`);i!==null&&this.effects.gush(e,i.position,i.axis,n,r,t)}anchorGush(e){if(!this.effects.gushing(e))return;let t=this.tornWound(e,DB(this.arcadeInjuries[e]??null));t!==null&&this.effects.anchorGush(e,t.position,t.axis)}tornWound(e,t){if(t===`mouth`){let t=this.headWorldPose(e);return t===null?null:{position:this.woundPoint.copy(bB).applyQuaternion(t.quaternion).add(t.position),axis:this.woundAxis.copy(xB).applyQuaternion(t.quaternion)}}let n=this.graphs?.[e]?.boxer;if(n===void 0)return null;n.root.updateMatrixWorld(!0);let r=n.rig.bones,i=t===`shoulder_left`||t===`ribs_left`,a=r.shoulderL.getWorldPosition(this.woundAxis).sub(r.shoulderR.getWorldPosition(this.tmpStumpOffset)).normalize().multiplyScalar(i?1:-1),o=r.upperChest.getWorldPosition(this.tmpStump),s=this.tmpStumpOffset.copy(o).sub(r.hips.getWorldPosition(this.tmpStumpAcross)).normalize();return t===`ribs_left`||t===`ribs_right`?{position:this.woundPoint.copy(o).addScaledVector(a,MB).addScaledVector(s,-.06),axis:a}:((i?r.shoulderL:r.shoulderR).getWorldPosition(this.woundPoint),{position:this.woundPoint,axis:a.addScaledVector(s,.5).normalize()})}refereeMouth(){let e=this.referee?.boxer.rig.bones.head;return e===void 0?null:(e.getWorldPosition(this.tmpHead),e.getWorldQuaternion(this.tmpHeadQuaternion),this.tmpHead.add(this.tmpStumpOffset.copy(Az).applyQuaternion(this.tmpHeadQuaternion)),{position:this.woundPoint.copy(bB).applyQuaternion(this.tmpHeadQuaternion).add(this.tmpHead),axis:this.woundAxis.copy(xB).applyQuaternion(this.tmpHeadQuaternion)})}knockOutMouthpiece(e,t,n,r){let i=this.headWorldPose(e);i!==null&&(this.mouthPoint.set(0,-.075,.1).applyQuaternion(i.quaternion).add(i.position),this.effects.ejectMouthpiece(e,this.mouthPoint,i.quaternion,t,n,this.gearColor(e),r))}get resultVisible(){return this.final!==null&&this.frameSeconds>=this.finalRevealAt}get resolutionScale(){return this.scaler.scale}get diagnostics(){let e=this.renderer.getContext(),t=e.getExtension(`WEBGL_debug_renderer_info`),n=t===null?e.getParameter(e.RENDERER):e.getParameter(t.UNMASKED_RENDERER_WEBGL);return{frameMs:this.frameMsAverage,resolutionScale:this.scaler.scale,gpu:this.memoryInfo,graphics:String(n)}}get memoryInfo(){return{geometries:this.renderer.info.memory.geometries,textures:this.renderer.info.memory.textures,programs:this.renderer.info.programs?.length??0}}applyResolutionScale(){let e=this.basePixelRatio*this.scaler.scale;this.renderer.setPixelRatio(e),this.composer.setPixelRatio(e);let t=this.scaler.scale<=mR;this.bloomPass.enabled=!t,this.keyLight!==null&&cR(this.keyLight.shadow,t,this.scaler.scale<.8?1024:2048),this.arena.setLowTier(t),this.effects.setLowTier(t)}setupLights(){let e=new zy(`#3c4a72`,`#07080c`,.55);this.scene.add(e),this.lights.push(e);let t=new $y(`#fff1dc`,150,24,.56,.55,1.7);t.position.set(.6,7.4,1.2),t.target.position.set(0,.6,0),t.castShadow=!0,t.shadow.mapSize.set(2048,2048),t.shadow.bias=oR,t.shadow.camera.near=3,t.shadow.camera.far=14,this.keyLight=t,this.scene.add(t,t.target),this.lights.push(t);let n=new $y(`#ffe6c8`,95,24,.6,.6,1.7);n.position.set(-2.6,7,-2.2),n.target.position.set(0,.8,0),this.scene.add(n,n.target),this.lights.push(n);for(let[e,t,n,r]of[[`#8fa8ff`,-5.5,3.8,-5.4],[`#7f95e8`,5.6,3.6,-5.6]]){let i=new $y(e,34,30,.72,.9,1.8);i.position.set(t,n,r),i.target.position.set(0,1.2,0),this.scene.add(i,i.target),this.lights.push(i)}let r=new $y(`#ffe8d0`,48,22,.32,.8,1.5);r.position.set(0,5.8,5.4),r.target.position.set(0,1,0),this.scene.add(r,r.target),this.lights.push(r),this.followSpot=r}draw(e,t=!1,n=!0){if(this.destroyed)return;let r=e-this.previous,i=t?1/60:Math.min(.05,Math.max(.001,r/1e3));this.previous=e,!t&&this.scaler.record(r)&&this.applyResolutionScale(),!t&&r>0&&r<1e3&&(this.frameMsAverage+=(r-this.frameMsAverage)*.05);let a=Math.min(this.pixelRatioCap,window.devicePixelRatio||1);a!==this.basePixelRatio&&(this.basePixelRatio=a,this.applyResolutionScale());let o=this.canvas.clientWidth,s=this.canvas.clientHeight;o>0&&s>0&&(this.renderer.getSize(this.sizeCheck),(this.sizeCheck.x!==o||this.sizeCheck.y!==s)&&(this.renderer.setSize(o,s,!1),this.composer.setSize(o,s),this.camera.aspect=o/s,this.portraitPull=K.clamp(1.2/this.camera.aspect,1,2.2),this.baseFov=36*Math.min(1.3,Math.sqrt(this.portraitPull)),this.camera.fov=this.baseFov,this.camera.updateProjectionMatrix()));let c=e/1e3;this.frameSeconds=c,this.finishPass.uniforms.uTime.value=c%1e3,t&&(this.lastManualTime=e);let l=this.settings();this.setBloodLevel(l.blood);let u=this.buffer.latest(),d=i,f=u?.result!==null&&u?.result!==void 0&&pn.has(u.result.finish_method);if(this.cheer(c,i),f&&!this.finishSeen&&(this.finishSeen=!0,this.finishSlowMotion=2.2,this.arena.excite(1)),this.finishSlowMotion>0&&!l.reducedMotion){this.finishSlowMotion=Math.max(0,this.finishSlowMotion-i);let e=Math.min(1,this.finishSlowMotion/.5);i*=.3+.7*(1-e)}this.viewerHitFlash=Math.max(0,this.viewerHitFlash-i*3.2);let p=u===null?0:t?Sz(u):this.buffer.renderTick(e),m=this.updateRocked(u===null?null:this.shownAt(p),d,l.reducedMotion);m!==null&&u!==null&&this.onRocked?.(m,u.tick);let h=u===null?null:this.applyLocalPrediction(this.buffer.sample(p),i,e),g=this.replay;if(g!==null){let e=c-g.startedAt;e>=g.plan.durationSeconds||g.plan.impact.kind===`referee_down`&&u?.phase!==`referee_down`?this.endReplay():(p=FL(g.plan,e,this.simulation.tick_rate),h=g.buffer.sample(p)??h,!g.impactFired&&p>=g.plan.impact.tick&&h!==null&&(g.impactFired=!0,this.fireReplayImpact(h)))}let _=this.replay===null?i:i*this.replay.plan.speed,v=1.8,y=!1,b=null;if(h!==null){let e=this.replay===null?this.ceremony:null,[t,n]=e===null?this.standApart(h.fighters,_):this.ceremonyFighters(e,h.fighters,_,c,this.drawnOffsets);for(let[e,t]of h.fighters.entries())this.arcadeInjuries[e]===null||this.replay!==null||(t.is_downed?this.observedInjuryDown[e]=!0:this.observedInjuryDown[e]&&h.result===null&&this.restoreInjury(e));let r=this.graphs;if(r!==null){this.wearLook(0,t.player_id),this.wearLook(1,n.player_id);let e=this.headCacheValid[0]?this.headCache[0]:void 0,i=this.headCacheValid[1]?this.headCache[1]:void 0;r[0].boxer.root.visible=!0,r[1].boxer.root.visible=!0;let a=nR(h,this.simulation.tick_rate);r[0].setResting(a),r[1].setResting(a);let o=h.phase===`countdown`?h.phase_ticks_remaining:null;r[0].setCountdown(o),r[1].setCountdown(o);let s=this.replay!==null||h.phase===`complete`;r[0].stayDown(s),r[1].stayDown(s),h.phase===`fight`&&this.lastPhase===`rest`&&this.replay===null&&(this.roundCalloutUntil=c+hR,this.roundCalloutRound=h.round_number),h.phase===`rest`&&this.lastPhase!==`rest`&&this.enterRest(c),this.lastPhase=h.phase,this.anticipatePunches(u,p),r[0].setObstacle(r[1].boxer.root.position.x,r[1].boxer.root.position.z),r[1].setObstacle(r[0].boxer.root.position.x,r[0].boxer.root.position.z);let d=this.referee?.boxer.rig.bones.head.getWorldPosition(this.refereeHead)??null;r[0].setRefereeHead(d),r[1].setRefereeHead(d),r[0].update(t,n,_,c,l.reducedMotion,l.blood,p,i),r[1].update(n,t,_,c,l.reducedMotion,l.blood,p,e);let f=r[h.fighters.findIndex(e=>e.player_id===this.viewerId)],m=f?.ownPressId??null;if(f!==void 0&&m!==null&&m!==this.soundedPress){this.soundedPress=m;let{punchClass:e,power:t}=f.punchKind;this.onOwnPunch?.(e,t,m)}for(let[e,t]of r.entries()){let n=t.boxer.bone(`head`);n!==null&&(t.boxer.root.updateMatrixWorld(!0),n.getWorldPosition(this.headCache[e]),this.headCacheValid[e]=!0);let r=t.fallBody!==null;r&&!this.fallingLive[e]&&this.replay===null&&(this.liveFallTicks[e]=p),this.fallingLive[e]=r}}for(let e=0;ee.player_id===this.viewerId),C=l.camera===`fighter`&&S>=0&&tR(h)?this.fighterCam.update(i,c,S===0?this.tmpA:this.tmpB,S===0?this.tmpB:this.tmpA,this.effects.shakeAmount+this.powerShake,l.reducedMotion,this.camera.aspect):null;C===null&&this.fighterCam.reset();let w=this.replay,T=this.cameraOverride??(w!==null&&h!==null?this.replayFrame(h,c-w.startedAt):this.closeUpFrame(c)??this.raiseFrame(c,i,l.reducedMotion)??this.cornerShotFrame(c,h,l.reducedMotion)??this.restWideFrame(h)??this.ceremonyFrame(c)??C??x);this.ownViewActive=C!==null&&T===C;let E=this.ownViewActive?this.baseFov*eE:this.baseFov;if(this.camera.fov!==E&&(this.camera.fov=E,this.camera.updateProjectionMatrix()),this.cameraOverride===null&&this.portraitPull>1&&T.framed!==!0&&!this.ownViewActive){let e=T.tight===!0,t=this.portraitPull/Math.min(1.3,Math.sqrt(this.portraitPull)),n=e?Math.min(t,1.25):t;this.tmpCamera.subVectors(T.position,T.lookAt).multiplyScalar(n),this.camera.position.copy(T.lookAt).add(this.tmpCamera),e&&(this.camera.position.x=K.clamp(this.camera.position.x,-2.2,jR),this.camera.position.z=K.clamp(this.camera.position.z,-2.2,jR)),this.camera.lookAt(T.lookAt.x,T.lookAt.y-(this.portraitPull-1)*(e?.08:.45),T.lookAt.z)}else this.camera.position.copy(T.position),this.camera.lookAt(T.lookAt);this.effects.setViewDistance(this.camera.position.distanceTo(T.lookAt)),this.arena.makeRoomForCamera(this.camera.position);let D=T===x?kP(Math.max(this.tmpA.z,this.tmpB.z)):T.framed===!0?XR:1;this.ring.setNearRopeOpacity(this.ring.nearRopeOpacity()+(D-this.ring.nearRopeOpacity())*(1-Math.exp(-6*i))),n&&(this.composer.render(),this.drawHudOverlay(h)),!this.destroyed&&!this.manualClock&&(this.raf=requestAnimationFrame(e=>this.draw(e)))}applyLocalPrediction(e,t,n){if(e===null||this.localInput===null||this.viewerId===null)return e;let r=e.fighters.findIndex(e=>e.player_id===this.viewerId),i=this.localInput()??{moveX:0,moveY:0,defense:`none`},a=(this.inputLatencyMs??60)/1e3*this.simulation.tick_rate+this.buffer.interpolationDelayTicks,o=this.ownCollapseUntil>e.tick,s=r>=0&&e.phase===`fight`&&!o?e.fighters[r]:null,c=this.evasion.holdsFeet(n)?0:this.graphs?.[r]?.ownFootwork??1,l=this.movement.update(s,i,c,n,a,e.tick,t,this.simulation.tick_rate),u=this.evasion.pose(n);if(r<0)return e;let d=e.fighters[r],f=s===null?d.defense:Rw(s,i,u,this.evasion.hidesServerEvasion(n));if(Math.abs(l.dx)<.01&&Math.abs(l.dy)<.01&&f===d.defense)return e;let p=Iw(d,l,e.fighters[+(r===0)]??null),m={...d,x:d.x+p.dx,y:d.y+p.dy,defense:f},h=r===0?[m,e.fighters[1]]:[e.fighters[0],m];return{...e,fighters:h}}anticipatePunches(e,t){if(!(this.replay!==null||e===null||e.phase!==`fight`))for(let[n,r]of(this.graphs??[]).entries()){let i=e.fighters[n];i!==void 0&&!i.is_downed&&r.anticipate(i,i.action_start_tick-t)}}cheer(e,t){ee.clinch_ticks>0||e.clinch_startup_ticks>0||e.is_downed)?null:Uz(n.x,n.y,r.x,r.y,RR,u-f,d-f,S),[a,o]=this.drawnTargets;a.x=i===null?0:i.ax-n.x,a.y=i===null?0:i.ay-n.y,o.x=i===null?0:i.bx-r.x,o.y=i===null?0:i.by-r.y,this.clearOfTheFallen(e);let s=1-Math.exp(-14*t);for(let e of[0,1]){let n=this.drawnOffsets[e],r=this.drawnTargets[e],i=r.x-n.x,a=r.y-n.y;if(this.drawnOffsetsLive){i*=s,a*=s;let e=Math.hypot(i,a);e>zR*t&&(i*=zR*t/e,a*=zR*t/e)}n.x+=i,n.y+=a}return this.drawnOffsetsLive=!0,[this.drawnAt(0,n),this.drawnAt(1,r)]}drawnAt(e,t){let n=this.drawnOffsets[e];if(Math.abs(n.x)<.01&&Math.abs(n.y)<.01)return t;let r=Fw(t.x+n.x,t.y+n.y);return Object.assign(this.drawnFighters[e],t,{x:r.x,y:r.y})}clearOfTheFallen(e){for(let t of[0,1]){let n=this.graphs?.[t]?.fallBody??null,r=+(t===0),i=e[r];if(n===null||i.is_downed||(this.graphs?.[r]?.fallBody??null)!==null)continue;let a=this.drawnTargets[r],o=this.mapping.x(i.x+a.x),s=this.mapping.z(i.y+a.y),c=this.clearOf(n,o,s);a.x+=(c.x-o)/this.mapping.x(1),a.y+=(c.z-s)/this.mapping.z(1);return}}clearOf(e,t,n){let r={x:t,z:n};for(let t of[0,1,2,3,4])e.bodyPoint(t,this.bodyPoint),r=zz(r.x,r.z,this.bodyPoint.x,this.bodyPoint.z,FR);let i=this.insideRopes(r.x,r.z);if(Math.hypot(i.x-r.x,i.z-r.z)<1e-6)return r;let a=t=>[0,1,2,3,4].every(n=>(e.bodyPoint(n,this.bodyPoint),Math.hypot(t.x-this.bodyPoint.x,t.z-this.bodyPoint.z)>=FR-1e-6));for(let e=BR;e<=2.000000001;e+=BR)for(let[t,n]of[[1,0],[-1,0],[0,1],[0,-1]]){let r=this.insideRopes(i.x+t*e,i.z+n*e);if(a(r))return r}return i}insideRopes(e,t){let n=Fw(e/this.mapping.x(1),t/this.mapping.z(1));return{x:this.mapping.x(n.x),z:this.mapping.z(n.y)}}headHeightOf(e){return(this.graphs?.[e]?.boxer.metrics.headRestY??1.52)+.04}bleed(e,t,n){for(let[r,i]of e.entries()){let e=kB(i,this.graphs?.[r],this.flashKnockout?.loserId),a=this.arcadeInjuries[r]??null,o=a!==null,s=(i.trauma.bleeding+i.trauma.left_cut+i.trauma.right_cut)/380,c=o?Math.max(s,gB):s;if(c>.05&&!e)this.downedPoolAccumulators[r]=0,this.downedPoolCounts[r]=0,this.effects.drip(this.dripPoint(r),c,n.reducedMotion,r);else if(c>mB&&e&&n.blood!==`off`){this.effects.stopDrip(r),this.downedPoolAccumulators[r]+=t*5*(o?_B:1);let e=this.poolSource(r,a);for(;this.downedPoolAccumulators[r]>=1;){--this.downedPoolAccumulators[r];let t=this.downedPoolCounts[r];this.downedPoolCounts[r]=t+1;let n=OB(t,c,o?vB:hB),i=t*2.399963+r*Math.PI;this.effects.pool(e.x+Math.sin(i)*n*.25,e.z+Math.cos(i)*n*.25,n,t+r*7)}}else this.effects.stopDrip(r),this.downedPoolAccumulators[r]=0,e||(this.downedPoolCounts[r]=0)}}dripPoint(e){let t=this.headWorldPose(e);if(t!==null)return t.position.add(this.tmpStumpOffset.copy(yB).applyQuaternion(t.quaternion));if(this.headCacheValid[e])return this.tmpHead.copy(this.headCache[e]);let n=e===0?this.tmpA:this.tmpB;return this.tmpHead.set(n.x,this.headHeightOf(e),n.z)}poolSource(e,t){if(t===`dismember_left`||t===`dismember_right`){let n=this.handWorldPose(e,t===`dismember_left`?`left`:`right`);if(n!==null)return n.position}let n=DB(t);if(n!==`mouth`){let t=this.tornWound(e,n);if(t!==null)return t.position}return this.headCacheValid[e]?this.headCache[e]:e===0?this.tmpA:this.tmpB}updateBlobShadows(){let e=[this.tmpA,this.tmpB,this.refereePosition];for(let[t,n]of this.blobShadows.entries()){let r=t<2?this.graphs?.[t]:this.referee??void 0,i=r?.fallBody?.centre(this.bodyPoint)??null??(r?.boxer.root.visible===!0?r.currentRoot:e[t]);n.position.x=i.x,n.position.z=i.z;let a=t<2?this.buffer.latest()?.fighters[t]:void 0,o=t<2?a!==void 0&&kB(a,r,this.flashKnockout?.loserId):r?.isDown===!0;n.scale.set(o?2.1:1.25,o?.9:.85,1)}}updateReferee(e,t,n,r){let i=this.referee;if(i===null)return;let a=this.replay===null||this.replay.plan.impact.kind===`referee_down`;i.boxer.root.visible=a;let o=this.blobShadows[2];o!==void 0&&(o.visible=a);let s=n?.referee??null,c=this.replay!==null&&this.replay.plan.impact.kind===`referee_down`?this.replay:null;!this.refereePlaced&&s!==null&&(this.refereePlaced=!0,this.refereePosition.set(this.mapping.x(s.x),0,this.mapping.z(s.y)));let l=this.refereeReplayAt!==null||this.pendingRefereeEvents.some(e=>e.kind===`referee_down`);s?.alive===!0&&i.isDown&&this.replay===null&&n?.phase!==`referee_down`&&!l&&i.resetTransient(!1),s!==null&&!s.alive&&!i.isDown&&this.replay===null&&!l&&(this.refereePosition.set(this.mapping.x(s.x),0,this.mapping.z(s.y)),i.knockOut(),this.refereeFallUnseen=!0);let u=s!==null&&(n?.phase===`fight`&&s.alive||c!==null&&!c.impactFired)?s:null,d=s?.alive===!1&&(c===null||c.impactFired),f=n?.fighters.find(e=>e.is_downed)??(n?.phase===`knockdown`?n.fighters.find(e=>e.player_id===this.lastKnockdown?.knockdown.target_id):void 0)??null,p=n?.fighters.some(e=>e.clinch_ticks>0||e.clinch_startup_ticks>0)??!1,m=f===null&&i.breaking,h=f===null?void 0:this.graphs?.[n?.fighters.indexOf(f)??-1],g=h?.fallBody?.centre(this.bodyPoint)??null,_=f!==null&&!f.is_downed?h?.currentRoot??null:null,v=f===null?(this.tmpA.x+this.tmpB.x)/2:g?.x??_?.x??this.mapping.x(f.x),y=f===null?(this.tmpA.z+this.tmpB.z)/2:g?.z??_?.z??this.mapping.z(f.y),b=this.refereeAway.set(this.refereePosition.x-v,0,this.refereePosition.z-y);if(b.lengthSq()<.01&&b.set(0,0,-1),b.normalize(),m){let e=this.tmpB.z-this.tmpA.z,t=this.tmpA.x-this.tmpB.x,n=Math.hypot(e,t),r=e*b.x+t*b.z>=0?1:-1;n>.01&&b.set(e/n*r,0,t/n*r)}let{standoff:x,clearance:S}=zB(f!==null,p,m),C=K.clamp(v+b.x*x,-2.4,2.4),w=K.clamp(y+b.z*x,-2.4,2.4),T=this.refereePosition.x,E=this.refereePosition.z,D=this.replay===null&&this.ceremony?.positions!==null?this.ceremony:null,O=!d&&D===null&&this.replay===null&&this.stoppageWinner>=0&&this.frameSeconds>=this.stoppageRaiseAt?this.stoppageWinner===0?this.tmpA:this.tmpB:null,k=O===null?null:this.stoppageSpot??=this.raiseSpot(O,this.stoppageWinner===0?this.tmpB:this.tmpA),A=k!==null&&k.x<0?-1:1;if(d)D!==null&&(D.refereeArrived=!0);else if(O!==null&&k!==null){let t=tz(this.refereePosition.x,this.refereePosition.z,{x:O.x+k.x,y:O.z+k.z},QR*e);this.refereePosition.x=t.x,this.refereePosition.z=t.y}else if(D!==null){let t=tz(this.refereePosition.x,this.refereePosition.z,{x:YR.x,y:YR.z},QR*e);this.refereePosition.x=t.x,this.refereePosition.z=t.y,D.refereeArrived=t.arrived}else if(u!==null){let t=c===null?1-Math.exp(-20*e):1;this.refereePosition.x+=(this.mapping.x(u.x)-this.refereePosition.x)*t,this.refereePosition.z+=(this.mapping.z(u.y)-this.refereePosition.z)*t}else{let t=1-Math.exp(-(m?8:1.6)*e),n=m?Math.min(1,HR*e/Math.max(1e-6,Math.hypot(C-this.refereePosition.x,w-this.refereePosition.z)*t)):1;this.refereePosition.x+=(C-this.refereePosition.x)*t*n,this.refereePosition.z+=(w-this.refereePosition.z)*t*n}let j=O===null?D===null?u!==null||d?0:S:D.refereeArrived?0:JR:wR*.85;for(let e of j>0?[this.tmpA,this.tmpB]:[]){let t=this.refereePosition.x-e.x,n=this.refereePosition.z-e.z,r=Math.hypot(t,n);r.001&&(this.refereePosition.x=e.x+t/r*j,this.refereePosition.z=e.z+n/r*j)}for(let e of D!==null||d?[]:this.graphs??[]){let t=e.fallBody;if(t!==null)for(let e of[0,1,2,3,4]){t.bodyPoint(e,this.bodyPoint);let n=zz(this.refereePosition.x,this.refereePosition.z,this.bodyPoint.x,this.bodyPoint.z,PR);this.refereePosition.x=n.x,this.refereePosition.z=n.z}}for(let e of d?[]:[0,1]){if(!this.effects.severedHeadPosition(e,this.closeUpTarget))continue;let t=zz(this.refereePosition.x,this.refereePosition.z,this.closeUpTarget.x,this.closeUpTarget.z,MR);this.refereePosition.x=t.x,this.refereePosition.z=t.z}if(c===null&&!d){let t=this.refereePosition.x-T,n=this.refereePosition.z-E,r=Math.hypot(t,n),i=dz*e;r>i&&(this.refereePosition.x=T+t/r*i,this.refereePosition.z=E+n/r*i)}e>0&&this.refereeVelocity.set((this.refereePosition.x-T)/e,0,(this.refereePosition.z-E)/e);let ee=O!==null&&k!==null&&Math.hypot(this.refereePosition.x-O.x-k.x,this.refereePosition.z-O.z-k.z)<=ER,te=D!==null&&!D.refereeArrived,ne=O===null?D===null?u===null?Math.atan2(v-this.refereePosition.x,y-this.refereePosition.z):Math.atan2(u.facing_x,-u.facing_y):te?Math.atan2(YR.x-this.refereePosition.x,YR.z-this.refereePosition.z):0:ee?0:Math.atan2(O.x-this.refereePosition.x,O.z-this.refereePosition.z);if(O!==null){let e=this.graphs?.[this.stoppageWinner]?.boxer.rig.bones,t=ee&&e!==void 0?this.nearerGlove(e.gloveL,e.gloveR):null;i.raise(A<0?t:null,A>0?t:null)}let re=((ne-this.refereeYaw+Math.PI)%(Math.PI*2)+Math.PI*2)%(Math.PI*2)-Math.PI;this.refereeYaw+=re*(1-Math.exp(-(m?8:3)*e));let ie=BB(this.refereePosition,this.refereeYaw,this.refereeVelocity,this.mapping,s);i.setRefereeCount(f!==null,f?.get_up_count??0),i.aimBreak(this.tmpA,this.tmpB);let ae=this.settings();if(i.update(ie.self,ie.focus,e,t,ae.reducedMotion,ae.blood,r),this.refereeFallUnseen&&(this.refereeFallUnseen=!1,i.fallBody?.settle()),this.effects.gushing(2)){let e=this.refereeMouth();e!==null&&this.effects.anchorGush(2,e.position,e.axis)}this.poolUnderReferee(s?.alive===!1,d,e,ae.blood)}poolUnderReferee(e,t,n,r){if(!e&&this.replay===null&&(this.refereePoolAccumulator=0,this.refereePoolCount=0),!t||r===`off`||this.referee===null)return;this.refereePoolAccumulator+=n*5*_B;let i=this.referee.boxer.rig.bones.head.getWorldPosition(this.refereeHead);for(;this.refereePoolAccumulator>=1;){--this.refereePoolAccumulator;let e=this.refereePoolCount,t=OB(e,gB,vB);if(t>=vB)return;this.refereePoolCount=e+1;let n=e*2.399963;this.effects.pool(i.x+Math.sin(n)*t*.25,i.z+Math.cos(n)*t*.25,t,e+14)}}updateTrails(e,t){let n=this.graphs;if(!(n===null||this.trails.length<4)){for(let[r,i]of n.entries())for(let[n,a]of[`gloveL`,`gloveR`].entries()){let o=this.trails[r*2+n],s=this.glows[r*2+n];if(!i.boxer.root.visible){o.reset(),s?.reset();continue}i.boxer.rig.bones[a].getWorldPosition(this.trailGlove);let c=i.powerHeat(n===0?`left`:`right`);o.update(this.trailGlove,e,this.camera.position,!t&&this.replay===null&&!i.isDown,c),s?.update(this.trailGlove,c,e,t,this.camera)}for(let t of this.impactFlashes)t.update(e,this.camera);this.powerShake*=.02**e}}presentPowerHit(e,t){let n=!t.detail.endsWith(`:body`)&&this.headCacheValid[e]===!0?this.headCache[e]:void 0;n===void 0?this.powerHitPoint.set(this.contactPoint.x,t.detail.endsWith(`:body`)?1.05:1.55,this.contactPoint.z):this.powerHitPoint.copy(n),this.impactFlashes[e]?.fire(this.powerHitPoint),this.powerShake=Math.min(mz,this.powerShake+pz)}updateCornermen(e,t,n,r){let i=this.cornermen;if(i===null)return;let a=nR(n,this.simulation.tick_rate);for(let[n,o]of i.entries()){let i=n===0?-1:1,s=a?VR:AR;this.cornermanPosition.set(i*s,0,-i*s);let c=n===0?3*Math.PI/4:-Math.PI/4;o.attend(a);let l=BB(this.cornermanPosition,c,this.cornermanVelocity,this.mapping);o.update(l.self,l.focus,e,t,!1,`off`,r)}}updateCutmen(e,t,n,r){let i=this.cutmen,a=this.graphs;if(i===null||a===null)return;let o=n?.phase===`rest`,s=this.mapping.x(l);for(let[c,l]of i.entries()){let i=c===0?-1:1,u=o&&a[c].stoolVisible?1:0,d=this.cutmanProgress[c],f=d+Math.sign(u-d)*Math.min(Math.abs(u-d),e/UR);this.cutmanProgress[c]=f;let p=l.boxer.root.visible;if(l.boxer.root.visible=f>.005,!l.boxer.root.visible)continue;this.cutmanFrom.set(i*AR,0,-i*(AR-1)),GT(c===0?0:1,s,HT,32,this.cutmanTo);let m=f*f*(3-2*f);this.cornermanPosition.copy(this.cutmanFrom).lerp(this.cutmanTo,m);let h=this.cutmanLast[c];p||h.copy(this.cornermanPosition),this.cornermanVelocity.copy(this.cornermanPosition).sub(h).divideScalar(Math.max(e,.001)),h.copy(this.cornermanPosition);let g=f>.02&&f=WR?_===null?Math.atan2(i,-i):Math.atan2(_.x-this.cutmanTo.x,_.z-this.cutmanTo.z):Math.atan2(-this.cutmanFrom.x,-this.cutmanFrom.z),y=bz(n?.fighters[c]);if(f>=WR&&_!==null){let e=a[c].boxer.root.rotation.y;this.cutmanFacing.set(Math.sin(e),0,Math.cos(e)),this.cutmanEye.copy(_).addScaledVector(this.cutmanFacing,.09),this.cutmanEye.x+=Math.cos(e)*y.side*y.lateral,this.cutmanEye.z-=Math.sin(e)*y.side*y.lateral,this.cutmanEye.y+=y.lift,l.treat(this.cutmanEye,this.cutmanFacing,y.side,y.prop)}else l.treat(null);let b=BB(this.cornermanPosition,v,this.cornermanVelocity,this.mapping);l.update(b.self,b.focus,e,t,!1,`off`,r)}}drawHudOverlay(e){let t=eR(this.hudCanvas);if(t===null)return;let{context:n,viewport:r}=t;if(this.hudViewport.width=r.width,this.hudViewport.height=r.height,n.clearRect(0,0,r.width,r.height),e===null)return;let i=this.settings();if(this.viewerHitFlash>.01&&!i.reducedMotion){let e=n.createRadialGradient(r.width/2,r.height/2,r.width*.12,r.width/2,r.height/2,r.width*.7);e.addColorStop(0,`rgba(255,235,225,${(this.viewerHitFlash*.18).toFixed(3)})`),e.addColorStop(1,`rgba(140,0,10,${(this.viewerHitFlash*.55).toFixed(3)})`),n.fillStyle=e,n.fillRect(0,0,r.width,r.height)}let a=dB(Math.max(...e.fighters.map(e=>e.trauma.head+e.trauma.body)),i.blood);if(a>0){let e=n.createRadialGradient(r.width/2,r.height/2,r.width*.2,r.width/2,r.height/2,r.width*.72);e.addColorStop(0,`rgba(90,0,8,0)`),e.addColorStop(1,`rgba(75,0,8,${a.toFixed(3)})`),n.fillStyle=e,n.fillRect(0,0,r.width,r.height)}i.reducedMotion||this.effects.drawLens(n,r.width,r.height),yn(n,r.width,r.height,e,this.players,this.viewerId,this.frameSeconds>=this.finalRevealAt?this.final:null,this.reconnectMs,this.simulation.tick_rate,this.roundStats,this.replay===null?null:this.replay.plan.impact.kind===`referee_down`?`REFEREE DOWN`:`KNOCKOUT REPLAY`,this.lagWarned?this.inputLatencyMs:null,this.frameSecondsthis.avatars.get(e),this.lastKnockdown?.knockdown.target_id??null,this.touchControls&&e.fighters.some(e=>e.player_id===this.viewerId),this.powerHeld?.()===!0),this.drawCaption(n,r.width,r.height,e)}updateRocked(e,t,n){let r=e?.fighters.find(e=>e.player_id===this.viewerId),i=e===null||this.replay!==null||this.final!==null?0:kL(r,e.phase),a=this.rocked.update(n?0:i,t);return this.finishPass.uniforms.uRocked.value=n?0:a,r===void 0?null:i}shownAt(e){for(let t=this.history.length-1;t>=0;--t)if(this.history[t].tick<=e)return this.history[t];return null}drawCaption(e,t,n,r){let i=this.final!==null&&this.frameSeconds>=this.finalRevealAt?this.final:null;i!==null&&!this.resultAnnounced&&(this.resultAnnounced=!0,this.commentary.resultShown(this.frameSeconds));let a=this.commentary.current(this.frameSeconds),o=this.settings(),s=a===null||!o.commentary?``:a.line.text;if(s!==this.captionText&&(this.captionText=s,this.hudCanvas.dataset.caption=s),a===null||!o.commentary)return;let c=r.fighters.find(e=>e.player_id===this.viewerId),l=Ht(t,n),u=i===null?null:Gz(i,t,n,r.fighters,this.players,this.roundStats,this.viewerId)/l,d=this.frameSeconds0});p!==null&&(e.save(),e.scale(l,l),bE(e,a,p,o.reducedMotion),e.restore())}destroy(){if(!this.destroyed){if(this.destroyed=!0,cancelAnimationFrame(this.raf),this.raf=0,this.buffer.clear(),this.dedupe.reset(),this.pendingContacts.length=0,this.effects.dispose(),this.avatars.dispose(),this.arena.dispose(),qP(this.ring),this.graphs!==null){for(let e of this.graphs)this.scene.remove(e.boxer.root),e.dispose();this.graphs=null}this.referee!==null&&(this.scene.remove(this.referee.boxer.root),this.referee.dispose(),this.referee=null);for(let e of this.trails)this.scene.remove(e.mesh),e.dispose();this.trails=[];for(let e of this.glows)this.scene.remove(e.mesh),e.dispose();this.glows=[];for(let e of this.impactFlashes)this.scene.remove(e.group),e.dispose();if(this.impactFlashes=[],this.glowMap?.dispose(),this.glowMap=null,this.cornermen!==null){for(let e of this.cornermen)this.scene.remove(e.boxer.root),e.dispose();this.cornermen=null}if(this.cutmen!==null){for(let e of this.cutmen)this.scene.remove(e.boxer.root),e.dispose();this.cutmen=null}for(let e of this.lights)this.scene.remove(e);this.keyLight?.shadow.map?.dispose(),this.keyLight?.shadow.dispose(),this.blobTexture.dispose();for(let e of this.blobShadows)this.scene.remove(e),e.geometry.dispose(),e.material.dispose();this.renderer.renderLists.dispose(),iR(this.composer),this.bloomPass.materialHighPassFilter.dispose(),iF(),this.renderer.dispose(),this.hudCanvas.remove()}}},HB=[`broadcast`,`close`,`fighter`],UB=`hands.preferences.v1`,WB={length:0,clear:()=>void 0,getItem:()=>null,key:()=>null,removeItem:()=>void 0,setItem:()=>void 0},GB=()=>{try{return window.localStorage}catch{return WB}},KB=()=>({volume:.7,haptics:!0,reducedMotion:window.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches??!1,blood:`full`,commentary:!0,announcer:!0,camera:`broadcast`});function qB(e=GB()){let t=KB();try{let n=JSON.parse(e.getItem(UB)??`null`);if(typeof n!=`object`||!n||Array.isArray(n))return t;let r=n;return{volume:typeof r.volume==`number`&&Number.isFinite(r.volume)?Math.max(0,Math.min(1,r.volume)):t.volume,haptics:typeof r.haptics==`boolean`?r.haptics:t.haptics,reducedMotion:typeof r.reducedMotion==`boolean`?r.reducedMotion:t.reducedMotion,blood:r.blood===`reduced`||r.blood===`off`||r.blood===`full`?r.blood:t.blood,commentary:typeof r.commentary==`boolean`?r.commentary:t.commentary,announcer:typeof r.announcer==`boolean`?r.announcer:t.announcer,camera:HB.includes(r.camera)?r.camera:t.camera}}catch{return t}}function JB(e,t=GB()){try{t.setItem(UB,JSON.stringify({volume:Math.max(0,Math.min(1,e.volume)),haptics:e.haptics,reducedMotion:e.reducedMotion,blood:e.blood,commentary:e.commentary,announcer:e.announcer,camera:e.camera}))}catch{}}var YB=class{value;listeners=new Set;constructor(e=GB()){this.storage=e,this.value=qB(e)}storage;get current(){return this.value}update(e){this.value={...this.value,...e},JB(this.value,this.storage);for(let e of this.listeners)e(this.value)}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}destroy(){this.listeners.clear()}},XB={stage:`bootstrapping`,player:null,playerId:null,role:null,players:{},playerOrder:[],simulation:null,snapshot:null,final:null,select:null,serverTick:0,nextSequence:0,reconnectMs:0,safeError:null},ZB=e=>Object.fromEntries(e.map(e=>[e.id,e]));function QB(e,t){if(t.type===`bootstrap`)return{...e,stage:`authorizing`,simulation:t.simulation,safeError:null};if(t.type===`authorized`)return{...e,stage:`connecting`,player:t.player,safeError:null};if(t.type===`connecting`)return{...e,stage:`connecting`};if(t.type===`reconnect-tick`)return{...e,stage:`paused`,reconnectMs:Math.max(0,t.remainingMs)};if(t.type===`fatal`)return{...e,stage:`fatal`,safeError:t.code,reconnectMs:0};let n=t.message;switch(n.type){case`welcome`:return{...e,playerId:n.role===`fighter`?n.player_id:null,role:n.role,players:ZB(n.players),playerOrder:n.players.map(e=>e.id),serverTick:n.server_tick,nextSequence:n.role===`fighter`?n.next_sequence:0,safeError:null};case`ticket`:return e;case`waiting`:return{...e,stage:`waiting`,select:null};case`select`:return{...e,stage:`select`,select:n,players:ZB(n.players),playerOrder:n.players.map(e=>e.id)};case`ready`:return{...e,stage:e.snapshot?.phase??`countdown`,select:null,players:ZB(n.players),playerOrder:n.players.map(e=>e.id)};case`paused`:return{...e,stage:`paused`,reconnectMs:n.grace_ms};case`resumed`:return{...e,stage:e.snapshot?.phase??`countdown`,reconnectMs:0};case`snapshot`:return{...e,stage:n.payload.phase,snapshot:n.payload,serverTick:Math.max(e.serverTick,n.payload.tick)};case`final`:return{...e,stage:`complete`,final:n,reconnectMs:0};case`error`:return{...e,stage:`fatal`,safeError:n.code,reconnectMs:0}}}var $B=new Set([`hit`,`counter_hit`,`block`,`perfect_block`,`guard_break`,`knockdown`,`parry`,`body_collapse`,`eye_shut`,`referee_hit`,`referee_down`]),eV=11e3,tV=1500,nV=4e3,rV=3e3,iV=6,aV=5e3,oV=[{level:`rookie`,label:`Rookie`,detail:`Slow hands, leaves openings`},{level:`contender`,label:`Contender`,detail:`Works the body, punishes mistakes`},{level:`champion`,label:`Champion`,detail:`Slips, counters, finishes`}],sV=e=>nt.includes(e),cV=class{root;reloadPage;authorizer;state=XB;settings=new YB;input=new Hu;audio=new Jn(()=>this.settings.current);haptics=new mu(()=>this.settings.current);voice=new Pn(()=>this.settings.current);feedbackEvents=new nd;soundedPunches=[];renderer=null;network=null;session=null;abort=new AbortController;destroyed=!1;generation=0;reloadOnRetry=!1;reloading=!1;canvas;status;overlay;roleIndicator;controlsButton;controlsPanel;retry;rematchButton;hint;cpuPicker;cpuPrompt;cpuLevel=null;rematchOpponent=null;lastPhase=null;cpuRematchLevel=null;cpuRematch=null;cpuRematchTimer=null;diagnosticsTimer=null;finalReceivedAt=0;lastFinalMatchId=null;rematchAttempts=0;rematchTimer=null;rematchCountdownTimer=null;resultRevealTimer=null;resultWaitTimer=null;completeSince=null;summaryClock=new cn;fightSummary;liveFightStatus;finalSummary;corner;stylePicker;constructor(e,t=()=>window.location.reload(),n=new Jl){this.root=e,this.reloadPage=t,this.authorizer=n,e.innerHTML=`
HANDStwo-player boxing

`,this.canvas=e.querySelector(`canvas`),this.status=e.querySelector(`[data-status]`),this.overlay=e.querySelector(`[data-overlay]`),this.roleIndicator=e.querySelector(`[data-role]`),this.controlsButton=e.querySelector(`[data-controls]`),this.controlsPanel=e.querySelector(`[data-controls-panel]`),this.retry=e.querySelector(`[data-retry]`),this.rematchButton=e.querySelector(`[data-rematch]`),this.hint=e.querySelector(`[data-hint]`),this.cpuPicker=e.querySelector(`[data-cpu]`),this.cpuPrompt=e.querySelector(`[data-cpu-prompt]`),this.cpuPicker.addEventListener(`click`,this.onCpuPick),this.rematchButton.addEventListener(`click`,this.onRematch),this.fightSummary=e.querySelector(`[data-fight-summary]`),this.liveFightStatus=e.querySelector(`[data-fight-status]`),this.finalSummary=e.querySelector(`[data-final]`),this.retry.addEventListener(`click`,this.onRetry),this.bindPanels(),this.syncSettings(),this.input.attachTouch(e.querySelector(`.activity`)),this.corner=new ou(e.querySelector(`.activity`),e=>this.network?.sendCornerChoice(e)??!1),this.stylePicker=new bt(e.querySelector(`.activity`),(e,t)=>this.network?.chooseStyle(e,t)??!1),this.input.setViewForward(()=>this.renderer?.viewForward()??null),window.addEventListener(`keydown`,this.onCameraKey)}onCameraKey=e=>{if(e.code!==`KeyK`||e.repeat||e.ctrlKey||e.metaKey||e.altKey)return;let t=e.target;if(t instanceof HTMLInputElement||t instanceof HTMLSelectElement||t instanceof HTMLTextAreaElement)return;e.preventDefault();let n=HB[(HB.indexOf(this.settings.current.camera)+1)%HB.length];this.settings.update({camera:n}),this.root.querySelector(`[data-camera]`).value=n};start(){this.authorize()}resetForAuthorization(){this.reloadOnRetry=!1,this.network?.dispose(),this.network=null,this.session?.destroy(),this.session=null,this.renderer?.destroy(),this.renderer=null,this.voice.cancel(),this.audio.reset(),this.abort.abort(),this.abort=new AbortController,this.state=XB,this.feedbackEvents.reset(),this.input.setActive(!1),this.input.reset(),this.finalSummary.textContent=``,this.fightSummary.textContent=``,this.liveFightStatus.textContent=``,this.clearRematchTimers(),this.rematchButton.hidden=!0,this.cpuLevel=null,this.lastPhase=null}onCpuPick=e=>{let t=e.target?.closest(`[data-cpu-level]`)?.dataset.cpuLevel;!sV(t)||this.state.stage!==`waiting`||this.state.role!==`fighter`||this.cpuLevel!==null||this.callCpu(t)};callCpu(e){this.network?.requestCpu(e)===!0&&(this.cpuLevel=e,this.renderState())}get cpuBout(){return Object.values(this.state.players).some(e=>e.cpu===!0)}onRematch=()=>{this.rematchButton.disabled||this.state.stage!==`complete`||(this.rematchAttempts=1,this.rematchOpponent=this.cpuBout||this.state.role!==`fighter`?null:Object.values(this.state.players).find(e=>e.id!==this.state.playerId)?.name??null,this.authorize())};clearRematchTimers(){this.rematchTimer!==null&&window.clearTimeout(this.rematchTimer),this.rematchCountdownTimer!==null&&window.clearInterval(this.rematchCountdownTimer),this.rematchTimer=null,this.rematchCountdownTimer=null,this.clearCpuRematch()}scheduleCpuRematch(e){this.clearCpuRematch(),this.cpuRematch={level:e,at:Date.now()+aV},this.cpuRematchTimer=window.setInterval(()=>{let e=this.cpuRematch;e===null||this.state.stage!==`waiting`||this.state.role!==`fighter`||this.cpuLevel!==null?this.clearCpuRematch():Date.now()>=e.at&&(this.clearCpuRematch(),this.callCpu(e.level)),this.renderState()},250)}clearCpuRematch(){this.cpuRematchTimer!==null&&window.clearInterval(this.cpuRematchTimer),this.cpuRematchTimer=null,this.cpuRematch=null}awaitResultReveal(){this.resultRevealTimer!==null&&window.clearInterval(this.resultRevealTimer);let e=()=>{let e=this.renderer?.resultVisible??!0;this.overlay.hidden=this.state.stage===`complete`&&!e,(e||this.state.stage!==`complete`)&&this.resultRevealTimer!==null&&(window.clearInterval(this.resultRevealTimer),this.resultRevealTimer=null)};this.resultRevealTimer=window.setInterval(e,200),e()}startRematchCountdown(){this.clearRematchTimers();let e=this.state.role===`fighter`?`Rematch`:`Next bout`,t=()=>{let t=Math.ceil((this.finalReceivedAt+eV-Date.now())/1e3);this.rematchButton.hidden=this.state.stage!==`complete`,this.rematchButton.disabled=t>0,this.setText(this.rematchButton,t>0?`${e} in ${t}s`:e),t<=0&&this.rematchCountdownTimer!==null&&(window.clearInterval(this.rematchCountdownTimer),this.rematchCountdownTimer=null)};t(),this.rematchCountdownTimer=window.setInterval(t,1e3)}scheduleRematchRetry(){if(this.rematchTimer===null){if(this.rematchAttempts>=iV){this.fail(`rematch_unavailable`);return}this.rematchAttempts+=1,this.setText(this.status,`The ring is still being cleared… trying again.`),this.rematchTimer=window.setTimeout(()=>{this.rematchTimer=null,this.authorize()},rV)}}async authorize(){let e=++this.generation;this.resetForAuthorization(),this.dispatch({type:`connecting`}),this.setText(this.status,`Securing Discord Activity session…`),this.retry.hidden=!0;try{let t=await this.authorizer.authorize(this.abort.signal);if(this.destroyed||e!==this.generation){t.destroy();return}this.session=t,this.dispatch({type:`bootstrap`,simulation:t.bootstrap.simulation}),this.dispatch({type:`authorized`,player:t.player}),this.input.onAction(e=>{this.renderer?.predictAction?.(e),this.network?.notifyAction()}),this.input.onHeldChange(()=>this.network?.notifyHeld());let n=t.takeTicket();if(n===null)throw Error(`ticket_unavailable`);let r=new md(n,()=>this.input.frame(),{onMessage:e=>this.receive(e),onReconnect:e=>{this.dispatch({type:`reconnect-tick`,remainingMs:e}),this.renderer?.setReconnect(e),this.renderState()},onFatal:e=>this.fail(e),onFreshAuth:()=>{e===this.generation&&this.authorize()}});this.network=r,r.start(),this.setText(this.status,`Connecting to the ring…`)}catch(t){!this.abort.signal.aborted&&e===this.generation&&(this.reloadOnRetry=t instanceof Yn&&t.reloadRequired,this.fail(tr(t)))}}ensureRenderer(){if(this.renderer!==null||this.session===null||this.destroyed)return;let e=new VB(this.canvas,this.session.bootstrap.simulation,()=>this.settings.current,{localInput:()=>this.input.held(),inputSequenceOf:e=>this.network?.sequenceOf(e)??null,powerHeld:()=>this.input.powerHeld});e.onContact=(e,t)=>{this.audio.event(e,t),this.haptics.event(e,t)},e.onOwnPunch=(e,t,n)=>{this.audio.whoosh(e,t),this.soundedPunches.push(n),this.soundedPunches.length>8&&this.soundedPunches.shift()},e.onArcadeInjury=e=>this.audio.injury(e),e.onAnnouncement=e=>this.voice.speak(e),e.onCrowdCue=()=>this.audio.chant(),e.onRocked=(e,t)=>this.audio.rocked(e,t),this.renderer=e}receive(e){if(e.type===`error`){this.fail(e.code);return}e.type===`welcome`&&this.ensureRenderer(),(e.type===`welcome`||e.type===`resumed`)&&this.renderer?.resyncClock();let t=this.rematchAttempts>0;if((e.type===`waiting`||e.type===`ready`)&&(this.rematchAttempts=0),e.type===`ready`&&(this.rematchOpponent=null),e.type===`ready`&&this.rememberStyle(e.players),e.type===`final`&&this.rematchAttempts>0&&e.match_id===this.lastFinalMatchId){this.scheduleRematchRetry();return}this.dispatch({type:`message`,message:e}),e.type===`snapshot`&&this.receiveSnapshot(e.payload),(e.type===`select`||e.type===`ready`)&&!e.players.some(e=>e.cpu===!0)&&(this.cpuLevel=null),e.type===`waiting`&&(this.cpuLevel===null?t&&this.cpuRematchLevel!==null&&this.scheduleCpuRematch(this.cpuRematchLevel):this.callCpu(this.cpuLevel)),e.type===`final`&&(this.cpuRematchLevel=this.cpuBout?this.cpuLevel:null,this.rematchAttempts=0,this.lastFinalMatchId=e.match_id,this.finalReceivedAt=Date.now(),this.renderer?.setFinal(e),this.audio.result(e),this.startRematchCountdown(),this.awaitResultReveal()),this.renderer?.setPlayers(this.state.players,this.state.playerId,this.state.playerOrder),this.renderer?.setReconnect(this.state.reconnectMs),this.renderState()}get networkStats(){return{inputLatencyMs:this.network?.inputLatencyMs??null,resolutionScale:this.renderer?.resolutionScale??null,gpu:this.renderer?.memoryInfo??null}}receiveSnapshot(e){this.lastPhase===`countdown`&&e.phase!==`countdown`&&this.voice.finishLine(tV),this.lastPhase=e.phase,this.renderer?.setInputLatency(this.network?.inputLatencyMs??null),this.renderer?.push(e);let t=e.fighters.find(e=>e.player_id===this.state.playerId);this.input.setKnockdown(t?.is_downed===!0),t!==void 0&&this.audio.snapshot(e.tick,t.stamina,t.maximum_stamina,t.trauma.head+t.trauma.body),this.audio.roundClock(e.phase,e.round_number,e.phase_ticks_remaining,this.state.simulation?.tick_rate??30),this.audio.tension(af(e));for(let t of this.feedbackEvents.accept(e.events)){if($B.has(t.kind)||t.kind===`punch_start`&&t.action_id!==null&&this.soundedPunches.includes(t.action_id))continue;let n=t.kind===`punch_start`?e.fighters.find(e=>e.player_id===t.actor_id&&e.action_id===t.action_id):void 0;this.audio.event(t,n?.action_power===`power`),this.haptics.event(t)}}rememberStyle(e){let t=e.find(e=>e.id===this.state.playerId)?.style;this.state.role===`fighter`&&t!==void 0&&pt(t)}dispatch(e){this.state=QB(this.state,e)}setText(e,t){e.textContent!==t&&(e.textContent=t)}renderState(){let e={bootstrapping:`Loading…`,authorizing:`Authorizing with Discord…`,connecting:`Connecting securely…`,waiting:this.state.role===`spectator`?`Waiting for the fighters…`:this.cpuLevel===null?this.cpuRematch===null?this.rematchOpponent===null?`Waiting for an opponent. Anyone in this channel can join with Play now.`:`Waiting for ${this.rematchOpponent} to take the rematch…`:`Rematch with the ${oV.find(e=>e.level===this.cpuRematch?.level)?.label??`computer`} in ${Math.max(1,Math.ceil((this.cpuRematch.at-Date.now())/1e3))}s, unless someone joins first.`:`Calling in the computer…`,select:`Pick how your fighter boxes.`,countdown:`Bout countdown.`,fight:`Round ${this.state.snapshot?.round_number??1} in progress.`,knockdown:`Knockdown count ${this.state.snapshot?.fighters.find(e=>e.player_id===this.state.playerId)?.get_up_count??0}.`,foul_recovery:`Foul recovery in progress.`,referee_down:`The referee is down. The bout goes on without him.`,rest:`Between-round rest.`,paused:`Connection paused. ${Math.ceil(this.state.reconnectMs/1e3)} seconds remain.`,complete:this.cpuBout?`Bout complete. Scorecards are displayed. Bouts against the computer are unrated.`:`Bout complete. Scorecards and rating changes are displayed.`,fatal:cu(this.state.safeError??`safe_error`)},t=this.state.role===`spectator`;this.setText(this.status,t?`Spectating — ${e[this.state.stage]}`:e[this.state.stage]);let n=this.state.stage===`complete`&&this.state.final!==null;if(this.status.hidden=n||[`select`,`countdown`,`fight`,`knockdown`,`foul_recovery`,`referee_down`,`rest`].includes(this.state.stage),this.overlay.toggleAttribute(`data-raised`,this.state.snapshot!==null),this.overlay.toggleAttribute(`data-result`,n),this.state.stage!==`complete`)this.overlay.hidden=!1,this.completeSince=null;else if(this.state.final===null){this.completeSince??=Date.now();let e=Date.now()-this.completeSince;this.overlay.hidden=e{this.resultWaitTimer=null,this.renderState()},nV-e+50))}this.roleIndicator.hidden=!t,this.controlsButton.hidden=t,t&&(this.controlsPanel.hidden=!0,this.controlsButton.setAttribute(`aria-expanded`,`false`));let r=this.state.snapshot?.fighters.find(e=>e.player_id===this.state.playerId),i=t?`Spectating. ${e[this.state.stage]}`:this.state.stage===`knockdown`&&r?.is_downed===!0?`Knockdown. Count ${r.get_up_count}. ${r.get_up_prompt===null?`Wait for your private rhythm instruction.`:`Press ${r.get_up_prompt===`get_up_left`?`left`:`right`} now.`}`:this.state.stage===`paused`?`Connection paused.`:e[this.state.stage];this.setText(this.liveFightStatus,i),this.corner.update(this.state.snapshot,this.state.playerId,this.state.role===`fighter`&&this.state.stage===`rest`),this.renderer?.setCornerPanelTop(this.corner.top()),this.stylePicker.update(this.state.stage===`select`?this.state.select:null,this.state.playerId,this.state.role),this.retry.hidden=this.state.stage!==`fatal`,this.setText(this.retry,this.reloadOnRetry?`Reload`:`Retry securely`),this.state.stage!==`complete`&&(this.rematchButton.hidden=!0),this.cpuPicker.hidden=t||this.state.stage!==`waiting`||this.cpuLevel!==null,this.setText(this.cpuPrompt,this.cpuRematch===null?this.rematchOpponent===null?`No one here yet? Fight the computer.`:`Or fight the computer instead:`:`Or start now:`);let a=!t&&(this.state.stage===`waiting`||this.state.stage===`countdown`);this.hint.hidden=!a,a&&this.setText(this.hint,Su(lu(),window.innerWidth)),this.overlay.toggleAttribute(`data-touch-hint`,a&&this.state.stage===`countdown`&&lu());let o=!t&&[`countdown`,`fight`,`knockdown`,`foul_recovery`,`referee_down`].includes(this.state.stage),s=!t&&this.state.snapshot!==null&&(this.state.stage===`rest`||this.state.stage===`paused`);if(this.input.setActive(o,o||s),this.network?.setActive(o),this.renderFightSummary(),this.state.final!==null){let e=this.state.final;this.setText(this.finalSummary,`${e.method.replaceAll(`_`,` `)}. ${e.winner_id===null?`Draw`:`${this.state.players[e.winner_id]?.name??`Winner`} wins`}. Scorecards: ${e.scorecards.map(e=>`${e.judge}: ${e.player_one.reduce((e,t)=>e+t,0)} to ${e.player_two.reduce((e,t)=>e+t,0)}`).join(`; `)}. ${this.cpuBout?`Unrated bout against the computer.`:`Ratings: ${Object.entries(e.ratings).map(([e,t])=>`${this.state.players[e]?.name??`fighter`} ${t.before} to ${t.after}`).join(`; `)}.`}`)}}renderFightSummary(){let e=this.state.snapshot;if(e===null)return;let t=this.state.simulation?.tick_rate??30,n=Math.floor(this.summaryClock.ticks(e)/t),r=`${Math.floor(n/60)}:${String(n%60).padStart(2,`0`)}`,i=e.fighters.map(e=>{let t=this.state.players[e.player_id];return`${t?.name??`Fighter`}, ${t?.cpu===!0?`computer opponent`:`ELO ${t?.rating??`unknown`}`}, stamina ${Math.round(e.stamina)} of ${Math.round(e.maximum_stamina)}, guard ${Math.round(e.guard)}, poise ${Math.round(e.poise)}, conditioning ${Math.round(e.conditioning)}, ${e.warnings} warnings, ${e.knockdowns} knockdowns`}),a=e.fighters.find(e=>e.player_id===this.state.playerId),o=a?.is_downed===!0?a.get_up_prompt===null?`You are down. Count ${a.get_up_count}. Wait for your private rhythm instruction.`:`You are down. Count ${a.get_up_count}. Press ${a.get_up_prompt===`get_up_left`?`left`:`right`} now. Get-up progress ${a.get_up_meter} of ${a.get_up_required}.`:``;this.setText(this.fightSummary,`Round ${e.round_number}. ${e.phase.replace(`_`,` `)}. Clock ${r}. ${i.join(`. `)}. ${o}`.trim())}onRetry=()=>{if(this.reloadOnRetry){this.reloading=!0,this.reloadPage();return}this.authorize()};bindPanels(){let e=(e,t)=>{let n=this.root.querySelector(e),r=this.root.querySelector(t);n.addEventListener(`click`,()=>{r.hidden=!r.hidden,n.setAttribute(`aria-expanded`,String(!r.hidden))})};e(`[data-controls]`,`[data-controls-panel]`),e(`[data-settings]`,`[data-settings-panel]`);let t=this.root.querySelector(`[data-settings-panel]`);this.root.querySelector(`[data-settings]`).addEventListener(`click`,()=>{this.diagnosticsTimer!==null&&window.clearInterval(this.diagnosticsTimer),this.diagnosticsTimer=null,!t.hidden&&(this.refreshDiagnostics(),this.diagnosticsTimer=window.setInterval(()=>this.refreshDiagnostics(),1e3))});let n=this.root.querySelector(`[data-copy-diagnostics]`);n.addEventListener(`click`,()=>{let e=this.diagnosticsText(),t=()=>{this.setText(n,`Copied`),window.setTimeout(()=>this.setText(n,`Copy diagnostics`),1500)},r=()=>{let e=this.root.querySelector(`[data-diagnostics]`),t=window.getSelection();if(t===null)return;let r=document.createRange();r.selectNodeContents(e),t.removeAllRanges(),t.addRange(r),this.setText(n,`Selected. Copy manually`),window.setTimeout(()=>this.setText(n,`Copy diagnostics`),2500)},i=navigator.clipboard;if(i===void 0||typeof i.writeText!=`function`){r();return}i.writeText(e).then(t).catch(r)}),this.root.querySelector(`[data-volume]`).addEventListener(`input`,e=>{this.settings.update({volume:Number(e.target.value)}),this.audio.setVolume(),this.voice.settingsChanged()}),this.root.querySelector(`[data-haptics]`).addEventListener(`change`,e=>{this.settings.update({haptics:e.target.checked})}),this.root.querySelector(`[data-motion]`).addEventListener(`change`,e=>{let t=e.target.checked;this.settings.update({reducedMotion:t}),this.renderer?.setReducedMotion(t)}),this.root.querySelector(`[data-commentary]`).addEventListener(`change`,e=>{this.settings.update({commentary:e.target.checked})}),this.root.querySelector(`[data-announcer]`).addEventListener(`change`,e=>{let t=e.target.checked;this.settings.update({announcer:t}),t||this.voice.cancel()}),this.root.querySelector(`[data-blood]`).addEventListener(`change`,e=>{let t=e.target.value;this.settings.update({blood:t}),this.renderer?.setBloodLevel(t)}),this.root.querySelector(`[data-camera]`).addEventListener(`change`,e=>{let t=HB.find(t=>t===e.target.value);t!==void 0&&this.settings.update({camera:t})})}diagnosticsText(){let e=this.networkStats,t=this.renderer?.diagnostics,n=t===void 0||t.frameMs<=0?`-`:(1e3/t.frameMs).toFixed(0);return[`stage: ${this.state.stage} · role: ${this.state.role??`-`}`,`input latency: ${e.inputLatencyMs===null?`-`:`${Math.round(e.inputLatencyMs)} ms`}`,`frame: ${t===void 0?`-`:`${t.frameMs.toFixed(1)} ms (${n} fps)`} · render scale: ${t?.resolutionScale??`-`}`,`gpu objects: ${t===void 0?`-`:`${t.gpu.geometries} geometries, ${t.gpu.textures} textures, ${t.gpu.programs} programs`}`,`graphics: ${t?.graphics??`-`}`,`browser: ${navigator.userAgent}`,`pointer: ${lu()?`coarse`:`fine`} · viewport: ${window.innerWidth}x${window.innerHeight} @${window.devicePixelRatio}`,`last error: ${this.state.safeError??`none`}`,`match: ${this.state.final?.match_id??`-`}`].join(` +`)}refreshDiagnostics(){this.setText(this.root.querySelector(`[data-diagnostics]`),this.diagnosticsText())}syncSettings(){let e=this.settings.current;this.root.querySelector(`[data-volume]`).value=String(e.volume),this.root.querySelector(`[data-haptics]`).checked=e.haptics,this.root.querySelector(`[data-motion]`).checked=e.reducedMotion,this.root.querySelector(`[data-blood]`).value=e.blood,this.root.querySelector(`[data-commentary]`).checked=e.commentary,this.syncAnnouncerSetting(),this.voice.onVoicesChanged=()=>this.syncAnnouncerSetting(),this.root.querySelector(`[data-camera]`).value=e.camera}syncAnnouncerSetting(){let e=this.root.querySelector(`[data-announcer]`),t=this.voice.hasVoice;e.checked=this.settings.current.announcer&&t,e.disabled=!t;let n=this.voice.supported?t?null:`This device has no English voice of its own`:`This browser cannot speak`;n===null?e.parentElement.removeAttribute(`title`):e.parentElement.title=n}fail(e){if(e===`room_closed`&&this.rematchAttempts>0){this.scheduleRematchRetry();return}e===`client_outdated`&&(this.reloadOnRetry=!0),this.dispatch({type:`fatal`,code:e}),this.rematchOpponent=null,this.voice.cancel(),this.network?.dispose(),this.network=null,this.session?.destroy(),this.session=null,this.renderer?.destroy(),this.renderer=null,this.input.setActive(!1),this.input.reset(),this.renderState()}destroy(){this.destroyed||(this.destroyed=!0,this.generation+=1,this.abort.abort(),this.network?.dispose(),this.session?.destroy(),this.reloading||this.authorizer.close(),this.renderer?.destroy(),window.removeEventListener(`keydown`,this.onCameraKey),this.input.destroy(),this.corner.destroy(),this.stylePicker.destroy(),this.audio.destroy(),this.voice.destroy(),this.settings.destroy(),this.retry.removeEventListener(`click`,this.onRetry),this.rematchButton.removeEventListener(`click`,this.onRematch),this.cpuPicker.removeEventListener(`click`,this.onCpuPick),this.clearRematchTimers(),this.diagnosticsTimer!==null&&window.clearInterval(this.diagnosticsTimer),this.resultRevealTimer!==null&&window.clearInterval(this.resultRevealTimer),this.resultWaitTimer!==null&&window.clearTimeout(this.resultWaitTimer),this.diagnosticsTimer=null,this.root.replaceChildren())}};(new URLSearchParams(window.location.search).get(`styles`)??``).split(`,`);var lV={broadcast:{position:[0,1.88,7.15],lookAt:[0,1.12,0]},side:{position:[7.4,1.6,0],lookAt:[0,1.1,0]},top:{position:[.01,8.5,.01],lookAt:[0,0,0]},ringside:{position:[1.6,1.5,4.1],lookAt:[.2,1.25,0]}},uV=[[`hips`,`spine`],[`spine`,`head`],[`chest`,`shoulderL`],[`shoulderL`,`elbowL`],[`elbowL`,`gloveL`],[`chest`,`shoulderR`],[`shoulderR`,`elbowR`],[`elbowR`,`gloveR`],[`hips`,`hipL`],[`hipL`,`kneeL`],[`kneeL`,`ankleL`],[`hips`,`hipR`],[`hipR`,`kneeR`],[`kneeR`,`ankleR`]],dV=class{root;renderer=null;replay=null;raf=0;playing=!1;speed=1;virtualTick=0;carry=0;latencyMs=0;pendingQueue=[];destroyed=!1;overlays={skeleton:!1,hurtbox:!1,hitbox:!1};skeletonLines=[];hurtboxMeshes=[];hitboxMeshes=[];statusEl;metricsEl;canvas;constructor(e){this.root=e,e.innerHTML=`
HANDS LABloading replay…
@@ -4999,7 +5000,7 @@ void main() { -
`,this.canvas=e.querySelector(`canvas`),this.statusEl=e.querySelector(`[data-lab-status]`),this.metricsEl=e.querySelector(`[data-lab-metrics]`),this.bindControls()}async start(){let e=new URLSearchParams(window.location.search),t=e.get(`replay`)??`golden`,n=await fetch(`/replays/${t}.json`);if(n.ok||(n=await fetch(`/hands/replays/${t}.json`)),!n.ok)throw Error(`replay_load_failed:${n.status}`);this.replay=await n.json(),await nP(),this.renderer=new QR(this.canvas,{tick_rate:this.replay.tick_rate,ring_half_width:500,ring_half_height:500},()=>({volume:0,haptics:!1,reducedMotion:!1,blood:`full`,commentary:!0,announcer:!1,camera:`broadcast`}),{manualClock:!0});let r=Object.fromEntries(this.replay.ticks[0].snapshot.payload.fighters.map(e=>[e.player_id,{id:e.player_id,name:e.player_id===`one`?`Azure Vector`:`Crimson Geometry`,avatar:null,rating:1500,connected:!0}]));this.renderer.setPlayers(r,`one`),this.buildOverlays();let i=e.get(`tick`);if(e.get(`metrics`)===`1`){await this.renderer.ready,this.exportMetrics(),this.setStatus(`metrics done`);return}if(i!==null){let t=Number(i);await this.renderer.ready,this.seek(t);let n=bz[e.get(`camera`)??``]??bz.broadcast;this.renderer.labSetCameraOverride(n.position,n.lookAt),this.overlays.skeleton=e.get(`skeleton`)===`1`,this.overlays.hurtbox=e.get(`hurtbox`)===`1`,this.overlays.hitbox=e.get(`hitbox`)===`1`,this.syncOverlayVisibility(),this.renderCurrentTick(),window.__labDebug={roots:this.renderer.labRigs.map(e=>e.position.toArray().map(e=>Number(e.toFixed(3)))),heads:this.renderer.labRigs.map(e=>{let t=e.getObjectByName(gA.head??`head`);return t===void 0?null:t.getWorldPosition(new J).toArray().map(e=>Number(e.toFixed(3)))}),gloves:this.renderer.labRigs.map(e=>{let t=e.getObjectByName(gA.gloveL??`gloveL`);return t===void 0?null:t.getWorldPosition(new J).toArray().map(e=>Number(e.toFixed(3)))}),material:(()=>{let e=null;return this.renderer.labRigs[0]?.traverse(t=>{if(e===null&&t instanceof Jg){let n=t.material;e={colorHex:n.color.getHexString(),hasMap:n.map!==null,mapImage:n.map?.image?.width??`none`,mapVersion:n.map?.version,clearcoat:n.clearcoat,opacity:n.opacity}}}),e})()},this.setStatus(`filmstrip tick ${t}`);return}this.playing=!0;let a=()=>{this.destroyed||(this.advance(),this.raf=requestAnimationFrame(a))};this.raf=requestAnimationFrame(a)}bindControls(){this.root.querySelector(`[data-lab='play']`).addEventListener(`click`,e=>{this.playing=!this.playing,e.target.textContent=this.playing?`Pause`:`Play`}),this.root.querySelector(`[data-lab='step']`).addEventListener(`click`,()=>{this.playing=!1,this.root.querySelector(`[data-lab='play']`).textContent=`Play`,this.virtualTick=Math.min(this.virtualTick+1,(this.replay?.ticks.length??1)-1),this.pushUpTo(this.virtualTick),this.renderCurrentTick()}),this.root.querySelector(`[data-lab='speed']`).addEventListener(`change`,e=>{this.speed=Number(e.target.value)}),this.root.querySelector(`[data-lab='camera']`).addEventListener(`change`,e=>{let t=bz[e.target.value];this.renderer?.labSetCameraOverride(t.position,t.lookAt)});for(let e of[`skeleton`,`hurtbox`,`hitbox`])this.root.querySelector(`[data-lab='${e}']`).addEventListener(`change`,t=>{this.overlays[e]=t.target.checked,this.syncOverlayVisibility()});this.root.querySelector(`[data-lab='latency']`).addEventListener(`change`,e=>{this.latencyMs=Math.max(0,Math.min(500,Number(e.target.value)))}),this.root.querySelector(`[data-lab='metrics']`).addEventListener(`click`,()=>this.exportMetrics())}advance(){if(!this.playing||this.replay===null)return;let e=this.replay.ticks.length-1;if(!(this.virtualTick>=e)){for(this.carry+=this.speed;this.carry>=1&&this.virtualTick0?this.pendingQueue.push({at:performance.now()+this.latencyMs,tick:t}):this.renderer?.push(t.snapshot.payload))}drainLatencyQueue(){let e=performance.now();for(let t=this.pendingQueue.length-1;t>=0;--t){let n=this.pendingQueue[t];n.at<=e&&(this.renderer?.push(n.tick.snapshot.payload),this.pendingQueue.splice(t,1))}}seek(e,t=!0){if(this.replay===null||this.renderer===null)return;let n=Math.max(0,Math.min(e,this.replay.ticks.length-1));for(let e=0;e<=n;e+=1)this.renderer.push(this.replay.ticks[e].snapshot.payload),e>=n-15&&this.renderer.labEffects.update(1/30);this.virtualTick=n,this.renderOnSeek=t}renderOnSeek=!0;renderCurrentTick(e){if(this.replay===null||this.renderer===null)return;this.drainLatencyQueue(),this.renderer.labFrame(this.virtualTick/this.replay.tick_rate,e??this.renderOnSeek),this.renderer.labFrame((this.virtualTick+.5)/this.replay.tick_rate,e??this.renderOnSeek),this.updateOverlays();let t=this.replay.ticks[this.virtualTick]?.snapshot.payload.phase??``;this.setStatus(`tick ${this.virtualTick}/${this.replay.ticks.length-1} · ${t} · ${this.speed}×`)}buildOverlays(){let e=this.renderer;if(e===null)return;let t=new p_({color:8257448,depthTest:!1,transparent:!0,opacity:.9});for(let n of e.labRigs){let r=new lg;r.setAttribute(`position`,new Jh(new Float32Array(xz.length*6),3));let i=new T_(r,t);i.frustumCulled=!1,i.renderOrder=20,e.labScene.add(i),this.skeletonLines.push(i);let a=new Ig(new B_(.13,.16,4,8),new wg({color:16735581,wireframe:!0,transparent:!0,opacity:.85,depthTest:!1}));a.renderOrder=21,a.position.y=.12,(n.getObjectByName(gA.head??`head`)??n).add(a),this.hurtboxMeshes.push(a);let o=new Ig(new B_(.21,.34,4,8),new wg({color:16758877,wireframe:!0,transparent:!0,opacity:.7,depthTest:!1}));o.renderOrder=21,o.position.y=.16,(n.getObjectByName(gA.chest??`chest`)??n).add(o),this.hurtboxMeshes.push(o);for(let e of[`gloveL`,`gloveR`]){let t=new Ig(new Sv(.11,10,8),new wg({color:6141183,wireframe:!0,transparent:!0,opacity:.85,depthTest:!1}));t.renderOrder=22,(n.getObjectByName(gA[e]??e)??n).add(t),this.hitboxMeshes.push(t)}}this.syncOverlayVisibility()}syncOverlayVisibility(){for(let e of this.skeletonLines)e.visible=this.overlays.skeleton;for(let e of this.hurtboxMeshes)e.visible=this.overlays.hurtbox;for(let e of this.hitboxMeshes)e.visible=this.overlays.hitbox}updateOverlays(){let e=this.renderer;if(e!==null)for(let[t,n]of e.labRigs.entries()){let e=this.skeletonLines[t];if(e===void 0||!e.visible)continue;let r=e.geometry.getAttribute(`position`),i=new J,a=new J;xz.forEach(([e,t],o)=>{let s=n.getObjectByName(e),c=n.getObjectByName(t);s===void 0||c===void 0||(s.getWorldPosition(i),c.getWorldPosition(a),r.setXYZ(o*2,i.x,i.y,i.z),r.setXYZ(o*2+1,a.x,a.y,a.z))}),r.needsUpdate=!0}}jointWorld(e,t){let n=(this.renderer?.labRigs[e])?.getObjectByName(gA[t]??t);return n==null?null:n.getWorldPosition(new J)}exportMetrics(){if(this.replay===null)return;let e={contactAlignment:[],maxRootStepMeters:0,footSlideMeters:0,phaseDriftTicks:0};for(let t of this.replay.ticks){let n=t.snapshot.payload.events.find(e=>[`hit`,`counter_hit`,`block`].includes(e.kind)),r=t.snapshot.payload.fighters[0].action_hand;if(n===void 0||r===null)continue;let i=Math.min(t.tick+1,this.replay.ticks.length-1);this.seek(i,!1),this.renderCurrentTick(!1);let o=this.jointWorld(0,r===`left`?`gloveL`:`gloveR`),s=this.jointWorld(1,`head`),c=this.jointWorld(1,`chest`);o!==null&&s!==null&&c!==null&&e.contactAlignment.push({tick:t.tick,kind:n.kind,gloveToHeadMeters:Number(Math.max(0,o.distanceTo(s)-a.head.radius).toFixed(4)),gloveToTorsoMeters:Number(Math.max(0,o.distanceTo(c)-a.torso.radius).toFixed(4))})}this.seek(0,!1);let t=null,n=null;for(let r of this.replay.ticks){this.seek(r.tick,!1),this.renderCurrentTick(!1);let i=this.renderer.labRigs[0].position.x;n!==null&&(e.maxRootStepMeters=Math.max(e.maxRootStepMeters,Math.abs(i-n))),n=i;let a=r.snapshot.payload.fighters[0],o=Math.hypot(a.velocity_x,a.velocity_y),s=this.replay.ticks.slice(Math.max(0,r.tick-30),r.tick+1).some(e=>e.snapshot.payload.fighters[0].is_downed);if(o===0&&!a.is_downed&&!s&&r.snapshot.payload.phase===`fight`){let n=[this.jointWorld(0,`ankleL`),this.jointWorld(0,`ankleR`)].filter(e=>e!==null);t!==null&&n.length===2&&(e.footSlideMeters=Math.max(e.footSlideMeters,Number(Math.max(n[0].distanceTo(t[0]),n[1].distanceTo(t[1])).toFixed(4)))),t=n}else t=null}this.metricsEl.textContent=` contacts: ${e.contactAlignment.map(e=>`${e.kind}@t${e.tick} glove-head ${e.gloveToHeadMeters}m`).join(` · `)} · max root step ${e.maxRootStepMeters.toFixed(3)}m · foot slide ${e.footSlideMeters}m`,window.__labDebug={roots:this.renderer.labRigs.map(e=>e.position.toArray().map(e=>Number(e.toFixed(3)))),graphsActive:this.renderer.graphs!==null,heads:this.renderer.labRigs.map(e=>{let t=e.getObjectByName(gA.head??`head`);return t===void 0?null:t.getWorldPosition(new J).toArray().map(e=>Number(e.toFixed(3)))})};let r=new Blob([JSON.stringify(e,null,1)],{type:`application/json`}),i=document.createElement(`a`);i.href=URL.createObjectURL(r),i.download=`hands-lab-metrics.json`,i.click(),URL.revokeObjectURL(i.href)}setStatus(e){this.statusEl.textContent!==e&&(this.statusEl.textContent=e)}destroy(){this.destroyed||(this.destroyed=!0,cancelAnimationFrame(this.raf),this.renderer?.destroy(),this.root.replaceChildren())}};function Cz(e){let t=new Sz(e);return t.start().catch(t=>{e.querySelector(`[data-lab-status]`).textContent=`lab failed: ${String(t)}`}),()=>t.destroy()}var wz={referee:{outfit:xA,look:_D.referee},corner_blue:{outfit:SA,look:_D.blueCorner},corner_red:{outfit:CA,look:_D.redCorner},cutman:{outfit:wA,look:_D.blueCutman}},Tz=()=>({player_id:`lab`,x:0,y:0,facing:1,facing_x:0,facing_y:-1e3,velocity_x:0,velocity_y:0,stance:`orthodox`,style:`balanced`,defense:`none`,stamina:1e3,maximum_stamina:1e3,conditioning:1e3,guard:700,poise:600,trauma:{head:0,body:0,left_eye:0,right_eye:0,left_cut:0,right_cut:0,swelling:0,bleeding:0},knockdowns:0,warnings:0,deductions:0,stunned_ticks:0,is_downed:!1,action:null,action_hand:null,action_target:null,action_power:null,action_id:null,action_key:null,action_start_tick:0,action_startup_ticks:0,action_active_ticks:0,action_recovery_ticks:0,action_contact_tick:null,queued_actions:0,clinch_startup_ticks:0,clinch_ticks:0,is_foul_recovery_target:!1,taunt_ticks:0,corner_choice:null,get_up_prompt:null,get_up_meter:0,get_up_required:0,get_up_count:0,get_up_window_start_tick:0,get_up_window_end_tick:0,last_input_sequence:-1}),Ez=.45,Dz=.3,Oz={face:[.25,1.55,1],portrait:[.12,1.62,.62],eyes:[-.2,1.65,.44],floor:[1.62,.3,.18],hand:[.55,1.05,.75],front:[0,1.35,3.4],side:[3.4,1.3,.2],"three-quarter":[2.4,1.5,2.6],top:[.01,4.5,.6],back:[.2,1.4,-3.4],low:[1.8,.5,2.6],wide:[3.4,2.7,3.6]},kz=class{root;renderer;scene=new hh;camera;graph=null;boxer=null;trails=[];trailGlove=new J;treatEye=new J(0,1.22,.78);treatFacing=new J(0,0,-1);treatTarget=new J;skeletonHelper=null;effects=null;shieldClock=1/0;shieldEvent=0;mouth=new J;headTurn=new cm;burstRim=new Float32Array;burstStump={position:new J,quaternion:new cm,across:new J,scratch:new J};raf=0;previous=performance.now();elapsed=0;params=new URLSearchParams(window.location.search);reactionFired=!1;statusEl;constructor(e){this.root=e,e.innerHTML=`
+
`,this.canvas=e.querySelector(`canvas`),this.statusEl=e.querySelector(`[data-lab-status]`),this.metricsEl=e.querySelector(`[data-lab-metrics]`),this.bindControls()}async start(){let e=new URLSearchParams(window.location.search),t=e.get(`replay`)??`golden`,n=await fetch(`/replays/${t}.json`);if(n.ok||(n=await fetch(`/hands/replays/${t}.json`)),!n.ok)throw Error(`replay_load_failed:${n.status}`);this.replay=await n.json(),await rF(),this.renderer=new VB(this.canvas,{tick_rate:this.replay.tick_rate,ring_half_width:500,ring_half_height:500},()=>({volume:0,haptics:!1,reducedMotion:!1,blood:`full`,commentary:!0,announcer:!1,camera:`broadcast`}),{manualClock:!0});let r=Object.fromEntries(this.replay.ticks[0].snapshot.payload.fighters.map(e=>[e.player_id,{id:e.player_id,name:e.player_id===`one`?`Azure Vector`:`Crimson Geometry`,avatar:null,rating:1500,connected:!0}]));this.renderer.setPlayers(r,`one`),this.buildOverlays();let i=e.get(`tick`);if(e.get(`metrics`)===`1`){await this.renderer.ready,this.exportMetrics(),this.setStatus(`metrics done`);return}if(i!==null){let t=Number(i);await this.renderer.ready,this.seek(t);let n=lV[e.get(`camera`)??``]??lV.broadcast;this.renderer.labSetCameraOverride(n.position,n.lookAt),this.overlays.skeleton=e.get(`skeleton`)===`1`,this.overlays.hurtbox=e.get(`hurtbox`)===`1`,this.overlays.hitbox=e.get(`hitbox`)===`1`,this.syncOverlayVisibility(),this.renderCurrentTick(),window.__labDebug={roots:this.renderer.labRigs.map(e=>e.position.toArray().map(e=>Number(e.toFixed(3)))),heads:this.renderer.labRigs.map(e=>{let t=e.getObjectByName(_j.head??`head`);return t===void 0?null:t.getWorldPosition(new J).toArray().map(e=>Number(e.toFixed(3)))}),gloves:this.renderer.labRigs.map(e=>{let t=e.getObjectByName(_j.gloveL??`gloveL`);return t===void 0?null:t.getWorldPosition(new J).toArray().map(e=>Number(e.toFixed(3)))}),material:(()=>{let e=null;return this.renderer.labRigs[0]?.traverse(t=>{if(e===null&&t instanceof p_){let n=t.material;e={colorHex:n.color.getHexString(),hasMap:n.map!==null,mapImage:n.map?.image?.width??`none`,mapVersion:n.map?.version,clearcoat:n.clearcoat,opacity:n.opacity}}}),e})()},this.setStatus(`filmstrip tick ${t}`);return}this.playing=!0;let a=()=>{this.destroyed||(this.advance(),this.raf=requestAnimationFrame(a))};this.raf=requestAnimationFrame(a)}bindControls(){this.root.querySelector(`[data-lab='play']`).addEventListener(`click`,e=>{this.playing=!this.playing,e.target.textContent=this.playing?`Pause`:`Play`}),this.root.querySelector(`[data-lab='step']`).addEventListener(`click`,()=>{this.playing=!1,this.root.querySelector(`[data-lab='play']`).textContent=`Play`,this.virtualTick=Math.min(this.virtualTick+1,(this.replay?.ticks.length??1)-1),this.pushUpTo(this.virtualTick),this.renderCurrentTick()}),this.root.querySelector(`[data-lab='speed']`).addEventListener(`change`,e=>{this.speed=Number(e.target.value)}),this.root.querySelector(`[data-lab='camera']`).addEventListener(`change`,e=>{let t=lV[e.target.value];this.renderer?.labSetCameraOverride(t.position,t.lookAt)});for(let e of[`skeleton`,`hurtbox`,`hitbox`])this.root.querySelector(`[data-lab='${e}']`).addEventListener(`change`,t=>{this.overlays[e]=t.target.checked,this.syncOverlayVisibility()});this.root.querySelector(`[data-lab='latency']`).addEventListener(`change`,e=>{this.latencyMs=Math.max(0,Math.min(500,Number(e.target.value)))}),this.root.querySelector(`[data-lab='metrics']`).addEventListener(`click`,()=>this.exportMetrics())}advance(){if(!this.playing||this.replay===null)return;let e=this.replay.ticks.length-1;if(!(this.virtualTick>=e)){for(this.carry+=this.speed;this.carry>=1&&this.virtualTick0?this.pendingQueue.push({at:performance.now()+this.latencyMs,tick:t}):this.renderer?.push(t.snapshot.payload))}drainLatencyQueue(){let e=performance.now();for(let t=this.pendingQueue.length-1;t>=0;--t){let n=this.pendingQueue[t];n.at<=e&&(this.renderer?.push(n.tick.snapshot.payload),this.pendingQueue.splice(t,1))}}seek(e,t=!0){if(this.replay===null||this.renderer===null)return;let n=Math.max(0,Math.min(e,this.replay.ticks.length-1));for(let e=0;e<=n;e+=1)this.renderer.push(this.replay.ticks[e].snapshot.payload),e>=n-15&&this.renderer.labEffects.update(1/30);this.virtualTick=n,this.renderOnSeek=t}renderOnSeek=!0;renderCurrentTick(e){if(this.replay===null||this.renderer===null)return;this.drainLatencyQueue(),this.renderer.labFrame(this.virtualTick/this.replay.tick_rate,e??this.renderOnSeek),this.renderer.labFrame((this.virtualTick+.5)/this.replay.tick_rate,e??this.renderOnSeek),this.updateOverlays();let t=this.replay.ticks[this.virtualTick]?.snapshot.payload.phase??``;this.setStatus(`tick ${this.virtualTick}/${this.replay.ticks.length-1} · ${t} · ${this.speed}×`)}buildOverlays(){let e=this.renderer;if(e===null)return;let t=new M_({color:8257448,depthTest:!1,transparent:!0,opacity:.9});for(let n of e.labRigs){let r=new Og;r.setAttribute(`position`,new pg(new Float32Array(uV.length*6),3));let i=new W_(r,t);i.frustumCulled=!1,i.renderOrder=20,e.labScene.add(i),this.skeletonLines.push(i);let a=new t_(new av(.13,.16,4,8),new Ug({color:16735581,wireframe:!0,transparent:!0,opacity:.85,depthTest:!1}));a.renderOrder=21,a.position.y=.12,(n.getObjectByName(_j.head??`head`)??n).add(a),this.hurtboxMeshes.push(a);let o=new t_(new av(.21,.34,4,8),new Ug({color:16758877,wireframe:!0,transparent:!0,opacity:.7,depthTest:!1}));o.renderOrder=21,o.position.y=.16,(n.getObjectByName(_j.chest??`chest`)??n).add(o),this.hurtboxMeshes.push(o);for(let e of[`gloveL`,`gloveR`]){let t=new t_(new Vv(.11,10,8),new Ug({color:6141183,wireframe:!0,transparent:!0,opacity:.85,depthTest:!1}));t.renderOrder=22,(n.getObjectByName(_j[e]??e)??n).add(t),this.hitboxMeshes.push(t)}}this.syncOverlayVisibility()}syncOverlayVisibility(){for(let e of this.skeletonLines)e.visible=this.overlays.skeleton;for(let e of this.hurtboxMeshes)e.visible=this.overlays.hurtbox;for(let e of this.hitboxMeshes)e.visible=this.overlays.hitbox}updateOverlays(){let e=this.renderer;if(e!==null)for(let[t,n]of e.labRigs.entries()){let e=this.skeletonLines[t];if(e===void 0||!e.visible)continue;let r=e.geometry.getAttribute(`position`),i=new J,a=new J;uV.forEach(([e,t],o)=>{let s=n.getObjectByName(e),c=n.getObjectByName(t);s===void 0||c===void 0||(s.getWorldPosition(i),c.getWorldPosition(a),r.setXYZ(o*2,i.x,i.y,i.z),r.setXYZ(o*2+1,a.x,a.y,a.z))}),r.needsUpdate=!0}}jointWorld(e,t){let n=(this.renderer?.labRigs[e])?.getObjectByName(_j[t]??t);return n==null?null:n.getWorldPosition(new J)}exportMetrics(){if(this.replay===null)return;let e={contactAlignment:[],maxRootStepMeters:0,footSlideMeters:0,phaseDriftTicks:0};for(let t of this.replay.ticks){let n=t.snapshot.payload.events.find(e=>[`hit`,`counter_hit`,`block`].includes(e.kind)),r=t.snapshot.payload.fighters[0].action_hand;if(n===void 0||r===null)continue;let i=Math.min(t.tick+1,this.replay.ticks.length-1);this.seek(i,!1),this.renderCurrentTick(!1);let a=this.jointWorld(0,r===`left`?`gloveL`:`gloveR`),o=this.jointWorld(1,`head`),c=this.jointWorld(1,`chest`);a!==null&&o!==null&&c!==null&&e.contactAlignment.push({tick:t.tick,kind:n.kind,gloveToHeadMeters:Number(Math.max(0,a.distanceTo(o)-s.head.radius).toFixed(4)),gloveToTorsoMeters:Number(Math.max(0,a.distanceTo(c)-s.torso.radius).toFixed(4))})}this.seek(0,!1);let t=null,n=null;for(let r of this.replay.ticks){this.seek(r.tick,!1),this.renderCurrentTick(!1);let i=this.renderer.labRigs[0].position.x;n!==null&&(e.maxRootStepMeters=Math.max(e.maxRootStepMeters,Math.abs(i-n))),n=i;let a=r.snapshot.payload.fighters[0],o=Math.hypot(a.velocity_x,a.velocity_y),s=this.replay.ticks.slice(Math.max(0,r.tick-30),r.tick+1).some(e=>e.snapshot.payload.fighters[0].is_downed);if(o===0&&!a.is_downed&&!s&&r.snapshot.payload.phase===`fight`){let n=[this.jointWorld(0,`ankleL`),this.jointWorld(0,`ankleR`)].filter(e=>e!==null);t!==null&&n.length===2&&(e.footSlideMeters=Math.max(e.footSlideMeters,Number(Math.max(n[0].distanceTo(t[0]),n[1].distanceTo(t[1])).toFixed(4)))),t=n}else t=null}this.metricsEl.textContent=` contacts: ${e.contactAlignment.map(e=>`${e.kind}@t${e.tick} glove-head ${e.gloveToHeadMeters}m`).join(` · `)} · max root step ${e.maxRootStepMeters.toFixed(3)}m · foot slide ${e.footSlideMeters}m`,window.__labDebug={roots:this.renderer.labRigs.map(e=>e.position.toArray().map(e=>Number(e.toFixed(3)))),graphsActive:this.renderer.graphs!==null,heads:this.renderer.labRigs.map(e=>{let t=e.getObjectByName(_j.head??`head`);return t===void 0?null:t.getWorldPosition(new J).toArray().map(e=>Number(e.toFixed(3)))})};let r=new Blob([JSON.stringify(e,null,1)],{type:`application/json`}),i=document.createElement(`a`);i.href=URL.createObjectURL(r),i.download=`hands-lab-metrics.json`,i.click(),URL.revokeObjectURL(i.href)}setStatus(e){this.statusEl.textContent!==e&&(this.statusEl.textContent=e)}destroy(){this.destroyed||(this.destroyed=!0,cancelAnimationFrame(this.raf),this.renderer?.destroy(),this.root.replaceChildren())}};function fV(e){let t=new dV(e);return t.start().catch(t=>{e.querySelector(`[data-lab-status]`).textContent=`lab failed: ${String(t)}`}),()=>t.destroy()}var pV={referee:{outfit:Sj,look:ZD.referee},corner_blue:{outfit:Cj,look:ZD.blueCorner},corner_red:{outfit:wj,look:ZD.redCorner},cutman:{outfit:Tj,look:ZD.blueCutman}},mV=()=>({player_id:`lab`,x:0,y:0,facing:1,facing_x:0,facing_y:-1e3,velocity_x:0,velocity_y:0,stance:`orthodox`,style:`balanced`,defense:`none`,stamina:1e3,maximum_stamina:1e3,conditioning:1e3,guard:700,guard_broken:!1,poise:600,trauma:{head:0,body:0,left_eye:0,right_eye:0,left_cut:0,right_cut:0,swelling:0,bleeding:0},knockdowns:0,warnings:0,deductions:0,stunned_ticks:0,is_downed:!1,action:null,action_hand:null,action_target:null,action_power:null,action_id:null,action_key:null,action_start_tick:0,action_startup_ticks:0,action_active_ticks:0,action_recovery_ticks:0,action_contact_tick:null,queued_actions:0,clinch_startup_ticks:0,clinch_ticks:0,is_foul_recovery_target:!1,taunt_ticks:0,corner_choice:null,get_up_prompt:null,get_up_meter:0,get_up_required:0,get_up_count:0,get_up_window_start_tick:0,get_up_window_end_tick:0,last_input_sequence:-1}),hV=.45,gV=.3,_V={face:[.25,1.55,1],portrait:[.12,1.62,.62],eyes:[-.2,1.65,.44],floor:[1.62,.3,.18],hand:[.55,1.05,.75],front:[0,1.35,3.4],side:[3.4,1.3,.2],"three-quarter":[2.4,1.5,2.6],top:[.01,4.5,.6],back:[.2,1.4,-3.4],low:[1.8,.5,2.6],wide:[3.4,2.7,3.6]},vV=class{root;renderer;scene=new Ph;camera;graph=null;boxer=null;trails=[];trailGlove=new J;treatEye=new J(0,1.22,.78);treatFacing=new J(0,0,-1);treatTarget=new J;skeletonHelper=null;effects=null;shieldClock=1/0;shieldEvent=0;mouth=new J;headTurn=new Dm;burstRim=new Float32Array;burstStump={position:new J,quaternion:new Dm,across:new J,scratch:new J};raf=0;previous=performance.now();elapsed=0;params=new URLSearchParams(window.location.search);reactionFired=!1;statusEl;constructor(e){this.root=e,e.innerHTML=`
HANDS POSE LABloading…
-
`,this.statusEl=e.querySelector(`[data-status]`);let t=e.querySelector(`[data-canvas]`);this.renderer=new PC({canvas:t,antialias:!0,preserveDrawingBuffer:!0}),this.renderer.setPixelRatio(Math.min(2,window.devicePixelRatio||1)),this.renderer.shadowMap.enabled=!0,this.renderer.toneMapping=4,this.camera=new My(38,1,.1,60);let n=Oz[this.params.get(`cam`)??`three-quarter`]??Oz[`three-quarter`];this.camera.position.set(...n),this.params.get(`cam`)===`hand`?this.camera.lookAt(.27,.84,.12):this.params.get(`cam`)===`portrait`?this.camera.lookAt(0,1.6,.05):this.params.get(`cam`)===`eyes`?this.camera.lookAt(.01,1.6,.06):this.params.get(`cam`)===`floor`?this.camera.lookAt(1.3,0,-.24):this.params.get(`cam`)===`wide`?this.camera.lookAt(0,.45,-.2):this.camera.lookAt(0,this.params.get(`cam`)===`face`?1.5:1,0),this.setupLighting()}setupLighting(){this.scene.background=new Y(`#101318`),this.scene.add(new by(`#8fa0c8`,`#1a1c22`,1.4));let e=new zy(`#fff1dc`,2.6);e.position.set(2.5,5,3),e.castShadow=!0,e.shadow.mapSize.set(2048,2048),this.scene.add(e);let t=new zy(`#9fb8ff`,1.2);t.position.set(-3,3,-3),this.scene.add(t);let n=new Ig(new V_(4,48),new Pv({color:`#3c4a7a`,roughness:.9}));n.rotation.x=-Math.PI/2,n.receiveShadow=!0,this.scene.add(n);let r=new mb(4,16,8952251,3358810);r.position.y=.002,this.scene.add(r)}synthesize(e){let t=this.params.get(`pose`)??`idle`,n=this.params.get(`stance`)===`southpaw`?`southpaw`:`orthodox`,r={...Tz(),stance:n},i=this.params.get(`trauma`);i===`light`&&(r.trauma={head:220,body:260,left_eye:190,right_eye:60,left_cut:40,right_cut:0,swelling:120,bleeding:60}),i===`heavy`&&(r.trauma={head:900,body:700,left_eye:720,right_eye:380,left_cut:520,right_cut:190,swelling:620,bleeding:520}),i===`cut`&&(r.trauma={head:420,body:120,left_eye:380,right_eye:120,left_cut:300,right_cut:0,swelling:260,bleeding:380});let a=i?.split(`,`).map(Number)??[];if(a.length===8&&a.every(Number.isFinite)){let[e,t,n,i,o,s,c,l]=a;r.trauma={head:e,body:t,left_eye:n,right_eye:i,left_cut:o,right_cut:s,swelling:c,bleeding:l}}let o={...Tz(),player_id:`other`,x:0,y:-150,facing_x:0,facing_y:1e3},s=Math.floor(e*30),c=/^(jab|straight|hook|uppercut)_(left|right)(_body)?(_power)?$/.exec(t);if(c!==null){let e=c[1],t=c[2],n=c[3]===`_body`?`body`:`head`,i=c[4]===`_power`?`power`:`normal`,a={jab:[4,2,7],straight:[6,2,10],hook:[7,3,12],uppercut:[8,2,13]}[e],o=a[0]+a[1]+a[2],l=Math.floor(s/(o+12))*(o+12)+6;s>=l&&s=Ez&&t<3.4,r.stunned_ticks=t=Dz&&(t===null||e{let i=Math.min(.05,(r-this.previous)/1e3);this.previous=r,t===null?(this.elapsed=e===null?this.elapsed+i:Number(e),this.step(e===null?i:1/60)):this.step(0),this.renderer.render(this.scene,this.camera),this.raf=requestAnimationFrame(n)};this.raf=requestAnimationFrame(n)}step(e){let t=this.graph;if(t===null)return;let n=this.renderer.domElement.clientWidth,r=this.renderer.domElement.clientHeight;n>0&&r>0&&(this.renderer.domElement.width!==n||this.renderer.domElement.height!==r)&&(this.renderer.setSize(n,r,!1),this.camera.aspect=n/r,this.camera.updateProjectionMatrix());let{fighter:i,opponent:a,sampledTick:o,head:s}=this.synthesize(this.elapsed),c=this.params.get(`pose`)??``;if(/^(hit|block)_/.test(c)){let n=this.elapsed%1.6;if(this.params.has(`freeze`)?!this.reactionFired&&this.elapsed>=.02:n=Dz-.02){this.reactionFired=!0;let e=this.params.get(`hit`)??`straight`,n=e===`body`?`hook`:e;t.react(`hit`,e===`body`?`body`:`head`,1,n,this.params.get(`hand`)===`left`?`left`:`right`,Number(this.params.get(`amount`)??420))}this.params.get(`pose`)===`knockdown`&&this.params.get(`fall`)===`prone`&&this.elapsed%6=.02:this.elapsed%1.63)){this.shieldClock=0,this.shieldEvent+=1;let e=this.boxer.bone(`head`);e.getWorldQuaternion(this.headTurn),e.getWorldPosition(this.mouth).add(new J(0,.045,.12).applyQuaternion(this.headTurn)),this.effects.ejectMouthpiece(0,this.mouth,this.headTurn,1,this.shieldEvent,1920728,!0)}this.effects?.update(e);for(let[t,n]of[`gloveL`,`gloveR`].entries())this.boxer.rig.bones[n].getWorldPosition(this.trailGlove),this.trails[t]?.update(this.trailGlove,e,this.camera.position,e>0);window.__poseLab={head:this.boxer.bone(`head`).getWorldPosition(new J).toArray().map(e=>Number(e.toFixed(3))),gloveL:this.boxer.bone(`gloveL`).getWorldPosition(new J).toArray().map(e=>Number(e.toFixed(3))),gloveR:this.boxer.bone(`gloveR`).getWorldPosition(new J).toArray().map(e=>Number(e.toFixed(3))),ankleL:this.boxer.bone(`ankleL`).getWorldPosition(new J).toArray().map(e=>Number(e.toFixed(3))),ankleR:this.boxer.bone(`ankleR`).getWorldPosition(new J).toArray().map(e=>Number(e.toFixed(3))),kneeL:this.boxer.bone(`kneeL`).getWorldPosition(new J).toArray().map(e=>Number(e.toFixed(3))),kneeR:this.boxer.bone(`kneeR`).getWorldPosition(new J).toArray().map(e=>Number(e.toFixed(3))),metrics:this.boxer.rig.metrics,mouthpiece:this.effects!==null&&this.effects.mouthpiecePosition(0,this.mouth)?this.mouth.toArray().map(e=>Number(e.toFixed(3))):null}}destroy(){cancelAnimationFrame(this.raf),this.effects?.dispose(),this.graph?.dispose(),this.renderer.dispose(),this.root.replaceChildren()}};function Az(e){let t=new kz(e);return t.start().catch(()=>void 0),()=>t.destroy()}var jz=document.querySelector(`#app`);if(jz===null)throw Error(`app_root_missing`);var Mz,Nz=new URLSearchParams(window.location.search),Pz=window.location.pathname.endsWith(`/hands/lab`)||Nz.get(`lab`)===`1`;if(window.location.pathname.endsWith(`/hands/model-lab`)||Nz.get(`model-lab`)===`1`)Mz=Az(jz);else if(Pz)Mz=Cz(jz);else{let e=new yz(jz);e.start(),Mz=()=>e.destroy()}window.addEventListener(`pagehide`,Mz,{once:!0}); \ No newline at end of file +`,this.statusEl=e.querySelector(`[data-status]`);let t=e.querySelector(`[data-canvas]`);this.renderer=new $C({canvas:t,antialias:!0,preserveDrawingBuffer:!0}),this.renderer.setPixelRatio(Math.min(2,window.devicePixelRatio||1)),this.renderer.shadowMap.enabled=!0,this.renderer.toneMapping=4,this.camera=new Zy(38,1,.1,60);let n=_V[this.params.get(`cam`)??`three-quarter`]??_V[`three-quarter`];this.camera.position.set(...n),this.params.get(`cam`)===`hand`?this.camera.lookAt(.27,.84,.12):this.params.get(`cam`)===`portrait`?this.camera.lookAt(0,1.6,.05):this.params.get(`cam`)===`eyes`?this.camera.lookAt(.01,1.6,.06):this.params.get(`cam`)===`floor`?this.camera.lookAt(1.3,0,-.24):this.params.get(`cam`)===`wide`?this.camera.lookAt(0,.45,-.2):this.camera.lookAt(0,this.params.get(`cam`)===`face`?1.5:1,0),this.setupLighting()}setupLighting(){this.scene.background=new Y(`#101318`),this.scene.add(new zy(`#8fa0c8`,`#1a1c22`,1.4));let e=new ib(`#fff1dc`,2.6);e.position.set(2.5,5,3),e.castShadow=!0,e.shadow.mapSize.set(2048,2048),this.scene.add(e);let t=new ib(`#9fb8ff`,1.2);t.position.set(-3,3,-3),this.scene.add(t);let n=new t_(new ov(4,48),new $v({color:`#3c4a7a`,roughness:.9}));n.rotation.x=-Math.PI/2,n.receiveShadow=!0,this.scene.add(n);let r=new Nb(4,16,8952251,3358810);r.position.y=.002,this.scene.add(r)}synthesize(e){let t=this.params.get(`pose`)??`idle`,n=this.params.get(`stance`)===`southpaw`?`southpaw`:`orthodox`,r={...mV(),stance:n},i=this.params.get(`trauma`);i===`light`&&(r.trauma={head:220,body:260,left_eye:190,right_eye:60,left_cut:40,right_cut:0,swelling:120,bleeding:60}),i===`heavy`&&(r.trauma={head:900,body:700,left_eye:720,right_eye:380,left_cut:520,right_cut:190,swelling:620,bleeding:520}),i===`cut`&&(r.trauma={head:420,body:120,left_eye:380,right_eye:120,left_cut:300,right_cut:0,swelling:260,bleeding:380});let a=i?.split(`,`).map(Number)??[];if(a.length===8&&a.every(Number.isFinite)){let[e,t,n,i,o,s,c,l]=a;r.trauma={head:e,body:t,left_eye:n,right_eye:i,left_cut:o,right_cut:s,swelling:c,bleeding:l}}let o={...mV(),player_id:`other`,x:0,y:-150,facing_x:0,facing_y:1e3},s=Math.floor(e*30),c=/^(jab|straight|hook|uppercut)_(left|right)(_body)?(_power)?$/.exec(t);if(c!==null){let e=c[1],t=c[2],n=c[3]===`_body`?`body`:`head`,i=c[4]===`_power`?`power`:`normal`,a={jab:[4,2,7],straight:[6,2,10],hook:[7,3,12],uppercut:[8,2,13]}[e],o=a[0]+a[1]+a[2],l=Math.floor(s/(o+12))*(o+12)+6;s>=l&&s=hV&&t<3.4,r.stunned_ticks=t=gV&&(t===null||e{let i=Math.min(.05,(r-this.previous)/1e3);this.previous=r,t===null?(this.elapsed=e===null?this.elapsed+i:Number(e),this.step(e===null?i:1/60)):this.step(0),this.renderer.render(this.scene,this.camera),this.raf=requestAnimationFrame(n)};this.raf=requestAnimationFrame(n)}step(e){let t=this.graph;if(t===null)return;let n=this.renderer.domElement.clientWidth,r=this.renderer.domElement.clientHeight;n>0&&r>0&&(this.renderer.domElement.width!==n||this.renderer.domElement.height!==r)&&(this.renderer.setSize(n,r,!1),this.camera.aspect=n/r,this.camera.updateProjectionMatrix());let{fighter:i,opponent:a,sampledTick:o,head:s}=this.synthesize(this.elapsed),c=this.params.get(`pose`)??``;if(/^(hit|block)_/.test(c)){let n=this.elapsed%1.6;if(this.params.has(`freeze`)?!this.reactionFired&&this.elapsed>=.02:n=gV-.02){this.reactionFired=!0;let e=this.params.get(`hit`)??`straight`,n=e===`body`?`hook`:e;t.react(`hit`,e===`body`?`body`:`head`,1,n,this.params.get(`hand`)===`left`?`left`:`right`,Number(this.params.get(`amount`)??420))}this.params.get(`pose`)===`knockdown`&&this.params.get(`fall`)===`prone`&&this.elapsed%6=.02:this.elapsed%1.63)){this.shieldClock=0,this.shieldEvent+=1;let e=this.boxer.bone(`head`);e.getWorldQuaternion(this.headTurn),e.getWorldPosition(this.mouth).add(new J(0,.045,.12).applyQuaternion(this.headTurn)),this.effects.ejectMouthpiece(0,this.mouth,this.headTurn,1,this.shieldEvent,1920728,!0)}this.effects?.update(e);for(let[t,n]of[`gloveL`,`gloveR`].entries())this.boxer.rig.bones[n].getWorldPosition(this.trailGlove),this.trails[t]?.update(this.trailGlove,e,this.camera.position,e>0);window.__poseLab={head:this.boxer.bone(`head`).getWorldPosition(new J).toArray().map(e=>Number(e.toFixed(3))),gloveL:this.boxer.bone(`gloveL`).getWorldPosition(new J).toArray().map(e=>Number(e.toFixed(3))),gloveR:this.boxer.bone(`gloveR`).getWorldPosition(new J).toArray().map(e=>Number(e.toFixed(3))),ankleL:this.boxer.bone(`ankleL`).getWorldPosition(new J).toArray().map(e=>Number(e.toFixed(3))),ankleR:this.boxer.bone(`ankleR`).getWorldPosition(new J).toArray().map(e=>Number(e.toFixed(3))),kneeL:this.boxer.bone(`kneeL`).getWorldPosition(new J).toArray().map(e=>Number(e.toFixed(3))),kneeR:this.boxer.bone(`kneeR`).getWorldPosition(new J).toArray().map(e=>Number(e.toFixed(3))),metrics:this.boxer.rig.metrics,mouthpiece:this.effects!==null&&this.effects.mouthpiecePosition(0,this.mouth)?this.mouth.toArray().map(e=>Number(e.toFixed(3))):null}}destroy(){cancelAnimationFrame(this.raf),this.effects?.dispose(),this.graph?.dispose(),this.renderer.dispose(),this.root.replaceChildren()}};function yV(e){let t=new vV(e);return t.start().catch(()=>void 0),()=>t.destroy()}var bV=document.querySelector(`#app`);if(bV===null)throw Error(`app_root_missing`);var xV,SV=new URLSearchParams(window.location.search),CV=window.location.pathname.endsWith(`/hands/lab`)||SV.get(`lab`)===`1`;if(window.location.pathname.endsWith(`/hands/model-lab`)||SV.get(`model-lab`)===`1`)xV=yV(bV);else if(CV)xV=fV(bV);else{let e=new cV(bV);e.start(),xV=()=>e.destroy()}window.addEventListener(`pagehide`,xV,{once:!0}); \ No newline at end of file diff --git a/src/intelstream/hands/types.py b/src/intelstream/hands/types.py index e7417ff1..789505af 100644 --- a/src/intelstream/hands/types.py +++ b/src/intelstream/hands/types.py @@ -83,6 +83,7 @@ class MatchPhase(StrEnum): FIGHT = "fight" KNOCKDOWN = "knockdown" FOUL_RECOVERY = "foul_recovery" + REFEREE_DOWN = "referee_down" REST = "rest" COMPLETE = "complete" @@ -91,6 +92,7 @@ class FinishMethod(StrEnum): KO = "ko" FLASH_KO = "flash_ko" TKO = "tko" + # The engine no longer stops a bout on a cut; bouts recorded before that keep this method. DOCTOR_STOPPAGE = "doctor_stoppage" DISQUALIFICATION = "disqualification" DECISION = "decision" @@ -150,6 +152,19 @@ class TraumaSnapshot: bleeding: int +@dataclass(frozen=True, slots=True) +class RefereeSnapshot: + x: int + y: int + facing_x: int + facing_y: int + velocity_x: int + velocity_y: int + stunned_ticks: int + alive: bool + trauma: TraumaSnapshot + + @dataclass(frozen=True, slots=True) class FighterSnapshot: player_id: str @@ -167,6 +182,7 @@ class FighterSnapshot: maximum_stamina: int conditioning: int guard: int + guard_broken: bool poise: int trauma: TraumaSnapshot knockdowns: int @@ -254,6 +270,7 @@ class EngineSnapshot: round_number: int phase_ticks_remaining: int fighters: tuple[FighterSnapshot, FighterSnapshot] + referee: RefereeSnapshot events: tuple[CombatEvent, ...] result: MatchResult | None checksum: str diff --git a/tests/test_hands/test_balance.py b/tests/test_hands/test_balance.py index 0d2e2616..9e6fe8cd 100644 --- a/tests/test_hands/test_balance.py +++ b/tests/test_hands/test_balance.py @@ -19,10 +19,14 @@ GET_UP_STAMINA, GET_UP_TRAUMA_DIVISOR, GUARD_BLOCK_MINIMUM, + GUARD_BREAK_STUN_TICKS, GUARD_DAMAGE_PERCENT, + GUARD_HELD_DRAIN, + GUARD_REARM, HEAD_TRAUMA_PER_DAMAGE_PERCENT, JAB_CUT_PERCENT, JAB_SWELLING_PERCENT, + MAX_GUARD, MAX_POISE, POISE_CEILING_FLOOR, POISE_DAMAGE_PERCENT, @@ -37,11 +41,12 @@ poise_ceiling, ) from intelstream.hands.types import ( + ActionKind, CombatEvent, DefensivePose, - FinishMethod, Hand, MatchPhase, + MovementAction, Power, PunchAction, PunchClass, @@ -252,24 +257,31 @@ def test_a_block_that_wears_the_guard_too_thin_to_stop_a_punch_breaks_it() -> No assert two.defense is DefensivePose.GUARD_HIGH assert "hit" in kinds(events) assert "block" not in kinds(events) and "guard_break" not in kinds(events) - # Once it has come back past the minimum, it blocks again. - while two.guard < GUARD_BLOCK_MINIMUM: - engine.step() + assert two.guard_broken + # It only comes back lowered, and blocks again once it is back past the rearm mark. + sequence = 50 + while two.guard < GUARD_REARM: + sequence += 1 + engine.step({"two": command(sequence, defense=DefensivePose.NONE)}) + assert not two.guard_broken events = land(engine, punch(PunchClass.JAB, hand=Hand.LEFT), defense=DefensivePose.GUARD_HIGH) - assert "block" in kinds(events) + assert {"block", "perfect_block"} & set(kinds(events)) def test_a_blocked_punch_wears_the_guard_by_its_share() -> None: engine = make_engine() settled_guard(engine, DefensivePose.GUARD_HIGH) before = engine.fighter("two").guard + since = engine.tick land(engine, punch(PunchClass.STRAIGHT), defense=DefensivePose.GUARD_HIGH) rule = PUNCH_RULES[(PunchClass.STRAIGHT, Target.HEAD, Power.NORMAL)] - worn = rule.guard_damage * GUARD_DAMAGE_PERCENT // 100 + worn = rule.guard_damage * GUARD_DAMAGE_PERCENT // 100 + GUARD_HELD_DRAIN * ( + engine.tick - since + ) assert before - engine.fighter("two").guard in range(worn - 3, worn + 1) -def test_a_held_guard_comes_back_but_slower_than_a_rested_one() -> None: +def test_a_held_guard_wears_down_while_a_lowered_one_comes_back() -> None: held = make_engine() held.fighter("two").guard = 300 held.step({"two": command(1, defense=DefensivePose.GUARD_HIGH)}) @@ -278,7 +290,35 @@ def test_a_held_guard_comes_back_but_slower_than_a_rested_one() -> None: for _ in range(24): held.step() rested.step() - assert 300 < held.fighter("two").guard < rested.fighter("two").guard + assert held.fighter("two").guard == 300 - GUARD_HELD_DRAIN * 25 + assert rested.fighter("two").guard > 300 + + +def test_a_guard_held_up_until_it_gives_out_breaks_and_stops_nothing() -> None: + """Nobody holds a guard up forever: it gives out as a break, with the break's stun, and stays + broken while it is held.""" + engine = make_engine(round_ticks=2000) + two = engine.fighter("two") + engine.step({"two": command(1, defense=DefensivePose.GUARD_HIGH)}) + broke_at = None + for _ in range(MAX_GUARD // GUARD_HELD_DRAIN + 10): + snapshot = engine.step() + breaks = [event for event in snapshot.events if event.kind == "guard_break"] + if breaks: + assert [(event.actor_id, event.target_id, event.detail) for event in breaks] == [ + ("one", "two", "held") + ] + broke_at = engine.tick + break + assert broke_at is not None + # From a full guard, a little over seven seconds of holding it. + assert broke_at == (MAX_GUARD - GUARD_BLOCK_MINIMUM) // GUARD_HELD_DRAIN + 1 + assert two.guard_broken and two.stunned_ticks == GUARD_BREAK_STUN_TICKS + assert snapshot.fighters[1].guard_broken + while two.stunned_ticks: + engine.step() + events = land(engine, punch(PunchClass.JAB, hand=Hand.LEFT), defense=DefensivePose.GUARD_HIGH) + assert "hit" in kinds(events) and "block" not in kinds(events) def test_a_beating_lowers_the_poise_a_fighter_comes_back_to() -> None: @@ -348,12 +388,8 @@ def test_a_jab_seldom_splits_the_skin_and_swells_the_face_less() -> None: assert trauma.swelling == swelling < damage * SWELLING_PER_DAMAGE_PERCENT // 100 -def test_by_default_the_doctor_lets_a_bad_cut_and_a_swollen_face_box_on() -> None: - defaults = EngineConfig() - engine = make_engine( - doctor_cut_threshold=defaults.doctor_cut_threshold, - doctor_swelling_threshold=defaults.doctor_swelling_threshold, - ) +def test_a_bad_cut_and_a_swollen_face_box_on() -> None: + engine = make_engine() trauma = engine.fighter("two").trauma trauma.left_eye, trauma.left_cut, trauma.swelling = 500, 740, 850 land(engine, punch(PunchClass.STRAIGHT)) @@ -365,9 +401,9 @@ def test_by_default_the_doctor_lets_a_bad_cut_and_a_swollen_face_box_on() -> Non def test_a_one_sided_three_rounder_leaves_a_visible_cut( seed: int, monkeypatch: pytest.MonkeyPatch ) -> None: - """Three rounds of a skilled player outboxing the rookie mark the loser's face, short of the - doctor: a brow cut the client draws in full (220), an eye past where it starts to close (330) - and swollen shut at least once. Marking slowed so far once that faces stayed clean.""" + """Three rounds of a skilled player outboxing the rookie mark the loser's face: a brow cut the + client draws in full (220), an eye past where it starts to close (330) and swollen shut at + least once. Marking slowed so far once that faces stayed clean.""" # Nothing here reads a checksum, and hashing every tick is most of what a bout costs. monkeypatch.setattr(BoxingEngine, "_checksum", lambda _engine, _fighters: "") styles = bout_styles("skilled", "rookie", seed) @@ -398,7 +434,6 @@ def test_a_one_sided_three_rounder_leaves_a_visible_cut( eyes_shut += sum(event.kind == "eye_shut" for event in snapshot.events) assert engine.result.winner_id == "one" - assert engine.result.finish_method is not FinishMethod.DOCTOR_STOPPAGE assert worst_cut >= 220 assert worst_eye >= 330 assert eyes_shut >= 1 @@ -444,3 +479,106 @@ def test_getting_up_leaves_enough_stamina_to_stand_and_is_harder_for_a_battered_ engine.step() assert downed.stamina >= min(downed.maximum_stamina, GET_UP_STAMINA) assert downed.stamina > BODY_COLLAPSE_STAMINA + + +def test_a_guard_held_into_a_clinch_is_left_as_it_was_through_the_hold() -> None: + """Tied up, a fighter cannot change his pose, so the guard he had up neither wears down nor + breaks in the hold, and nothing from it carries out past the break.""" + engine = make_engine(round_ticks=2000) + one, two = engine.fighter("one"), engine.fighter("two") + two.guard = GUARD_BLOCK_MINIMUM + 70 + engine.step( + { + "one": command(1, action=MovementAction(ActionKind.CLINCH)), + "two": command(1, defense=DefensivePose.GUARD_HIGH), + } + ) + while not one.clinch_ticks: + engine.step() + held = two.guard + engine.step({"two": command(2)}) + while one.clinch_ticks: + snapshot = engine.step() + assert "guard_break" not in kinds(list(snapshot.events)) + if one.clinch_ticks: + assert two.guard == held + assert not two.guard_broken and two.stunned_ticks == 0 + + +def test_a_parry_wins_the_exchange_even_when_it_wears_the_guard_thin() -> None: + """A perfect block of a power hook by a guard too thin to take its wear staggers the puncher + and leaves the parrier free to answer; held on past the counter window, the guard gives out.""" + engine = make_engine(round_ticks=2000) + one, two = engine.fighter("one"), engine.fighter("two") + two.guard = GUARD_BLOCK_MINIMUM + 20 + engine.step( + {"one": command(1, action=punch(PunchClass.HOOK, hand=Hand.LEFT, power=Power.POWER))} + ) + attack = one.attack + assert attack is not None + contact = attack.start_tick + attack.rule.startup + while engine.tick < contact - 2: + engine.step() + engine.step({"two": command(1, defense=DefensivePose.GUARD_HIGH)}) + events: list[CombatEvent] = [] + while engine.tick < contact: + events.extend(engine.step().events) + assert "perfect_block" in kinds(events) and "parry" in kinds(events) + assert "guard_break" not in kinds(events) + assert two.guard < GUARD_BLOCK_MINIMUM + assert two.stunned_ticks == 0 and not two.guard_broken + assert one.stunned_ticks > 0 + window = two.counter_ticks + assert window > 0 + broke = None + for _ in range(window + 20): + snapshot = engine.step() + if "guard_break" in kinds(list(snapshot.events)): + broke = engine.tick - contact + break + assert broke == window + + +def test_a_lowered_guard_still_comes_back_through_a_clinch() -> None: + engine = make_engine(round_ticks=2000) + one, two = engine.fighter("one"), engine.fighter("two") + two.guard = GUARD_BLOCK_MINIMUM + 10 + engine.step({"one": command(1, action=MovementAction(ActionKind.CLINCH))}) + while not one.clinch_ticks: + engine.step() + before = two.guard + while one.clinch_ticks > 1: + engine.step() + assert two.guard > before + 20 + + +def test_a_slip_buys_a_worn_guard_no_time_only_a_parry_does() -> None: + """A slip opens a counter window too, but a worn guard raised after it gives out as soon as it + would have without the slip.""" + + def held_until_broken(slipped: bool) -> int: + engine = make_engine(round_ticks=2000) + two = engine.fighter("two") + if slipped: + engine.step( + { + "one": command(1, action=punch(PunchClass.JAB, hand=Hand.LEFT)), + "two": command(1, action=MovementAction(ActionKind.SLIP_RIGHT)), + } + ) + for _ in range(20): + if "evade" in kinds(list(engine.step().events)): + break + assert two.counter_ticks > 0 + while two.evasion_ticks: + engine.step() + two.guard = GUARD_BLOCK_MINIMUM + 2 + start = engine.tick + events = list(engine.step({"two": command(5, defense=DefensivePose.GUARD_HIGH)}).events) + for _ in range(30): + if "guard_break" in kinds(events): + return engine.tick - start + events = list(engine.step().events) + raise AssertionError("the guard never broke") + + assert held_until_broken(slipped=True) == held_until_broken(slipped=False) diff --git a/tests/test_hands/test_cpu.py b/tests/test_hands/test_cpu.py index 2dbe82d0..022e5149 100644 --- a/tests/test_hands/test_cpu.py +++ b/tests/test_hands/test_cpu.py @@ -28,12 +28,13 @@ cpu_style, styled_profile, ) -from intelstream.hands.engine import EVASION_TICKS, BoxingEngine, EngineConfig +from intelstream.hands.engine import AttackState, BoxingEngine, EngineConfig from intelstream.hands.rules import ( BLIND_SIDE_EYE_THRESHOLD, BODY_COLLAPSE_STAMINA, BODY_COLLAPSE_TRAUMA, COMPATIBLE_COMBO_CHAINS, + EVASION_TICKS, PUNCH_RULES, poise_ceiling, ) @@ -84,6 +85,14 @@ def throw(engine: BoxingEngine, action: PunchAction, sequence: int = 1) -> None: engine.submit_input("human", InputCommand(sequence, engine.tick, actions=(action,))) +def slowed(attack: AttackState | None, startup: int) -> AttackState: + """Stretches a punch's startup to `startup` ticks: every punch now lands sooner than a + reaction, and this one is read long before it lands.""" + assert attack is not None + attack.rule = replace(attack.rule, startup=startup) + return attack + + def run(engine: BoxingEngine, brain: CpuBrain, ticks: int) -> list[InputCommand]: commands: list[InputCommand] = [] for _ in range(ticks): @@ -163,15 +172,12 @@ def test_each_punch_is_noticed_after_a_reaction_of_its_own(level: CpuLevel) -> N for seed in range(24): engine = engine_at(150, seed=seed) engine.checksums = False - # A worn-out puncher's straight is slow enough to answer after any reaction. - engine.fighter("human").conditioning = 0 brain = CpuBrain("cpu", "human", level, seed) brain._roll = lambda _percent: True # type: ignore[method-assign] brain._attack = lambda *_args: None # type: ignore[method-assign] throw(engine, PunchAction(Hand.RIGHT, PunchClass.STRAIGHT, Target.HEAD, Power.POWER)) engine.step() - attack = engine.fighter("human").attack - assert attack is not None + attack = slowed(engine.fighter("human").attack, 30) for _ in range(30): command = brain.decide(engine) assert command is not None @@ -191,7 +197,7 @@ def test_each_punch_is_noticed_after_a_reaction_of_its_own(level: CpuLevel) -> N [ (PunchAction(Hand.RIGHT, PunchClass.STRAIGHT, Target.HEAD, Power.POWER), 120, "slip_left"), (PunchAction(Hand.LEFT, PunchClass.HOOK, Target.HEAD, Power.POWER), 105, "weave"), - (PunchAction(Hand.RIGHT, PunchClass.UPPERCUT, Target.HEAD), 95, "slip_left"), + (PunchAction(Hand.RIGHT, PunchClass.UPPERCUT, Target.HEAD, Power.POWER), 95, "slip_left"), (PunchAction(Hand.RIGHT, PunchClass.STRAIGHT, Target.HEAD, Power.POWER), 160, "pull"), ], ) @@ -242,6 +248,30 @@ def test_a_body_hook_it_cannot_duck_is_met_with_a_perfect_low_block() -> None: assert "perfect_block" in events +def test_a_broken_guard_stays_down_even_for_a_body_hook_it_would_block() -> None: + """A broken guard stops nothing until it has come back, and it only comes back lowered, so + the computer that would meet a body hook with a low block lets this one land.""" + engine = engine_at(100) + brain = always(CpuBrain("cpu", "human", CpuLevel.CHAMPION, 4)) + brain._movement = lambda *_args: (0, 0) # type: ignore[method-assign] + brain._attack = lambda *_args: None # type: ignore[method-assign] + brain._hold_guard = False + brain._guard_window_until = 1_000_000 + cpu = engine.fighter("cpu") + cpu.guard, cpu.guard_broken = 0, True + throw(engine, PunchAction(Hand.RIGHT, PunchClass.HOOK, Target.BODY, Power.POWER)) + events: list[str] = [] + for _ in range(20): + command = brain.decide(engine) + assert command is not None + assert command.defense is DefensivePose.NONE + engine.submit_input("cpu", command) + events.extend(event.kind for event in engine.step().events) + if "hit" in events: + break + assert "hit" in events and cpu.guard_broken + + def body_hook_outcome( style: FighterStyle, *, puncher_conditioning: int = 1000, perfect_roll: bool = False ) -> str: @@ -317,6 +347,8 @@ def parry_share( if tick == wait: throw(engine, PunchAction(Hand.LEFT, PunchClass.HOOK, Target.BODY, Power.POWER)) kinds = {event.kind for event in engine.step().events} + if tick == wait: + slowed(engine.fighter("human").attack, 16) met_by = kinds & {"perfect_block", "block", "hit", "counter_hit"} if met_by: met += outcome in met_by and (outcome != "hit" or "block" not in met_by) @@ -917,16 +949,16 @@ def winner(human: str, seed: int, style: FighterStyle) -> int | None: return play(human, "champion", seed, config, (FighterStyle.BALANCED, style)).winner_seat assert winner("skilled", 1, FighterStyle.COUNTER_PUNCHER) == 0 - assert winner("skilled", 1, FighterStyle.SWARMER) == 1 + assert winner("skilled", 2, FighterStyle.SWARMER) == 1 assert winner("counter", 3, FighterStyle.BOXER) == 0 - assert winner("counter", 1, FighterStyle.SWARMER) == 1 + assert winner("counter", 8, FighterStyle.SWARMER) == 1 assert winner("mash", 1, FighterStyle.BOXER) == 1 def test_over_a_connection_the_champion_is_harder_to_beat_than_the_contender() -> None: """At 50 ms, reacting to each punch as a person does, the scripted skilled player beats the - contender in most bouts and the champion in few (57% and 31% over 48 bouts; the scripted - counter-puncher 23% and 10%).""" + contender in about a third of bouts and the champion in fewer (31% and 21% over 48 bouts): + every punch now lands sooner than anyone can react, so neither computer reads many.""" lag = Lag.over(50, (6, 9)) def wins(level: str) -> int: @@ -935,7 +967,7 @@ def wins(level: str) -> int: "skilled", level, seed, EngineConfig(), bout_styles("skilled", level, seed), lag ).winner_seat == 0 - for seed in range(1, 7) + for seed in range(1, 13) ) contender, champion = wins("contender"), wins("champion") @@ -1285,8 +1317,7 @@ def guard_from(style: FighterStyle) -> int: engine.step() human = engine.fighter("human") cpu = engine.fighter("cpu") - attack = human.attack - assert attack is not None + attack = slowed(human.attack, 20) # Force a guard answer: an evasion is out of reach. cpu.stamina = 0 while engine.tick - attack.start_tick < brain.profile.reaction_ticks: @@ -1308,13 +1339,10 @@ def test_a_counter_puncher_still_slips_a_slow_punch_it_reads_early() -> None: def answer(style: FighterStyle) -> ActionKind | None: engine = engine_at(120) human = engine.fighter("human") - # A worn-out puncher is slow enough that the punch is read long before it lands. - human.conditioning = 0 brain = always(CpuBrain("cpu", "human", CpuLevel.CHAMPION, 2, style)) throw(engine, PunchAction(Hand.RIGHT, PunchClass.STRAIGHT, Target.HEAD, Power.POWER)) engine.step() - attack = human.attack - assert attack is not None + attack = slowed(human.attack, 30) while attack.start_tick + attack.rule.startup - engine.tick > EVASION_TICKS + 1: engine.step() return brain._read(engine.tick, engine.fighter("cpu"), human) diff --git a/tests/test_hands/test_engine.py b/tests/test_hands/test_engine.py index ef9f1852..3a971995 100644 --- a/tests/test_hands/test_engine.py +++ b/tests/test_hands/test_engine.py @@ -14,10 +14,9 @@ from intelstream.hands import rules from intelstream.hands.engine import ( - ACTION_BUFFER_TICKS, - COUNT_TICK_INTERVAL, MAX_PENDING_ACTIONS, PERFECT_BLOCK_TICKS, + TAUNT_TICKS, AttackState, BoxingEngine, EngineConfig, @@ -25,22 +24,28 @@ ) from intelstream.hands.protocol import encode_snapshot from intelstream.hands.rules import ( + ACTION_BUFFER_TICKS, BLIND_SIDE_EYE_THRESHOLD, BODY_COLLAPSE_DELAY_TICKS, BODY_WIND_PERCENT, BOX_PAUSE_TICKS, CLINCH_HOLD_DISTANCE, CORNER_TREATMENTS, + COUNT_TICK_INTERVAL, + CUT_OPENS_EYE, + EVASION_STAMINA, FIGHTER_RADIUS, FLINCH_MINIMUM_DAMAGE, FOUL_SEPARATION, GET_UP_STUN_TICKS, GUARD_BLOCK_MINIMUM, MANDATORY_COUNT, + MAX_SPEED, MINIMUM_SEPARATION, PARRY_STAGGER_TICKS, PERFECT_BLOCK_REARM_TICKS, PUNCH_RULES, + RECOVERY_SPEED_PERCENT, REFEREE_WALK_SPEED, REST_CORNER_OFFSET, RING_CORNER_REACH, @@ -51,6 +56,7 @@ STUN_CHAIN_MAX_TICKS, STUN_IMMUNITY_TICKS, STUNNED_SPEED_PERCENT, + TICKS_PER_SECOND, TIRED_IMPACT_PERCENT, TIRED_RECOVERY_TICKS, TIRED_STARTUP_TICKS, @@ -86,8 +92,6 @@ def make_engine( rounds: int = 3, rest_ticks: int = 10, flash: bool = False, - doctor_cut_threshold: int = 700, - doctor_swelling_threshold: int = 820, ) -> BoxingEngine: engine = BoxingEngine( match_id=f"match-{seed}", @@ -102,8 +106,6 @@ def make_engine( rest_ticks=rest_ticks, countdown_ticks=0, flash_ko_enabled=flash, - doctor_cut_threshold=doctor_cut_threshold, - doctor_swelling_threshold=doctor_swelling_threshold, ), ) engine.fighter("one").x = -45 @@ -241,7 +243,7 @@ def move(move_x: int, move_y: int) -> tuple[int, ...]: assert negative_diagonal[5:] == tuple(-value for value in diagonal[5:]) -def test_fixed_point_movement_is_equal_over_121_ticks_for_every_diagonal_sign() -> None: +def test_fixed_point_movement_is_equal_over_71_ticks_for_every_diagonal_sign() -> None: def displacement(move_x: int, move_y: int) -> tuple[int, int]: engine = make_engine(seed=90, round_ticks=2000) fighter = engine.fighter("one") @@ -252,7 +254,7 @@ def displacement(move_x: int, move_y: int) -> tuple[int, int]: opponent.x = -400 if move_x >= 0 else 400 opponent.y = 280 engine.step({"one": command(1, move_x=move_x, move_y=move_y)}) - for _ in range(120): + for _ in range(70): engine.step() return fighter.x, fighter.y @@ -718,7 +720,7 @@ def test_high_low_guard_guard_wear_break_and_perfect_block() -> None: assert defender.guard < GUARD_BLOCK_MINIMUM + 40 worn = make_engine() - worn.fighter("two").guard = GUARD_BLOCK_MINIMUM + worn.fighter("two").guard = GUARD_BLOCK_MINIMUM + 40 worn.step( { "one": command(1, action=punch(PunchClass.HOOK, target=Target.HEAD, power=Power.POWER)), @@ -726,7 +728,8 @@ def test_high_low_guard_guard_wear_break_and_perfect_block() -> None: } ) assert advance_until(worn, {"block", "perfect_block"}) == "block" - assert worn.fighter("two").guard == 0 + assert worn.fighter("two").guard_broken + assert worn.fighter("two").guard < GUARD_BLOCK_MINIMUM assert any(event.kind == "guard_break" for event in worn.events) body_engine = make_engine() @@ -905,16 +908,15 @@ def test_exchange_stamina_recovers_but_long_term_fatigue_persists_after_rest() - engine = make_engine(round_ticks=90, rounds=2, rest_ticks=30) one = engine.fighter("one") initial_maximum = one.maximum_stamina - engine.step( - { - "one": command( - 1, - action=punch(PunchClass.UPPERCUT, power=Power.POWER), - ) - } - ) + sequence = 0 while engine.phase is MatchPhase.FIGHT and engine.result is None: - engine.step() + if one.attack is None and not one.pending_actions: + sequence += 1 + engine.step( + {"one": command(sequence, action=punch(PunchClass.UPPERCUT, power=Power.POWER))} + ) + else: + engine.step() assert engine.phase is MatchPhase.REST while engine.phase is MatchPhase.REST: engine.step() @@ -1007,8 +1009,8 @@ def test_fatigue_reduces_hand_speed_foot_speed_guard_recovery_and_power() -> Non assert fresh_guard.fighter("one").guard > tired_guard.fighter("one").guard -def test_localized_trauma_cut_bleeding_and_doctor_stoppage() -> None: - engine = make_engine(doctor_cut_threshold=20) +def test_localized_trauma_cuts_and_bleeds_and_no_cut_or_swelling_stops_the_bout() -> None: + engine = make_engine(round_ticks=2000) engine.fighter("two").trauma.right_eye = 300 engine.step( { @@ -1023,15 +1025,19 @@ def test_localized_trauma_cut_bleeding_and_doctor_stoppage() -> None: ) } ) - advance_until(engine, {"result"}, limit=50) + advance_until(engine, {"hit"}, limit=50) defender = engine.fighter("two") assert defender.trauma.head > 0 assert defender.trauma.right_eye > 300 - assert defender.trauma.right_cut >= 20 + assert defender.trauma.right_cut > 0 assert defender.trauma.bleeding > 0 - assert engine.result is not None - assert engine.result.finish_method is FinishMethod.DOCTOR_STOPPAGE + # Well past the cut and the swelling at which a ringside doctor once stopped it. + defender.trauma.right_cut = defender.trauma.swelling = defender.trauma.bleeding = 1000 + for _ in range(90): + engine.step() + assert engine.result is None + assert any(event.kind == "bleed" for event in engine.events) def test_knockdown_seeded_get_up_and_repeated_knockdown_tko() -> None: @@ -1182,8 +1188,6 @@ def test_natural_effective_aggressor_gets_credit_and_wins_one_round_decision() - round_ticks=180, rounds=1, rest_ticks=0, - doctor_cut_threshold=5000, - doctor_swelling_threshold=5000, ) sequence = 0 while engine.result is None: @@ -1265,6 +1269,47 @@ def test_action_buffer_coalesces_spam_and_new_intent_replaces_or_cancels_stale() assert fighter.held_input.defense is DefensivePose.GUARD_HIGH +def test_a_punch_and_then_cover_in_the_same_tick_throws_the_punch() -> None: + """A guard raised in a frame of its own just after a press, before the engine has stepped, does + not cancel the press: the fighter was free to throw it, and throws it with the guard up after.""" + engine = make_engine(round_ticks=2000) + one = engine.fighter("one") + jab = punch(PunchClass.JAB, hand=Hand.LEFT) + assert engine.submit_input("one", command(1, action=jab)) + assert engine.submit_input("one", command(2, defense=DefensivePose.GUARD_HIGH)) + assert one.pending_actions == [jab] + engine.step() + assert one.attack is not None and one.attack.action == jab + assert one.held_input.defense is DefensivePose.GUARD_HIGH + + # A press left waiting from an earlier tick is still cancelled by the guard, as is one held + # behind a stun. + stale = make_engine(round_ticks=2000) + stunned = stale.fighter("one") + stunned.stunned_ticks = 4 + assert stale.submit_input("one", command(1, action=jab)) + assert stale.submit_input("one", command(2, defense=DefensivePose.GUARD_HIGH)) + assert stunned.pending_actions == [] + late = make_engine(round_ticks=2000) + waiting = late.fighter("one") + waiting.stunned_ticks = 2 + assert late.submit_input("one", command(1, action=jab)) + late.step() + waiting.stunned_ticks = 0 + assert late.submit_input("one", command(2, defense=DefensivePose.GUARD_HIGH)) + assert waiting.pending_actions == [] + + +@pytest.mark.parametrize("busy", ["taunt_ticks", "clinch_startup_ticks", "clinch_ticks"]) +def test_a_guard_cancels_a_press_made_while_taunting_or_tied_up(busy: str) -> None: + engine = make_engine(round_ticks=2000) + one = engine.fighter("one") + setattr(one, busy, 10) + assert engine.submit_input("one", command(1, action=punch(PunchClass.JAB, hand=Hand.LEFT))) + assert engine.submit_input("one", command(2, defense=DefensivePose.GUARD_HIGH)) + assert one.pending_actions == [] + + def test_held_guard_heartbeat_preserves_a_new_guarded_follow_up() -> None: engine = make_engine(round_ticks=2000) engine.step( @@ -1338,7 +1383,7 @@ def test_buffered_punch_survives_the_current_attack_and_dispatches_after_it() -> assert engine.fighter("one").pending_actions, "buffer dropped during the attack" assert len(starts) == 1 - assert starts[0] == 1 + total + 1 + assert starts[0] == 1 + total assert engine.fighter("one").pending_actions == [] @@ -1373,11 +1418,11 @@ def follow_up_start( started, cancel_age, total = follow_up_start(jab, straight, in_range=True) assert started == cancel_age < total whiffed, _cancel_age, total = follow_up_start(jab, straight, in_range=False) - assert whiffed == total + 1 + assert whiffed == total incompatible, _cancel_age, total = follow_up_start(jab, uppercut, in_range=True) - assert incompatible == total + 1 + assert incompatible == total into_a_stun, _cancel_age, total = follow_up_start(jab, straight, in_range=True, stunned=True) - assert into_a_stun == total + 1 + assert into_a_stun == total def test_facing_vector_turns_toward_the_opponent_and_the_hit_test_follows() -> None: @@ -1454,12 +1499,9 @@ def buffered_chain(first: PunchAction, second: PunchAction) -> BoxingEngine: def test_stun_cancels_non_simultaneous_attack_instead_of_resuming_it() -> None: engine = make_engine(round_ticks=2000) - engine.step( - { - "one": command(1, action=punch(PunchClass.UPPERCUT, power=Power.POWER)), - "two": command(1, action=punch(PunchClass.HOOK, power=Power.POWER)), - } - ) + engine.step({"two": command(1, action=punch(PunchClass.HOOK, power=Power.POWER))}) + engine.step() + engine.step({"one": command(1, action=punch(PunchClass.UPPERCUT, power=Power.POWER))}) advance_until(engine, {"stun"}, limit=20) engine.step() @@ -1474,7 +1516,8 @@ def test_clinch_startup_is_interruptible_and_latest_batch_intent_wins() -> None: engine.step( { "one": command(1, action=MovementAction(ActionKind.CLINCH)), - "two": command(1, action=punch(PunchClass.STRAIGHT, power=Power.POWER)), + # Quick enough to land before the clinch is taken. + "two": command(1, action=punch(PunchClass.STRAIGHT)), } ) @@ -1756,18 +1799,12 @@ def test_sustained_movement_is_free_but_punches_still_spend_resources() -> None: def test_swelling_bleeding_same_tick_trades_and_snapshot_payloads_follow_behavior() -> None: - swelling = make_engine( - round_ticks=2000, - doctor_cut_threshold=5000, - doctor_swelling_threshold=20, - ) + swelling = make_engine(round_ticks=2000) swelling.step({"one": command(1, action=punch(PunchClass.HOOK, power=Power.POWER))}) - advance_until(swelling, {"result"}, limit=30) - assert swelling.result is not None - assert swelling.result.finish_method is FinishMethod.DOCTOR_STOPPAGE - assert swelling.fighter("two").trauma.swelling >= 20 + advance_until(swelling, {"hit"}, limit=30) + assert swelling.fighter("two").trauma.swelling > 0 - bleeding = make_engine(round_ticks=2000, doctor_cut_threshold=5000) + bleeding = make_engine(round_ticks=2000) bleeding.fighter("two").trauma.bleeding = 300 before_head = bleeding.fighter("two").trauma.head for _ in range(30): @@ -1830,7 +1867,7 @@ def test_simultaneous_clinch_attempts_resolve_once() -> None: assert engine.fighter("one").clinch_ticks == engine.fighter("two").clinch_ticks assert engine.fighter("one").clinch_startup_ticks == 0 assert engine.fighter("two").clinch_startup_ticks == 0 - assert engine.fighter("one").stamina == engine.fighter("two").stamina == 964 + assert engine.fighter("one").stamina == engine.fighter("two").stamina == 969 assert len([event for event in engine.events if event.kind == "clinch"]) == 1 for _ in range(60): @@ -1957,7 +1994,7 @@ def test_taunt_locks_actions_and_appears_in_snapshot() -> None: ) assert any(event.kind == "taunt" and event.actor_id == "one" for event in engine.events) - assert snapshot.fighters[0].taunt_ticks == 60 + assert snapshot.fighters[0].taunt_ticks == TAUNT_TICKS for _ in range(20): snapshot = engine.step( { @@ -1968,7 +2005,7 @@ def test_taunt_locks_actions_and_appears_in_snapshot() -> None: ) assert fighter.x == start_x assert fighter.attack is None - assert snapshot.fighters[0].taunt_ticks == 40 + assert snapshot.fighters[0].taunt_ticks == TAUNT_TICKS - 20 while fighter.taunt_ticks > 0: engine.step() snapshot = engine.step({"one": command(3, move_x=1000)}) @@ -2348,7 +2385,7 @@ def test_a_parried_fighter_cannot_walk_out_of_the_counter_it_opens( engine.step() for _ in range(8): engine.step() - assert one.velocity_x == -7 + assert one.velocity_x == -MAX_SPEED def test_parrying_an_ordinary_punch_does_not_stagger() -> None: @@ -2428,7 +2465,7 @@ def switched(tick: int) -> DefensivePose: engine.step({"two": command(1, defense=DefensivePose.GUARD_HIGH)}) for _ in range(10): engine.step() - two.stunned_ticks = 6 + two.stunned_ticks = 4 engine.step({"one": command(1, action=punch(PunchClass.STRAIGHT, power=Power.POWER))}) assert advance_until(engine, {"hit", "block", "perfect_block"}) == "block" assert engine.tick - two.defense_started_tick <= PERFECT_BLOCK_TICKS @@ -2641,7 +2678,12 @@ def test_an_early_buffered_hook_uppercut_chain_cannot_hold_a_stunned_fighter( running_stun = two.stunned_ticks before = one.attack engine.step(inputs) - cut_short = before is not None and one.attack is not None and one.attack is not before + cut_short = ( + before is not None + and one.attack is not None + and one.attack is not before + and before.age < before.total_ticks + ) if running_stun > 1: assert two.stunned_ticks < running_stun, "a punch started a running stun again" assert not cut_short, "a punch was cut short into a stunned fighter" @@ -2703,7 +2745,12 @@ def _chain_into_a_still_defender(poise: int | None, power: Power) -> _ChainAgain seen.longest_chain = max(seen.longest_chain, two.stun_chain_ticks) if running > 1: assert two.stunned_ticks == running - 1, "a punch started a running stun again" - cut_short = before is not None and one.attack is not None and one.attack is not before + cut_short = ( + before is not None + and one.attack is not None + and one.attack is not before + and before.age < before.total_ticks + ) assert not cut_short, "a punch was cut short into a stunned fighter" seen.hits_on_a_running_stun += flinching_hit continue @@ -2733,21 +2780,20 @@ def test_a_still_defender_gets_free_ticks_from_a_chain_of_combinations_inside_th None ): # Fresh, he flinches. A shot hard enough to flinch him does not stop him again in the clear - # moment after a stun, and a punch that lands on a running stun does not start it again. + # moment after a stun. fresh = _chain_into_a_still_defender(None, Power.NORMAL) assert len(fresh.stuns) >= 3 assert fresh.free_ticks > 0 assert fresh.flinching_hits_in_the_clear_moment > 0 - assert fresh.hits_on_a_running_stun > 0 # Hurt, every clean shot rocks him, and still the chain cannot hold him. hurt = _chain_into_a_still_defender(ROCKED_HURT_POISE - 1, Power.NORMAL) assert hurt.stuns and hurt.hits_on_a_running_stun > 0 assert hurt.free_ticks > 0 - # Power shots rock him even in the clear moment, but never past the chain cap. + # Power shots rock him, but never past the chain cap. (One landing in the clear moment rocks + # him once the rocked immunity is over: test_balance pins that boundary.) power = _chain_into_a_still_defender(None, Power.POWER) - assert power.rocked_in_the_clear_moment > 0 assert power.hits_on_a_running_stun > 0 assert power.free_ticks > 0 @@ -2851,7 +2897,8 @@ def test_a_standing_fighter_turns_toward_the_other_at_a_fixed_rate() -> None: # The same few degrees every tick, not a share of what is left: it used to close 58% of the # gap a tick, so a quarter turn took two ticks and nobody could be outflanked. assert turned[0] == pytest.approx(TURN_PER_TICK, abs=0.1) - assert turned[len(turned) // 2 - 1] == pytest.approx(TURN_PER_TICK * len(turned) // 2, abs=0.3) + middle = len(turned) // 2 - 1 + assert turned[middle] == pytest.approx(TURN_PER_TICK * (middle + 1), abs=0.3) assert turned[-1] == pytest.approx(90, abs=0.1) assert 999_000 <= one.facing_x**2 + one.facing_y**2 <= 1_001_000 @@ -2889,8 +2936,10 @@ def circled(then: dict[str, InputCommand]) -> tuple[float, float, str]: return *angles, advance_until(engine, {"hit", "counter_hit", "whiff"}) straight = punch(PunchClass.STRAIGHT) - circler, other, circler_punch = circled({"one": command(31, action=straight)}) - *_, other_punch = circled({"two": command(31, action=straight)}) + # Stepping with him, both stop as one of them punches. + stop = {"one": command(31), "two": command(31)} if stepping_with_him else {} + circler, other, circler_punch = circled({**stop, "one": command(31, action=straight)}) + *_, other_punch = circled({**stop, "two": command(31, action=straight)}) if stepping_with_him: # Cutting the ring off, each turns with his own steps: both stay square. @@ -3045,7 +3094,7 @@ def test_a_bout_ended_on_the_punch_leaves_no_poise_below_zero() -> None: def test_bleeding_never_leaves_more_stamina_than_the_fighter_can_hold() -> None: - engine = make_engine(seed=3, doctor_cut_threshold=10_000, doctor_swelling_threshold=10_000) + engine = make_engine(seed=3) engine.fighter("one").x, engine.fighter("two").x = -300, 300 engine.fighter("two").trauma.bleeding = 1000 engine.fighter("two").conditioning = 900 @@ -3063,11 +3112,11 @@ def test_a_stunned_fighter_stumbles_at_a_share_of_his_footwork() -> None: for _ in range(8): engine.step() speed = hypot(one.velocity_x, one.velocity_y) - assert 0 < speed <= max(2, 7 * STUNNED_SPEED_PERCENT // 100) + assert 0 < speed <= max(2, MAX_SPEED * STUNNED_SPEED_PERCENT // 100) one.stunned_ticks = 0 for _ in range(8): engine.step() - assert hypot(one.velocity_x, one.velocity_y) == 7 + assert hypot(one.velocity_x, one.velocity_y) == MAX_SPEED def test_a_stun_ends_the_weave_it_lands_on_so_he_stumbles_instead_of_standing_frozen() -> None: @@ -3178,7 +3227,7 @@ def test_a_fighter_who_beats_the_count_takes_the_mandatory_eight_before_they_box counts += [event.amount for event in snapshot.events if event.kind == "count"] assert (two.x, two.y) == risen_at assert engine.tick == box_tick - assert counts == [3, 4, 5, 6, 7, 8] + assert counts == list(range(3, MANDATORY_COUNT + 1)) assert shown == sorted(shown) and shown[0] == 2 and shown[-1] == MANDATORY_COUNT assert [event.target_id for event in engine.events if event.kind == "box"] == ["two"] assert engine.phase is MatchPhase.FIGHT @@ -3229,7 +3278,7 @@ def test_a_meter_filled_as_the_count_reaches_ten_is_too_late() -> None: def test_round_one_opens_with_the_introductions_and_later_rounds_with_the_bell() -> None: opening = _manifest()["countdown"]["opening_ticks"] - assert opening >= 8 * COUNT_TICK_INTERVAL + assert opening > 0 config = dataclasses.replace(EngineConfig(), rounds=2, round_ticks=30, rest_ticks=10) assert config.countdown_ticks == opening engine = BoxingEngine( @@ -3378,3 +3427,169 @@ def test_a_tired_punch_never_carries_a_flash_knockout() -> None: assert "flash_roll" in _counter_hook(1000) tired = _counter_hook(10) assert "exhausted" in tired and "flash_roll" not in tired + + +def test_a_fighter_steps_out_behind_his_punch_at_a_share_of_his_speed() -> None: + def walked(power: Power, ticks: int) -> int: + engine = make_engine(round_ticks=2000) + one = engine.fighter("one") + one.x, engine.fighter("two").x = 0, 400 + engine.step({"one": command(1, action=punch(PunchClass.JAB, power=power), move_x=-1000)}) + attack = one.attack + assert attack is not None + start = one.x + for _ in range(ticks): + engine.step() + return start - one.x + + rule = PUNCH_RULES[(PunchClass.JAB, Target.HEAD, Power.NORMAL)] + # Rooted through the startup and the active ticks. + assert walked(Power.NORMAL, rule.startup + rule.active - 2) == 0 + engine = make_engine(round_ticks=2000) + one = engine.fighter("one") + one.x, engine.fighter("two").x = 0, 400 + engine.step({"one": command(1, action=punch(PunchClass.STRAIGHT), move_x=-1000)}) + attack = one.attack + assert attack is not None + while attack.age < attack.rule.startup + attack.rule.active: + engine.step() + recovering = [] + while True: + before = one.x + engine.step() + if one.attack is not attack: + break + recovering.append(before - one.x) + # Walking off during the recovery, no faster than its share of his speed. + assert sum(recovering) > 0 + assert max(recovering) <= MAX_SPEED * RECOVERY_SPEED_PERCENT // 100 + free = [] + for _ in range(6): + before = one.x + engine.step() + free.append(before - one.x) + assert max(free) == MAX_SPEED + + +def test_a_slip_pressed_during_a_punch_cuts_its_recovery_short() -> None: + engine = make_engine(round_ticks=2000) + one = engine.fighter("one") + one.x, engine.fighter("two").x = -300, 300 + engine.step({"one": command(1, action=punch(PunchClass.HOOK, power=Power.POWER))}) + attack = one.attack + assert attack is not None + engine.step({"one": command(2, action=MovementAction(ActionKind.SLIP_LEFT))}) + slipped_at = None + for _ in range(attack.total_ticks + 4): + snapshot = engine.step() + if any(event.kind == "defense" for event in snapshot.events): + slipped_at = engine.tick + break + assert slipped_at is not None + # As soon as the punch is past its active ticks, not when its recovery has run out. + assert slipped_at == attack.start_tick + attack.rule.startup + attack.rule.active + assert slipped_at < attack.start_tick + attack.total_ticks + assert one.defense is DefensivePose.SLIP_LEFT + + +def test_a_press_in_the_last_moments_of_a_stun_fires_as_it_wears_off() -> None: + def first_punch_after(pressed_before_the_end: int) -> int | None: + engine = make_engine(round_ticks=2000) + one = engine.fighter("one") + one.x, engine.fighter("two").x = -300, 300 + one.stunned_ticks = 20 + for _ in range(20 - pressed_before_the_end): + engine.step() + engine.step({"one": command(1, action=punch(PunchClass.JAB))}) + for _ in range(ACTION_BUFFER_TICKS + 4): + snapshot = engine.step() + if any(event.kind == "punch_start" for event in snapshot.events): + return engine.tick + return None + + # Pressed three ticks before the stun ends, the jab starts on the first free tick. + assert first_punch_after(3) == 21 + # Pressed long before the end, it has expired like any buffered press. + assert first_punch_after(ACTION_BUFFER_TICKS + 6) is None + + +def test_a_winded_fighter_cannot_slip_out_of_a_punchs_recovery() -> None: + def punch_over_at(stamina: int) -> tuple[int, int]: + engine = make_engine(round_ticks=2000) + one = engine.fighter("one") + one.x, engine.fighter("two").x = -300, 300 + engine.step({"one": command(1, action=punch(PunchClass.HOOK, power=Power.POWER))}) + attack = one.attack + assert attack is not None + engine.step({"one": command(2, action=MovementAction(ActionKind.SLIP_LEFT))}) + while one.attack is attack: + one.stamina = stamina + engine.step() + return engine.tick - attack.start_tick, attack.total_ticks + + hook = PUNCH_RULES[(PunchClass.HOOK, Target.HEAD, Power.POWER)] + assert punch_over_at(EVASION_STAMINA + 40)[0] == hook.startup + hook.active + # One who cannot pay for the slip sees the punch out. + over, total = punch_over_at(EVASION_STAMINA - 1) + assert over == total + + +def test_a_cut_opens_once_the_eye_has_swollen_past_the_mark() -> None: + def cut_after_a_straight(eye: int) -> int: + engine = make_engine(round_ticks=2000) + engine.fighter("two").trauma.left_eye = eye + engine.step({"one": command(1, action=punch(PunchClass.STRAIGHT, hand=Hand.RIGHT))}) + advance_until(engine, {"hit"}) + return engine.fighter("two").trauma.left_cut + + assert cut_after_a_straight(0) == 0 + assert cut_after_a_straight(CUT_OPENS_EYE + 1) > 0 + + +@pytest.mark.parametrize(("rounds", "rest_ticks"), [(3, 10), (3, 0), (1, 10)]) +def test_a_stoppage_ends_the_bout_on_the_spot_with_no_bell_card_or_rest( + rounds: int, rest_ticks: int +) -> None: + def finished(engine: BoxingEngine) -> None: + assert engine.result is not None + assert engine.phase is MatchPhase.COMPLETE + final = [event.kind for event in engine.events if event.tick == engine.tick] + assert final[-1] == "result" + assert "bell" not in final + assert all(not cards[0] for cards in engine._round_cards.values()) + assert engine.snapshot().phase is MatchPhase.COMPLETE + + tko = make_engine(rounds=rounds, rest_ticks=rest_ticks, round_ticks=2000) + tko.fighter("two").knockdowns = 2 + tko.fighter("two").poise = 1 + tko.step({"one": command(1, action=punch(PunchClass.UPPERCUT, power=Power.POWER))}) + advance_until(tko, {"result"}, limit=30) + assert tko.result is not None and tko.result.finish_method is FinishMethod.TKO + finished(tko) + + # Ended on a tick when both men and the referee would bleed: nobody bleeds after the result. + for wait in range(TICKS_PER_SECOND): + bleeding = make_engine(rounds=rounds, rest_ticks=rest_ticks, round_ticks=2000) + bleeding.fighter("one").trauma.bleeding = 600 + bleeding.fighter("two").trauma.bleeding = 600 + bleeding.fighter("two").knockdowns = 2 + bleeding._referee.trauma.bleeding = 600 + for _ in range(wait): + bleeding.step() + bleeding.fighter("two").poise = 1 + bleeding.step({"one": command(1, action=punch(PunchClass.UPPERCUT, power=Power.POWER))}) + advance_until(bleeding, {"result"}, limit=30) + if bleeding.tick % TICKS_PER_SECOND == 0: + finished(bleeding) + break + else: + raise AssertionError("no wait put the stoppage on a bleeding tick") + + dq = make_engine(rounds=rounds, rest_ticks=rest_ticks, round_ticks=2000) + for sequence, foul in enumerate((Foul.LOW_BLOW, Foul.HEADBUTT, Foul.LOW_BLOW), start=1): + dq.fighter("one").x, dq.fighter("two").x = -45, 45 + dq.step({"one": command(sequence, action=FoulAction(foul))}) + while dq.result is None and dq.phase is MatchPhase.FOUL_RECOVERY: + dq.step() + assert dq.result is not None and dq.result.finish_method is FinishMethod.DISQUALIFICATION + finished(dq) diff --git a/tests/test_hands/test_integration.py b/tests/test_hands/test_integration.py index 0cbdf854..ed250227 100644 --- a/tests/test_hands/test_integration.py +++ b/tests/test_hands/test_integration.py @@ -103,8 +103,6 @@ async def test_real_auth_spectator_reconnect_and_authoritative_elo(tmp_path) -> rest_ticks=0, countdown_ticks=2, flash_ko_enabled=False, - doctor_cut_threshold=5000, - doctor_swelling_threshold=5000, ), ), match_id_factory=lambda: "integration-match", diff --git a/tests/test_hands/test_referee.py b/tests/test_hands/test_referee.py new file mode 100644 index 00000000..8d3276e4 --- /dev/null +++ b/tests/test_hands/test_referee.py @@ -0,0 +1,373 @@ +from __future__ import annotations + +import dataclasses +import json +from math import hypot + +import pytest + +from intelstream.hands.engine import REFEREE_ID, BoxingEngine +from intelstream.hands.protocol import encode_snapshot +from intelstream.hands.rules import ( + FIGHTER_RADIUS, + MINIMUM_SEPARATION, + REFEREE_COUNT_STANDOFF, + REFEREE_DOWN_TICKS, + REFEREE_HEALTH, + REFEREE_RADIUS, + REFEREE_STAGGER_BASE_TICKS, + REFEREE_STANDOFF, + TICKS_PER_SECOND, +) +from intelstream.hands.types import ( + ActionKind, + Hand, + MatchPhase, + MovementAction, + Power, + PunchClass, + Target, +) +from tests.test_hands.test_engine import advance_until, command, make_engine, punch + + +def settle(engine: BoxingEngine, ticks: int = 120) -> None: + for _ in range(ticks): + engine.step() + + +def put_referee_in_front_of_one(engine: BoxingEngine, distance: int = 60) -> None: + """Fighter one faces along +x; the referee stands on that line between the two, nearer one.""" + one = engine.fighter("one") + referee = engine._referee + referee.x, referee.y = one.x + distance, one.y + referee.stunned_ticks = 200 + + +def test_the_referee_keeps_to_his_side_of_the_action_at_his_standoff() -> None: + engine = make_engine(round_ticks=2000) + settle(engine) + one, two = engine.fighter("one"), engine.fighter("two") + referee = engine._referee + mid_x, mid_y = (one.x + two.x) / 2, (one.y + two.y) / 2 + assert hypot(referee.x - mid_x, referee.y - mid_y) == pytest.approx(REFEREE_STANDOFF, abs=2) + # Off to the side of the line between them, not on it. + assert abs(referee.x - mid_x) <= 2 + snapshot = engine.snapshot() + assert (snapshot.referee.x, snapshot.referee.y) == (referee.x, referee.y) + # He looks at the action. + assert snapshot.referee.facing_y < 0 + + +def test_he_parts_a_clinch_from_beside_it_and_with_him_gone_it_just_comes_apart() -> None: + engine = make_engine(round_ticks=2000) + settle(engine) + engine.step( + { + "one": command(1, action=MovementAction(ActionKind.CLINCH)), + "two": command(1, action=MovementAction(ActionKind.CLINCH)), + } + ) + advance_until(engine, {"clinch"}, limit=20) + while engine.fighter("one").clinch_ticks: + engine.step() + # Right beside the hold, never inside either man. + for fighter in (engine.fighter("one"), engine.fighter("two")): + gap = hypot(engine._referee.x - fighter.x, engine._referee.y - fighter.y) + assert gap >= FIGHTER_RADIUS + REFEREE_RADIUS - 1 + assert any(event.kind == "referee_break" for event in engine.events) + + gone = make_engine(round_ticks=2000) + gone._referee.alive = False + gone.step( + { + "one": command(1, action=MovementAction(ActionKind.CLINCH)), + "two": command(1, action=MovementAction(ActionKind.CLINCH)), + } + ) + advance_until(gone, {"clinch"}, limit=20) + advance_until(gone, {"clinch_break", "referee_break"}, limit=60) + kinds = [event.kind for event in gone.events] + assert "clinch_break" in kinds and "referee_break" not in kinds + + +def test_a_fighter_walking_into_the_referee_shoves_him_aside_and_cannot_walk_through_him() -> None: + engine = make_engine(round_ticks=2000) + one = engine.fighter("one") + one.x, one.y = -200, 0 + engine.fighter("two").x, engine.fighter("two").y = 300, 300 + referee = engine._referee + referee.x, referee.y = -120, 0 + referee.stunned_ticks = 300 + for sequence in range(1, 40): + engine.step({"one": command(sequence, move_x=1000)}) + assert hypot(referee.x - one.x, referee.y - one.y) >= FIGHTER_RADIUS + REFEREE_RADIUS - 1 + assert referee.x > -120 + + # Pinned against the ropes he cannot give way, so the fighter stops short of him. + pinned = make_engine(round_ticks=2000) + walker = pinned.fighter("one") + walker.x, walker.y = 300, 0 + pinned.fighter("two").x, pinned.fighter("two").y = -300, -300 + pinned._referee.x, pinned._referee.y = 462, 0 + pinned._referee.stunned_ticks = 300 + for sequence in range(1, 40): + pinned.step({"one": command(sequence, move_x=1000)}) + assert pinned._referee.x == 462 + assert walker.x <= 462 - (FIGHTER_RADIUS + REFEREE_RADIUS) + 1 + + +def test_a_punch_that_finds_the_referee_first_hurts_him_and_not_the_other_man() -> None: + engine = make_engine(round_ticks=2000) + put_referee_in_front_of_one(engine) + two = engine.fighter("two") + poise, head = two.poise, two.trauma.head + engine.step({"one": command(1, action=punch(PunchClass.STRAIGHT, hand=Hand.RIGHT))}) + advance_until(engine, {"referee_hit", "hit", "whiff"}) + hits = [event for event in engine.events if event.kind == "referee_hit"] + assert len(hits) == 1 + hit = hits[0] + assert (hit.actor_id, hit.target_id, hit.detail) == ("one", REFEREE_ID, "straight:head") + assert hit.amount > 0 and hit.blood > 0 + referee = engine._referee + assert referee.health == REFEREE_HEALTH - hit.amount + assert referee.trauma.head > 0 + assert (two.poise, two.trauma.head) == (poise, head) + # Nothing scores for it. + assert engine.fighter("one").performance.clean_hits == 0 + assert engine.fighter("one").damage_dealt == 0 + # He reels where he stands. + assert referee.stunned_ticks > 0 + assert engine.snapshot().referee.stunned_ticks == referee.stunned_ticks + + +def test_the_nearer_of_the_referee_and_the_other_man_takes_the_punch() -> None: + engine = make_engine(round_ticks=2000) + one, two = engine.fighter("one"), engine.fighter("two") + one.x, two.x = -45, 45 + referee = engine._referee + # Behind the other man, the punch finds the other man. + referee.x, referee.y = 110, 0 + referee.stunned_ticks = 200 + engine.step({"one": command(1, action=punch(PunchClass.STRAIGHT, hand=Hand.RIGHT))}) + assert advance_until(engine, {"referee_hit", "hit", "counter_hit", "whiff"}) == "hit" + + +def test_enough_punches_put_the_referee_down_for_good_and_stop_the_bout_for_the_replay() -> None: + engine = make_engine(round_ticks=2000) + put_referee_in_front_of_one(engine) + engine._referee.health = 30 + clock_before = engine.phase_ticks_remaining + engine.step( + {"one": command(1, action=punch(PunchClass.HOOK, hand=Hand.RIGHT, power=Power.POWER))} + ) + advance_until(engine, {"referee_down"}, limit=30) + downs = [event for event in engine.events if event.kind == "referee_down"] + assert [(event.actor_id, event.target_id) for event in downs] == [("one", REFEREE_ID)] + assert downs[0].action_id is not None + referee = engine._referee + assert not referee.alive + assert engine.phase is MatchPhase.REFEREE_DOWN + assert engine.phase_ticks_remaining == REFEREE_DOWN_TICKS + paused_at = engine.phase_ticks_remaining + stopped = (referee.x, referee.y) + # Nobody punches or walks while it plays again. + for sequence in range(2, 2 + REFEREE_DOWN_TICKS - 1): + engine.step({"one": command(sequence, action=punch(PunchClass.JAB), move_x=1000)}) + assert engine.phase is MatchPhase.REFEREE_DOWN + assert engine.fighter("one").attack is None + assert engine.phase_ticks_remaining == paused_at - (REFEREE_DOWN_TICKS - 1) + engine.step() + assert engine.phase is MatchPhase.FIGHT + assert any(event.detail == "referee_down_complete" for event in engine.events) + # The clock picks up where it stopped. + assert clock_before - engine.phase_ticks_remaining < 30 + # He stays where he fell, and punches go through where he lies. + settle(engine, 30) + assert (referee.x, referee.y) == stopped + assert not engine.snapshot().referee.alive + assert engine.phase is MatchPhase.FIGHT + hits = len([event for event in engine.events if event.kind == "referee_hit"]) + put_referee_in_front_of_one(engine) + engine.step({"one": command(500, action=punch(PunchClass.STRAIGHT, hand=Hand.RIGHT))}) + assert advance_until(engine, {"hit", "counter_hit", "block", "perfect_block", "whiff"}) in { + "hit", + "counter_hit", + "block", + "perfect_block", + "whiff", + } + assert len([event for event in engine.events if event.kind == "referee_hit"]) == hits + assert [event.kind for event in engine.events].count("referee_down") == 1 + + +def test_a_bleeding_referee_loses_health_every_second_and_can_bleed_out() -> None: + engine = make_engine(round_ticks=2000) + engine.fighter("one").x, engine.fighter("two").x = -300, 300 + referee = engine._referee + referee.last_hit_by = "two" + referee.trauma.bleeding = 600 + referee.health = 25 + for _ in range(TICKS_PER_SECOND * 3): + engine.step() + if not referee.alive: + break + assert not referee.alive + assert any( + event.kind == "bleed" and event.actor_id == REFEREE_ID and event.blood > 0 + for event in engine.events + ) + downs = [event for event in engine.events if event.kind == "referee_down"] + assert [(event.actor_id, event.action_id) for event in downs] == [("two", None)] + assert engine.phase is MatchPhase.REFEREE_DOWN + + +def test_he_stands_over_a_man_on_the_canvas_for_the_count() -> None: + engine = make_engine(round_ticks=2000) + two = engine.fighter("two") + two.poise = 1 + engine.step({"one": command(1, action=punch(PunchClass.HOOK, power=Power.POWER))}) + advance_until(engine, {"knockdown"}, limit=30) + for _ in range(90): + engine.step() + referee = engine._referee + assert hypot(referee.x - two.x, referee.y - two.y) == pytest.approx( + REFEREE_COUNT_STANDOFF, abs=3 + ) + + +def test_the_snapshot_says_where_he_is_and_how_he_looks_but_never_how_much_he_has_left() -> None: + engine = make_engine(round_ticks=2000) + snapshot = engine.step() + payload = json.loads(encode_snapshot(snapshot, viewer_id="one"))["payload"] + assert set(payload["referee"]) == { + "x", + "y", + "facing_x", + "facing_y", + "velocity_x", + "velocity_y", + "stunned_ticks", + "alive", + "trauma", + } + assert "health" not in json.dumps(payload["referee"]) + # The checksum covers what is hidden too. + before = engine.snapshot().checksum + engine._referee.health -= 1 + assert engine.snapshot().checksum != before + assert dataclasses.asdict(snapshot.referee)["alive"] is True + + +def test_a_body_shot_on_the_referee_marks_the_body_and_not_the_face() -> None: + engine = make_engine(round_ticks=2000) + put_referee_in_front_of_one(engine) + engine.step( + {"one": command(1, action=punch(PunchClass.STRAIGHT, hand=Hand.RIGHT, target=Target.BODY))} + ) + advance_until(engine, {"referee_hit"}) + trauma = engine._referee.trauma + assert trauma.body > 0 + assert (trauma.head, trauma.left_cut, trauma.right_cut) == (0, 0, 0) + + +def test_a_punch_out_of_the_other_mans_reach_still_finds_the_referee_in_the_way() -> None: + engine = make_engine(round_ticks=2000) + engine.fighter("one").x, engine.fighter("two").x = -200, 250 + put_referee_in_front_of_one(engine) + engine.step({"one": command(1, action=punch(PunchClass.STRAIGHT, hand=Hand.RIGHT))}) + assert advance_until(engine, {"referee_hit", "hit", "whiff"}) == "referee_hit" + + +def test_a_punch_staggers_the_referee_where_he_stands() -> None: + engine = make_engine(round_ticks=2000) + put_referee_in_front_of_one(engine) + referee = engine._referee + # Only just long enough reeling from something else to be in the way when it lands. + referee.stunned_ticks = 7 + engine.step({"one": command(1, action=punch(PunchClass.STRAIGHT, hand=Hand.RIGHT))}) + advance_until(engine, {"referee_hit"}) + assert referee.stunned_ticks >= REFEREE_STAGGER_BASE_TICKS + + +def test_his_death_stops_both_fighters_where_they_stand() -> None: + engine = make_engine(round_ticks=2000) + one = engine.fighter("one") + one.x, engine.fighter("two").x = -300, 300 + for sequence in range(1, 12): + engine.step({"one": command(sequence, move_x=1000)}) + assert one.velocity_x > 0 + engine._referee_goes_down("two", None) + assert engine.phase is MatchPhase.REFEREE_DOWN + for fighter in (one, engine.fighter("two")): + assert (fighter.velocity_x, fighter.velocity_y) == (0, 0) + assert (fighter.velocity_fixed_x, fighter.velocity_fixed_y) == (0, 0) + + +def test_dying_while_a_man_is_counted_lets_the_count_go_on() -> None: + engine = make_engine(round_ticks=2000) + engine.fighter("two").poise = 1 + engine.step({"one": command(1, action=punch(PunchClass.HOOK, power=Power.POWER))}) + advance_until(engine, {"knockdown"}, limit=30) + remaining = engine.phase_ticks_remaining + engine._referee_goes_down("one", None) + assert not engine._referee.alive + assert engine.phase is MatchPhase.KNOCKDOWN + assert engine.phase_ticks_remaining == remaining + assert [event.kind for event in engine.events].count("referee_down") == 1 + + +def test_presses_made_while_his_death_plays_again_are_dropped() -> None: + engine = make_engine(round_ticks=2000) + put_referee_in_front_of_one(engine) + engine._referee.health = 30 + engine.step( + {"one": command(1, action=punch(PunchClass.HOOK, hand=Hand.RIGHT, power=Power.POWER))} + ) + advance_until(engine, {"referee_down"}, limit=30) + while engine.phase_ticks_remaining > 3: + engine.step() + engine.step({"two": command(1, action=punch(PunchClass.JAB, hand=Hand.LEFT))}) + while engine.phase is MatchPhase.REFEREE_DOWN: + engine.step() + starts = [] + for _ in range(12): + starts.extend(event for event in engine.step().events if event.kind == "punch_start") + assert starts == [] + + +def test_a_pinned_referee_does_not_squeeze_one_fighter_into_the_other() -> None: + engine = make_engine(round_ticks=2000) + one, two = engine.fighter("one"), engine.fighter("two") + referee = engine._referee + referee.x, referee.y, referee.stunned_ticks = 462, 0, 300 + one.x, one.y = 380, 0 + two.x, two.y = 300, 0 + for sequence in range(1, 41): + engine.step({"one": command(sequence, move_x=1000), "two": command(sequence, move_x=1000)}) + assert hypot(two.x - one.x, two.y - one.y) >= MINIMUM_SEPARATION + assert ( + hypot(referee.x - one.x, referee.y - one.y) + >= (FIGHTER_RADIUS + REFEREE_RADIUS) * 3 // 4 + ) + + +def test_he_keeps_to_the_middle_of_the_ring_between_rounds() -> None: + engine = make_engine(round_ticks=30, rest_ticks=300) + referee = engine._referee + while engine.phase is not MatchPhase.REST: + engine.step() + for _ in range(150): + engine.step() + assert hypot(referee.x, referee.y) <= 2 + + +def test_a_hold_pressed_against_a_pinned_referee_is_not_pushed_apart() -> None: + engine = make_engine(round_ticks=2000) + one, two = engine.fighter("one"), engine.fighter("two") + referee = engine._referee + referee.x, referee.y, referee.stunned_ticks = 462, 0, 300 + one.x, one.y, two.x, two.y = 400, 0, 340, 0 + one.clinch_ticks = two.clinch_ticks = 20 + engine.step() + assert hypot(two.x - one.x, two.y - one.y) < MINIMUM_SEPARATION diff --git a/tests/test_hands/test_styles.py b/tests/test_hands/test_styles.py index 2ae7a005..e4e22ad1 100644 --- a/tests/test_hands/test_styles.py +++ b/tests/test_hands/test_styles.py @@ -5,9 +5,15 @@ import pytest -from intelstream.hands.engine import BoxingEngine, EngineConfig +from intelstream.hands.engine import CONDITIONING_FIXED_SCALE, BoxingEngine, EngineConfig from intelstream.hands.protocol import encode_snapshot -from intelstream.hands.rules import PUNCH_RULES, STYLE_RULES, StyleRule, style_punch_rule +from intelstream.hands.rules import ( + MAX_SPEED, + PUNCH_RULES, + STYLE_RULES, + StyleRule, + style_punch_rule, +) from intelstream.hands.types import ( ActionKind, CombatEvent, @@ -196,10 +202,14 @@ def whiffed(style: FighterStyle) -> tuple[int, int]: fighter = engine.fighter("one") engine.step({"one": command(1, action=punch(PunchClass.HOOK, power=Power.POWER))}) for _ in range(60): - conditioning = fighter.conditioning + # In thousandths of a point, as the engine counts it: a point is only a few misses. + before = ( + fighter.conditioning * CONDITIONING_FIXED_SCALE - fighter.conditioning_remainder + ) for event in engine.step().events: if event.kind == "whiff": - return event.amount, conditioning - fighter.conditioning + after = fighter.conditioning * CONDITIONING_FIXED_SCALE + return event.amount, before - (after - fighter.conditioning_remainder) raise AssertionError("the hook never missed") base_whiff = PUNCH_RULES[(PunchClass.HOOK, Target.HEAD, Power.POWER)].whiff_cost @@ -228,9 +238,9 @@ def _conditioning_spent(style: FighterStyle, jabs: int, *, stamina: int, gap: in def test_a_swarmer_keeps_its_whole_conditioning_saving_however_little_each_punch_costs() -> None: saving = STYLE_RULES[SWARMER].conditioning_loss_percent assert saving < 100 - # Sixty whiffed jabs: three points to throw each and two for the miss, for a balanced fighter. + # Sixty whiffed jabs: a point to throw each and two for the miss, for a balanced fighter. balanced = _conditioning_spent(BALANCED, 60, stamina=1000, gap=400) - assert balanced == 60 * (3 + 2) + assert balanced == 60 * (1 + 2) assert ( abs(_conditioning_spent(SWARMER, 60, stamina=1000, gap=400) - balanced * saving // 100) <= 1 ) @@ -328,18 +338,18 @@ def test_a_quick_fighter_still_reports_a_velocity_clients_accept() -> None: for sequence in range(1, 31): snapshot = engine.step({"one": command(sequence, move_x=1000)}) fighter = snapshot.fighters[0] - assert -7 <= fighter.velocity_x <= 7 - assert -7 <= fighter.velocity_y <= 7 + assert -MAX_SPEED <= fighter.velocity_x <= MAX_SPEED + assert -MAX_SPEED <= fighter.velocity_y <= MAX_SPEED def test_a_quick_fighter_pushed_onto_a_corner_pad_still_reports_a_velocity_clients_accept() -> None: - # The pad keeps the speed along it, which for a fresh swarmer is 7.7 units a tick. + # The pad keeps the speed along it, which for a fresh swarmer is 10.3 units a tick. pad = styled_engine(SWARMER, SWARMER).fighter("one") pad.x, pad.y = 400, 340 - pad.velocity_fixed_x, pad.velocity_fixed_y = -7700, 0 + pad.velocity_fixed_x, pad.velocity_fixed_y = -10300, 0 BoxingEngine._clamp_to_ring(pad) - assert (pad.velocity_x, pad.velocity_y) == (-7, 0) - assert pad.velocity_fixed_x == -7700 + assert (pad.velocity_x, pad.velocity_y) == (-MAX_SPEED, 0) + assert pad.velocity_fixed_x == -10300 # Walking out of a corner while the other swarmer walks him back onto the pad. engine = styled_engine(SWARMER, SWARMER) @@ -358,7 +368,7 @@ def test_a_quick_fighter_pushed_onto_a_corner_pad_still_reports_a_velocity_clien } ) velocities.update((f.velocity_x, f.velocity_y) for f in snapshot.fighters) - assert max(max(abs(x), abs(y)) for x, y in velocities) == 7 + assert max(max(abs(x), abs(y)) for x, y in velocities) == MAX_SPEED # Random scrambles in every corner, both fighters fresh swarmers. rng = random.Random(4205227423) @@ -380,8 +390,8 @@ def test_a_quick_fighter_pushed_onto_a_corner_pad_still_reports_a_velocity_clien } ) for fighter in snapshot.fighters: - assert -7 <= fighter.velocity_x <= 7 - assert -7 <= fighter.velocity_y <= 7 + assert -MAX_SPEED <= fighter.velocity_x <= MAX_SPEED + assert -MAX_SPEED <= fighter.velocity_y <= MAX_SPEED def test_a_counter_puncher_makes_a_miss_cost_more() -> None: @@ -425,18 +435,23 @@ def window_after_parry(style: FighterStyle) -> int: def test_a_counter_puncher_has_a_wider_perfect_block() -> None: + # A power hook to the body winds up long enough for every lead tried to raise the guard after + # it starts. + hook = punch(PunchClass.HOOK, target=Target.BODY, power=Power.POWER) + startup = PUNCH_RULES[(PunchClass.HOOK, Target.BODY, Power.POWER)].startup + def blocked(style: FighterStyle, lead: int) -> str: engine = styled_engine(BALANCED, style) - engine.step({"one": command(1, action=punch(PunchClass.STRAIGHT, power=Power.POWER))}) + engine.step({"one": command(1, action=hook)}) attack = engine.fighter("one").attack assert attack is not None while attack.age < attack.rule.startup - lead: engine.step() - engine.step({"two": command(1, defense=DefensivePose.GUARD_HIGH)}) + engine.step({"two": command(1, defense=DefensivePose.GUARD_LOW)}) return first_event(engine, {"block", "perfect_block", "hit"}).kind def earliest_perfect(style: FighterStyle) -> int: - return max(lead for lead in range(2, 12) if blocked(style, lead) == "perfect_block") + return max(lead for lead in range(2, startup) if blocked(style, lead) == "perfect_block") assert earliest_perfect(COUNTER) == earliest_perfect(BALANCED) + 1 diff --git a/web/hands/replays/golden.json b/web/hands/replays/golden.json index 8537a7c4..f9a9306e 100644 --- a/web/hands/replays/golden.json +++ b/web/hands/replays/golden.json @@ -3,95 +3,95 @@ "markers": [ { "marker": "jab_1_submit", - "tick": 71 + "tick": 51 }, { "marker": "jab_2_submit", - "tick": 99 + "tick": 79 }, { "marker": "straight_submit", - "tick": 113 + "tick": 93 }, { "marker": "knockdown", - "tick": 120 + "tick": 98 }, { "marker": "get_up", - "tick": 156 + "tick": 134 }, { "marker": "box", - "tick": 420 + "tick": 218 }, { "marker": "outflanked_straight_submit", - "tick": 499 + "tick": 282 }, { "marker": "outflanked_whiff", - "tick": 506 + "tick": 287 }, { "marker": "recovery_cancel", - "tick": 528 + "tick": 302 }, { "marker": "rocked", - "tick": 558 + "tick": 328 }, { "marker": "hit_inside_the_stun", - "tick": 581 + "tick": 345 }, { "marker": "clinch", - "tick": 609 + "tick": 367 }, { "marker": "referee_break", - "tick": 654 + "tick": 391 }, { "marker": "foul", - "tick": 666 + "tick": 400 }, { "marker": "resume", - "tick": 726 + "tick": 430 }, { "marker": "clinch_before_the_bell", - "tick": 752 + "tick": 447 }, { "marker": "round_end", - "tick": 762 + "tick": 457 }, { "marker": "bell_breaks_the_clinch", - "tick": 762 + "tick": 457 }, { "marker": "corner", - "tick": 764 + "tick": 459 }, { "marker": "corner", - "tick": 764 + "tick": 459 }, { "marker": "round_start", - "tick": 1002 + "tick": 697 }, { "marker": "body_collapse", - "tick": 1094 + "tick": 756 }, { "marker": "body_knockdown", - "tick": 1104 + "tick": 766 } ], "seed": 20260805, @@ -115,7 +115,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "d9789a56ca456a86fa99368c9d4baed27380c040d8a71cad7d90cd4b97b05e28", + "checksum": "9fbef6638ba5b6aee42f116e3bf541691caeb8491173835dae2e4cd5075f2739", "events": [], "fighters": [ { @@ -142,10 +142,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -203,6 +204,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -235,12 +237,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999999, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 62 + }, "result": null, "round_number": 1, "tick": 1 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 1 }, @@ -249,7 +271,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "daefec096549945c4c58d2a4c1ed938b413dd23a34f49f73fe3952509a4bd93e", + "checksum": "8d73cb5d506ac1ac3fa08fa3669d1ed136e2f608e1cad194b92273247d322f03", "events": [], "fighters": [ { @@ -276,10 +298,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -303,10 +326,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, + "velocity_x": 8, "velocity_y": 0, "warnings": 0, - "x": -297, + "x": -293, "y": 0 }, { @@ -337,6 +360,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -369,12 +393,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999998, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 3, + "velocity_y": 0, + "x": 3, + "y": 62 + }, "result": null, "round_number": 1, "tick": 2 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 2 }, @@ -383,7 +427,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "409eeb6cf553e24918cd7ca2545ab4090dd6b0a2b4eb5654dc90a289033c6dd2", + "checksum": "ff70cb25cd33406ea19b2700a75d3f81fc9345de0435ab871013ba5c84fd28be", "events": [], "fighters": [ { @@ -410,10 +454,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -437,10 +482,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 5, + "velocity_x": 9, "velocity_y": 0, "warnings": 0, - "x": -292, + "x": -284, "y": 0 }, { @@ -471,6 +516,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -503,12 +549,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999997, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 8, + "y": 62 + }, "result": null, "round_number": 1, "tick": 3 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 3 }, @@ -517,7 +583,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "6df1932c5b256588ce0607bbe19fa1bc664770a5df788a08d4d7a11bf76d047b", + "checksum": "533db8ab73a29c8f3b55f0be01ba141c67f279db2380428424be44fb7c8276a9", "events": [], "fighters": [ { @@ -544,10 +610,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -571,10 +638,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 6, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -286, + "x": -274, "y": 0 }, { @@ -605,6 +672,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -637,12 +705,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999996, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 13, + "y": 62 + }, "result": null, "round_number": 1, "tick": 4 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 4 }, @@ -651,7 +739,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "2b43724daaa07e474fe9cef5c85465ed884e488f333f975d005158316f4e2a49", + "checksum": "840d0c918107c19a609dc8f30f4954e3142c7098b6a59dd6a353e16285acb1ee", "events": [], "fighters": [ { @@ -678,10 +766,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -705,10 +794,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -279, + "x": -264, "y": 0 }, { @@ -739,6 +828,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -771,12 +861,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999995, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 18, + "y": 62 + }, "result": null, "round_number": 1, "tick": 5 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 5 }, @@ -785,7 +895,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "29f44f0ed5f8098ce314913419737983c7311d7df22474ef6ef5fb75287f9dbb", + "checksum": "d89cfe8c2da031b682dedfd4d11800e5385ab9be238e020f9a93a888db15a52f", "events": [], "fighters": [ { @@ -812,10 +922,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -839,10 +950,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -272, + "x": -254, "y": 0 }, { @@ -873,6 +984,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -905,12 +1017,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999994, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 23, + "y": 62 + }, "result": null, "round_number": 1, "tick": 6 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 6 }, @@ -919,7 +1051,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "a36a3f815da5ec92f75a019162cca749437cad8fb48d66fefe8273851751b632", + "checksum": "488603cd9eb2ff59f1b492ff67e302bd0be9226848a3f7767f1c568d9194ab4d", "events": [], "fighters": [ { @@ -946,10 +1078,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -973,10 +1106,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -265, + "x": -244, "y": 0 }, { @@ -1007,6 +1140,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -1039,12 +1173,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999993, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 28, + "y": 62 + }, "result": null, "round_number": 1, "tick": 7 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 7 }, @@ -1053,7 +1207,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "a113a29082d343968ba81665271c58405bc978e2e22e070cc0977a699beeeedf", + "checksum": "2462d9dbf2b0267a306dfa3a2825d86bc41bab651aa3e9eb3d4648b9ae23dbd3", "events": [], "fighters": [ { @@ -1080,10 +1234,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -1107,10 +1262,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -258, + "x": -234, "y": 0 }, { @@ -1141,6 +1296,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -1173,12 +1329,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999992, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 33, + "y": 62 + }, "result": null, "round_number": 1, "tick": 8 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 8 }, @@ -1187,7 +1363,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "76727315a7f09cf2ed0262f7e063d1fae2f3ce945004c374f348bd8b67963e11", + "checksum": "98ab14adda9a2f1848426aac117590c4ff65eaa4e7e463a84e848f513779488a", "events": [], "fighters": [ { @@ -1214,10 +1390,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -1241,10 +1418,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -251, + "x": -224, "y": 0 }, { @@ -1275,6 +1452,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -1307,12 +1485,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999991, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 38, + "y": 62 + }, "result": null, "round_number": 1, "tick": 9 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 9 }, @@ -1321,7 +1519,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "4c8227171d63bc09d17750721090127727666bb785d273897ab0aa1bfde8f3f3", + "checksum": "b9a6dfabf7318207123d40cf36e324da025bbdf557c909b95e03d79d10322f5c", "events": [], "fighters": [ { @@ -1348,10 +1546,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -1375,10 +1574,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -244, + "x": -214, "y": 0 }, { @@ -1409,6 +1608,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -1441,12 +1641,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999990, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 43, + "y": 62 + }, "result": null, "round_number": 1, "tick": 10 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 10 }, @@ -1455,7 +1675,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "188297f9fc9c0efbdc8732fe241acf4114aa3b1dad6f2874dd30a10a8f7f4797", + "checksum": "2debdc7d1c9adb8e353a8435ced0be54d4ff1a1e0cc4b746b3679fc3db20d965", "events": [], "fighters": [ { @@ -1482,10 +1702,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -1509,10 +1730,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -237, + "x": -204, "y": 0 }, { @@ -1543,6 +1764,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -1575,12 +1797,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999989, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 48, + "y": 62 + }, "result": null, "round_number": 1, "tick": 11 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 11 }, @@ -1589,7 +1831,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "1d0d845ebb1eff36170d599c26f0c5f4e69feac6af72cf4d775ff0676701e713", + "checksum": "70e3cb18c9329370dcd6ddd5e162bc16a3c2fb129732f353656f12a44a545422", "events": [], "fighters": [ { @@ -1616,10 +1858,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -1643,10 +1886,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -230, + "x": -194, "y": 0 }, { @@ -1677,6 +1920,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -1709,12 +1953,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999988, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 53, + "y": 62 + }, "result": null, "round_number": 1, "tick": 12 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 12 }, @@ -1723,7 +1987,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "40284769563e6f175671645bd48f0f6ca79dc188c37811f2b22047e2fb2a08e3", + "checksum": "947d719ed4416930fa013ead6c09e5ac3cbaa0f0ba8a0f835ea0b5359acf7bee", "events": [], "fighters": [ { @@ -1750,10 +2014,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -1777,10 +2042,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -224, + "x": -184, "y": 0 }, { @@ -1811,6 +2076,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -1843,12 +2109,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999987, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 58, + "y": 62 + }, "result": null, "round_number": 1, "tick": 13 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 13 }, @@ -1857,7 +2143,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "71d9162b9f4e58eadd66d35bcd92614399713db74a34d1e6949f8f4bb823af0f", + "checksum": "8d8600b62b40426739bd976e624b87be97d1d9deb3b87d95d954be460ff268cb", "events": [], "fighters": [ { @@ -1884,10 +2170,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -1911,10 +2198,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -217, + "x": -174, "y": 0 }, { @@ -1945,6 +2232,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -1977,12 +2265,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999986, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 63, + "y": 62 + }, "result": null, "round_number": 1, "tick": 14 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 14 }, @@ -1991,7 +2299,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "3c282f8aa5c601d37c7d8e1613507a7fb99050caaa68dad31faa20fcc79f43ba", + "checksum": "1681f3eea7e3427cf280d29e0a64b64197c216f39d370c5b9e29180176e3b7ae", "events": [], "fighters": [ { @@ -2018,10 +2326,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -2045,10 +2354,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -210, + "x": -164, "y": 0 }, { @@ -2079,6 +2388,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -2111,12 +2421,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999985, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 68, + "y": 62 + }, "result": null, "round_number": 1, "tick": 15 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 15 }, @@ -2125,7 +2455,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "094388c0dc69dd433a019d9ee1e28930ae70423a128c02ca8785c8d0a5bdfb6c", + "checksum": "d78381323038fc8d02b01f760b1424cce9466fef6dfb0660877e328559c4e88b", "events": [], "fighters": [ { @@ -2152,10 +2482,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -2179,10 +2510,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -203, + "x": -154, "y": 0 }, { @@ -2213,6 +2544,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -2245,12 +2577,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999984, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 73, + "y": 62 + }, "result": null, "round_number": 1, "tick": 16 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 16 }, @@ -2259,7 +2611,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "fde8831d318604377ac234b71a5d59fa07fdb66e438c958c6bc12d1b29472b36", + "checksum": "50d2fa6dd5f792a068338110d8d6e9506b1e19b6c3e11d2c35a2c10d640fb639", "events": [], "fighters": [ { @@ -2286,10 +2638,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -2313,10 +2666,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -196, + "x": -144, "y": 0 }, { @@ -2347,6 +2700,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -2379,12 +2733,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999983, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 78, + "y": 62 + }, "result": null, "round_number": 1, "tick": 17 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 17 }, @@ -2393,7 +2767,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "2eae50211a9e34d14998ee82640b2f7682ba6469146f47a550e638a6e475a957", + "checksum": "4b14338510a3c2283b0d5a57b4945ba1831e88a459a0d27d7e76753945dc186a", "events": [], "fighters": [ { @@ -2420,10 +2794,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -2447,10 +2822,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -189, + "x": -134, "y": 0 }, { @@ -2481,6 +2856,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -2513,12 +2889,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999982, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 83, + "y": 62 + }, "result": null, "round_number": 1, "tick": 18 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 18 }, @@ -2527,7 +2923,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "4df805f77861d8bed4fe08c249f8ab9980a58eb7e5606f2837fc2f7566714b00", + "checksum": "b20e4fa5ef0b33a7116187598601c0600d810fac3fba4f173ecb20532d5298f1", "events": [], "fighters": [ { @@ -2554,10 +2950,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -2581,10 +2978,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -182, + "x": -124, "y": 0 }, { @@ -2615,6 +3012,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -2647,12 +3045,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999981, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 88, + "y": 62 + }, "result": null, "round_number": 1, "tick": 19 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 19 }, @@ -2661,7 +3079,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "94ab3fb42c6ebcd9578099d52767ec643926038156bd762866d5c071cc417dd8", + "checksum": "86c62a896b152cc7738e02c012074ff72f6d4c74f10ddab7254749f1b66deb2b", "events": [], "fighters": [ { @@ -2688,10 +3106,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -2715,10 +3134,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -175, + "x": -114, "y": 0 }, { @@ -2749,6 +3168,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -2781,12 +3201,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999980, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 93, + "y": 62 + }, "result": null, "round_number": 1, "tick": 20 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 20 }, @@ -2795,7 +3235,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "2802cb8d9037d25536c48a5279837ab5e46f682a4d4fbf2a6b12234e877810ae", + "checksum": "74110f2cb4cbbabe04c5044593ea140056d18bfdd5bf985f740ae2453ae9105e", "events": [], "fighters": [ { @@ -2822,10 +3262,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -2849,10 +3290,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -168, + "x": -104, "y": 0 }, { @@ -2883,6 +3324,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -2915,12 +3357,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999979, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 98, + "y": 62 + }, "result": null, "round_number": 1, "tick": 21 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 21 }, @@ -2929,7 +3391,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "89ebf62f7a1837e5c833b8ae3bad15a26389e04631ca1470f14f74415a4d49d5", + "checksum": "5e9ec110b3194873d9bcf23ccd819e9a061f0cf66de2f15ac8aa183bf1503786", "events": [], "fighters": [ { @@ -2956,10 +3418,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -2983,10 +3446,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -161, + "x": -94, "y": 0 }, { @@ -3017,6 +3480,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -3049,12 +3513,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999978, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 103, + "y": 62 + }, "result": null, "round_number": 1, "tick": 22 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 22 }, @@ -3063,7 +3547,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "6d0fc19e50e1d6a1b78ac82c0d84a80eb246d908787f91620d02fcf366227447", + "checksum": "c76b916dda3f4359a2093858396686d5984bd2e0c522ea6231286ee105fdd47d", "events": [], "fighters": [ { @@ -3090,10 +3574,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -3117,10 +3602,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -154, + "x": -84, "y": 0 }, { @@ -3151,6 +3636,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -3183,12 +3669,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999977, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 108, + "y": 62 + }, "result": null, "round_number": 1, "tick": 23 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 23 }, @@ -3197,7 +3703,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "32e0613dd3e401e34c1774fb9fc572121db954842f67ce07d55e89f311189f7b", + "checksum": "8f18ea8b69b4122eefe6e69490dfa6c63a208e1ee4fe6cc5be07cf0000f58d53", "events": [], "fighters": [ { @@ -3224,10 +3730,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -3251,10 +3758,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -147, + "x": -74, "y": 0 }, { @@ -3285,6 +3792,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -3317,12 +3825,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999976, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 113, + "y": 62 + }, "result": null, "round_number": 1, "tick": 24 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 24 }, @@ -3331,7 +3859,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "fd8b168294773129fff85a89c72218d7479feb31f3be02df00f91b22c27c0adc", + "checksum": "e61b816e79357456618623b9a50736cc8b739b96653d12f1441ca2edcded40cd", "events": [], "fighters": [ { @@ -3358,10 +3886,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -3385,10 +3914,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -140, + "x": -64, "y": 0 }, { @@ -3419,6 +3948,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -3451,12 +3981,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999975, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 118, + "y": 62 + }, "result": null, "round_number": 1, "tick": 25 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 25 }, @@ -3465,7 +4015,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "475a31f7657d9a3bb51228ab5ed4fc7618d7fb66ee4e010a1f9e7eadd7e88392", + "checksum": "748e4b6238c183efa0812343e01194d2d45b858d4b264eb4b96f450d4e78f5b1", "events": [], "fighters": [ { @@ -3492,10 +4042,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -3519,10 +4070,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -133, + "x": -54, "y": 0 }, { @@ -3553,6 +4104,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -3585,12 +4137,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999974, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 123, + "y": 62 + }, "result": null, "round_number": 1, "tick": 26 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 26 }, @@ -3599,7 +4171,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "3007ad5de5cc6e56bae30d70a06134ec88d08a1852bbe252d6872bc77f706ec5", + "checksum": "57b6a70f4831f1ef2a49d86d34859cd06440c6ac8039fc6c9729daa5e38e116d", "events": [], "fighters": [ { @@ -3626,10 +4198,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -3653,10 +4226,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -126, + "x": -44, "y": 0 }, { @@ -3687,6 +4260,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -3719,12 +4293,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999973, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 128, + "y": 62 + }, "result": null, "round_number": 1, "tick": 27 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 27 }, @@ -3733,7 +4327,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "05dc621b03e224ee58fcc31a592917ce3680ea6d548e0e3cf2fdbd86600d67dd", + "checksum": "d0ad9e259c44921063392c189721657408240621975fd0a72393cc38521189e8", "events": [], "fighters": [ { @@ -3760,10 +4354,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -3787,10 +4382,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -119, + "x": -34, "y": 0 }, { @@ -3821,6 +4416,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -3853,12 +4449,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999972, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 133, + "y": 62 + }, "result": null, "round_number": 1, "tick": 28 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 28 }, @@ -3867,7 +4483,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "b3451708614c159ad5275ef32f4c2b207b663f553fb344f4ce682b641d198242", + "checksum": "9d8c36d28dd83555145909dc004b9367e37246b16a8ab9741c5eae6333cc729d", "events": [], "fighters": [ { @@ -3894,10 +4510,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -3921,10 +4538,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -112, + "x": -24, "y": 0 }, { @@ -3955,6 +4572,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -3987,12 +4605,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999971, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 138, + "y": 62 + }, "result": null, "round_number": 1, "tick": 29 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 29 }, @@ -4001,7 +4639,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "1a42594d8c588edd2f6e2a37e6f25444c4972b1e5e87113cda0f0642bdb060e0", + "checksum": "a74b4f73d8344a28e5826e903d5b7b583b911de72054d144ed71908bcec08a95", "events": [], "fighters": [ { @@ -4028,10 +4666,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -4055,10 +4694,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -105, + "x": -14, "y": 0 }, { @@ -4089,6 +4728,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -4121,12 +4761,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999970, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 143, + "y": 62 + }, "result": null, "round_number": 1, "tick": 30 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 30 }, @@ -4135,7 +4795,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "4cd874387a283995224039f5fe00b0419fb7cd35b01d053fc67900449d1e5d5a", + "checksum": "af32800f7951f464a10b0a4c94e345adde2844dfed39ab5eddc3183b1889af9f", "events": [], "fighters": [ { @@ -4162,10 +4822,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -4189,10 +4850,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -98, + "x": -4, "y": 0 }, { @@ -4223,6 +4884,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -4255,12 +4917,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999969, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 148, + "y": 62 + }, "result": null, "round_number": 1, "tick": 31 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 31 }, @@ -4269,7 +4951,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "0829ff05f173f2c11effaf9d6af41a71e9c87e4e1af7e93acd20220311758082", + "checksum": "956878bc0a67635f8be87d12abc4a736dbf6955962e21c5d2f879a022ff053ca", "events": [], "fighters": [ { @@ -4296,10 +4978,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -4323,10 +5006,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -91, + "x": 6, "y": 0 }, { @@ -4357,6 +5040,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -4389,12 +5073,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999968, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 153, + "y": 62 + }, "result": null, "round_number": 1, "tick": 32 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 32 }, @@ -4403,7 +5107,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "e9fe9935649e861ddaaffd50df122f8cbe70de0665ec02f19cb38c7f9dffdeb6", + "checksum": "b865045f2a3d1016138e7addeae5c6d8ee08b22a812ef47b9b9101b937b72387", "events": [], "fighters": [ { @@ -4430,10 +5134,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -4457,10 +5162,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -84, + "x": 16, "y": 0 }, { @@ -4491,6 +5196,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -4523,12 +5229,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999967, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 158, + "y": 62 + }, "result": null, "round_number": 1, "tick": 33 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 33 }, @@ -4537,7 +5263,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "d291c4773f951d45adc7d2e3da3fe768f8adc2e4bbc34070f1df03d10d911dfe", + "checksum": "8109717415f1efd2a67eb7fe0a5787691a7e63bf8e9f247a9cfb9fe4a88b546b", "events": [], "fighters": [ { @@ -4564,10 +5290,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -4591,10 +5318,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -77, + "x": 26, "y": 0 }, { @@ -4625,6 +5352,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -4657,12 +5385,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999966, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 163, + "y": 62 + }, "result": null, "round_number": 1, "tick": 34 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 34 }, @@ -4671,7 +5419,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "557953bc70044a2e6eee7fbd20eb6d10d8680e53c10a40c977e3654fb00bc559", + "checksum": "80746c0f1260dbf27f964dad096fa691c228eff083411fc8c88502c127b272e5", "events": [], "fighters": [ { @@ -4698,10 +5446,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -4725,10 +5474,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -70, + "x": 36, "y": 0 }, { @@ -4759,6 +5508,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -4791,12 +5541,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999965, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 168, + "y": 62 + }, "result": null, "round_number": 1, "tick": 35 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 35 }, @@ -4805,7 +5575,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "751c78dc6042cbc03dee185c43fb9a42369581e04531a4e119d619f1d0272b00", + "checksum": "9af9accb30136baa13a64ae5b62bdc04f82c59b0bfebb264ed7d9116ee56fb28", "events": [], "fighters": [ { @@ -4832,10 +5602,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -4859,10 +5630,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -63, + "x": 46, "y": 0 }, { @@ -4893,6 +5664,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -4925,12 +5697,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999964, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 173, + "y": 62 + }, "result": null, "round_number": 1, "tick": 36 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 36 }, @@ -4939,7 +5731,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "332db5a70c5b4d1e9d34402561f9bacd329fce59bc5f9f4700fc6a54c9140a1d", + "checksum": "10447528da27a2b80493046154bc417e33b21af2fe43d442efe7734584cdd296", "events": [], "fighters": [ { @@ -4966,10 +5758,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -4993,10 +5786,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -56, + "x": 56, "y": 0 }, { @@ -5027,6 +5820,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -5059,12 +5853,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999963, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 178, + "y": 62 + }, "result": null, "round_number": 1, "tick": 37 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 37 }, @@ -5073,7 +5887,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "1b939aee0d7521ad68f4760b529bfa81858a7dbee34192ad4ea6d5930e2c912d", + "checksum": "395b3ba18d78a9d95c405e4c6c4fdebe02cd059349d815771d1801eb9c61abfd", "events": [], "fighters": [ { @@ -5100,10 +5914,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -5127,10 +5942,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -49, + "x": 66, "y": 0 }, { @@ -5161,6 +5976,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -5193,12 +6009,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999962, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 183, + "y": 62 + }, "result": null, "round_number": 1, "tick": 38 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 38 }, @@ -5207,7 +6043,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "dd1b34b8ccbc559aa8eedcd6617e3ec9f111b882fc59aed89159e1a6046e09de", + "checksum": "49d3af25addd145a04376fe18939254dcbbd4fd0954f5818e4417f8cc24e51cd", "events": [], "fighters": [ { @@ -5234,10 +6070,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -5261,10 +6098,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -42, + "x": 76, "y": 0 }, { @@ -5295,6 +6132,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -5327,12 +6165,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999961, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 188, + "y": 62 + }, "result": null, "round_number": 1, "tick": 39 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 39 }, @@ -5341,7 +6199,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "73258266f6cc08b92af9a55627eea8211669a9b8f6a288cd6147f3a8c6745fd1", + "checksum": "cd2f6f432b7a327955d271be2ce78a8b785468e269c3a7eea95d4cf61689819b", "events": [], "fighters": [ { @@ -5368,10 +6226,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -5395,10 +6254,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -35, + "x": 86, "y": 0 }, { @@ -5429,6 +6288,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -5461,12 +6321,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999960, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 193, + "y": 62 + }, "result": null, "round_number": 1, "tick": 40 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 40 }, @@ -5475,7 +6355,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "b3ea28b852b4fe2b68d9c5b172f9cd72325129b793c9c9da7f245c4d112ce155", + "checksum": "6230f03c8f5bf32f042fe5233d0d6eb52c50e94acf38ad978e537a250bb3bad8", "events": [], "fighters": [ { @@ -5502,10 +6382,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -5529,10 +6410,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -28, + "x": 96, "y": 0 }, { @@ -5563,6 +6444,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -5595,12 +6477,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999959, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 198, + "y": 62 + }, "result": null, "round_number": 1, "tick": 41 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 41 }, @@ -5609,7 +6511,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "42a01bfd5137bbcc6f6485b67cba26383c8f523526146fa083af0cb5144e2ac0", + "checksum": "40044fadaeaf766dfc217597a25a996bc61244c3308767a2a244d7edf56974d4", "events": [], "fighters": [ { @@ -5636,10 +6538,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -5663,10 +6566,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -21, + "x": 106, "y": 0 }, { @@ -5697,6 +6600,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -5729,12 +6633,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999958, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 203, + "y": 62 + }, "result": null, "round_number": 1, "tick": 42 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 42 }, @@ -5743,7 +6667,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "8b3d0d3365a713141af3124a4bee0dea71a2edf3bfe1aad0de32ea01e5de2f58", + "checksum": "616bc49128b157a45ee5292490e28ee05397cc36d189456bced3952176a911c8", "events": [], "fighters": [ { @@ -5770,10 +6694,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -5797,10 +6722,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -14, + "x": 116, "y": 0 }, { @@ -5831,6 +6756,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -5863,12 +6789,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999957, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 208, + "y": 62 + }, "result": null, "round_number": 1, "tick": 43 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 43 }, @@ -5877,7 +6823,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "68eefd761ff958d8645ae532b1fa1ad88f4d2b27afe7e3bc9178e0348c8c3948", + "checksum": "944282dfb48cccf787498b3a7ff8d52acf8d3746b1f3c4d8ba5b2d3d80c17c16", "events": [], "fighters": [ { @@ -5904,10 +6850,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -5931,10 +6878,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -7, + "x": 126, "y": 0 }, { @@ -5965,6 +6912,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -5997,12 +6945,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999956, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 213, + "y": 62 + }, "result": null, "round_number": 1, "tick": 44 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 44 }, @@ -6011,7 +6979,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "36e739d81ae1a96257ef0e5d4986e4e218e1fef1a8548d6ce464c48efee60561", + "checksum": "0670d8a9b44cd74af8f4f40008a8f3667d11006d80b4e2e448b08b20b7843fa1", "events": [], "fighters": [ { @@ -6038,10 +7006,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -6065,10 +7034,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": 0, + "x": 136, "y": 0 }, { @@ -6099,6 +7068,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -6131,12 +7101,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999955, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 218, + "y": 62 + }, "result": null, "round_number": 1, "tick": 45 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 45 }, @@ -6145,7 +7135,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "f1244058500ece1b3ff017397f7a7f2ae462071d1299ec747395ce16653abaa3", + "checksum": "f4b700566b578ea497971266ec6bdea13431eb2804abb94592005e24eb89470a", "events": [], "fighters": [ { @@ -6172,10 +7162,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -6199,10 +7190,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": 7, + "x": 146, "y": 0 }, { @@ -6233,6 +7224,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -6265,12 +7257,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999954, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 223, + "y": 62 + }, "result": null, "round_number": 1, "tick": 46 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 46 }, @@ -6279,7 +7291,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "5ea88492a2eb78409ec3112e1c44577cf830dd41b357c2f70a7b8455ba6f3aa6", + "checksum": "2c9dee75eba52917f435f06f97db348b1653753054355b17bd9fbdfb42ced18e", "events": [], "fighters": [ { @@ -6306,10 +7318,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -6333,10 +7346,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": 14, + "x": 156, "y": 0 }, { @@ -6367,6 +7380,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -6399,12 +7413,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999953, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 228, + "y": 62 + }, "result": null, "round_number": 1, "tick": 47 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 47 }, @@ -6413,7 +7447,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "2bcc921baa7587f742461a369d1b8e8d4369e30ca8442616960ef0c7abf41122", + "checksum": "a0f57e7f5d3a2b7c7c5d183a3eaf38d75e8e1f602e59f0e9526b7633df68e501", "events": [], "fighters": [ { @@ -6440,10 +7474,11 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -6467,10 +7502,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": 21, + "x": 166, "y": 0 }, { @@ -6501,6 +7536,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -6533,12 +7569,32 @@ ], "phase": "fight", "phase_ticks_remaining": 999952, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 233, + "y": 62 + }, "result": null, "round_number": 1, "tick": 48 }, "type": "snapshot", - "version": 4 + "version": 5 }, "tick": 48 }, @@ -6547,141 +7603,7 @@ "attack_two": null, "snapshot": { "payload": { - "checksum": "53dc1659d3e413a3c9da3894af33d3fd7d0b8f9e800d8819f96dbbe21ca81bad", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": 0, - "get_up_count": 0, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 48, - "maximum_stamina": 1000, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 7, - "velocity_y": 0, - "warnings": 0, - "x": 28, - "y": 0 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 0, - "get_up_count": 0, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 600, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999951, - "result": null, - "round_number": 1, - "tick": 49 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 49 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "6e0e5d24fcb86f4490b80b8fd71e50c167ef9aaef8e9f6e96874f73f02907689", + "checksum": "ef84991181b2b7c5c28c46e8c441408208c9cbef0f6539a07b825ae581e83274", "events": [], "fighters": [ { @@ -6708,14 +7630,15 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 49, + "last_input_sequence": 47, "maximum_stamina": 1000, "player_id": "one", "poise": 600, @@ -6735,10 +7658,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": 35, + "x": 176, "y": 0 }, { @@ -6769,6 +7692,7 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -6800,22 +7724,42 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999950, + "phase_ticks_remaining": 999951, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 238, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 50 + "tick": 49 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 50 + "tick": 49 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "9edb4711071ad0f2fa0f6b635c259cf43d55129c791197c6cacd0b7735268181", + "checksum": "55dbb73490a961cf95c2172d2bcd88378ec9d2266414b037e438e75933c025c5", "events": [], "fighters": [ { @@ -6842,14 +7786,15 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 50, + "last_input_sequence": 47, "maximum_stamina": 1000, "player_id": "one", "poise": 600, @@ -6869,10 +7814,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": 42, + "x": 186, "y": 0 }, { @@ -6892,7 +7837,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "none", + "defense": "guard_high", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -6902,7 +7847,8 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 700, + "guard": 697, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -6934,22 +7880,42 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999949, + "phase_ticks_remaining": 999950, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 243, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 51 + "tick": 50 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 51 + "tick": 50 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "8a24961641fc08c671b511b52f4b0d749a872d852b3a617f7d4664513c0fb8d0", + "checksum": "b7d1b2963c9b7aa5b2552baf36fd2222731fd919f7f7b1f60887b815c6d5b853", "events": [], "fighters": [ { @@ -6976,14 +7942,15 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 51, + "last_input_sequence": 47, "maximum_stamina": 1000, "player_id": "one", "poise": 600, @@ -7003,10 +7970,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": 49, + "x": 196, "y": 0 }, { @@ -7026,7 +7993,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "none", + "defense": "guard_high", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -7036,7 +8003,8 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 700, + "guard": 694, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -7068,173 +8036,83 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999948, + "phase_ticks_remaining": 999949, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": 0, + "x": 248, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 52 + "tick": 51 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 52 + "tick": 51 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 0, + "class": "jab", + "combo_bonus": 0, + "hand": "left", + "power": "normal", + "recovery": 3, + "resolved": false, + "startup": 2, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "8251bd11f361b3012512849ef32b721d810fd1f34e7e03b29a3586ad0fbedf3e", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": 0, - "get_up_count": 0, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 52, - "maximum_stamina": 1000, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 7, - "velocity_y": 0, - "warnings": 0, - "x": 56, - "y": 0 - }, + "checksum": "55ced7784446d98650ba3d8d5a12ed1263e223deb60f4f92f51539ee5005857e", + "events": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 0, - "get_up_count": 0, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 600, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 + "action_id": "one@52", + "actor_id": "one", + "amount": 0, + "blood": 0, + "detail": "left:jab:head", + "direction": 0, + "event_id": 1, + "kind": "punch_start", + "target_id": null, + "tick": 52 } ], - "phase": "fight", - "phase_ticks_remaining": 999947, - "result": null, - "round_number": 1, - "tick": 53 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 53 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "a8355a22b8bc88f505ac0c3fc576c311e53ccd29351c7571a4b3d976f125f8da", - "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, + "action": "jab", + "action_active_ticks": 2, "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action_hand": "left", + "action_id": "one@52", + "action_key": "jab:left:head:normal", + "action_power": "normal", + "action_recovery_ticks": 3, + "action_start_tick": 52, + "action_startup_ticks": 2, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 1000, + "conditioning": 999, "corner_choice": null, "deductions": 0, "defense": "none", @@ -7244,19 +8122,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 53, + "last_input_sequence": 48, "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 1000, + "stamina": 976, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -7271,10 +8150,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 2, "velocity_y": 0, "warnings": 0, - "x": 63, + "x": 199, "y": 0 }, { @@ -7294,7 +8173,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "none", + "defense": "guard_high", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -7304,7 +8183,8 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 700, + "guard": 691, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -7336,39 +8216,70 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999946, + "phase_ticks_remaining": 999948, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 1, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 54 + "tick": 52 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 54 + "tick": 52 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 1, + "class": "jab", + "combo_bonus": 0, + "hand": "left", + "power": "normal", + "recovery": 3, + "resolved": false, + "startup": 2, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "b00303624868d141cc550bbb0abe4c1d20066207073ea2481ef7071a98e5fc4d", + "checksum": "93fc7dabac62e4ac26119bfc9686c642a3f6473e766afcfb4772377e4837c50d", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, + "action": "jab", + "action_active_ticks": 2, "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action_hand": "left", + "action_id": "one@52", + "action_key": "jab:left:head:normal", + "action_power": "normal", + "action_recovery_ticks": 3, + "action_start_tick": 52, + "action_startup_ticks": 2, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 1000, + "conditioning": 999, "corner_choice": null, "deductions": 0, "defense": "none", @@ -7378,19 +8289,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 54, + "last_input_sequence": 48, "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 1000, + "stamina": 977, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -7405,10 +8317,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 1, "velocity_y": 0, "warnings": 0, - "x": 70, + "x": 199, "y": 0 }, { @@ -7428,7 +8340,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "none", + "defense": "guard_high", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -7438,7 +8350,8 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 700, + "guard": 688, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -7470,39 +8383,95 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999945, + "phase_ticks_remaining": 999947, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 55 + "tick": 53 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 55 + "tick": 53 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 2, + "class": "jab", + "combo_bonus": 0, + "hand": "left", + "power": "normal", + "recovery": 3, + "resolved": true, + "startup": 2, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "2bb757bd8484c8cec5e248f17ed5f74345315c00049b59200ac4c6eb1fe8a6c2", - "events": [], + "checksum": "79df3e028fa5de2c189b662082aa6f3ec6c8b1ee853e101c8220bb73db7f6a56", + "events": [ + { + "action_id": "one@52", + "actor_id": "two", + "amount": 0, + "blood": 0, + "detail": "", + "direction": 0, + "event_id": 2, + "kind": "perfect_block", + "target_id": "one", + "tick": 54 + }, + { + "action_id": "one@52", + "actor_id": "one", + "amount": 4, + "blood": 1, + "detail": "jab:head", + "direction": 1, + "event_id": 3, + "kind": "hit", + "target_id": "two", + "tick": 54 + } + ], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "jab", + "action_active_ticks": 2, + "action_contact_tick": 54, + "action_hand": "left", + "action_id": "one@52", + "action_key": "jab:left:head:normal", + "action_power": "normal", + "action_recovery_ticks": 3, + "action_start_tick": 52, + "action_startup_ticks": 2, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 1000, + "conditioning": 999, "corner_choice": null, "deductions": 0, "defense": "none", @@ -7512,19 +8481,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 55, + "last_input_sequence": 48, "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 1000, + "stamina": 978, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -7539,10 +8509,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 77, + "x": 199, "y": 0 }, { @@ -7562,7 +8532,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "none", + "defense": "guard_high", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -7572,7 +8542,8 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 700, + "guard": 671, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -7589,7 +8560,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 0, + "head": 2, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -7604,39 +8575,70 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999944, + "phase_ticks_remaining": 999946, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 56 + "tick": 54 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 56 + "tick": 54 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 3, + "class": "jab", + "combo_bonus": 0, + "hand": "left", + "power": "normal", + "recovery": 3, + "resolved": true, + "startup": 2, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "38f9269ec4f3b6cf2ecb40c4b514b917dc3a4e32483ea7a45447e107021f4a1d", + "checksum": "2c94fbeac5f43cca83df68d0ae41d3a4328da60c8c8835aa4fc171fc9754d0bc", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "jab", + "action_active_ticks": 2, + "action_contact_tick": 54, + "action_hand": "left", + "action_id": "one@52", + "action_key": "jab:left:head:normal", + "action_power": "normal", + "action_recovery_ticks": 3, + "action_start_tick": 52, + "action_startup_ticks": 2, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 1000, + "conditioning": 999, "corner_choice": null, "deductions": 0, "defense": "none", @@ -7646,19 +8648,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 56, + "last_input_sequence": 48, "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 1000, + "stamina": 979, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -7673,10 +8676,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 84, + "x": 199, "y": 0 }, { @@ -7696,7 +8699,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "none", + "defense": "guard_high", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -7706,7 +8709,8 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 700, + "guard": 668, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -7723,7 +8727,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 0, + "head": 2, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -7738,39 +8742,70 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999943, + "phase_ticks_remaining": 999945, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 57 + "tick": 55 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 57 + "tick": 55 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 4, + "class": "jab", + "combo_bonus": 0, + "hand": "left", + "power": "normal", + "recovery": 3, + "resolved": true, + "startup": 2, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "5290b2a6864eafa892d2154dafffa8abb192e437384b514775438748f36dea75", + "checksum": "c4196f6b2a1630367f57532de0a947d8a34c52911b3bc7f0742683efaf5b1f85", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "jab", + "action_active_ticks": 2, + "action_contact_tick": 54, + "action_hand": "left", + "action_id": "one@52", + "action_key": "jab:left:head:normal", + "action_power": "normal", + "action_recovery_ticks": 3, + "action_start_tick": 52, + "action_startup_ticks": 2, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 1000, + "conditioning": 999, "corner_choice": null, "deductions": 0, "defense": "none", @@ -7780,19 +8815,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 57, + "last_input_sequence": 48, "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 1000, + "stamina": 980, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -7807,10 +8843,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 91, + "x": 199, "y": 0 }, { @@ -7830,7 +8866,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "none", + "defense": "guard_high", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -7840,7 +8876,8 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 700, + "guard": 665, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -7857,7 +8894,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 0, + "head": 2, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -7872,39 +8909,70 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999942, + "phase_ticks_remaining": 999944, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 58 + "tick": 56 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 58 + "tick": 56 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 5, + "class": "jab", + "combo_bonus": 0, + "hand": "left", + "power": "normal", + "recovery": 3, + "resolved": true, + "startup": 2, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "45d15d81d5e8d602a1116886f0741408bea29a5ed7638bc608b1458b1f5866d9", + "checksum": "e092d3f2afae9e3281cc768017eb4ad72671a0363d299aabf9e1c58f8d3c9fcc", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "jab", + "action_active_ticks": 2, + "action_contact_tick": 54, + "action_hand": "left", + "action_id": "one@52", + "action_key": "jab:left:head:normal", + "action_power": "normal", + "action_recovery_ticks": 3, + "action_start_tick": 52, + "action_startup_ticks": 2, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 1000, + "conditioning": 999, "corner_choice": null, "deductions": 0, "defense": "none", @@ -7914,19 +8982,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 58, + "last_input_sequence": 48, "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 1000, + "stamina": 981, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -7941,10 +9010,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 98, + "x": 199, "y": 0 }, { @@ -7964,7 +9033,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "none", + "defense": "guard_high", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -7974,7 +9043,8 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 700, + "guard": 662, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -7991,7 +9061,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 0, + "head": 2, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -8006,39 +9076,70 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999941, + "phase_ticks_remaining": 999943, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 59 + "tick": 57 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 59 + "tick": 57 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 6, + "class": "jab", + "combo_bonus": 0, + "hand": "left", + "power": "normal", + "recovery": 3, + "resolved": true, + "startup": 2, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "22c71b67a998f8b4ad422b4178a78238c4969d1e3b8b1959e3dc68aa97ac1d7d", + "checksum": "ca28fb44cf3d92dea5b15a6fe5f5b1cf7fbae7c8becee792b03ccc8dc73f6c10", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "jab", + "action_active_ticks": 2, + "action_contact_tick": 54, + "action_hand": "left", + "action_id": "one@52", + "action_key": "jab:left:head:normal", + "action_power": "normal", + "action_recovery_ticks": 3, + "action_start_tick": 52, + "action_startup_ticks": 2, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 1000, + "conditioning": 999, "corner_choice": null, "deductions": 0, "defense": "none", @@ -8048,19 +9149,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 59, + "last_input_sequence": 48, "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 1000, + "stamina": 983, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -8075,10 +9177,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 105, + "x": 199, "y": 0 }, { @@ -8098,7 +9200,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "none", + "defense": "guard_high", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -8108,7 +9210,8 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 700, + "guard": 659, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -8125,7 +9228,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 0, + "head": 2, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -8140,39 +9243,59 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999940, + "phase_ticks_remaining": 999942, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 60 + "tick": 58 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 60 + "tick": 58 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "d61b383ade25d35a7c7223472d1609a8d6ea4a42c78da49f8ec718a9ef406a51", + "checksum": "2291d0631cdb886dcb1d0f699bc9d856fc1e9429e0ccd8f588f739c065153624", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "jab", + "action_active_ticks": 2, + "action_contact_tick": 54, + "action_hand": "left", + "action_id": "one@52", + "action_key": "jab:left:head:normal", + "action_power": "normal", + "action_recovery_ticks": 3, + "action_start_tick": 52, + "action_startup_ticks": 2, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 1000, + "conditioning": 999, "corner_choice": null, "deductions": 0, "defense": "none", @@ -8182,19 +9305,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 60, + "last_input_sequence": 48, "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 1000, + "stamina": 988, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -8209,10 +9333,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 112, + "x": 199, "y": 0 }, { @@ -8232,7 +9356,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "none", + "defense": "guard_high", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -8242,7 +9366,8 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 700, + "guard": 656, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -8259,7 +9384,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 0, + "head": 2, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -8274,39 +9399,59 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999939, + "phase_ticks_remaining": 999941, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 61 + "tick": 59 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 61 + "tick": 59 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "a7c9c3b9efd95a068afd3f735664363bcb51a51dc5b9374430aabc6416b330b4", + "checksum": "f2a319daacf5ca1b56d749fa340a4cc8d6c12720c551c51ea3f4b80554673db9", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "jab", + "action_active_ticks": 2, + "action_contact_tick": 54, + "action_hand": "left", + "action_id": "one@52", + "action_key": "jab:left:head:normal", + "action_power": "normal", + "action_recovery_ticks": 3, + "action_start_tick": 52, + "action_startup_ticks": 2, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 1000, + "conditioning": 999, "corner_choice": null, "deductions": 0, "defense": "none", @@ -8316,19 +9461,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 61, + "last_input_sequence": 48, "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 1000, + "stamina": 993, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -8343,10 +9489,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 119, + "x": 199, "y": 0 }, { @@ -8366,7 +9512,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "none", + "defense": "guard_high", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -8376,7 +9522,8 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 700, + "guard": 653, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -8393,7 +9540,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 0, + "head": 2, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -8408,39 +9555,59 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999938, + "phase_ticks_remaining": 999940, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 62 + "tick": 60 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 62 + "tick": 60 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "d796385c452cc7b3093a167b257ad1524be828757a10be985734cd48a200cd7c", + "checksum": "b3a4d6d0ce2dc5c09cf8d6fe788136212c36fe5cb24948fb4db7b0423652cd9a", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "jab", + "action_active_ticks": 2, + "action_contact_tick": 54, + "action_hand": "left", + "action_id": "one@52", + "action_key": "jab:left:head:normal", + "action_power": "normal", + "action_recovery_ticks": 3, + "action_start_tick": 52, + "action_startup_ticks": 2, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 1000, + "conditioning": 999, "corner_choice": null, "deductions": 0, "defense": "none", @@ -8450,19 +9617,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 62, + "last_input_sequence": 48, "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 1000, + "stamina": 998, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -8477,10 +9645,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 126, + "x": 199, "y": 0 }, { @@ -8500,7 +9668,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "none", + "defense": "guard_high", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -8510,7 +9678,8 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 700, + "guard": 650, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -8527,7 +9696,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 0, + "head": 2, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -8542,39 +9711,59 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999937, + "phase_ticks_remaining": 999939, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 63 + "tick": 61 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 63 + "tick": 61 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "b1b480588957cb4f729ce9b2bae594c90654b3b67be35f55132dc6273822aaa8", + "checksum": "cea9f2b088e7434db1f17be0096f308c987ea871d3f752b71da0122f47e89b46", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "jab", + "action_active_ticks": 2, + "action_contact_tick": 54, + "action_hand": "left", + "action_id": "one@52", + "action_key": "jab:left:head:normal", + "action_power": "normal", + "action_recovery_ticks": 3, + "action_start_tick": 52, + "action_startup_ticks": 2, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 1000, + "conditioning": 999, "corner_choice": null, "deductions": 0, "defense": "none", @@ -8584,14 +9773,15 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 63, + "last_input_sequence": 48, "maximum_stamina": 1000, "player_id": "one", "poise": 600, @@ -8611,10 +9801,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 133, + "x": 199, "y": 0 }, { @@ -8634,7 +9824,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "none", + "defense": "guard_high", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -8644,7 +9834,8 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 700, + "guard": 647, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -8661,7 +9852,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 0, + "head": 2, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -8676,39 +9867,59 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999936, + "phase_ticks_remaining": 999938, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 64 + "tick": 62 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 64 + "tick": 62 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "6ae44cbd2c6b4d78f2f8273fb6a49e1be3bcba80397c5c0464b0e1331b3b98f6", + "checksum": "7eb4b9876cfc7dacb255ecdb2755d0784bda09574a2d39fb8dec34bd102aec75", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "jab", + "action_active_ticks": 2, + "action_contact_tick": 54, + "action_hand": "left", + "action_id": "one@52", + "action_key": "jab:left:head:normal", + "action_power": "normal", + "action_recovery_ticks": 3, + "action_start_tick": 52, + "action_startup_ticks": 2, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 1000, + "conditioning": 999, "corner_choice": null, "deductions": 0, "defense": "none", @@ -8718,14 +9929,15 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 64, + "last_input_sequence": 48, "maximum_stamina": 1000, "player_id": "one", "poise": 600, @@ -8745,10 +9957,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 140, + "x": 199, "y": 0 }, { @@ -8768,7 +9980,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "none", + "defense": "guard_high", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -8778,7 +9990,8 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 700, + "guard": 644, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -8795,7 +10008,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 0, + "head": 2, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -8810,39 +10023,59 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999935, + "phase_ticks_remaining": 999937, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 65 + "tick": 63 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 65 + "tick": 63 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "3d994e3cd367792a1dded1b31e1ebd53efe6161177f337c40d92431c384301bb", + "checksum": "a4ced7246590c6dc8a7efdbc065ccd9152cf3ed5600ecd4c331e47caadd56083", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "jab", + "action_active_ticks": 2, + "action_contact_tick": 54, + "action_hand": "left", + "action_id": "one@52", + "action_key": "jab:left:head:normal", + "action_power": "normal", + "action_recovery_ticks": 3, + "action_start_tick": 52, + "action_startup_ticks": 2, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 1000, + "conditioning": 999, "corner_choice": null, "deductions": 0, "defense": "none", @@ -8852,14 +10085,15 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 65, + "last_input_sequence": 48, "maximum_stamina": 1000, "player_id": "one", "poise": 600, @@ -8879,10 +10113,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 147, + "x": 199, "y": 0 }, { @@ -8902,7 +10136,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "none", + "defense": "guard_high", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -8912,7 +10146,8 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 700, + "guard": 641, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -8929,7 +10164,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 0, + "head": 2, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -8944,39 +10179,59 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999934, + "phase_ticks_remaining": 999936, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 66 + "tick": 64 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 66 + "tick": 64 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "ed3f151361d56f20f7f529449a1f686cfc7bc995f8db90a75c627b528940b423", + "checksum": "fb0cbf3be6e13353500c41456e1b34fa214e464823350693665fccabe2042084", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "jab", + "action_active_ticks": 2, + "action_contact_tick": 54, + "action_hand": "left", + "action_id": "one@52", + "action_key": "jab:left:head:normal", + "action_power": "normal", + "action_recovery_ticks": 3, + "action_start_tick": 52, + "action_startup_ticks": 2, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 1000, + "conditioning": 999, "corner_choice": null, "deductions": 0, "defense": "none", @@ -8986,14 +10241,15 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 66, + "last_input_sequence": 48, "maximum_stamina": 1000, "player_id": "one", "poise": 600, @@ -9013,10 +10269,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 154, + "x": 199, "y": 0 }, { @@ -9036,7 +10292,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "none", + "defense": "guard_high", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -9046,7 +10302,8 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 700, + "guard": 638, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -9063,7 +10320,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 0, + "head": 2, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -9078,39 +10335,59 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999933, + "phase_ticks_remaining": 999935, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 67 + "tick": 65 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 67 + "tick": 65 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "591125fb7bee8b250f926976fb281720e0cb7cd631194552eb6968612f3306ac", + "checksum": "ba5bdbec35f2373c214feea59f8c85336354df71fc945969f1f83244c6518641", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "jab", + "action_active_ticks": 2, + "action_contact_tick": 54, + "action_hand": "left", + "action_id": "one@52", + "action_key": "jab:left:head:normal", + "action_power": "normal", + "action_recovery_ticks": 3, + "action_start_tick": 52, + "action_startup_ticks": 2, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 1000, + "conditioning": 999, "corner_choice": null, "deductions": 0, "defense": "none", @@ -9120,14 +10397,15 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 67, + "last_input_sequence": 49, "maximum_stamina": 1000, "player_id": "one", "poise": 600, @@ -9147,10 +10425,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 161, + "x": 199, "y": 0 }, { @@ -9170,7 +10448,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "none", + "defense": "guard_high", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -9180,7 +10458,8 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 700, + "guard": 635, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -9197,7 +10476,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 0, + "head": 2, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -9212,39 +10491,59 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999932, + "phase_ticks_remaining": 999934, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 68 + "tick": 66 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 68 + "tick": 66 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "b647d414216faea784d8055a1d60b5bf11f84afc025ae36bfb3a14b0ae00c086", + "checksum": "fb9567a06822dddb9ca695274ed10b51b285a8461d115913419fa9fce4581002", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "jab", + "action_active_ticks": 2, + "action_contact_tick": 54, + "action_hand": "left", + "action_id": "one@52", + "action_key": "jab:left:head:normal", + "action_power": "normal", + "action_recovery_ticks": 3, + "action_start_tick": 52, + "action_startup_ticks": 2, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 1000, + "conditioning": 999, "corner_choice": null, "deductions": 0, "defense": "none", @@ -9254,14 +10553,15 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 67, + "last_input_sequence": 50, "maximum_stamina": 1000, "player_id": "one", "poise": 600, @@ -9281,10 +10581,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 168, + "x": 199, "y": 0 }, { @@ -9304,7 +10604,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "none", + "defense": "guard_high", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -9314,7 +10614,8 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 700, + "guard": 632, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -9331,7 +10632,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 0, + "head": 2, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -9346,39 +10647,59 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999931, + "phase_ticks_remaining": 999933, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 69 + "tick": 67 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 69 + "tick": 67 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "6f7fcf81f6ccb8a4e064264a87a93b6165f144f021cb37a7d97bb0fb3569bd9d", + "checksum": "2353cc36af09dbe3a68ec4786ed279d66ccd75649a5273b1d268f74c7fe24110", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "jab", + "action_active_ticks": 2, + "action_contact_tick": 54, + "action_hand": "left", + "action_id": "one@52", + "action_key": "jab:left:head:normal", + "action_power": "normal", + "action_recovery_ticks": 3, + "action_start_tick": 52, + "action_startup_ticks": 2, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 1000, + "conditioning": 999, "corner_choice": null, "deductions": 0, "defense": "none", @@ -9388,14 +10709,15 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 67, + "last_input_sequence": 51, "maximum_stamina": 1000, "player_id": "one", "poise": 600, @@ -9415,10 +10737,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 175, + "x": 199, "y": 0 }, { @@ -9448,7 +10770,8 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 700, + "guard": 629, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -9465,7 +10788,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 0, + "head": 2, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -9480,39 +10803,59 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999930, + "phase_ticks_remaining": 999932, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 70 + "tick": 68 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 70 + "tick": 68 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "5d91d6a55cc3476bdcd778ea8f946a75038a883131ef4fc228184f24af5c79c9", + "checksum": "03804c707d9a5ebc1273292f68925b53b6c7104b609e13038934e0a5b9375bd0", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "jab", + "action_active_ticks": 2, + "action_contact_tick": 54, + "action_hand": "left", + "action_id": "one@52", + "action_key": "jab:left:head:normal", + "action_power": "normal", + "action_recovery_ticks": 3, + "action_start_tick": 52, + "action_startup_ticks": 2, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 1000, + "conditioning": 999, "corner_choice": null, "deductions": 0, "defense": "none", @@ -9522,14 +10865,15 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 67, + "last_input_sequence": 52, "maximum_stamina": 1000, "player_id": "one", "poise": 600, @@ -9549,10 +10893,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 7, + "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 182, + "x": 199, "y": 0 }, { @@ -9582,7 +10926,8 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 700, + "guard": 626, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -9599,7 +10944,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 0, + "head": 2, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -9614,63 +10959,59 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999929, + "phase_ticks_remaining": 999931, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 71 + "tick": 69 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 71 + "tick": 69 }, { - "attack_one": { - "active": 2, - "age": 0, - "class": "jab", - "combo_bonus": 0, - "hand": "left", - "power": "normal", - "recovery": 6, - "resolved": false, - "startup": 3, - "target": "head" - }, + "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "01a30833187008f454573ac024b4aa7cb5892ca00016be4b3909409b7b052fab", - "events": [ - { - "action_id": "one@72", - "actor_id": "one", - "amount": 0, - "blood": 0, - "detail": "left:jab:head", - "direction": 0, - "event_id": 1, - "kind": "punch_start", - "target_id": null, - "tick": 72 - } - ], + "checksum": "ef77909d984d02a25c5d0312620bc818f4fd0c8b1e0823ed82921231516b6009", + "events": [], "fighters": [ { "action": "jab", "action_active_ticks": 2, - "action_contact_tick": null, + "action_contact_tick": 54, "action_hand": "left", - "action_id": "one@72", + "action_id": "one@52", "action_key": "jab:left:head:normal", "action_power": "normal", - "action_recovery_ticks": 6, - "action_start_tick": 72, - "action_startup_ticks": 3, + "action_recovery_ticks": 3, + "action_start_tick": 52, + "action_startup_ticks": 2, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 997, + "conditioning": 999, "corner_choice": null, "deductions": 0, "defense": "none", @@ -9680,19 +11021,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 68, - "maximum_stamina": 999, + "last_input_sequence": 53, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 959, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -9707,10 +11049,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 3, + "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 186, + "x": 199, "y": 0 }, { @@ -9740,7 +11082,8 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 700, + "guard": 623, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -9757,7 +11100,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 0, + "head": 2, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -9772,50 +11115,59 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999928, + "phase_ticks_remaining": 999930, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 72 + "tick": 70 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 72 + "tick": 70 }, { - "attack_one": { - "active": 2, - "age": 1, - "class": "jab", - "combo_bonus": 0, - "hand": "left", - "power": "normal", - "recovery": 6, - "resolved": false, - "startup": 3, - "target": "head" - }, + "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "27c1a840f25712e9d07c306d354414c6c87996f1ed6b85d4a5a338f875b77b69", + "checksum": "36e6b21ac44382d201bf8be13fee5c632562b0129c021b23df333b9aefa7abe8", "events": [], "fighters": [ { "action": "jab", "action_active_ticks": 2, - "action_contact_tick": null, + "action_contact_tick": 54, "action_hand": "left", - "action_id": "one@72", + "action_id": "one@52", "action_key": "jab:left:head:normal", "action_power": "normal", - "action_recovery_ticks": 6, - "action_start_tick": 72, - "action_startup_ticks": 3, + "action_recovery_ticks": 3, + "action_start_tick": 52, + "action_startup_ticks": 2, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 997, + "conditioning": 999, "corner_choice": null, "deductions": 0, "defense": "none", @@ -9825,19 +11177,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 68, - "maximum_stamina": 999, + "last_input_sequence": 54, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 960, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -9852,10 +11205,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 2, + "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 188, + "x": 199, "y": 0 }, { @@ -9885,7 +11238,8 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 700, + "guard": 620, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -9902,7 +11256,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 0, + "head": 2, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -9917,50 +11271,59 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999927, + "phase_ticks_remaining": 999929, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 73 + "tick": 71 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 73 + "tick": 71 }, { - "attack_one": { - "active": 2, - "age": 2, - "class": "jab", - "combo_bonus": 0, - "hand": "left", - "power": "normal", - "recovery": 6, - "resolved": false, - "startup": 3, - "target": "head" - }, + "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "616bfec969886be5ae5b7ee50d8594a8e0631eef8235454e0f7ec088c08246d8", + "checksum": "6da310a0ee8a85ca8b29a1940049fd2f6d384e4eeaf80d73e4492a3ebf99b661", "events": [], "fighters": [ { "action": "jab", "action_active_ticks": 2, - "action_contact_tick": null, + "action_contact_tick": 54, "action_hand": "left", - "action_id": "one@72", + "action_id": "one@52", "action_key": "jab:left:head:normal", "action_power": "normal", - "action_recovery_ticks": 6, - "action_start_tick": 72, - "action_startup_ticks": 3, + "action_recovery_ticks": 3, + "action_start_tick": 52, + "action_startup_ticks": 2, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 997, + "conditioning": 999, "corner_choice": null, "deductions": 0, "defense": "none", @@ -9970,19 +11333,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 68, - "maximum_stamina": 999, + "last_input_sequence": 55, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 961, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -9997,10 +11361,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 1, + "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 189, + "x": 199, "y": 0 }, { @@ -10030,7 +11394,8 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 700, + "guard": 617, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, @@ -10047,7 +11412,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 0, + "head": 2, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -10062,75 +11427,59 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999926, + "phase_ticks_remaining": 999928, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 74 + "tick": 72 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 74 + "tick": 72 }, { - "attack_one": { - "active": 2, - "age": 3, - "class": "jab", - "combo_bonus": 0, - "hand": "left", - "power": "normal", - "recovery": 6, - "resolved": true, - "startup": 3, - "target": "head" - }, + "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "c1958b7217398ff3dc4f1d121c42bfb62f382c2e2fa112e42b57071e7b35643a", - "events": [ - { - "action_id": "one@72", - "actor_id": "two", - "amount": 26, - "blood": 0, - "detail": "", - "direction": 0, - "event_id": 2, - "kind": "block", - "target_id": "one", - "tick": 75 - }, - { - "action_id": "one@72", - "actor_id": "one", - "amount": 3, - "blood": 0, - "detail": "jab:head", - "direction": 1, - "event_id": 3, - "kind": "hit", - "target_id": "two", - "tick": 75 - } - ], + "checksum": "3317021d3ca32913084672f3f05c7dcb7f7aece9f5308f2b79e2b6220935b527", + "events": [], "fighters": [ { "action": "jab", "action_active_ticks": 2, - "action_contact_tick": 75, + "action_contact_tick": 54, "action_hand": "left", - "action_id": "one@72", + "action_id": "one@52", "action_key": "jab:left:head:normal", "action_power": "normal", - "action_recovery_ticks": 6, - "action_start_tick": 72, - "action_startup_ticks": 3, + "action_recovery_ticks": 3, + "action_start_tick": 52, + "action_startup_ticks": 2, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 997, + "conditioning": 999, "corner_choice": null, "deductions": 0, "defense": "none", @@ -10140,19 +11489,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 68, - "maximum_stamina": 999, + "last_input_sequence": 56, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 962, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -10170,7 +11520,7 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 189, + "x": 199, "y": 0 }, { @@ -10200,14 +11550,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 674, + "guard": 614, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 593, + "poise": 600, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -10217,7 +11568,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 3, + "head": 2, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -10232,50 +11583,59 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999925, + "phase_ticks_remaining": 999927, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 75 + "tick": 73 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 75 + "tick": 73 }, { - "attack_one": { - "active": 2, - "age": 4, - "class": "jab", - "combo_bonus": 0, - "hand": "left", - "power": "normal", - "recovery": 6, - "resolved": true, - "startup": 3, - "target": "head" - }, + "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "f4244a4aa4e56f2702a936cebaf59019da3e4e3b6248a803632ebe6a30f1622f", + "checksum": "4899a81d7cfb783b8f06b3e068ef992f5fa511b8f9556fbcd18c0df085134b2c", "events": [], "fighters": [ { "action": "jab", "action_active_ticks": 2, - "action_contact_tick": 75, + "action_contact_tick": 54, "action_hand": "left", - "action_id": "one@72", + "action_id": "one@52", "action_key": "jab:left:head:normal", "action_power": "normal", - "action_recovery_ticks": 6, - "action_start_tick": 72, - "action_startup_ticks": 3, + "action_recovery_ticks": 3, + "action_start_tick": 52, + "action_startup_ticks": 2, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 997, + "conditioning": 999, "corner_choice": null, "deductions": 0, "defense": "none", @@ -10285,19 +11645,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 68, - "maximum_stamina": 999, + "last_input_sequence": 57, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 963, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -10315,7 +11676,7 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 189, + "x": 199, "y": 0 }, { @@ -10345,14 +11706,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 677, + "guard": 611, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 594, + "poise": 600, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -10362,7 +11724,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 3, + "head": 2, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -10377,50 +11739,59 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999924, + "phase_ticks_remaining": 999926, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 76 + "tick": 74 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 76 + "tick": 74 }, { - "attack_one": { - "active": 2, - "age": 5, - "class": "jab", - "combo_bonus": 0, - "hand": "left", - "power": "normal", - "recovery": 6, - "resolved": true, - "startup": 3, - "target": "head" - }, + "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "d3a4288a29f021915b3e2021f5d65c25df0f41f1ed6bc80180e7a2e2fc6a9924", + "checksum": "97f195488cba62e2613f0d7d78df5f856a9a230d223346fa009ff588d273f62d", "events": [], "fighters": [ { - "action": "jab", - "action_active_ticks": 2, - "action_contact_tick": 75, - "action_hand": "left", - "action_id": "one@72", - "action_key": "jab:left:head:normal", - "action_power": "normal", - "action_recovery_ticks": 6, - "action_start_tick": 72, - "action_startup_ticks": 3, - "action_target": "head", + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 997, + "conditioning": 999, "corner_choice": null, "deductions": 0, "defense": "none", @@ -10430,19 +11801,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 68, - "maximum_stamina": 999, + "last_input_sequence": 58, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 964, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -10460,7 +11832,7 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 189, + "x": 199, "y": 0 }, { @@ -10490,14 +11862,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 677, + "guard": 608, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 594, + "poise": 600, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -10507,7 +11880,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 3, + "head": 2, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -10522,50 +11895,59 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999923, + "phase_ticks_remaining": 999925, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 77 + "tick": 75 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 77 + "tick": 75 }, { - "attack_one": { - "active": 2, - "age": 6, - "class": "jab", - "combo_bonus": 0, - "hand": "left", - "power": "normal", - "recovery": 6, - "resolved": true, - "startup": 3, - "target": "head" - }, + "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "5c18a50dfa55b207d21637876b8d0f363ce42f47a83ea5e1ab4397da8ad817b4", + "checksum": "d13774a3341390feb20434ddff5d403a2ee345ca19a8e1979652b7f677c14660", "events": [], "fighters": [ { - "action": "jab", - "action_active_ticks": 2, - "action_contact_tick": 75, - "action_hand": "left", - "action_id": "one@72", - "action_key": "jab:left:head:normal", - "action_power": "normal", - "action_recovery_ticks": 6, - "action_start_tick": 72, - "action_startup_ticks": 3, - "action_target": "head", + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 997, + "conditioning": 999, "corner_choice": null, "deductions": 0, "defense": "none", @@ -10575,19 +11957,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 68, - "maximum_stamina": 999, + "last_input_sequence": 59, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 965, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -10605,7 +11988,7 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 189, + "x": 199, "y": 0 }, { @@ -10635,14 +12018,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 677, + "guard": 605, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 595, + "poise": 600, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -10652,7 +12036,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 3, + "head": 2, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -10667,50 +12051,59 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999922, + "phase_ticks_remaining": 999924, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 78 + "tick": 76 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 78 + "tick": 76 }, { - "attack_one": { - "active": 2, - "age": 7, - "class": "jab", - "combo_bonus": 0, - "hand": "left", - "power": "normal", - "recovery": 6, - "resolved": true, - "startup": 3, - "target": "head" - }, + "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "b9da4696313e21ed910362860b26caf3506d2dbcb4b6a4de2f3f9e1f80b6348b", + "checksum": "40dc7ddb40b0459d56fdb4962bd44ae04810c42faeea82b0d529ba2c7748ac3f", "events": [], "fighters": [ { - "action": "jab", - "action_active_ticks": 2, - "action_contact_tick": 75, - "action_hand": "left", - "action_id": "one@72", - "action_key": "jab:left:head:normal", - "action_power": "normal", - "action_recovery_ticks": 6, - "action_start_tick": 72, - "action_startup_ticks": 3, - "action_target": "head", + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 997, + "conditioning": 999, "corner_choice": null, "deductions": 0, "defense": "none", @@ -10720,19 +12113,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 68, - "maximum_stamina": 999, + "last_input_sequence": 60, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 966, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -10750,7 +12144,7 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 189, + "x": 199, "y": 0 }, { @@ -10780,14 +12174,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 677, + "guard": 602, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 595, + "poise": 600, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -10797,7 +12192,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 3, + "head": 2, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -10812,50 +12207,59 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999921, + "phase_ticks_remaining": 999923, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 79 + "tick": 77 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 79 + "tick": 77 }, { - "attack_one": { - "active": 2, - "age": 8, - "class": "jab", - "combo_bonus": 0, - "hand": "left", - "power": "normal", - "recovery": 6, - "resolved": true, - "startup": 3, - "target": "head" - }, + "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "4a53bc9fbb5f43a19b8d50f912ecbba2bf53b17a955bda7ac867bb13d53eae98", + "checksum": "425f27373b505477f2912543ff8060dce8c004ea909a3c185e7998a6eae515f1", "events": [], "fighters": [ { - "action": "jab", - "action_active_ticks": 2, - "action_contact_tick": 75, - "action_hand": "left", - "action_id": "one@72", - "action_key": "jab:left:head:normal", - "action_power": "normal", - "action_recovery_ticks": 6, - "action_start_tick": 72, - "action_startup_ticks": 3, - "action_target": "head", + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 997, + "conditioning": 999, "corner_choice": null, "deductions": 0, "defense": "none", @@ -10865,19 +12269,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 68, - "maximum_stamina": 999, + "last_input_sequence": 61, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 967, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -10895,7 +12300,7 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 189, + "x": 199, "y": 0 }, { @@ -10925,14 +12330,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 680, + "guard": 599, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 596, + "poise": 600, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -10942,7 +12348,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 3, + "head": 2, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -10957,50 +12363,59 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999920, + "phase_ticks_remaining": 999922, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 80 + "tick": 78 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 80 + "tick": 78 }, { - "attack_one": { - "active": 2, - "age": 9, - "class": "jab", - "combo_bonus": 0, - "hand": "left", - "power": "normal", - "recovery": 6, - "resolved": true, - "startup": 3, - "target": "head" - }, + "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "a51e6bd8bd287c66d9b4092b3bce957d55f764a04c44db00f25befab19b4445b", + "checksum": "8f661af7d043adb291ae02ccc342850ec8f90d631348b1092184a281b2b79ff5", "events": [], "fighters": [ { - "action": "jab", - "action_active_ticks": 2, - "action_contact_tick": 75, - "action_hand": "left", - "action_id": "one@72", - "action_key": "jab:left:head:normal", - "action_power": "normal", - "action_recovery_ticks": 6, - "action_start_tick": 72, - "action_startup_ticks": 3, - "action_target": "head", + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 997, + "conditioning": 999, "corner_choice": null, "deductions": 0, "defense": "none", @@ -11010,19 +12425,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 68, - "maximum_stamina": 999, + "last_input_sequence": 62, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 968, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -11040,7 +12456,7 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 189, + "x": 199, "y": 0 }, { @@ -11070,14 +12486,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 680, + "guard": 596, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 596, + "poise": 600, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -11087,7 +12504,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 3, + "head": 2, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -11102,50 +12519,83 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999919, + "phase_ticks_remaining": 999921, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 81 + "tick": 79 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 81 + "tick": 79 }, { "attack_one": { "active": 2, - "age": 10, + "age": 0, "class": "jab", "combo_bonus": 0, "hand": "left", "power": "normal", - "recovery": 6, - "resolved": true, - "startup": 3, + "recovery": 3, + "resolved": false, + "startup": 2, "target": "head" }, "attack_two": null, "snapshot": { "payload": { - "checksum": "091efc5a67115716b64496c28499fdedf4465f1e9e6e0f020fd44509434ad5c7", - "events": [], + "checksum": "1ae260aa67ee20347556b563eed95bc62630837a5680d9c56d1410ec4c834715", + "events": [ + { + "action_id": "one@80", + "actor_id": "one", + "amount": 0, + "blood": 0, + "detail": "left:jab:head", + "direction": 0, + "event_id": 4, + "kind": "punch_start", + "target_id": null, + "tick": 80 + } + ], "fighters": [ { "action": "jab", "action_active_ticks": 2, - "action_contact_tick": 75, + "action_contact_tick": null, "action_hand": "left", - "action_id": "one@72", + "action_id": "one@80", "action_key": "jab:left:head:normal", "action_power": "normal", - "action_recovery_ticks": 6, - "action_start_tick": 72, - "action_startup_ticks": 3, + "action_recovery_ticks": 3, + "action_start_tick": 80, + "action_startup_ticks": 2, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 997, + "conditioning": 998, "corner_choice": null, "deductions": 0, "defense": "none", @@ -11155,19 +12605,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 68, - "maximum_stamina": 999, + "last_input_sequence": 63, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 969, + "stamina": 977, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -11185,7 +12636,7 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 189, + "x": 199, "y": 0 }, { @@ -11215,14 +12666,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 680, + "guard": 593, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 597, + "poise": 600, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -11232,7 +12684,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 3, + "head": 2, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -11247,39 +12699,70 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999918, + "phase_ticks_remaining": 999920, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 82 + "tick": 80 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 82 + "tick": 80 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 1, + "class": "jab", + "combo_bonus": 0, + "hand": "left", + "power": "normal", + "recovery": 3, + "resolved": false, + "startup": 2, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "97f829b52b63e59a4bade88321a08592cc5d67c9f2c5e94b9351780e7f41637e", + "checksum": "5a670942fdc29d1bd93fc1ec4eb510e31f11d85a88f3200e6fde0de5c60fec6a", "events": [], "fighters": [ { "action": "jab", "action_active_ticks": 2, - "action_contact_tick": 75, + "action_contact_tick": null, "action_hand": "left", - "action_id": "one@72", + "action_id": "one@80", "action_key": "jab:left:head:normal", "action_power": "normal", - "action_recovery_ticks": 6, - "action_start_tick": 72, - "action_startup_ticks": 3, + "action_recovery_ticks": 3, + "action_start_tick": 80, + "action_startup_ticks": 2, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 997, + "conditioning": 998, "corner_choice": null, "deductions": 0, "defense": "none", @@ -11289,19 +12772,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 68, - "maximum_stamina": 999, + "last_input_sequence": 63, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 972, + "stamina": 979, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -11319,7 +12803,7 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 189, + "x": 199, "y": 0 }, { @@ -11349,14 +12833,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 680, + "guard": 590, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 597, + "poise": 600, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -11366,7 +12851,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 3, + "head": 2, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -11381,173 +12866,95 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999917, + "phase_ticks_remaining": 999919, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 83 + "tick": 81 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 83 + "tick": 81 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 2, + "class": "jab", + "combo_bonus": 0, + "hand": "left", + "power": "normal", + "recovery": 3, + "resolved": true, + "startup": 2, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "6dd79116361c5c5008e6f8aa77eb12c20e5ffd2f6bfe9b725491b7ae64f95b6d", - "events": [], - "fighters": [ + "checksum": "fe7b2afa70b8c452f6a68c90a0a7ffa876efe784749713f872a08ad4e6d19f36", + "events": [ { - "action": "jab", - "action_active_ticks": 2, - "action_contact_tick": 75, - "action_hand": "left", - "action_id": "one@72", - "action_key": "jab:left:head:normal", - "action_power": "normal", - "action_recovery_ticks": 6, - "action_start_tick": 72, - "action_startup_ticks": 3, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 997, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": 0, - "get_up_count": 0, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 68, - "maximum_stamina": 999, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 976, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 189, - "y": 0 + "action_id": "one@80", + "actor_id": "two", + "amount": 44, + "blood": 0, + "detail": "", + "direction": 0, + "event_id": 5, + "kind": "block", + "target_id": "one", + "tick": 82 }, { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "guard_high", - "facing": -1, - "facing_x": -1000, - "facing_y": 0, - "get_up_count": 0, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 683, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 598, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 3, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 + "action_id": "one@80", + "actor_id": "one", + "amount": 10, + "blood": 3, + "detail": "jab:head", + "direction": 1, + "event_id": 6, + "kind": "hit", + "target_id": "two", + "tick": 82 } ], - "phase": "fight", - "phase_ticks_remaining": 999916, - "result": null, - "round_number": 1, - "tick": 84 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 84 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "f4b8a925484b7af4b566e35c482e42ad9f127252e528ca82daa43e08f2f49af6", - "events": [], "fighters": [ { "action": "jab", "action_active_ticks": 2, - "action_contact_tick": 75, + "action_contact_tick": 82, "action_hand": "left", - "action_id": "one@72", + "action_id": "one@80", "action_key": "jab:left:head:normal", "action_power": "normal", - "action_recovery_ticks": 6, - "action_start_tick": 72, - "action_startup_ticks": 3, + "action_recovery_ticks": 3, + "action_start_tick": 80, + "action_startup_ticks": 2, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 997, + "conditioning": 998, "corner_choice": null, "deductions": 0, "defense": "none", @@ -11557,19 +12964,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 68, - "maximum_stamina": 999, + "last_input_sequence": 63, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 980, + "stamina": 981, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -11587,7 +12995,7 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 189, + "x": 199, "y": 0 }, { @@ -11617,14 +13025,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 683, + "guard": 543, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 598, + "poise": 593, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -11634,7 +13043,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 3, + "head": 8, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -11649,39 +13058,70 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999915, + "phase_ticks_remaining": 999918, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 85 + "tick": 82 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 85 + "tick": 82 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 3, + "class": "jab", + "combo_bonus": 0, + "hand": "left", + "power": "normal", + "recovery": 3, + "resolved": true, + "startup": 2, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "82ae950889c7c24b2fdd534e32f232499e7e5395ffc7a49bd627907f41652666", + "checksum": "3cb0dfef3826aa319be6ad4d3e39c7b4bc01ea1d894ed267539feeed59a3075a", "events": [], "fighters": [ { "action": "jab", "action_active_ticks": 2, - "action_contact_tick": 75, + "action_contact_tick": 82, "action_hand": "left", - "action_id": "one@72", + "action_id": "one@80", "action_key": "jab:left:head:normal", "action_power": "normal", - "action_recovery_ticks": 6, - "action_start_tick": 72, - "action_startup_ticks": 3, + "action_recovery_ticks": 3, + "action_start_tick": 80, + "action_startup_ticks": 2, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 997, + "conditioning": 998, "corner_choice": null, "deductions": 0, "defense": "none", @@ -11691,19 +13131,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 69, - "maximum_stamina": 999, + "last_input_sequence": 63, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 983, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -11721,7 +13162,7 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 189, + "x": 199, "y": 0 }, { @@ -11751,14 +13192,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 683, + "guard": 540, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 599, + "poise": 593, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -11768,7 +13210,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 3, + "head": 8, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -11783,39 +13225,70 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999914, + "phase_ticks_remaining": 999917, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 86 + "tick": 83 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 86 + "tick": 83 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 4, + "class": "jab", + "combo_bonus": 0, + "hand": "left", + "power": "normal", + "recovery": 3, + "resolved": true, + "startup": 2, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "144be854e8c83f2d287ed64bbf3a99280ac361f3f6c188b41c55932be86c5fed", + "checksum": "a0d0ae20310249947375312a7a12797d4cc2cc5598f8f9bb36609d01d68a5ccf", "events": [], "fighters": [ { "action": "jab", "action_active_ticks": 2, - "action_contact_tick": 75, + "action_contact_tick": 82, "action_hand": "left", - "action_id": "one@72", + "action_id": "one@80", "action_key": "jab:left:head:normal", "action_power": "normal", - "action_recovery_ticks": 6, - "action_start_tick": 72, - "action_startup_ticks": 3, + "action_recovery_ticks": 3, + "action_start_tick": 80, + "action_startup_ticks": 2, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 997, + "conditioning": 998, "corner_choice": null, "deductions": 0, "defense": "none", @@ -11825,19 +13298,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 70, - "maximum_stamina": 999, + "last_input_sequence": 63, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 988, + "stamina": 985, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -11855,7 +13329,7 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 189, + "x": 199, "y": 0 }, { @@ -11885,14 +13359,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 683, + "guard": 537, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 599, + "poise": 594, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -11902,7 +13377,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 3, + "head": 8, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -11917,39 +13392,70 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999913, + "phase_ticks_remaining": 999916, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 87 + "tick": 84 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 87 + "tick": 84 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 5, + "class": "jab", + "combo_bonus": 0, + "hand": "left", + "power": "normal", + "recovery": 3, + "resolved": true, + "startup": 2, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "d7c0c09cfae9e7edc8dc64b8c0e06178811e06dc7097a0c3fa63a417508ea9b3", + "checksum": "09ec1fc37287739b745a17163716aaff87d11a22c60fd3d92d575c41c444c56e", "events": [], "fighters": [ { "action": "jab", "action_active_ticks": 2, - "action_contact_tick": 75, + "action_contact_tick": 82, "action_hand": "left", - "action_id": "one@72", + "action_id": "one@80", "action_key": "jab:left:head:normal", "action_power": "normal", - "action_recovery_ticks": 6, - "action_start_tick": 72, - "action_startup_ticks": 3, + "action_recovery_ticks": 3, + "action_start_tick": 80, + "action_startup_ticks": 2, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 997, + "conditioning": 998, "corner_choice": null, "deductions": 0, "defense": "none", @@ -11959,19 +13465,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 71, - "maximum_stamina": 999, + "last_input_sequence": 63, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 992, + "stamina": 987, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -11989,7 +13496,7 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 189, + "x": 199, "y": 0 }, { @@ -12019,15 +13526,183 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 686, + "guard": 534, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", + "poise": 594, + "queued_actions": 0, + "stamina": 1000, + "stance": "orthodox", + "stunned_ticks": 0, + "style": "slugger", + "taunt_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 8, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "warnings": 0, + "x": 300, + "y": 0 + } + ], + "phase": "fight", + "phase_ticks_remaining": 999915, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, + "result": null, + "round_number": 1, + "tick": 85 + }, + "type": "snapshot", + "version": 5 + }, + "tick": 85 + }, + { + "attack_one": { + "active": 2, + "age": 6, + "class": "jab", + "combo_bonus": 0, + "hand": "left", + "power": "normal", + "recovery": 3, + "resolved": true, + "startup": 2, + "target": "head" + }, + "attack_two": null, + "snapshot": { + "payload": { + "checksum": "4bba3697c933b7b944fc30bb909debdc9ec1aacb18838868603559ceb28b0cda", + "events": [], + "fighters": [ + { + "action": "jab", + "action_active_ticks": 2, + "action_contact_tick": 82, + "action_hand": "left", + "action_id": "one@80", + "action_key": "jab:left:head:normal", + "action_power": "normal", + "action_recovery_ticks": 3, + "action_start_tick": 80, + "action_startup_ticks": 2, + "action_target": "head", + "clinch_startup_ticks": 0, + "clinch_ticks": 0, + "conditioning": 998, + "corner_choice": null, + "deductions": 0, + "defense": "none", + "facing": 1, + "facing_x": 1000, + "facing_y": 0, + "get_up_count": 0, + "get_up_meter": 0, + "get_up_prompt": null, + "get_up_required": 30, + "get_up_window_end_tick": 0, + "get_up_window_start_tick": 0, + "guard": 700, + "guard_broken": false, + "is_downed": false, + "is_foul_recovery_target": false, + "knockdowns": 0, + "last_input_sequence": 63, + "maximum_stamina": 1000, + "player_id": "one", "poise": 600, "queued_actions": 0, + "stamina": 989, + "stance": "orthodox", + "stunned_ticks": 0, + "style": "boxer", + "taunt_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "warnings": 0, + "x": 199, + "y": 0 + }, + { + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, + "clinch_startup_ticks": 0, + "clinch_ticks": 0, + "conditioning": 1000, + "corner_choice": null, + "deductions": 0, + "defense": "guard_high", + "facing": -1, + "facing_x": -1000, + "facing_y": 0, + "get_up_count": 0, + "get_up_meter": 0, + "get_up_prompt": null, + "get_up_required": 0, + "get_up_window_end_tick": 0, + "get_up_window_start_tick": 0, + "guard": 531, + "guard_broken": false, + "is_downed": false, + "is_foul_recovery_target": false, + "knockdowns": 0, + "last_input_sequence": -1, + "maximum_stamina": 1000, + "player_id": "two", + "poise": 595, + "queued_actions": 0, "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, @@ -12036,7 +13711,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 3, + "head": 8, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -12051,39 +13726,59 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999912, + "phase_ticks_remaining": 999914, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 88 + "tick": 86 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 88 + "tick": 86 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "3bc2182d41eaf79fea517ba4addbb83ed679daf24d2f2b462dceb52542197abb", + "checksum": "b4e8d9bed93e381a3833ccf802f5916b6d8c50b09eb43eb2475a4accb64936cc", "events": [], "fighters": [ { "action": "jab", "action_active_ticks": 2, - "action_contact_tick": 75, + "action_contact_tick": 82, "action_hand": "left", - "action_id": "one@72", + "action_id": "one@80", "action_key": "jab:left:head:normal", "action_power": "normal", - "action_recovery_ticks": 6, - "action_start_tick": 72, - "action_startup_ticks": 3, + "action_recovery_ticks": 3, + "action_start_tick": 80, + "action_startup_ticks": 2, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 997, + "conditioning": 998, "corner_choice": null, "deductions": 0, "defense": "none", @@ -12093,19 +13788,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 72, - "maximum_stamina": 999, + "last_input_sequence": 63, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 996, + "stamina": 994, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -12123,7 +13819,7 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 189, + "x": 199, "y": 0 }, { @@ -12153,14 +13849,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 686, + "guard": 528, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 600, + "poise": 595, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -12170,7 +13867,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 3, + "head": 8, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -12185,39 +13882,59 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999911, + "phase_ticks_remaining": 999913, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 89 + "tick": 87 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 89 + "tick": 87 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "42fad5821ed836e591aa33cae3355f422e53607e66a62d8a5619381d9914d5d7", + "checksum": "bae0963d376d8a24de999f94e23731de1b5738580e2255cddd9713a7557839d0", "events": [], "fighters": [ { "action": "jab", "action_active_ticks": 2, - "action_contact_tick": 75, + "action_contact_tick": 82, "action_hand": "left", - "action_id": "one@72", + "action_id": "one@80", "action_key": "jab:left:head:normal", "action_power": "normal", - "action_recovery_ticks": 6, - "action_start_tick": 72, - "action_startup_ticks": 3, + "action_recovery_ticks": 3, + "action_start_tick": 80, + "action_startup_ticks": 2, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 997, + "conditioning": 998, "corner_choice": null, "deductions": 0, "defense": "none", @@ -12227,15 +13944,16 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 73, - "maximum_stamina": 999, + "last_input_sequence": 63, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, @@ -12257,7 +13975,7 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 189, + "x": 199, "y": 0 }, { @@ -12287,14 +14005,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 686, + "guard": 525, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 600, + "poise": 596, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -12304,7 +14023,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 3, + "head": 8, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -12319,39 +14038,59 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999910, + "phase_ticks_remaining": 999912, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 90 + "tick": 88 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 90 + "tick": 88 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "7bbb0035e72c95087a691822ce9038880ca12be2d76928efd040ad954a0ae1c4", + "checksum": "1f00cbbfb7ad02d7b31d0de654aeae8c9630a313396bd02e9d3941c409e5e0c1", "events": [], "fighters": [ { "action": "jab", "action_active_ticks": 2, - "action_contact_tick": 75, + "action_contact_tick": 82, "action_hand": "left", - "action_id": "one@72", + "action_id": "one@80", "action_key": "jab:left:head:normal", "action_power": "normal", - "action_recovery_ticks": 6, - "action_start_tick": 72, - "action_startup_ticks": 3, + "action_recovery_ticks": 3, + "action_start_tick": 80, + "action_startup_ticks": 2, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 997, + "conditioning": 998, "corner_choice": null, "deductions": 0, "defense": "none", @@ -12361,19 +14100,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 74, - "maximum_stamina": 999, + "last_input_sequence": 63, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 999, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -12391,7 +14131,7 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 189, + "x": 199, "y": 0 }, { @@ -12421,14 +14161,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 686, + "guard": 522, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 600, + "poise": 596, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -12438,7 +14179,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 3, + "head": 8, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -12453,39 +14194,59 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999909, + "phase_ticks_remaining": 999911, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 91 + "tick": 89 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 91 + "tick": 89 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "e308ba1cedcb090ad0a95c9cecc2aada8f41d6ea745701f2138d391b0843ab3e", + "checksum": "0b21821f970c8bf7246718b3c203a58eea58a10b59ec0a83e8600bbe2be95eaa", "events": [], "fighters": [ { "action": "jab", "action_active_ticks": 2, - "action_contact_tick": 75, + "action_contact_tick": 82, "action_hand": "left", - "action_id": "one@72", + "action_id": "one@80", "action_key": "jab:left:head:normal", "action_power": "normal", - "action_recovery_ticks": 6, - "action_start_tick": 72, - "action_startup_ticks": 3, + "action_recovery_ticks": 3, + "action_start_tick": 80, + "action_startup_ticks": 2, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 997, + "conditioning": 998, "corner_choice": null, "deductions": 0, "defense": "none", @@ -12495,19 +14256,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 75, - "maximum_stamina": 999, + "last_input_sequence": 63, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 999, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -12525,7 +14287,7 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 189, + "x": 199, "y": 0 }, { @@ -12555,14 +14317,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 689, + "guard": 519, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 600, + "poise": 597, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -12572,7 +14335,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 3, + "head": 8, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -12587,39 +14350,59 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999908, + "phase_ticks_remaining": 999910, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 92 + "tick": 90 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 92 + "tick": 90 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "549f1395921f1e6b832c9bc8bae3d2534e41de39a72da086d903544fd4c0ea5a", + "checksum": "10bfcec9b5c0406d9ed5b887150c7fefa5ee6130afbf56a047c72909cbfa3f31", "events": [], "fighters": [ { "action": "jab", "action_active_ticks": 2, - "action_contact_tick": 75, + "action_contact_tick": 82, "action_hand": "left", - "action_id": "one@72", + "action_id": "one@80", "action_key": "jab:left:head:normal", "action_power": "normal", - "action_recovery_ticks": 6, - "action_start_tick": 72, - "action_startup_ticks": 3, + "action_recovery_ticks": 3, + "action_start_tick": 80, + "action_startup_ticks": 2, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 997, + "conditioning": 998, "corner_choice": null, "deductions": 0, "defense": "none", @@ -12629,19 +14412,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 76, - "maximum_stamina": 999, + "last_input_sequence": 63, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 999, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -12659,7 +14443,7 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 189, + "x": 199, "y": 0 }, { @@ -12689,14 +14473,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 689, + "guard": 516, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 600, + "poise": 597, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -12706,7 +14491,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 3, + "head": 8, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -12721,39 +14506,59 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999907, + "phase_ticks_remaining": 999909, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 93 + "tick": 91 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 93 + "tick": 91 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "57d1b0cad24844eb7a3c1632c960955dce705a6350f6ab00fbabffaeac5e9a36", + "checksum": "33d2bf645570ef1f8d0e4b54f5277b4b331f3709aeac46eb5cbfb85aabc64116", "events": [], "fighters": [ { "action": "jab", "action_active_ticks": 2, - "action_contact_tick": 75, + "action_contact_tick": 82, "action_hand": "left", - "action_id": "one@72", + "action_id": "one@80", "action_key": "jab:left:head:normal", "action_power": "normal", - "action_recovery_ticks": 6, - "action_start_tick": 72, - "action_startup_ticks": 3, + "action_recovery_ticks": 3, + "action_start_tick": 80, + "action_startup_ticks": 2, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 997, + "conditioning": 998, "corner_choice": null, "deductions": 0, "defense": "none", @@ -12763,19 +14568,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 77, - "maximum_stamina": 999, + "last_input_sequence": 63, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 999, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -12793,7 +14599,7 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 189, + "x": 199, "y": 0 }, { @@ -12823,14 +14629,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 689, + "guard": 513, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 600, + "poise": 598, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -12840,7 +14647,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 3, + "head": 8, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -12855,39 +14662,59 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999906, + "phase_ticks_remaining": 999908, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 94 + "tick": 92 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 94 + "tick": 92 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "4e47b03f7925f96fa8727f7442992eeec9ab92173d58a216b479d146686dd3bd", + "checksum": "a62e92811bc0d41ad48fb1ccc7bf489c5c019db8df43f6e49588494e30e79732", "events": [], "fighters": [ { "action": "jab", "action_active_ticks": 2, - "action_contact_tick": 75, + "action_contact_tick": 82, "action_hand": "left", - "action_id": "one@72", + "action_id": "one@80", "action_key": "jab:left:head:normal", "action_power": "normal", - "action_recovery_ticks": 6, - "action_start_tick": 72, - "action_startup_ticks": 3, + "action_recovery_ticks": 3, + "action_start_tick": 80, + "action_startup_ticks": 2, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 997, + "conditioning": 998, "corner_choice": null, "deductions": 0, "defense": "none", @@ -12897,19 +14724,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 78, - "maximum_stamina": 999, + "last_input_sequence": 63, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 999, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -12927,7 +14755,7 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 189, + "x": 199, "y": 0 }, { @@ -12957,14 +14785,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 689, + "guard": 510, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 600, + "poise": 598, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -12974,7 +14803,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 3, + "head": 8, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -12989,169 +14818,79 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999905, + "phase_ticks_remaining": 999907, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 95 + "tick": 93 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 95 + "tick": 93 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 0, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": false, + "startup": 4, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "540f0b6f2537cb416d03e5a28dffbad851a956d0d23ee25cf6f34eaa9bcfaf28", - "events": [], - "fighters": [ - { - "action": "jab", - "action_active_ticks": 2, - "action_contact_tick": 75, - "action_hand": "left", - "action_id": "one@72", - "action_key": "jab:left:head:normal", - "action_power": "normal", - "action_recovery_ticks": 6, - "action_start_tick": 72, - "action_startup_ticks": 3, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 997, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": 0, - "get_up_count": 0, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 79, - "maximum_stamina": 999, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 999, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 189, - "y": 0 - }, + "checksum": "f644f28c58dc2cd1bd1e328d474eb83a8196a721ffac2149a886a9d454c1565e", + "events": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "guard_high", - "facing": -1, - "facing_x": -1000, - "facing_y": 0, - "get_up_count": 0, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 692, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 600, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 3, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 + "action_id": "one@94", + "actor_id": "one", + "amount": 0, + "blood": 0, + "detail": "right:straight:head", + "direction": 0, + "event_id": 7, + "kind": "punch_start", + "target_id": null, + "tick": 94 } ], - "phase": "fight", - "phase_ticks_remaining": 999904, - "result": null, - "round_number": 1, - "tick": 96 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 96 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "cfd0efde0d4cdcc9749348fd4aa758144d2dcb8b322cd9b188499a9315e2b9da", - "events": [], "fighters": [ { - "action": "jab", + "action": "straight", "action_active_ticks": 2, - "action_contact_tick": 75, - "action_hand": "left", - "action_id": "one@72", - "action_key": "jab:left:head:normal", + "action_contact_tick": null, + "action_hand": "right", + "action_id": "one@94", + "action_key": "straight:right:head:normal", "action_power": "normal", "action_recovery_ticks": 6, - "action_start_tick": 72, - "action_startup_ticks": 3, + "action_start_tick": 94, + "action_startup_ticks": 4, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, @@ -13165,19 +14904,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 80, - "maximum_stamina": 999, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 999, + "stamina": 963, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -13195,7 +14935,7 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 189, + "x": 199, "y": 0 }, { @@ -13215,7 +14955,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "guard_high", + "defense": "none", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -13225,14 +14965,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 692, + "guard": 514, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 600, + "poise": 2, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -13242,7 +14983,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 3, + "head": 8, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -13257,35 +14998,66 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999903, + "phase_ticks_remaining": 999906, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 97 + "tick": 94 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 97 + "tick": 94 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 1, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": false, + "startup": 4, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "7eeb1cfd1ca260964e031e1ffc7b3c5a752edb99a75f0bcf27eec2c2c6d72d1c", + "checksum": "d3e44e545e39b750d064c90d62d2f3ec21aa0531aab6cfb398234a6f96b7ab46", "events": [], "fighters": [ { - "action": "jab", + "action": "straight", "action_active_ticks": 2, - "action_contact_tick": 75, - "action_hand": "left", - "action_id": "one@72", - "action_key": "jab:left:head:normal", + "action_contact_tick": null, + "action_hand": "right", + "action_id": "one@94", + "action_key": "straight:right:head:normal", "action_power": "normal", "action_recovery_ticks": 6, - "action_start_tick": 72, - "action_startup_ticks": 3, + "action_start_tick": 94, + "action_startup_ticks": 4, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, @@ -13299,19 +15071,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 81, - "maximum_stamina": 999, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 999, + "stamina": 965, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -13329,7 +15102,7 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 189, + "x": 199, "y": 0 }, { @@ -13349,7 +15122,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "guard_high", + "defense": "none", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -13359,14 +15132,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 692, + "guard": 518, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 600, + "poise": 2, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -13376,7 +15150,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 3, + "head": 8, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -13391,36 +15165,67 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999902, + "phase_ticks_remaining": 999905, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 98 + "tick": 95 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 98 + "tick": 95 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 2, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": false, + "startup": 4, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "82f8bbb40ad25494c8690ce8914c92a675c6d448ed3ff03dd5888923aefcdc4a", + "checksum": "7f72d130df4db6733e794df7b499940fea5fa8631e772ec1f68ebd6e1080d2f2", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, + "action": "straight", + "action_active_ticks": 2, "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action_hand": "right", + "action_id": "one@94", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 94, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, "conditioning": 997, @@ -13433,19 +15238,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 82, - "maximum_stamina": 999, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 999, + "stamina": 967, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -13463,7 +15269,7 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 189, + "x": 199, "y": 0 }, { @@ -13483,7 +15289,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "guard_high", + "defense": "none", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -13493,14 +15299,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 692, + "guard": 522, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 600, + "poise": 3, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -13510,7 +15317,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 3, + "head": 8, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -13525,63 +15332,70 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999901, + "phase_ticks_remaining": 999904, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 99 + "tick": 96 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 99 + "tick": 96 }, { "attack_one": { "active": 2, - "age": 0, - "class": "jab", + "age": 3, + "class": "straight", "combo_bonus": 0, - "hand": "left", + "hand": "right", "power": "normal", "recovery": 6, "resolved": false, - "startup": 3, + "startup": 4, "target": "head" }, "attack_two": null, "snapshot": { "payload": { - "checksum": "b20b76660438603f226901ef3eb2ea6788d43fd3ad7d052b911a7fdc9c2339d8", - "events": [ - { - "action_id": "one@100", - "actor_id": "one", - "amount": 0, - "blood": 0, - "detail": "left:jab:head", - "direction": 0, - "event_id": 4, - "kind": "punch_start", - "target_id": null, - "tick": 100 - } - ], + "checksum": "0021106a4fb969443881d97a5b33b062aaf2916c2822ce5051e461470ee533f6", + "events": [], "fighters": [ { - "action": "jab", + "action": "straight", "action_active_ticks": 2, "action_contact_tick": null, - "action_hand": "left", - "action_id": "one@100", - "action_key": "jab:left:head:normal", + "action_hand": "right", + "action_id": "one@94", + "action_key": "straight:right:head:normal", "action_power": "normal", "action_recovery_ticks": 6, - "action_start_tick": 100, - "action_startup_ticks": 3, + "action_start_tick": 94, + "action_startup_ticks": 4, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 994, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", @@ -13591,19 +15405,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 83, - "maximum_stamina": 998, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 958, + "stamina": 969, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -13621,7 +15436,7 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 189, + "x": 199, "y": 0 }, { @@ -13641,7 +15456,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "guard_high", + "defense": "none", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -13651,14 +15466,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 695, + "guard": 526, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 600, + "poise": 3, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -13668,7 +15484,7 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 3, + "head": 8, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -13683,50 +15499,84 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999900, + "phase_ticks_remaining": 999903, + "referee": { + "alive": true, + "facing_x": 0, + "facing_y": -1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 249, + "y": 62 + }, "result": null, "round_number": 1, - "tick": 100 + "tick": 97 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 100 + "tick": 97 }, { - "attack_one": { - "active": 2, - "age": 1, - "class": "jab", - "combo_bonus": 0, - "hand": "left", - "power": "normal", - "recovery": 6, - "resolved": false, - "startup": 3, - "target": "head" - }, + "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "a52e6ec3ffa89ef39f1fa061edafee178bd23cd3bff2c1925ed50400b8da40c1", - "events": [], + "checksum": "482ae4932fc4d91f53d2f1d9d54edb96612c2f7ce884fa22edc8070410ed0e1d", + "events": [ + { + "action_id": "one@94", + "actor_id": "one", + "amount": 58, + "blood": 19, + "detail": "straight:head", + "direction": 1, + "event_id": 8, + "kind": "hit", + "target_id": "two", + "tick": 98 + }, + { + "action_id": null, + "actor_id": "one", + "amount": 1, + "blood": 0, + "detail": "", + "direction": 0, + "event_id": 9, + "kind": "knockdown", + "target_id": "two", + "tick": 98 + } + ], "fighters": [ { - "action": "jab", + "action": "straight", "action_active_ticks": 2, - "action_contact_tick": null, - "action_hand": "left", - "action_id": "one@100", - "action_key": "jab:left:head:normal", + "action_contact_tick": 98, + "action_hand": "right", + "action_id": "one@94", + "action_key": "straight:right:head:normal", "action_power": "normal", "action_recovery_ticks": 6, - "action_start_tick": 100, - "action_startup_ticks": 3, + "action_start_tick": 94, + "action_startup_ticks": 4, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 994, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", @@ -13736,19 +15586,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 83, - "maximum_stamina": 998, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 959, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -13766,7 +15617,7 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 189, + "x": 199, "y": 0 }, { @@ -13786,7 +15637,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "guard_high", + "defense": "none", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -13796,14 +15647,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 695, - "is_downed": false, + "guard": 530, + "guard_broken": false, + "is_downed": true, "is_foul_recovery_target": false, - "knockdowns": 0, + "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 600, + "poise": 1, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -13813,12 +15665,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 3, + "head": 42, "left_cut": 0, - "left_eye": 0, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 0 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -13827,73 +15679,83 @@ "y": 0 } ], - "phase": "fight", - "phase_ticks_remaining": 999899, + "phase": "knockdown", + "phase_ticks_remaining": 200, + "referee": { + "alive": true, + "facing_x": 647, + "facing_y": -776, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": 4, + "x": 245, + "y": 66 + }, "result": null, "round_number": 1, - "tick": 101 + "tick": 98 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 101 + "tick": 98 }, { - "attack_one": { - "active": 2, - "age": 2, - "class": "jab", - "combo_bonus": 0, - "hand": "left", - "power": "normal", - "recovery": 6, - "resolved": false, - "startup": 3, - "target": "head" - }, + "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "3b39363e1913f7fe5c7312b583fbb053c0fa8ed737231d8a2af4fe49011fd27e", + "checksum": "8c918611f2b9d182a0c53207f3af19cfac95370f13fa9b06fa1e2df215fd91c5", "events": [], "fighters": [ { - "action": "jab", + "action": "straight", "action_active_ticks": 2, - "action_contact_tick": null, - "action_hand": "left", - "action_id": "one@100", - "action_key": "jab:left:head:normal", + "action_contact_tick": 98, + "action_hand": "right", + "action_id": "one@94", + "action_key": "straight:right:head:normal", "action_power": "normal", "action_recovery_ticks": 6, - "action_start_tick": 100, - "action_startup_ticks": 3, + "action_start_tick": 94, + "action_startup_ticks": 4, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 994, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, "facing_x": 1000, - "facing_y": 0, + "facing_y": -37, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 83, - "maximum_stamina": 998, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 960, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -13908,11 +15770,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 189, - "y": 0 + "x": 193, + "y": 4 }, { "action": null, @@ -13931,7 +15793,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "guard_high", + "defense": "none", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -13941,14 +15803,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 695, - "is_downed": false, + "guard": 530, + "guard_broken": false, + "is_downed": true, "is_foul_recovery_target": false, - "knockdowns": 0, + "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 600, + "poise": 1, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -13958,12 +15821,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 3, + "head": 42, "left_cut": 0, - "left_eye": 0, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 0 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -13972,98 +15835,83 @@ "y": 0 } ], - "phase": "fight", - "phase_ticks_remaining": 999898, + "phase": "knockdown", + "phase_ticks_remaining": 199, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -3, + "velocity_y": 3, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 102 + "tick": 99 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 102 + "tick": 99 }, { - "attack_one": { - "active": 2, - "age": 3, - "class": "jab", - "combo_bonus": 0, - "hand": "left", - "power": "normal", - "recovery": 6, - "resolved": true, - "startup": 3, - "target": "head" - }, + "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "b2a923ccd327bf6837ba5d963beb43b5e1a9dc4d04cb4b207b32e89b80c94349", - "events": [ - { - "action_id": "one@100", - "actor_id": "two", - "amount": 26, - "blood": 0, - "detail": "", - "direction": 0, - "event_id": 5, - "kind": "block", - "target_id": "one", - "tick": 103 - }, - { - "action_id": "one@100", - "actor_id": "one", - "amount": 4, - "blood": 1, - "detail": "jab:head", - "direction": 1, - "event_id": 6, - "kind": "hit", - "target_id": "two", - "tick": 103 - } - ], + "checksum": "2e6775bade0462df1a5d8553cab84c07ecd9cc03af13da86b6a6c102dc646db9", + "events": [], "fighters": [ { - "action": "jab", + "action": "straight", "action_active_ticks": 2, - "action_contact_tick": 103, - "action_hand": "left", - "action_id": "one@100", - "action_key": "jab:left:head:normal", + "action_contact_tick": 98, + "action_hand": "right", + "action_id": "one@94", + "action_key": "straight:right:head:normal", "action_power": "normal", "action_recovery_ticks": 6, - "action_start_tick": 100, - "action_startup_ticks": 3, + "action_start_tick": 94, + "action_startup_ticks": 4, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 994, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, "facing_x": 1000, - "facing_y": 0, + "facing_y": -78, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 83, - "maximum_stamina": 998, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 961, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -14078,11 +15926,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 189, - "y": 0 + "x": 185, + "y": 9 }, { "action": null, @@ -14101,7 +15949,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "guard_high", + "defense": "none", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -14111,14 +15959,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 669, - "is_downed": false, + "guard": 530, + "guard_broken": false, + "is_downed": true, "is_foul_recovery_target": false, - "knockdowns": 0, + "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 593, + "poise": 1, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -14128,12 +15977,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 7, + "head": 42, "left_cut": 0, - "left_eye": 0, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 0 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -14142,73 +15991,83 @@ "y": 0 } ], - "phase": "fight", - "phase_ticks_remaining": 999897, + "phase": "knockdown", + "phase_ticks_remaining": 198, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 103 + "tick": 100 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 103 + "tick": 100 }, { - "attack_one": { - "active": 2, - "age": 4, - "class": "jab", - "combo_bonus": 0, - "hand": "left", - "power": "normal", - "recovery": 6, - "resolved": true, - "startup": 3, - "target": "head" - }, + "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "2cb66003f260517c01d18ad659ba1b8c23f1a4d5784082a0635b196506727919", + "checksum": "d2e117849ba447dd77647b8a9e88af03d3d82d5d29c550bc894d031e0d8b4f0b", "events": [], "fighters": [ { - "action": "jab", + "action": "straight", "action_active_ticks": 2, - "action_contact_tick": 103, - "action_hand": "left", - "action_id": "one@100", - "action_key": "jab:left:head:normal", + "action_contact_tick": 98, + "action_hand": "right", + "action_id": "one@94", + "action_key": "straight:right:head:normal", "action_power": "normal", "action_recovery_ticks": 6, - "action_start_tick": 100, - "action_startup_ticks": 3, + "action_start_tick": 94, + "action_startup_ticks": 4, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 994, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, "facing_x": 1000, - "facing_y": 0, + "facing_y": -114, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 83, - "maximum_stamina": 998, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 962, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -14223,11 +16082,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 189, - "y": 0 + "x": 178, + "y": 14 }, { "action": null, @@ -14246,7 +16105,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "guard_high", + "defense": "none", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -14256,14 +16115,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 672, - "is_downed": false, + "guard": 530, + "guard_broken": false, + "is_downed": true, "is_foul_recovery_target": false, - "knockdowns": 0, + "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 594, + "poise": 1, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -14273,12 +16133,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 7, + "head": 42, "left_cut": 0, - "left_eye": 0, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 0 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -14287,73 +16147,83 @@ "y": 0 } ], - "phase": "fight", - "phase_ticks_remaining": 999896, + "phase": "knockdown", + "phase_ticks_remaining": 197, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 104 + "tick": 101 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 104 + "tick": 101 }, { - "attack_one": { - "active": 2, - "age": 5, - "class": "jab", - "combo_bonus": 0, - "hand": "left", - "power": "normal", - "recovery": 6, - "resolved": true, - "startup": 3, - "target": "head" - }, + "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "c70c570ec1bb8c945464c9ce85dad66192ddea3232d5baf2bb339b3ef4b41dde", + "checksum": "c140c9bf54ecb28d54ce5a7c99d805257a0c4d71ac7b62e34499478323c90bc6", "events": [], "fighters": [ { - "action": "jab", + "action": "straight", "action_active_ticks": 2, - "action_contact_tick": 103, - "action_hand": "left", - "action_id": "one@100", - "action_key": "jab:left:head:normal", + "action_contact_tick": 98, + "action_hand": "right", + "action_id": "one@94", + "action_key": "straight:right:head:normal", "action_power": "normal", "action_recovery_ticks": 6, - "action_start_tick": 100, - "action_startup_ticks": 3, + "action_start_tick": 94, + "action_startup_ticks": 4, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 994, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": 0, + "facing_x": 992, + "facing_y": -145, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 83, - "maximum_stamina": 998, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 963, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -14368,11 +16238,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 189, - "y": 0 + "x": 170, + "y": 19 }, { "action": null, @@ -14391,7 +16261,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "guard_high", + "defense": "none", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -14401,14 +16271,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 672, - "is_downed": false, + "guard": 530, + "guard_broken": false, + "is_downed": true, "is_foul_recovery_target": false, - "knockdowns": 0, + "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 594, + "poise": 1, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -14418,12 +16289,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 7, + "head": 42, "left_cut": 0, - "left_eye": 0, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 0 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -14432,73 +16303,83 @@ "y": 0 } ], - "phase": "fight", - "phase_ticks_remaining": 999895, + "phase": "knockdown", + "phase_ticks_remaining": 196, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 105 + "tick": 102 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 105 + "tick": 102 }, { - "attack_one": { - "active": 2, - "age": 6, - "class": "jab", - "combo_bonus": 0, - "hand": "left", - "power": "normal", - "recovery": 6, - "resolved": true, - "startup": 3, - "target": "head" - }, + "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "72d1c276d3864bb20582af001003c1be7e9d4b86736f91058841a503fb097ea7", + "checksum": "02e5bf663568550903c9230e7b76c4990cbf8b963bfd597c3bc7f7ad070246fa", "events": [], "fighters": [ { - "action": "jab", + "action": "straight", "action_active_ticks": 2, - "action_contact_tick": 103, - "action_hand": "left", - "action_id": "one@100", - "action_key": "jab:left:head:normal", + "action_contact_tick": 98, + "action_hand": "right", + "action_id": "one@94", + "action_key": "straight:right:head:normal", "action_power": "normal", "action_recovery_ticks": 6, - "action_start_tick": 100, - "action_startup_ticks": 3, + "action_start_tick": 94, + "action_startup_ticks": 4, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 994, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": 0, + "facing_x": 985, + "facing_y": -172, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 83, - "maximum_stamina": 998, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 964, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -14513,11 +16394,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 189, - "y": 0 + "x": 163, + "y": 24 }, { "action": null, @@ -14536,7 +16417,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "guard_high", + "defense": "none", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -14546,14 +16427,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 672, - "is_downed": false, + "guard": 530, + "guard_broken": false, + "is_downed": true, "is_foul_recovery_target": false, - "knockdowns": 0, + "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 595, + "poise": 1, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -14563,12 +16445,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 7, + "head": 42, "left_cut": 0, - "left_eye": 0, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 0 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -14577,73 +16459,83 @@ "y": 0 } ], - "phase": "fight", - "phase_ticks_remaining": 999894, + "phase": "knockdown", + "phase_ticks_remaining": 195, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 106 + "tick": 103 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 106 + "tick": 103 }, { - "attack_one": { - "active": 2, - "age": 7, - "class": "jab", - "combo_bonus": 0, - "hand": "left", - "power": "normal", - "recovery": 6, - "resolved": true, - "startup": 3, - "target": "head" - }, + "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "8a9f67ddd94b7d07e89afc8e57ae89db3a63b7ec082ecdc3d9e7e726a0da7da3", + "checksum": "18619e3e7cb98c70f973341c8550fa8a7a51b1a4fbea328fd498ebcb375e3c96", "events": [], "fighters": [ { - "action": "jab", + "action": "straight", "action_active_ticks": 2, - "action_contact_tick": 103, - "action_hand": "left", - "action_id": "one@100", - "action_key": "jab:left:head:normal", + "action_contact_tick": 98, + "action_hand": "right", + "action_id": "one@94", + "action_key": "straight:right:head:normal", "action_power": "normal", "action_recovery_ticks": 6, - "action_start_tick": 100, - "action_startup_ticks": 3, + "action_start_tick": 94, + "action_startup_ticks": 4, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 994, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": 0, + "facing_x": 986, + "facing_y": -197, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 83, - "maximum_stamina": 998, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 965, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -14658,11 +16550,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 189, - "y": 0 + "x": 155, + "y": 29 }, { "action": null, @@ -14681,7 +16573,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "guard_high", + "defense": "none", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -14691,14 +16583,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 672, - "is_downed": false, + "guard": 530, + "guard_broken": false, + "is_downed": true, "is_foul_recovery_target": false, - "knockdowns": 0, + "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 595, + "poise": 1, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -14708,12 +16601,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 7, + "head": 42, "left_cut": 0, - "left_eye": 0, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 0 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -14722,73 +16615,83 @@ "y": 0 } ], - "phase": "fight", - "phase_ticks_remaining": 999893, + "phase": "knockdown", + "phase_ticks_remaining": 194, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 107 + "tick": 104 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 107 + "tick": 104 }, { - "attack_one": { - "active": 2, - "age": 8, - "class": "jab", - "combo_bonus": 0, - "hand": "left", - "power": "normal", - "recovery": 6, - "resolved": true, - "startup": 3, - "target": "head" - }, + "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "eac9e69b2e65f454027f4f0705516f5880ac63ce4c764a9fc9fd0ba0afd387fd", + "checksum": "6888c9a3a8a18e9ad4139e9e5b49155aad8ef851294c0f6dca2094162d4dd863", "events": [], "fighters": [ { - "action": "jab", + "action": "straight", "action_active_ticks": 2, - "action_contact_tick": 103, - "action_hand": "left", - "action_id": "one@100", - "action_key": "jab:left:head:normal", + "action_contact_tick": 98, + "action_hand": "right", + "action_id": "one@94", + "action_key": "straight:right:head:normal", "action_power": "normal", "action_recovery_ticks": 6, - "action_start_tick": 100, - "action_startup_ticks": 3, + "action_start_tick": 94, + "action_startup_ticks": 4, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 994, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": 0, + "facing_x": 980, + "facing_y": -219, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 83, - "maximum_stamina": 998, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 966, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -14803,11 +16706,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 189, - "y": 0 + "x": 148, + "y": 34 }, { "action": null, @@ -14826,7 +16729,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "guard_high", + "defense": "none", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -14836,14 +16739,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 675, - "is_downed": false, + "guard": 530, + "guard_broken": false, + "is_downed": true, "is_foul_recovery_target": false, - "knockdowns": 0, + "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 596, + "poise": 1, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -14853,12 +16757,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 7, + "head": 42, "left_cut": 0, - "left_eye": 0, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 0 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -14867,73 +16771,83 @@ "y": 0 } ], - "phase": "fight", - "phase_ticks_remaining": 999892, + "phase": "knockdown", + "phase_ticks_remaining": 193, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 108 + "tick": 105 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 108 + "tick": 105 }, { - "attack_one": { - "active": 2, - "age": 9, - "class": "jab", - "combo_bonus": 0, - "hand": "left", - "power": "normal", - "recovery": 6, - "resolved": true, - "startup": 3, - "target": "head" - }, + "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "88c4c574f952908700c30d12d26e02483411db79c381bba0858c4cfa62fe6623", + "checksum": "44189011691d89dbef46fdd0b847496d98464189cde61463c8ae6b904b3d33a1", "events": [], "fighters": [ { - "action": "jab", + "action": "straight", "action_active_ticks": 2, - "action_contact_tick": 103, - "action_hand": "left", - "action_id": "one@100", - "action_key": "jab:left:head:normal", + "action_contact_tick": 98, + "action_hand": "right", + "action_id": "one@94", + "action_key": "straight:right:head:normal", "action_power": "normal", "action_recovery_ticks": 6, - "action_start_tick": 100, - "action_startup_ticks": 3, + "action_start_tick": 94, + "action_startup_ticks": 4, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 994, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": 0, + "facing_x": 975, + "facing_y": -237, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 83, - "maximum_stamina": 998, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 967, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -14948,11 +16862,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 189, - "y": 0 + "x": 140, + "y": 39 }, { "action": null, @@ -14971,7 +16885,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "guard_high", + "defense": "none", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -14981,14 +16895,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 675, - "is_downed": false, + "guard": 530, + "guard_broken": false, + "is_downed": true, "is_foul_recovery_target": false, - "knockdowns": 0, + "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 596, + "poise": 1, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -14998,12 +16913,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 7, + "head": 42, "left_cut": 0, - "left_eye": 0, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 0 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -15012,73 +16927,83 @@ "y": 0 } ], - "phase": "fight", - "phase_ticks_remaining": 999891, + "phase": "knockdown", + "phase_ticks_remaining": 192, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 109 + "tick": 106 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 109 + "tick": 106 }, { - "attack_one": { - "active": 2, - "age": 10, - "class": "jab", - "combo_bonus": 0, - "hand": "left", - "power": "normal", - "recovery": 6, - "resolved": true, - "startup": 3, - "target": "head" - }, + "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "969b3802efe9e11e0ac2ca43fee97f64982c3b3a89a416b0e3db34a2319aa834", + "checksum": "9904a3bf807f139f604a528f6748e0a18e48fff453681ed9851cf598640721d9", "events": [], "fighters": [ { - "action": "jab", + "action": "straight", "action_active_ticks": 2, - "action_contact_tick": 103, - "action_hand": "left", - "action_id": "one@100", - "action_key": "jab:left:head:normal", + "action_contact_tick": 98, + "action_hand": "right", + "action_id": "one@94", + "action_key": "straight:right:head:normal", "action_power": "normal", "action_recovery_ticks": 6, - "action_start_tick": 100, - "action_startup_ticks": 3, + "action_start_tick": 94, + "action_startup_ticks": 4, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 994, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": 0, + "facing_x": 971, + "facing_y": -248, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 83, - "maximum_stamina": 998, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 968, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -15093,11 +17018,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 189, - "y": 0 + "x": 132, + "y": 43 }, { "action": null, @@ -15116,7 +17041,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "guard_high", + "defense": "none", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -15126,14 +17051,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 675, - "is_downed": false, + "guard": 530, + "guard_broken": false, + "is_downed": true, "is_foul_recovery_target": false, - "knockdowns": 0, + "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 597, + "poise": 1, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -15143,12 +17069,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 7, + "head": 42, "left_cut": 0, - "left_eye": 0, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 0 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -15157,62 +17083,83 @@ "y": 0 } ], - "phase": "fight", - "phase_ticks_remaining": 999890, + "phase": "knockdown", + "phase_ticks_remaining": 191, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 110 + "tick": 107 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 110 + "tick": 107 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "7126d49f711e2e00d4a6b531aabc868a6982903e8a3573ab16e798fe34426c38", + "checksum": "0ea0fc572b89545ac26c1badb9d38bda569ec6f533e1cfc0f55698d6efc1b111", "events": [], "fighters": [ { - "action": "jab", + "action": "straight", "action_active_ticks": 2, - "action_contact_tick": 103, - "action_hand": "left", - "action_id": "one@100", - "action_key": "jab:left:head:normal", + "action_contact_tick": 98, + "action_hand": "right", + "action_id": "one@94", + "action_key": "straight:right:head:normal", "action_power": "normal", "action_recovery_ticks": 6, - "action_start_tick": 100, - "action_startup_ticks": 3, + "action_start_tick": 94, + "action_startup_ticks": 4, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 994, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": 0, + "facing_x": 966, + "facing_y": -265, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 83, - "maximum_stamina": 998, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 972, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -15227,11 +17174,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 189, - "y": 0 + "x": 125, + "y": 48 }, { "action": null, @@ -15250,7 +17197,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "guard_high", + "defense": "none", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -15260,14 +17207,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 675, - "is_downed": false, + "guard": 530, + "guard_broken": false, + "is_downed": true, "is_foul_recovery_target": false, - "knockdowns": 0, + "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 597, + "poise": 1, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -15277,12 +17225,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 7, + "head": 42, "left_cut": 0, - "left_eye": 0, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 0 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -15291,62 +17239,83 @@ "y": 0 } ], - "phase": "fight", - "phase_ticks_remaining": 999889, + "phase": "knockdown", + "phase_ticks_remaining": 190, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 111 + "tick": 108 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 111 + "tick": 108 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "fc40cdfe1b881dd1f8e1eabf75f215375355ebe50b949e936863a9ad8c1897b6", + "checksum": "30e89784494abddf18aebaccb1c27974eb1acf9e1c070befa5ff3be15895d639", "events": [], "fighters": [ { - "action": "jab", + "action": "straight", "action_active_ticks": 2, - "action_contact_tick": 103, - "action_hand": "left", - "action_id": "one@100", - "action_key": "jab:left:head:normal", + "action_contact_tick": 98, + "action_hand": "right", + "action_id": "one@94", + "action_key": "straight:right:head:normal", "action_power": "normal", "action_recovery_ticks": 6, - "action_start_tick": 100, - "action_startup_ticks": 3, + "action_start_tick": 94, + "action_startup_ticks": 4, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 994, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": 0, + "facing_x": 963, + "facing_y": -278, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 83, - "maximum_stamina": 998, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 976, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -15361,11 +17330,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 189, - "y": 0 + "x": 117, + "y": 53 }, { "action": null, @@ -15384,7 +17353,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "guard_high", + "defense": "none", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -15394,14 +17363,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 678, - "is_downed": false, + "guard": 530, + "guard_broken": false, + "is_downed": true, "is_foul_recovery_target": false, - "knockdowns": 0, + "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 598, + "poise": 1, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -15411,12 +17381,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 7, + "head": 42, "left_cut": 0, - "left_eye": 0, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 0 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -15425,62 +17395,83 @@ "y": 0 } ], - "phase": "fight", - "phase_ticks_remaining": 999888, + "phase": "knockdown", + "phase_ticks_remaining": 189, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 112 + "tick": 109 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 112 + "tick": 109 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "404bac5499d70aa9f4f356825378e6db718185bd9eeaa9ca63a0564e00cf981f", + "checksum": "458fe996d433e21dba615d1a64bb57945a18d28691259f9c15f677f1f8d674d6", "events": [], "fighters": [ { - "action": "jab", + "action": "straight", "action_active_ticks": 2, - "action_contact_tick": 103, - "action_hand": "left", - "action_id": "one@100", - "action_key": "jab:left:head:normal", + "action_contact_tick": 98, + "action_hand": "right", + "action_id": "one@94", + "action_key": "straight:right:head:normal", "action_power": "normal", "action_recovery_ticks": 6, - "action_start_tick": 100, - "action_startup_ticks": 3, + "action_start_tick": 94, + "action_startup_ticks": 4, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 994, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": 0, + "facing_x": 959, + "facing_y": -292, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 83, - "maximum_stamina": 998, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 980, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -15495,11 +17486,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 189, - "y": 0 + "x": 110, + "y": 58 }, { "action": null, @@ -15518,7 +17509,7 @@ "conditioning": 1000, "corner_choice": null, "deductions": 0, - "defense": "guard_high", + "defense": "none", "facing": -1, "facing_x": -1000, "facing_y": 0, @@ -15528,14 +17519,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 678, - "is_downed": false, + "guard": 530, + "guard_broken": false, + "is_downed": true, "is_foul_recovery_target": false, - "knockdowns": 0, + "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 598, + "poise": 1, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -15545,12 +17537,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 7, + "head": 42, "left_cut": 0, - "left_eye": 0, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 0 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -15559,86 +17551,83 @@ "y": 0 } ], - "phase": "fight", - "phase_ticks_remaining": 999887, + "phase": "knockdown", + "phase_ticks_remaining": 188, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 113 + "tick": 110 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 113 + "tick": 110 }, { - "attack_one": { - "active": 2, - "age": 0, - "class": "straight", - "combo_bonus": 10, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": false, - "startup": 6, - "target": "head" - }, + "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "cea0a57110d1aac2a5ada94be94432fd347222d098bdec1e091efcd698c7523e", - "events": [ - { - "action_id": "one@114", - "actor_id": "one", - "amount": 0, - "blood": 0, - "detail": "right:straight:head", - "direction": 0, - "event_id": 7, - "kind": "punch_start", - "target_id": null, - "tick": 114 - } - ], + "checksum": "5147b6767255f4d0a29f87a4aed43ad309c29694af755b94af86151033b256ec", + "events": [], "fighters": [ { "action": "straight", "action_active_ticks": 2, - "action_contact_tick": null, + "action_contact_tick": 98, "action_hand": "right", - "action_id": "one@114", + "action_id": "one@94", "action_key": "straight:right:head:normal", "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 114, - "action_startup_ticks": 6, + "action_recovery_ticks": 6, + "action_start_tick": 94, + "action_startup_ticks": 4, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": 0, + "facing_x": 956, + "facing_y": -304, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 923, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -15653,11 +17642,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 189, - "y": 0 + "x": 102, + "y": 63 }, { "action": null, @@ -15686,14 +17675,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 681, - "is_downed": false, + "guard": 530, + "guard_broken": false, + "is_downed": true, "is_foul_recovery_target": false, - "knockdowns": 0, + "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 2, + "poise": 1, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -15703,12 +17693,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 7, + "head": 42, "left_cut": 0, - "left_eye": 0, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 0 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -15717,73 +17707,83 @@ "y": 0 } ], - "phase": "fight", - "phase_ticks_remaining": 999886, + "phase": "knockdown", + "phase_ticks_remaining": 187, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 114 + "tick": 111 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 114 + "tick": 111 }, { - "attack_one": { - "active": 2, - "age": 1, - "class": "straight", - "combo_bonus": 10, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": false, - "startup": 6, - "target": "head" - }, + "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "45ebff5146ff2b4285a50f401c39652fdc6a5e9806f5e818516067a8fb50b6ea", + "checksum": "1091359fb6f432e19e98530b264015ba9779c9d60312d1246149d18965d5c700", "events": [], "fighters": [ { "action": "straight", "action_active_ticks": 2, - "action_contact_tick": null, + "action_contact_tick": 98, "action_hand": "right", - "action_id": "one@114", + "action_id": "one@94", "action_key": "straight:right:head:normal", "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 114, - "action_startup_ticks": 6, + "action_recovery_ticks": 6, + "action_start_tick": 94, + "action_startup_ticks": 4, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": 0, + "facing_x": 953, + "facing_y": -316, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 924, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -15798,11 +17798,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 189, - "y": 0 + "x": 95, + "y": 68 }, { "action": null, @@ -15831,14 +17831,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 681, - "is_downed": false, + "guard": 530, + "guard_broken": false, + "is_downed": true, "is_foul_recovery_target": false, - "knockdowns": 0, + "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 2, + "poise": 1, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -15848,12 +17849,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 7, + "head": 42, "left_cut": 0, - "left_eye": 0, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 0 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -15862,73 +17863,83 @@ "y": 0 } ], - "phase": "fight", - "phase_ticks_remaining": 999885, + "phase": "knockdown", + "phase_ticks_remaining": 186, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 115 + "tick": 112 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 115 + "tick": 112 }, { - "attack_one": { - "active": 2, - "age": 2, - "class": "straight", - "combo_bonus": 10, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": false, - "startup": 6, - "target": "head" - }, + "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "aae9ee59b382156d4169d388dda1a0c624e44a00712e152f48e424ceee95d39f", + "checksum": "66489216fe3033b90132df43bfac9675a8678dff46ca862fb539dcaa05b60816", "events": [], "fighters": [ { "action": "straight", "action_active_ticks": 2, - "action_contact_tick": null, + "action_contact_tick": 98, "action_hand": "right", - "action_id": "one@114", + "action_id": "one@94", "action_key": "straight:right:head:normal", "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 114, - "action_startup_ticks": 6, + "action_recovery_ticks": 6, + "action_start_tick": 94, + "action_startup_ticks": 4, "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": 0, + "facing_x": 946, + "facing_y": -324, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 925, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -15943,11 +17954,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 189, - "y": 0 + "x": 87, + "y": 73 }, { "action": null, @@ -15976,14 +17987,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 684, - "is_downed": false, + "guard": 530, + "guard_broken": false, + "is_downed": true, "is_foul_recovery_target": false, - "knockdowns": 0, + "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 3, + "poise": 1, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -15993,12 +18005,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 7, + "head": 42, "left_cut": 0, - "left_eye": 0, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 0 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -16007,73 +18019,83 @@ "y": 0 } ], - "phase": "fight", - "phase_ticks_remaining": 999884, + "phase": "knockdown", + "phase_ticks_remaining": 185, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 116 + "tick": 113 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 116 + "tick": 113 }, { - "attack_one": { - "active": 2, - "age": 3, - "class": "straight", - "combo_bonus": 10, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": false, - "startup": 6, - "target": "head" - }, + "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "d782e0dd79a43f0baab1f220e422d797726f586a3572e8ce78d55d84d6768c34", + "checksum": "e81478bd09e4b2df4b1ebea057310dbcfc7d72c82ae22d8233460fba5a762063", "events": [], "fighters": [ { - "action": "straight", - "action_active_ticks": 2, + "action": null, + "action_active_ticks": 0, "action_contact_tick": null, - "action_hand": "right", - "action_id": "one@114", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 114, - "action_startup_ticks": 6, - "action_target": "head", + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": 0, + "facing_x": 944, + "facing_y": -334, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 926, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -16088,11 +18110,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 189, - "y": 0 + "x": 80, + "y": 78 }, { "action": null, @@ -16121,14 +18143,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 684, - "is_downed": false, + "guard": 530, + "guard_broken": false, + "is_downed": true, "is_foul_recovery_target": false, - "knockdowns": 0, + "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 3, + "poise": 1, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -16138,12 +18161,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 7, + "head": 42, "left_cut": 0, - "left_eye": 0, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 0 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -16152,73 +18175,83 @@ "y": 0 } ], - "phase": "fight", - "phase_ticks_remaining": 999883, + "phase": "knockdown", + "phase_ticks_remaining": 184, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 117 + "tick": 114 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 117 + "tick": 114 }, { - "attack_one": { - "active": 2, - "age": 4, - "class": "straight", - "combo_bonus": 10, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": false, - "startup": 6, - "target": "head" - }, + "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "d1a73a2f8bd8095a8a3fb6f31b8975b0bc03d1e68dbc577a7c9a2d8316a4e746", + "checksum": "1510dd78cd1d453a29f0dadb8d6e08413d668604709707646b09107bcc2a50e5", "events": [], "fighters": [ { - "action": "straight", - "action_active_ticks": 2, + "action": null, + "action_active_ticks": 0, "action_contact_tick": null, - "action_hand": "right", - "action_id": "one@114", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 114, - "action_startup_ticks": 6, - "action_target": "head", + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": 0, + "facing_x": 942, + "facing_y": -342, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 927, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -16233,11 +18266,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 189, - "y": 0 + "x": 72, + "y": 83 }, { "action": null, @@ -16266,14 +18299,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 687, - "is_downed": false, + "guard": 530, + "guard_broken": false, + "is_downed": true, "is_foul_recovery_target": false, - "knockdowns": 0, + "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 4, + "poise": 1, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -16283,12 +18317,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 7, + "head": 42, "left_cut": 0, - "left_eye": 0, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 0 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -16297,73 +18331,83 @@ "y": 0 } ], - "phase": "fight", - "phase_ticks_remaining": 999882, + "phase": "knockdown", + "phase_ticks_remaining": 183, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 118 + "tick": 115 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 118 + "tick": 115 }, { - "attack_one": { - "active": 2, - "age": 5, - "class": "straight", - "combo_bonus": 10, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": false, - "startup": 6, - "target": "head" - }, + "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "874aed9afe31e275f1b0c1c6e1edee90fb4729a364cc32703e7809d2eff5f1d2", + "checksum": "730e3556555f237a44cd97815a565f0c7d6fac8d073064f015d8a588d6d9bfbd", "events": [], "fighters": [ { - "action": "straight", - "action_active_ticks": 2, + "action": null, + "action_active_ticks": 0, "action_contact_tick": null, - "action_hand": "right", - "action_id": "one@114", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 114, - "action_startup_ticks": 6, - "action_target": "head", + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": 0, + "facing_x": 940, + "facing_y": -346, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 928, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -16378,11 +18422,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 189, - "y": 0 + "x": 64, + "y": 87 }, { "action": null, @@ -16411,14 +18455,15 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 687, - "is_downed": false, + "guard": 530, + "guard_broken": false, + "is_downed": true, "is_foul_recovery_target": false, - "knockdowns": 0, + "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 4, + "poise": 1, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -16428,12 +18473,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 7, + "head": 42, "left_cut": 0, - "left_eye": 0, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 0 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -16442,87 +18487,83 @@ "y": 0 } ], - "phase": "fight", - "phase_ticks_remaining": 999881, + "phase": "knockdown", + "phase_ticks_remaining": 182, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 119 + "tick": 116 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 119 + "tick": 116 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "af7cfe5fc9c876219d30d28ba93880dbab45cec4d354d9467b599ea4f1011003", - "events": [ - { - "action_id": "one@114", - "actor_id": "one", - "amount": 63, - "blood": 15, - "detail": "straight:head", - "direction": 1, - "event_id": 8, - "kind": "hit", - "target_id": "two", - "tick": 120 - }, - { - "action_id": null, - "actor_id": "one", - "amount": 1, - "blood": 0, - "detail": "", - "direction": 0, - "event_id": 9, - "kind": "knockdown", - "target_id": "two", - "tick": 120 - } - ], + "checksum": "fca3dd20db241301adbbb77ad8eb8398b627dce4e8f30d20124916ae3d467068", + "events": [], "fighters": [ { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 120, - "action_hand": "right", - "action_id": "one@114", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 114, - "action_startup_ticks": 6, - "action_target": "head", + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": 0, + "facing_x": 938, + "facing_y": -355, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -16537,11 +18578,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 189, - "y": 0 + "x": 57, + "y": 92 }, { "action": null, @@ -16570,7 +18611,8 @@ "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 1, @@ -16587,12 +18629,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -16602,61 +18644,95 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 300, + "phase_ticks_remaining": 181, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 120 + "tick": 117 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 120 + "tick": 117 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "e79a44f40512ac21fd02a050620f3bed948fd943a0d97f4150447f2e358ef7ac", - "events": [], + "checksum": "47f87dcb0dc3eae8359de82440eecb9ed01b14fb507973022ecab6e8c62509ed", + "events": [ + { + "action_id": null, + "actor_id": null, + "amount": 1, + "blood": 0, + "detail": "", + "direction": 0, + "event_id": 11, + "kind": "count", + "target_id": "two", + "tick": 118 + } + ], "fighters": [ { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 120, - "action_hand": "right", - "action_id": "one@114", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 114, - "action_startup_ticks": 6, - "action_target": "head", + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": -17, - "get_up_count": 0, + "facing_x": 933, + "facing_y": -360, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -16671,11 +18747,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 186, - "y": 2 + "x": 49, + "y": 97 }, { "action": null, @@ -16698,13 +18774,14 @@ "facing": -1, "facing_x": -1000, "facing_y": 0, - "get_up_count": 0, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 1, @@ -16721,12 +18798,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -16736,61 +18813,82 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 299, + "phase_ticks_remaining": 180, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 121 + "tick": 118 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 121 + "tick": 118 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "f5d3192a244ec9b0ed2114f4528f146055afc289aded35d18a09f85875f013e9", + "checksum": "be6039ac4e45e50d8fce0096defab366c169ae6632d0ecc92f0a85d3d98793f1", "events": [], "fighters": [ { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 120, - "action_hand": "right", - "action_id": "one@114", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 114, - "action_startup_ticks": 6, - "action_target": "head", + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": -42, - "get_up_count": 0, + "facing_x": 931, + "facing_y": -368, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -16805,11 +18903,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 182, - "y": 5 + "x": 42, + "y": 102 }, { "action": null, @@ -16832,13 +18930,14 @@ "facing": -1, "facing_x": -1000, "facing_y": 0, - "get_up_count": 0, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 1, @@ -16855,12 +18954,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -16870,61 +18969,82 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 298, + "phase_ticks_remaining": 179, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 122 + "tick": 119 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 122 + "tick": 119 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "b835e04096b3b4b7f51bb4bb9e92badeab0d8656812c529af48a07b22c862b4e", + "checksum": "d3479658b8eb39be9910b8efbf2d299f92d6d10f217dede734bcd9ba4e88f2a4", "events": [], "fighters": [ { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 120, - "action_hand": "right", - "action_id": "one@114", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 114, - "action_startup_ticks": 6, - "action_target": "head", + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": -65, - "get_up_count": 0, + "facing_x": 930, + "facing_y": -374, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -16939,11 +19059,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 178, - "y": 8 + "x": 34, + "y": 107 }, { "action": null, @@ -16966,13 +19086,14 @@ "facing": -1, "facing_x": -1000, "facing_y": 0, - "get_up_count": 0, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 1, @@ -16989,12 +19110,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -17004,61 +19125,82 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 297, + "phase_ticks_remaining": 178, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 123 + "tick": 120 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 123 + "tick": 120 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "10c4a0e22700fe04d87ccc61d547ee1d3ea656ca0e0d64c442a67f5380e30d7d", + "checksum": "0e7f204e33ea3fe939480ebfa252c8da97b1775742e3ef1ccb25ee2d609162ab", "events": [], "fighters": [ { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 120, - "action_hand": "right", - "action_id": "one@114", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 114, - "action_startup_ticks": 6, - "action_target": "head", + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": -87, - "get_up_count": 0, + "facing_x": 925, + "facing_y": -379, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -17073,11 +19215,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 174, - "y": 11 + "x": 27, + "y": 112 }, { "action": null, @@ -17100,13 +19242,14 @@ "facing": -1, "facing_x": -1000, "facing_y": 0, - "get_up_count": 0, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 1, @@ -17123,12 +19266,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -17138,61 +19281,82 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 296, + "phase_ticks_remaining": 177, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 124 + "tick": 121 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 124 + "tick": 121 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "42c0d6973666ab0b4403ee3534e51473869ff7dd266752977d4899140177ffef", + "checksum": "197a4b7b830ca718f653ee918ef28ffe125ddf0990bc5224d2ed303b262dfed7", "events": [], "fighters": [ { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 120, - "action_hand": "right", - "action_id": "one@114", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 114, - "action_startup_ticks": 6, - "action_target": "head", + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": -100, - "get_up_count": 0, + "facing_x": 924, + "facing_y": -384, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -17207,11 +19371,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 170, - "y": 13 + "x": 19, + "y": 117 }, { "action": null, @@ -17234,13 +19398,14 @@ "facing": -1, "facing_x": -1000, "facing_y": 0, - "get_up_count": 0, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 1, @@ -17257,12 +19422,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -17272,61 +19437,82 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 295, + "phase_ticks_remaining": 176, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 125 + "tick": 122 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 125 + "tick": 122 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "441373cffa61d2f74e0d46129319db441fc2349904ec0a9ff4a4cba012fc8e66", + "checksum": "8b248affe0cacff2175915e5fd74cc1563303b086875f1692b60fd9a56addf76", "events": [], "fighters": [ { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 120, - "action_hand": "right", - "action_id": "one@114", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 114, - "action_startup_ticks": 6, - "action_target": "head", + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": -118, - "get_up_count": 0, + "facing_x": 923, + "facing_y": -389, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -17341,11 +19527,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 165, - "y": 16 + "x": 11, + "y": 122 }, { "action": null, @@ -17368,13 +19554,14 @@ "facing": -1, "facing_x": -1000, "facing_y": 0, - "get_up_count": 0, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 1, @@ -17391,12 +19578,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -17406,61 +19593,82 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 294, + "phase_ticks_remaining": 175, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 126 + "tick": 123 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 126 + "tick": 123 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "5ee59dff45db7040b47766ba863bcd6b9b95bfb6c5c737b67c45277526f079a1", + "checksum": "599d96525318c836789e520a9ec0842be024ade796c330220cc0a09e1bd59645", "events": [], "fighters": [ { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 120, - "action_hand": "right", - "action_id": "one@114", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 114, - "action_startup_ticks": 6, - "action_target": "head", + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 992, - "facing_y": -135, - "get_up_count": 0, + "facing_x": 922, + "facing_y": -392, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -17475,11 +19683,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 161, - "y": 19 + "x": 4, + "y": 126 }, { "action": null, @@ -17502,13 +19710,14 @@ "facing": -1, "facing_x": -1000, "facing_y": 0, - "get_up_count": 0, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 1, @@ -17525,12 +19734,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -17540,61 +19749,82 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 293, + "phase_ticks_remaining": 174, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 127 + "tick": 124 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 127 + "tick": 124 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "f047c9e80998878e5d2e7ddeabee1879f061a77ae965e92c2a3a6767484ac6d6", + "checksum": "78a7402981ee891cc0a1cd6f8866503ffbf0455735e46ce9c822d96e892b69e1", "events": [], "fighters": [ { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 120, - "action_hand": "right", - "action_id": "one@114", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 114, - "action_startup_ticks": 6, - "action_target": "head", + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 993, - "facing_y": -145, - "get_up_count": 0, + "facing_x": 918, + "facing_y": -395, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -17609,11 +19839,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 157, - "y": 21 + "x": -4, + "y": 131 }, { "action": null, @@ -17636,13 +19866,14 @@ "facing": -1, "facing_x": -1000, "facing_y": 0, - "get_up_count": 0, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 1, @@ -17659,12 +19890,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -17674,61 +19905,82 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 292, + "phase_ticks_remaining": 173, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 128 + "tick": 125 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 128 + "tick": 125 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "2297c24bfdc66fed8da1f59434d00dcf9cd9777862a8a66e93ffe8315493a460", + "checksum": "324c6aab83c90f54815e1636bfe463814a24c4abf6f88d988d2ac2e1850423eb", "events": [], "fighters": [ { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 120, - "action_hand": "right", - "action_id": "one@114", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 114, - "action_startup_ticks": 6, - "action_target": "head", + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 993, - "facing_y": -162, - "get_up_count": 0, + "facing_x": 917, + "facing_y": -401, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -17743,11 +19995,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 153, - "y": 24 + "x": -11, + "y": 136 }, { "action": null, @@ -17770,13 +20022,14 @@ "facing": -1, "facing_x": -1000, "facing_y": 0, - "get_up_count": 0, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 1, @@ -17793,12 +20046,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -17808,61 +20061,82 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 291, + "phase_ticks_remaining": 172, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 129 + "tick": 126 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 129 + "tick": 126 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "304640aad5b259e0b846321fdfc72505e19a43ead8f1e2a5a3ac5b4f5ec37693", + "checksum": "aa3eb57abafb179bb692daa972e20689f9f54e334a0f6b5c6f0f77bc2c7b0ff7", "events": [], "fighters": [ { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 120, - "action_hand": "right", - "action_id": "one@114", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 114, - "action_startup_ticks": 6, - "action_target": "head", + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 986, - "facing_y": -176, - "get_up_count": 0, + "facing_x": 916, + "facing_y": -405, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -17877,11 +20151,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 149, - "y": 27 + "x": -19, + "y": 141 }, { "action": null, @@ -17904,13 +20178,14 @@ "facing": -1, "facing_x": -1000, "facing_y": 0, - "get_up_count": 0, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 1, @@ -17927,12 +20202,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -17942,81 +20217,44 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 290, + "phase_ticks_remaining": 171, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 130 + "tick": 127 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 130 + "tick": 127 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "81931ad2ed9eb371169abcae69ef0a431bf22e2f2c22a12c07193e8d34e552ec", + "checksum": "276e34e11c480033c563e8dc861a9256468d6aee7c0a8c4f5c3b2d6c64f60a93", "events": [], "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 120, - "action_hand": "right", - "action_id": "one@114", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 114, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 987, - "facing_y": -189, - "get_up_count": 0, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": -4, - "velocity_y": 3, - "warnings": 0, - "x": 144, - "y": 30 - }, { "action": null, "action_active_ticks": 0, @@ -18031,106 +20269,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 0, - "get_up_count": 0, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": true, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 1, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 289, - "result": null, - "round_number": 1, - "tick": 131 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 131 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "89a981ce93eb5d3e7e1ed33572ba289945355ca64b9eed386e9848300b480c07", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 120, - "action_hand": "right", - "action_id": "one@114", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 114, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 981, - "facing_y": -196, - "get_up_count": 0, + "facing_x": 913, + "facing_y": -408, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -18145,11 +20307,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 140, - "y": 32 + "x": -26, + "y": 146 }, { "action": null, @@ -18172,13 +20334,14 @@ "facing": -1, "facing_x": -1000, "facing_y": 0, - "get_up_count": 0, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 1, @@ -18195,12 +20358,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -18210,61 +20373,82 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 288, + "phase_ticks_remaining": 170, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 132 + "tick": 128 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 132 + "tick": 128 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "6a0e3d855fdcf9ea1e25f9b7e4cc3dec71d13d46c084bb18f0c4a7769cb93967", + "checksum": "d84407b2313d432463023bb4b47d79082e0590456f2e228c8b178b8aa23299e5", "events": [], "fighters": [ { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 120, - "action_hand": "right", - "action_id": "one@114", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 114, - "action_startup_ticks": 6, - "action_target": "head", + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 982, - "facing_y": -209, - "get_up_count": 0, + "facing_x": 912, + "facing_y": -412, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -18279,11 +20463,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 136, - "y": 35 + "x": -34, + "y": 151 }, { "action": null, @@ -18306,13 +20490,14 @@ "facing": -1, "facing_x": -1000, "facing_y": 0, - "get_up_count": 0, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 1, @@ -18329,12 +20514,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -18344,61 +20529,82 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 287, + "phase_ticks_remaining": 169, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 133 + "tick": 129 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 133 + "tick": 129 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "2e38744d9a676570581a5e2c1ef8659098da7faee94f49388a036a56595a276d", + "checksum": "42387c336821497a53a30b73c2bbabb4e784a680ebe7ddd72776195da07676fb", "events": [], "fighters": [ { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 120, - "action_hand": "right", - "action_id": "one@114", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 114, - "action_startup_ticks": 6, - "action_target": "head", + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 976, - "facing_y": -220, - "get_up_count": 0, + "facing_x": 911, + "facing_y": -417, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -18413,11 +20619,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 132, - "y": 38 + "x": -41, + "y": 156 }, { "action": null, @@ -18440,13 +20646,14 @@ "facing": -1, "facing_x": -1000, "facing_y": 0, - "get_up_count": 0, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 1, @@ -18463,12 +20670,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -18478,61 +20685,82 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 286, + "phase_ticks_remaining": 168, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 134 + "tick": 130 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 134 + "tick": 130 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "5fe9f2ff6b727ba0ae7b7e9a8f53d85f77dc09e0d8600e239eec907af83597ab", + "checksum": "7747a98a9454280d6d802c07121cea8844341de7d89479a77094bb36565eb364", "events": [], "fighters": [ { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 120, - "action_hand": "right", - "action_id": "one@114", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 114, - "action_startup_ticks": 6, - "action_target": "head", + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 977, - "facing_y": -232, - "get_up_count": 0, + "facing_x": 908, + "facing_y": -419, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -18547,11 +20775,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 128, - "y": 41 + "x": -49, + "y": 161 }, { "action": null, @@ -18574,13 +20802,14 @@ "facing": -1, "facing_x": -1000, "facing_y": 0, - "get_up_count": 0, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 1, @@ -18597,12 +20826,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -18612,22 +20841,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 285, + "phase_ticks_remaining": 167, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 135 + "tick": 131 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 135 + "tick": 131 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "a7b6516397f42c9dd1bc116327182c787d44ba1f74c207f06ce83587e13214ed", + "checksum": "4f8803631dce476ff3d41da52825167db7c5379bc2f4656be5593281a71dd69e", "events": [], "fighters": [ { @@ -18644,29 +20893,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 972, - "facing_y": -237, - "get_up_count": 0, + "facing_x": 908, + "facing_y": -422, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -18681,11 +20931,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 124, - "y": 43 + "x": -57, + "y": 166 }, { "action": null, @@ -18708,13 +20958,14 @@ "facing": -1, "facing_x": -1000, "facing_y": 0, - "get_up_count": 0, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 1, @@ -18731,12 +20982,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -18746,22 +20997,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 284, + "phase_ticks_remaining": 166, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 136 + "tick": 132 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 136 + "tick": 132 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "7d742f4e416c0dc6930603e338e6b154fb02dfee04ce9aa4370fb4052a750d8c", + "checksum": "f3f98f79fb1dca9792123f8d5e295e7e161efdf932210711f9d76295b06bd582", "events": [], "fighters": [ { @@ -18778,29 +21049,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 973, - "facing_y": -247, - "get_up_count": 0, + "facing_x": 907, + "facing_y": -423, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -18815,11 +21087,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 119, - "y": 46 + "x": -64, + "y": 170 }, { "action": null, @@ -18842,13 +21114,14 @@ "facing": -1, "facing_x": -1000, "facing_y": 0, - "get_up_count": 0, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 1, @@ -18865,12 +21138,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -18880,23 +21153,56 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 283, + "phase_ticks_remaining": 165, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 137 + "tick": 133 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 137 + "tick": 133 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "66d2736e203fc7fb812ad7829e8ac2abb95af4877fe25477e2e8f1e3005c2c3b", - "events": [], + "checksum": "9a5f9a8e06d75ff3b9e9cb2bf451815f23a45c818db00b4788f206a2ca4b778c", + "events": [ + { + "action_id": null, + "actor_id": "two", + "amount": 1, + "blood": 0, + "detail": "", + "direction": 0, + "event_id": 14, + "kind": "get_up", + "target_id": null, + "tick": 134 + } + ], "fighters": [ { "action": null, @@ -18912,29 +21218,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 968, - "facing_y": -256, - "get_up_count": 0, + "facing_x": 905, + "facing_y": -425, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -18949,11 +21256,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 115, - "y": 49 + "x": -72, + "y": 175 }, { "action": null, @@ -18976,20 +21283,21 @@ "facing": -1, "facing_x": -1000, "facing_y": 0, - "get_up_count": 0, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": true, + "guard": 530, + "guard_broken": false, + "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 1, + "poise": 300, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -18999,12 +21307,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -19014,22 +21322,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 282, + "phase_ticks_remaining": 84, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 138 + "tick": 134 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 138 + "tick": 134 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "015c8f7162933b0f472d8bd9642151287def64e86a3d43c04fd438d290ce9b21", + "checksum": "a6d08232e3b9f6818a8ad91d1f933b86f04cd0b7c73ede1155605d7a4cb3320d", "events": [], "fighters": [ { @@ -19046,29 +21374,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 964, - "facing_y": -265, - "get_up_count": 0, + "facing_x": 904, + "facing_y": -429, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -19083,11 +21412,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 111, - "y": 52 + "x": -79, + "y": 180 }, { "action": null, @@ -19108,22 +21437,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 0, - "get_up_count": 0, + "facing_x": -998, + "facing_y": 64, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": true, + "guard": 530, + "guard_broken": false, + "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 1, + "poise": 300, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -19133,12 +21463,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -19148,22 +21478,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 281, + "phase_ticks_remaining": 83, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 139 + "tick": 135 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 139 + "tick": 135 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "f0586b76709d72e2782085c474981665f8e46bc313a30172d0c38d536685ad5d", + "checksum": "6d6d1698c3306aa0c4711cb79aadd09e5dee75e954b92772247cc6b1c4783aab", "events": [], "fighters": [ { @@ -19180,29 +21530,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 965, - "facing_y": -270, - "get_up_count": 0, + "facing_x": 904, + "facing_y": -432, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -19217,11 +21568,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 107, - "y": 54 + "x": -87, + "y": 185 }, { "action": null, @@ -19242,22 +21593,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 0, - "get_up_count": 0, + "facing_x": -992, + "facing_y": 128, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": true, + "guard": 530, + "guard_broken": false, + "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 1, + "poise": 300, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -19267,12 +21619,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -19282,22 +21634,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 280, + "phase_ticks_remaining": 82, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 140 + "tick": 136 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 140 + "tick": 136 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "3b07d2cc8b609d1bdd7e4cc505814a3d92233e7e0b71426ab056d8d236d1e7c9", + "checksum": "eb3c7b85c5508a06135c2b8d10ab918ce49f468030aa6b5bcd7767a46a952ff3", "events": [], "fighters": [ { @@ -19314,29 +21686,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 960, - "facing_y": -278, - "get_up_count": 0, + "facing_x": 901, + "facing_y": -434, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -19351,11 +21724,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 103, - "y": 57 + "x": -94, + "y": 190 }, { "action": null, @@ -19376,22 +21749,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 0, - "get_up_count": 0, + "facing_x": -982, + "facing_y": 191, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": true, + "guard": 530, + "guard_broken": false, + "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 1, + "poise": 300, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -19401,12 +21775,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -19416,23 +21790,56 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 279, + "phase_ticks_remaining": 81, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 141 + "tick": 137 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 141 + "tick": 137 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "4533d079b46f21801a4868807fd8b275e4839bb7167c432ef40ee79e20fa2f54", - "events": [], + "checksum": "85993549dfa1aaf55650038718b77ee69a3ba3ad5ff40e2b57875ef8debc8e3a", + "events": [ + { + "action_id": null, + "actor_id": null, + "amount": 2, + "blood": 0, + "detail": "", + "direction": 0, + "event_id": 15, + "kind": "count", + "target_id": "two", + "tick": 138 + } + ], "fighters": [ { "action": null, @@ -19448,29 +21855,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 961, - "facing_y": -287, - "get_up_count": 0, + "facing_x": 901, + "facing_y": -437, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -19485,11 +21893,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 99, - "y": 60 + "x": -102, + "y": 195 }, { "action": null, @@ -19510,22 +21918,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 0, - "get_up_count": 0, + "facing_x": -967, + "facing_y": 253, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": true, + "guard": 530, + "guard_broken": false, + "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 1, + "poise": 300, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -19535,12 +21944,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -19550,22 +21959,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 278, + "phase_ticks_remaining": 80, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 142 + "tick": 138 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 142 + "tick": 138 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "61412b86b3204d7ffbf67b8776ca5862483d330eaec6142db32a50c2f75517fb", + "checksum": "19cfd26b13887dc6dab5620b6f99ee62ea82dedea52e325e0009819a69f8a318", "events": [], "fighters": [ { @@ -19582,29 +22011,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 958, - "facing_y": -293, - "get_up_count": 0, + "facing_x": 898, + "facing_y": -439, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -19619,11 +22049,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 94, - "y": 63 + "x": -109, + "y": 200 }, { "action": null, @@ -19644,22 +22074,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 0, - "get_up_count": 0, + "facing_x": -949, + "facing_y": 314, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": true, + "guard": 530, + "guard_broken": false, + "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 1, + "poise": 300, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -19669,12 +22100,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -19684,22 +22115,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 277, + "phase_ticks_remaining": 79, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 143 + "tick": 139 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 143 + "tick": 139 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "d332b880c542342f89caebf22c6e1a6ebbb229fb13c5c57c98d3818a9c732e78", + "checksum": "d51b3faeafdc0390c59ed138fd9d6b9d4c129ec060bdbcf6b09411bae1222bfd", "events": [], "fighters": [ { @@ -19716,163 +22167,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 958, - "facing_y": -296, - "get_up_count": 0, + "facing_x": 898, + "facing_y": -441, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": -4, - "velocity_y": 3, - "warnings": 0, - "x": 90, - "y": 65 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 0, - "get_up_count": 0, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": true, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, + "last_input_sequence": 64, "maximum_stamina": 1000, - "player_id": "two", - "poise": 1, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 276, - "result": null, - "round_number": 1, - "tick": 144 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 144 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "9cca1817a773c68787afb62c25072e6311c8d499d0320c2b6f37df495349d30f", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 955, - "facing_y": -303, - "get_up_count": 0, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -19887,11 +22205,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 86, - "y": 68 + "x": -117, + "y": 205 }, { "action": null, @@ -19912,22 +22230,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 0, - "get_up_count": 0, + "facing_x": -927, + "facing_y": 374, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": true, + "guard": 530, + "guard_broken": false, + "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 1, + "poise": 300, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -19937,12 +22256,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -19952,22 +22271,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 275, + "phase_ticks_remaining": 78, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 145 + "tick": 140 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 145 + "tick": 140 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "e8a555651b5e517a3b766687c9c778a03765e385666634ba4a6a7dafde0a14bf", + "checksum": "99e85bed646dc13cdffb5b2d3f1aec48385d2b47922ed10c0b8f66691c8089a4", "events": [], "fighters": [ { @@ -19984,29 +22323,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 951, - "facing_y": -310, - "get_up_count": 0, + "facing_x": 896, + "facing_y": -443, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -20021,11 +22361,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 82, - "y": 71 + "x": -125, + "y": 210 }, { "action": null, @@ -20046,22 +22386,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 0, - "get_up_count": 0, + "facing_x": -902, + "facing_y": 433, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": true, + "guard": 530, + "guard_broken": false, + "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 1, + "poise": 300, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -20071,12 +22412,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -20086,22 +22427,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 274, + "phase_ticks_remaining": 77, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 146 + "tick": 141 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 146 + "tick": 141 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "b72e554dd0031aaeb96364a54124b51688735442179091346c4aa62faf5d0a1c", + "checksum": "67739643b3b99275dd9ba8186a4838717ccd9dd49f5e29019a3a43d6d51c05a5", "events": [], "fighters": [ { @@ -20118,29 +22479,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 948, - "facing_y": -316, - "get_up_count": 0, + "facing_x": 896, + "facing_y": -443, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -20155,11 +22517,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 78, - "y": 74 + "x": -132, + "y": 214 }, { "action": null, @@ -20180,22 +22542,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 0, - "get_up_count": 0, + "facing_x": -896, + "facing_y": 443, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": true, + "guard": 530, + "guard_broken": false, + "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 1, + "poise": 300, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -20205,12 +22568,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -20220,22 +22583,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 273, + "phase_ticks_remaining": 76, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 147 + "tick": 142 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 147 + "tick": 142 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "a4e80a4bea893983578ee791d26063c903157bad4a8054202de568f1802c2253", + "checksum": "e4fec3a7a36d4161ed046f5f78b3b19264a93f4088e0827ade0afa0fecb276de", "events": [], "fighters": [ { @@ -20252,29 +22635,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 949, - "facing_y": -317, - "get_up_count": 0, + "facing_x": 896, + "facing_y": -446, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -20289,11 +22673,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 73, - "y": 76 + "x": -140, + "y": 219 }, { "action": null, @@ -20314,22 +22698,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 0, - "get_up_count": 0, + "facing_x": -896, + "facing_y": 446, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": true, + "guard": 530, + "guard_broken": false, + "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 1, + "poise": 300, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -20339,12 +22724,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -20354,22 +22739,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 272, + "phase_ticks_remaining": 75, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 148 + "tick": 143 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 148 + "tick": 143 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "a9e847cdd236f712275caba0b425aa4db526987281ef72a5ada0114ba5ee0cbb", + "checksum": "1f7bd05fa7376b735401c6f2c69685e5d39ad31124130bd1fdc67526c5ae9a61", "events": [], "fighters": [ { @@ -20386,29 +22791,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 946, - "facing_y": -323, - "get_up_count": 0, + "facing_x": 895, + "facing_y": -448, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -20423,11 +22829,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 69, - "y": 79 + "x": -147, + "y": 224 }, { "action": null, @@ -20448,22 +22854,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 0, - "get_up_count": 0, + "facing_x": -895, + "facing_y": 448, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": true, + "guard": 530, + "guard_broken": false, + "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 1, + "poise": 300, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -20473,12 +22880,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -20488,36 +22895,43 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 271, + "phase_ticks_remaining": 74, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 149 + "tick": 144 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 149 + "tick": 144 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "920f8551a2efbef33ca103e524f5afc085881cc634ba0cea7eb5bdc1403c3285", - "events": [ - { - "action_id": null, - "actor_id": null, - "amount": 1, - "blood": 0, - "detail": "", - "direction": 0, - "event_id": 12, - "kind": "count", - "target_id": "two", - "tick": 150 - } - ], + "checksum": "b744fbbfa2cde48546d9fa9db3bbc51a53a4fb74d6b94b9237390540de9d3233", + "events": [], "fighters": [ { "action": null, @@ -20533,29 +22947,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 947, - "facing_y": -330, - "get_up_count": 1, + "facing_x": 893, + "facing_y": -449, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -20570,11 +22985,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 65, - "y": 82 + "x": -155, + "y": 229 }, { "action": null, @@ -20595,22 +23010,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 0, - "get_up_count": 1, + "facing_x": -893, + "facing_y": 449, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": true, + "guard": 530, + "guard_broken": false, + "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 1, + "poise": 300, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -20620,12 +23036,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -20635,22 +23051,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 270, + "phase_ticks_remaining": 73, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 150 + "tick": 145 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 150 + "tick": 145 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "ace0ccaf5cd91bebdd17a6a1e9ede953cffe4f79af0dae8175d56ec8e7d09cb3", + "checksum": "e86f55306d5452644a2b26491e1b38c11eb78af3164faed3f8f2daa26962be35", "events": [], "fighters": [ { @@ -20667,29 +23103,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 944, - "facing_y": -335, - "get_up_count": 1, + "facing_x": 893, + "facing_y": -452, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -20704,11 +23141,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 61, - "y": 85 + "x": -162, + "y": 234 }, { "action": null, @@ -20729,22 +23166,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 0, - "get_up_count": 1, + "facing_x": -893, + "facing_y": 452, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": true, + "guard": 530, + "guard_broken": false, + "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 1, + "poise": 300, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -20754,12 +23192,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -20769,22 +23207,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 269, + "phase_ticks_remaining": 72, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 151 + "tick": 146 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 151 + "tick": 146 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "4adef4b53fe7e40bee8bd8507350215ae50106ad02d48ff7cd8cd143c0a3a0a2", + "checksum": "25603d471a01784dc7cfc7d89feb849a1b4f5d3a3d80e896af9acf8f46782ef8", "events": [], "fighters": [ { @@ -20801,29 +23259,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 941, - "facing_y": -337, - "get_up_count": 1, + "facing_x": 891, + "facing_y": -453, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -20838,11 +23297,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 57, - "y": 87 + "x": -170, + "y": 239 }, { "action": null, @@ -20863,22 +23322,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 0, - "get_up_count": 1, + "facing_x": -891, + "facing_y": 453, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": true, + "guard": 530, + "guard_broken": false, + "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 1, + "poise": 300, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -20888,12 +23348,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -20903,22 +23363,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 268, + "phase_ticks_remaining": 71, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 152 + "tick": 147 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 152 + "tick": 147 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "8f8ebd6b9ea0b101aa8b9572eff7a8840d4e171172082f672e9919927b7315d7", + "checksum": "82c29315c58d7c71a0e29d774594512b5cd9daad8a0d39ca6dfbecefb464bd77", "events": [], "fighters": [ { @@ -20935,29 +23415,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 942, - "facing_y": -343, - "get_up_count": 1, + "facing_x": 891, + "facing_y": -455, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -20972,11 +23453,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 53, - "y": 90 + "x": -178, + "y": 244 }, { "action": null, @@ -20997,22 +23478,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 0, - "get_up_count": 1, + "facing_x": -891, + "facing_y": 455, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": true, + "guard": 530, + "guard_broken": false, + "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 1, + "poise": 300, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -21022,12 +23504,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -21037,22 +23519,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 267, + "phase_ticks_remaining": 70, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 153 + "tick": 148 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 153 + "tick": 148 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "2e8006520f9250178b5e4467822db72ee529a476142b17e01ca0dcb0cac66c80", + "checksum": "a3ee85c1601f81c1d4b4313a7448d77047d0009c0e35a5c49e49ac2538d6946e", "events": [], "fighters": [ { @@ -21069,29 +23571,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 940, - "facing_y": -347, - "get_up_count": 1, + "facing_x": 889, + "facing_y": -456, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -21106,11 +23609,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 48, - "y": 93 + "x": -185, + "y": 249 }, { "action": null, @@ -21131,22 +23634,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 0, - "get_up_count": 1, + "facing_x": -889, + "facing_y": 456, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": true, + "guard": 530, + "guard_broken": false, + "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 1, + "poise": 300, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -21156,12 +23660,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -21171,22 +23675,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 266, + "phase_ticks_remaining": 69, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 154 + "tick": 149 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 154 + "tick": 149 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "cc7fc5de3743fbcd22dae57afe187e8f2df43da2719bb4ebda04fe45c29eae97", + "checksum": "a6649797da148ec789b1be2c20760c0698cdafb46236034532c4867006fc5acf", "events": [], "fighters": [ { @@ -21203,29 +23727,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 937, - "facing_y": -351, - "get_up_count": 1, + "facing_x": 889, + "facing_y": -458, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -21240,11 +23765,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 44, - "y": 96 + "x": -193, + "y": 254 }, { "action": null, @@ -21265,22 +23790,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 0, - "get_up_count": 1, + "facing_x": -889, + "facing_y": 458, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": true, + "guard": 530, + "guard_broken": false, + "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 1, + "poise": 300, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -21290,12 +23816,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -21305,36 +23831,43 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 265, + "phase_ticks_remaining": 68, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 155 + "tick": 150 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 155 + "tick": 150 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "5cdce839302d930102a29ebfcd43b1065caa4a087461c3d23397b0ebe97aa931", - "events": [ - { - "action_id": null, - "actor_id": "two", - "amount": 1, - "blood": 0, - "detail": "", - "direction": 0, - "event_id": 14, - "kind": "get_up", - "target_id": null, - "tick": 156 - } - ], + "checksum": "164193e292e6998151bd64058a1d918cf9b39014c448b4606911a44b2b0cc1c0", + "events": [], "fighters": [ { "action": null, @@ -21350,29 +23883,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 938, - "facing_y": -353, - "get_up_count": 1, + "facing_x": 888, + "facing_y": -460, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -21387,11 +23921,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 40, - "y": 98 + "x": -200, + "y": 259 }, { "action": null, @@ -21412,15 +23946,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 0, - "get_up_count": 1, + "facing_x": -888, + "facing_y": 460, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -21437,12 +23972,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -21452,22 +23987,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 264, + "phase_ticks_remaining": 67, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 156 + "tick": 151 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 156 + "tick": 151 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "cb1b78df22eb2f35e3006864aa4302f88a6aa3b0b1e5bebbeaff4670205e9eee", + "checksum": "8551603347e9d1dc37a9960cf0668c4e106589d3c4454ea146929da8cb6ccd17", "events": [], "fighters": [ { @@ -21484,163 +24039,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 936, - "facing_y": -358, - "get_up_count": 1, + "facing_x": 888, + "facing_y": -459, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": -4, - "velocity_y": 3, - "warnings": 0, - "x": 36, - "y": 101 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -999, - "facing_y": 44, - "get_up_count": 1, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, + "last_input_sequence": 64, "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 263, - "result": null, - "round_number": 1, - "tick": 157 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 157 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "e3cf9cc054d90e273711d296b0d4022150b7513b9d4e02751a044be7634a0d96", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 933, - "facing_y": -362, - "get_up_count": 1, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -21655,11 +24077,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 32, - "y": 104 + "x": -208, + "y": 263 }, { "action": null, @@ -21680,15 +24102,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -996, - "facing_y": 88, - "get_up_count": 1, + "facing_x": -888, + "facing_y": 459, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -21705,12 +24128,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -21720,22 +24143,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 262, + "phase_ticks_remaining": 66, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 158 + "tick": 152 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 158 + "tick": 152 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "fbe27f56f776199e75e28513335876e0a83608039be1b9f5dc2a24df36f2baee", + "checksum": "4329dc427a25f0c17336ecf5bb302e0ff806f41cdbabd8d54c7d2d8f2eb8b9b9", "events": [], "fighters": [ { @@ -21752,29 +24195,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 931, - "facing_y": -366, - "get_up_count": 1, + "facing_x": 887, + "facing_y": -462, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -21789,11 +24233,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 28, - "y": 107 + "x": -215, + "y": 268 }, { "action": null, @@ -21814,15 +24258,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -991, - "facing_y": 131, - "get_up_count": 1, + "facing_x": -887, + "facing_y": 462, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -21839,12 +24284,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -21854,22 +24299,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 261, + "phase_ticks_remaining": 65, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 159 + "tick": 153 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 159 + "tick": 153 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "adf5531f72906628b27d9d840550c78980760b6e3b5c474b4f5de61f1c4cf017", + "checksum": "291747ef602584e36f968332ac87ce7545d1f0172e7c04f25a317333450f45ae", "events": [], "fighters": [ { @@ -21886,29 +24351,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 932, - "facing_y": -367, - "get_up_count": 1, + "facing_x": 887, + "facing_y": -463, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -21923,11 +24389,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 23, - "y": 109 + "x": -223, + "y": 273 }, { "action": null, @@ -21948,15 +24414,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -985, - "facing_y": 174, - "get_up_count": 1, + "facing_x": -887, + "facing_y": 463, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -21973,12 +24440,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -21988,22 +24455,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 260, + "phase_ticks_remaining": 64, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 160 + "tick": 154 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 160 + "tick": 154 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "0ce934fd27806fd353c4667250b6415d7f6c39ea599e453fe29eca3d903bc99a", + "checksum": "2e1bf025ca691d25d100536cce2a15759d8df13b69a58df02040ef540105b13d", "events": [], "fighters": [ { @@ -22020,29 +24507,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 930, - "facing_y": -370, - "get_up_count": 1, + "facing_x": 886, + "facing_y": -464, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -22057,11 +24545,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 19, - "y": 112 + "x": -231, + "y": 278 }, { "action": null, @@ -22082,15 +24570,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -976, - "facing_y": 217, - "get_up_count": 1, + "facing_x": -886, + "facing_y": 464, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -22107,12 +24596,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -22122,22 +24611,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 259, + "phase_ticks_remaining": 63, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 161 + "tick": 155 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 161 + "tick": 155 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "0652c65e624f47de54bbc3d82acdda257e4300a4b1dea69bc8794e8e1840bc2b", + "checksum": "8a84a2e46e0c49c64001c2b31eed6e13f49c55980db6f3e5b99db29d6556da76", "events": [], "fighters": [ { @@ -22154,29 +24663,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 928, - "facing_y": -374, - "get_up_count": 1, + "facing_x": 886, + "facing_y": -466, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -22191,11 +24701,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 15, - "y": 115 + "x": -238, + "y": 283 }, { "action": null, @@ -22216,15 +24726,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -966, - "facing_y": 259, - "get_up_count": 1, + "facing_x": -886, + "facing_y": 466, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -22241,12 +24752,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -22256,22 +24767,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 258, + "phase_ticks_remaining": 62, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 162 + "tick": 156 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 162 + "tick": 156 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "17184901f928444f081aeb8e62ebc8064266af26d729d752c346e58e7042d865", + "checksum": "b228ae69cd7251a45bf47cd03297005a5cb448fc760e62c35020c3a1c2410f4f", "events": [], "fighters": [ { @@ -22288,29 +24819,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 926, - "facing_y": -378, - "get_up_count": 1, + "facing_x": 884, + "facing_y": -466, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -22325,11 +24857,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 11, - "y": 118 + "x": -246, + "y": 288 }, { "action": null, @@ -22350,15 +24882,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -954, - "facing_y": 301, - "get_up_count": 1, + "facing_x": -884, + "facing_y": 466, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -22375,12 +24908,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -22390,22 +24923,211 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 257, + "phase_ticks_remaining": 61, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 163 + "tick": 157 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 163 + "tick": 157 + }, + { + "attack_one": null, + "attack_two": null, + "snapshot": { + "payload": { + "checksum": "f2c5169a5f36b794fb39d7f3111bdff38505d9fa644794f03291d6358cc77dee", + "events": [ + { + "action_id": null, + "actor_id": null, + "amount": 3, + "blood": 0, + "detail": "", + "direction": 0, + "event_id": 16, + "kind": "count", + "target_id": "two", + "tick": 158 + } + ], + "fighters": [ + { + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, + "clinch_startup_ticks": 0, + "clinch_ticks": 0, + "conditioning": 997, + "corner_choice": null, + "deductions": 0, + "defense": "none", + "facing": 1, + "facing_x": 884, + "facing_y": -468, + "get_up_count": 3, + "get_up_meter": 0, + "get_up_prompt": null, + "get_up_required": 30, + "get_up_window_end_tick": 0, + "get_up_window_start_tick": 0, + "guard": 700, + "guard_broken": false, + "is_downed": false, + "is_foul_recovery_target": false, + "knockdowns": 0, + "last_input_sequence": 64, + "maximum_stamina": 1000, + "player_id": "one", + "poise": 600, + "queued_actions": 0, + "stamina": 974, + "stance": "orthodox", + "stunned_ticks": 0, + "style": "boxer", + "taunt_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -8, + "velocity_y": 5, + "warnings": 0, + "x": -253, + "y": 293 + }, + { + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, + "clinch_startup_ticks": 0, + "clinch_ticks": 0, + "conditioning": 1000, + "corner_choice": null, + "deductions": 0, + "defense": "none", + "facing": -1, + "facing_x": -884, + "facing_y": 468, + "get_up_count": 3, + "get_up_meter": 0, + "get_up_prompt": null, + "get_up_required": 0, + "get_up_window_end_tick": 0, + "get_up_window_start_tick": 0, + "guard": 530, + "guard_broken": false, + "is_downed": false, + "is_foul_recovery_target": false, + "knockdowns": 1, + "last_input_sequence": -1, + "maximum_stamina": 1000, + "player_id": "two", + "poise": 300, + "queued_actions": 0, + "stamina": 1000, + "stance": "orthodox", + "stunned_ticks": 0, + "style": "slugger", + "taunt_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 42, + "left_cut": 0, + "left_eye": 40, + "right_cut": 0, + "right_eye": 0, + "swelling": 19 + }, + "velocity_x": 0, + "velocity_y": 0, + "warnings": 0, + "x": 300, + "y": 0 + } + ], + "phase": "knockdown", + "phase_ticks_remaining": 60, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, + "result": null, + "round_number": 1, + "tick": 158 + }, + "type": "snapshot", + "version": 5 + }, + "tick": 158 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "21d474eda7dd49027361147515894e6b57116886cb0d09a8d4b5846a6c071bd7", + "checksum": "badd94ba99329248ae8cdc4ab59e4fcd43cc9c354e7dc3ae77ee1e54e882368d", "events": [], "fighters": [ { @@ -22422,29 +25144,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 927, - "facing_y": -379, - "get_up_count": 1, + "facing_x": 883, + "facing_y": -469, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -22459,11 +25182,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 7, - "y": 120 + "x": -261, + "y": 298 }, { "action": null, @@ -22484,15 +25207,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -940, - "facing_y": 342, - "get_up_count": 1, + "facing_x": -883, + "facing_y": 469, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -22509,12 +25233,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -22524,22 +25248,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 256, + "phase_ticks_remaining": 59, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 164 + "tick": 159 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 164 + "tick": 159 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "9f5910d8d0a235b852f68928c8ea030475a4651e2eeabd418065b4605f2420fc", + "checksum": "bcfb7751c4d01883da686e3d607526c44287e7bff1c145f20155e763447016aa", "events": [], "fighters": [ { @@ -22556,29 +25300,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 925, - "facing_y": -381, - "get_up_count": 1, + "facing_x": 883, + "facing_y": -471, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -22593,11 +25338,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 2, - "y": 123 + "x": -268, + "y": 303 }, { "action": null, @@ -22618,15 +25363,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -925, - "facing_y": 381, - "get_up_count": 1, + "facing_x": -883, + "facing_y": 471, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -22643,12 +25389,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -22658,22 +25404,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 255, + "phase_ticks_remaining": 58, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 165 + "tick": 160 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 165 + "tick": 160 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "f4b6c5ac7482eef3e7a31a75d91db2ad928bd412d9032d58a22c36ac45cf4d57", + "checksum": "c1a1c6754f4912c30c73115498395136d1c444ab34e2070001cf7722de23a67f", "events": [], "fighters": [ { @@ -22690,29 +25456,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 923, - "facing_y": -385, - "get_up_count": 1, + "facing_x": 883, + "facing_y": -470, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -22727,11 +25494,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": -2, - "y": 126 + "x": -276, + "y": 307 }, { "action": null, @@ -22752,15 +25519,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -923, - "facing_y": 385, - "get_up_count": 1, + "facing_x": -883, + "facing_y": 470, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -22777,12 +25545,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -22792,22 +25560,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 254, + "phase_ticks_remaining": 57, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 166 + "tick": 161 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 166 + "tick": 161 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "fdc28829777945677e6b64db34760843b57e417e1583edbdee06baf0988ea5b0", + "checksum": "6b0ddf45e6a37ee6079ee6f32f670650694c604215d9d66a570c8c8fe815fad1", "events": [], "fighters": [ { @@ -22824,163 +25612,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 921, - "facing_y": -388, - "get_up_count": 1, + "facing_x": 882, + "facing_y": -471, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": -4, - "velocity_y": 3, - "warnings": 0, - "x": -6, - "y": 129 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -921, - "facing_y": 388, - "get_up_count": 1, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, + "last_input_sequence": 64, "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 253, - "result": null, - "round_number": 1, - "tick": 167 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 167 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "851579225b60953d84cf98ce1fb3ade54ccd32c0b97f50ab5e72cd9603ac4eae", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 922, - "facing_y": -389, - "get_up_count": 1, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -22995,11 +25650,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": -10, - "y": 131 + "x": -284, + "y": 312 }, { "action": null, @@ -23020,15 +25675,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -922, - "facing_y": 389, - "get_up_count": 1, + "facing_x": -882, + "facing_y": 471, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -23045,12 +25701,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -23060,22 +25716,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 252, + "phase_ticks_remaining": 56, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 168 + "tick": 162 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 168 + "tick": 162 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "476e00bc7b2a70ec9708bc685291369f477ebe47c46e3d30fe77169a5c422c2b", + "checksum": "69a7b274a8ee1325b3e2cfdaa28a051fc86f5e6d8dcb5648f3c31c68f96f4512", "events": [], "fighters": [ { @@ -23092,29 +25768,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 920, - "facing_y": -392, - "get_up_count": 1, + "facing_x": 882, + "facing_y": -473, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -23129,11 +25806,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": -14, - "y": 134 + "x": -291, + "y": 317 }, { "action": null, @@ -23154,15 +25831,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -920, - "facing_y": 392, - "get_up_count": 1, + "facing_x": -882, + "facing_y": 473, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -23179,12 +25857,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -23194,22 +25872,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 251, + "phase_ticks_remaining": 55, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 169 + "tick": 163 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 169 + "tick": 163 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "1ca7097957919dbb51eff0a106218f243cbc1811c02c6922c6d49c123ba538fa", + "checksum": "4132df07a60c2ac805cd4bddcbac0fbe746c6531e9512d4a7a77779c4fa710fa", "events": [], "fighters": [ { @@ -23226,29 +25924,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 919, - "facing_y": -395, - "get_up_count": 1, + "facing_x": 880, + "facing_y": -473, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -23263,11 +25962,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": -18, - "y": 137 + "x": -299, + "y": 322 }, { "action": null, @@ -23288,15 +25987,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -919, - "facing_y": 395, - "get_up_count": 1, + "facing_x": -880, + "facing_y": 473, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -23313,12 +26013,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -23328,22 +26028,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 250, + "phase_ticks_remaining": 54, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 170 + "tick": 164 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 170 + "tick": 164 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "893dce2270aed5e7007c647a184afeaacca7352a1f2a9bb1f6fb5570dc3d9d55", + "checksum": "d1ea6570b06aea8b190ce65705227192b74ee9593962b96c432febe91abb48bc", "events": [], "fighters": [ { @@ -23360,29 +26080,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 917, - "facing_y": -397, - "get_up_count": 1, + "facing_x": 880, + "facing_y": -475, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -23397,11 +26118,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": -23, - "y": 140 + "x": -306, + "y": 327 }, { "action": null, @@ -23422,15 +26143,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -917, - "facing_y": 397, - "get_up_count": 1, + "facing_x": -880, + "facing_y": 475, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -23447,12 +26169,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -23462,22 +26184,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 249, + "phase_ticks_remaining": 53, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 171 + "tick": 165 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 171 + "tick": 165 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "393bec0ba1ed53c10e07bff2e6b04c552ee55a4b8d32496a72a8f602997c54d6", + "checksum": "0b018c15661532d7f881c89754ea9aa3c0dc9520fad6e6fe0225ee843031aea0", "events": [], "fighters": [ { @@ -23494,29 +26236,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 918, - "facing_y": -398, - "get_up_count": 1, + "facing_x": 879, + "facing_y": -475, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -23531,11 +26274,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": -27, - "y": 142 + "x": -314, + "y": 332 }, { "action": null, @@ -23556,15 +26299,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -918, - "facing_y": 398, - "get_up_count": 1, + "facing_x": -879, + "facing_y": 475, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -23581,12 +26325,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -23596,22 +26340,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 248, + "phase_ticks_remaining": 52, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 172 + "tick": 166 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 172 + "tick": 166 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "f37acaeccb340d8b9a975106fa8902244d646d63bace0b7521e2fd37cb8d7a66", + "checksum": "470d43fe29c03d716d7f890e8ef74578bbc4b972836bcc13d5daa9af75d865a9", "events": [], "fighters": [ { @@ -23628,163 +26392,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 916, - "facing_y": -401, - "get_up_count": 1, + "facing_x": 879, + "facing_y": -476, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": -4, - "velocity_y": 3, - "warnings": 0, - "x": -31, - "y": 145 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -916, - "facing_y": 401, - "get_up_count": 1, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, + "last_input_sequence": 64, "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 247, - "result": null, - "round_number": 1, - "tick": 173 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 173 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "51e8774dec7ee98338771ad3332a1668d0a2fa0fa55737acc9ee19618331db09", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 915, - "facing_y": -404, - "get_up_count": 1, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -23799,11 +26430,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": -35, - "y": 148 + "x": -322, + "y": 337 }, { "action": null, @@ -23824,15 +26455,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -915, - "facing_y": 404, - "get_up_count": 1, + "facing_x": -879, + "facing_y": 476, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -23849,12 +26481,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -23864,22 +26496,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 246, + "phase_ticks_remaining": 51, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 174 + "tick": 167 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 174 + "tick": 167 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "c5020c5ddffa32500542e1c8a52fad490278cb1c664ef7655e4ffaf16d940e1a", + "checksum": "0d8c0d49ee1e8db3abcb595e8470c05ec3aa18622df51d92a042f27af4d61c0e", "events": [], "fighters": [ { @@ -23896,29 +26548,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 913, - "facing_y": -407, - "get_up_count": 1, + "facing_x": 879, + "facing_y": -478, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -23933,11 +26586,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": -39, - "y": 151 + "x": -329, + "y": 342 }, { "action": null, @@ -23958,15 +26611,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -913, - "facing_y": 407, - "get_up_count": 1, + "facing_x": -879, + "facing_y": 478, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -23983,12 +26637,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -23998,22 +26652,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 245, + "phase_ticks_remaining": 50, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 175 + "tick": 168 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 175 + "tick": 168 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "2716d26c8c02d1bdc64e9c9b50bf70e3f67712a91c7de93a47a94a943b08ec48", + "checksum": "763a40b9330b82b2f1859373cbe5a732dffa16a3d1a066e3e2cdfa0c8e36281c", "events": [], "fighters": [ { @@ -24030,29 +26704,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 914, - "facing_y": -406, - "get_up_count": 1, + "facing_x": 878, + "facing_y": -478, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -24067,11 +26742,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": -44, - "y": 153 + "x": -337, + "y": 347 }, { "action": null, @@ -24092,15 +26767,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -914, - "facing_y": 406, - "get_up_count": 1, + "facing_x": -878, + "facing_y": 478, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -24117,12 +26793,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -24132,22 +26808,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 244, + "phase_ticks_remaining": 49, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 176 + "tick": 169 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 176 + "tick": 169 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "7d859f83577aa3d71c8f4b146b1cd04ff586b1ccb6eedebdb5439149387445f6", + "checksum": "6f2a69113baaa1125f621e2907beab82df4ffdaf69a38f5fa65896a066d51d6d", "events": [], "fighters": [ { @@ -24164,29 +26860,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 913, - "facing_y": -409, - "get_up_count": 1, + "facing_x": 878, + "facing_y": -479, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -24201,11 +26898,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": -48, - "y": 156 + "x": -345, + "y": 352 }, { "action": null, @@ -24226,15 +26923,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -913, - "facing_y": 409, - "get_up_count": 1, + "facing_x": -878, + "facing_y": 479, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -24251,12 +26949,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -24266,22 +26964,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 243, + "phase_ticks_remaining": 48, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 177 + "tick": 170 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 177 + "tick": 170 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "5765d50347d759a9fc9b0351d7fbc8e1ab8c13e29f189b5e45e1a04dbad5fa94", + "checksum": "50c1bfa143ebf4faccc15e6a286eea60df4637e764a51776df34d97a428ae475", "events": [], "fighters": [ { @@ -24298,29 +27016,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 911, - "facing_y": -411, - "get_up_count": 1, + "facing_x": 877, + "facing_y": -480, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -24335,11 +27054,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": -52, - "y": 159 + "x": -352, + "y": 357 }, { "action": null, @@ -24360,15 +27079,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -911, - "facing_y": 411, - "get_up_count": 1, + "facing_x": -877, + "facing_y": 480, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -24385,12 +27105,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -24400,22 +27120,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 242, + "phase_ticks_remaining": 47, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 178 + "tick": 171 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 178 + "tick": 171 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "9bdefec3646dd3eed2f56f5ac4251de4c03be53db2044cf4dfb67872fb633fa9", + "checksum": "895e1f7dce62f188136441a445fd2da55e167e04d0f858cdb5abdd4311c93767", "events": [], "fighters": [ { @@ -24432,29 +27172,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 910, - "facing_y": -414, - "get_up_count": 1, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -24469,11 +27210,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": -56, - "y": 162 + "x": -360, + "y": 362 }, { "action": null, @@ -24494,15 +27235,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -910, - "facing_y": 414, - "get_up_count": 1, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -24519,12 +27261,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -24534,36 +27276,199 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 241, + "phase_ticks_remaining": 46, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 179 + "tick": 172 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 179 + "tick": 172 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "4c15d7df746aa9d087233f106a3fe55a69013771bc24fae1512b4d3ca105e9a2", - "events": [ + "checksum": "abaffb50cbec91de5a8890f9d13b095cfec8ec6f1e2cf23c4e8c2f51cd7281ac", + "events": [], + "fighters": [ { + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, "action_id": null, - "actor_id": null, - "amount": 2, - "blood": 0, - "detail": "", - "direction": 0, - "event_id": 15, - "kind": "count", - "target_id": "two", - "tick": 180 + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, + "clinch_startup_ticks": 0, + "clinch_ticks": 0, + "conditioning": 997, + "corner_choice": null, + "deductions": 0, + "defense": "none", + "facing": 1, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 3, + "get_up_meter": 0, + "get_up_prompt": null, + "get_up_required": 30, + "get_up_window_end_tick": 0, + "get_up_window_start_tick": 0, + "guard": 700, + "guard_broken": false, + "is_downed": false, + "is_foul_recovery_target": false, + "knockdowns": 0, + "last_input_sequence": 64, + "maximum_stamina": 1000, + "player_id": "one", + "poise": 600, + "queued_actions": 0, + "stamina": 974, + "stance": "orthodox", + "stunned_ticks": 0, + "style": "boxer", + "taunt_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "warnings": 0, + "x": -360, + "y": 362 + }, + { + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, + "clinch_startup_ticks": 0, + "clinch_ticks": 0, + "conditioning": 1000, + "corner_choice": null, + "deductions": 0, + "defense": "none", + "facing": -1, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 3, + "get_up_meter": 0, + "get_up_prompt": null, + "get_up_required": 0, + "get_up_window_end_tick": 0, + "get_up_window_start_tick": 0, + "guard": 530, + "guard_broken": false, + "is_downed": false, + "is_foul_recovery_target": false, + "knockdowns": 1, + "last_input_sequence": -1, + "maximum_stamina": 1000, + "player_id": "two", + "poise": 300, + "queued_actions": 0, + "stamina": 1000, + "stance": "orthodox", + "stunned_ticks": 0, + "style": "slugger", + "taunt_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 42, + "left_cut": 0, + "left_eye": 40, + "right_cut": 0, + "right_eye": 0, + "swelling": 19 + }, + "velocity_x": 0, + "velocity_y": 0, + "warnings": 0, + "x": 300, + "y": 0 } ], + "phase": "knockdown", + "phase_ticks_remaining": 45, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, + "result": null, + "round_number": 1, + "tick": 173 + }, + "type": "snapshot", + "version": 5 + }, + "tick": 173 + }, + { + "attack_one": null, + "attack_two": null, + "snapshot": { + "payload": { + "checksum": "6f84ce04fc59365d423be28450c24dbfcd87573df4bb9888b52de474c503ff78", + "events": [], "fighters": [ { "action": null, @@ -24579,29 +27484,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 909, - "facing_y": -416, - "get_up_count": 2, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -24616,11 +27522,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -60, - "y": 165 + "x": -360, + "y": 362 }, { "action": null, @@ -24641,15 +27547,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -909, - "facing_y": 416, - "get_up_count": 2, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -24666,12 +27573,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -24681,22 +27588,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 240, + "phase_ticks_remaining": 44, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 180 + "tick": 174 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 180 + "tick": 174 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "34406f8a07012bea927516e774b62eca1ff90fb8bd6349bd2d66138ca51bdd8c", + "checksum": "f8fbecb1511f6966c4ec6520de5fcde795485209d27323bb90ae840d66a25fb0", "events": [], "fighters": [ { @@ -24713,29 +27640,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 910, - "facing_y": -417, - "get_up_count": 2, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -24750,11 +27678,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -64, - "y": 167 + "x": -360, + "y": 362 }, { "action": null, @@ -24775,15 +27703,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -910, - "facing_y": 417, - "get_up_count": 2, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -24800,12 +27729,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -24815,22 +27744,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 239, + "phase_ticks_remaining": 43, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 181 + "tick": 175 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 181 + "tick": 175 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "f3e223c4c923e9ac1f2747f7afb464a493359f7e3d810d04330c3af160a6fdb0", + "checksum": "49a555d1c1b2e9c71bc52b0bbb67dff7049466d24c3401f5f96691b15e8836f3", "events": [], "fighters": [ { @@ -24847,29 +27796,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 908, - "facing_y": -418, - "get_up_count": 2, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -24884,11 +27834,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -69, - "y": 170 + "x": -360, + "y": 362 }, { "action": null, @@ -24909,15 +27859,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -908, - "facing_y": 418, - "get_up_count": 2, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -24934,12 +27885,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -24949,22 +27900,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 238, + "phase_ticks_remaining": 42, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 182 + "tick": 176 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 182 + "tick": 176 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "059f7151593288f8f317755f66694fa3110f57f1a6c81693e823dfd57670ac61", + "checksum": "5690e522aef77228ad52c5eb9fadc5fa99f37cfc8299a205e915427a1cb8cc4f", "events": [], "fighters": [ { @@ -24981,29 +27952,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 907, - "facing_y": -420, - "get_up_count": 2, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -25018,11 +27990,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -73, - "y": 173 + "x": -360, + "y": 362 }, { "action": null, @@ -25043,15 +28015,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -907, - "facing_y": 420, - "get_up_count": 2, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 3, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -25068,12 +28041,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -25083,23 +28056,56 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 237, + "phase_ticks_remaining": 41, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 183 + "tick": 177 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 183 + "tick": 177 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "f26c873479ad6d68c8302bda9f90ce13e21721da22a7efdfe4317f26f7f1e538", - "events": [], + "checksum": "dd8529833dd0f5b7bb6a605530eada329c9496a6ff5b7c4b83cf26300ffe583a", + "events": [ + { + "action_id": null, + "actor_id": null, + "amount": 4, + "blood": 0, + "detail": "", + "direction": 0, + "event_id": 17, + "kind": "count", + "target_id": "two", + "tick": 178 + } + ], "fighters": [ { "action": null, @@ -25115,29 +28121,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 906, - "facing_y": -423, - "get_up_count": 2, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -25152,11 +28159,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -77, - "y": 176 + "x": -360, + "y": 362 }, { "action": null, @@ -25177,15 +28184,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -906, - "facing_y": 423, - "get_up_count": 2, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -25202,12 +28210,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -25217,22 +28225,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 236, + "phase_ticks_remaining": 40, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 184 + "tick": 178 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 184 + "tick": 178 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "93b18980e9fc21686428f433425267edb300fe2462f6c1b36aec33882172713b", + "checksum": "983e3ee1edf7a7adcabac03ced8af54c60cd68365b82db893495bd0d26ace5e8", "events": [], "fighters": [ { @@ -25249,29 +28277,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 907, - "facing_y": -423, - "get_up_count": 2, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -25286,11 +28315,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -81, - "y": 178 + "x": -360, + "y": 362 }, { "action": null, @@ -25311,15 +28340,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -907, - "facing_y": 423, - "get_up_count": 2, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -25336,12 +28366,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -25351,22 +28381,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 235, + "phase_ticks_remaining": 39, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 185 + "tick": 179 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 185 + "tick": 179 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "082da852b1a5af376473f3943349bb9f620d39d74a95e3d20ca93b2a4d77cddc", + "checksum": "702de781805c4635c3fc40b904e228f1230f1d71d038b5efa0766ec4b1b47d18", "events": [], "fighters": [ { @@ -25383,29 +28433,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 905, - "facing_y": -425, - "get_up_count": 2, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -25420,11 +28471,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -85, - "y": 181 + "x": -360, + "y": 362 }, { "action": null, @@ -25445,15 +28496,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -905, - "facing_y": 425, - "get_up_count": 2, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -25470,12 +28522,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -25485,22 +28537,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 234, + "phase_ticks_remaining": 38, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 186 + "tick": 180 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 186 + "tick": 180 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "a0c12ff395c6cb336cca98220fd6e4f519d8488ea2e1e031defc476dc457e2e7", + "checksum": "2ca38a7f78360db0021fc4d1867e82848f84555b95e7e360f8d99acfa5803394", "events": [], "fighters": [ { @@ -25517,29 +28589,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 904, - "facing_y": -426, - "get_up_count": 2, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -25554,11 +28627,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -90, - "y": 184 + "x": -360, + "y": 362 }, { "action": null, @@ -25579,15 +28652,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -904, - "facing_y": 426, - "get_up_count": 2, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -25604,12 +28678,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -25619,22 +28693,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 233, + "phase_ticks_remaining": 37, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 187 + "tick": 181 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 187 + "tick": 181 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "306a15b6e922cdcd9e324b326d3d8c1ce4a3cdfdeff3c13f896f7dfb221134e2", + "checksum": "a4acff2bd9becec9a81999f04ff45b66fdf399478d5701cb4dc6dbc4b5cb0d28", "events": [], "fighters": [ { @@ -25651,29 +28745,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 905, - "facing_y": -427, - "get_up_count": 2, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -25688,11 +28783,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -94, - "y": 186 + "x": -360, + "y": 362 }, { "action": null, @@ -25713,15 +28808,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -905, - "facing_y": 427, - "get_up_count": 2, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -25738,12 +28834,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -25753,22 +28849,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 232, + "phase_ticks_remaining": 36, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 188 + "tick": 182 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 188 + "tick": 182 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "9b7a16d2e42f757391a7a1c388f6170b6659fa62920b7d59079c9a2b16f60233", + "checksum": "9a2da3d6e12380f278641d03a27a446c43ff064b4b94fd7f324d358ae3d19597", "events": [], "fighters": [ { @@ -25785,29 +28901,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 904, - "facing_y": -429, - "get_up_count": 2, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -25822,11 +28939,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -98, - "y": 189 + "x": -360, + "y": 362 }, { "action": null, @@ -25847,15 +28964,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -904, - "facing_y": 429, - "get_up_count": 2, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -25872,12 +28990,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -25887,22 +29005,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 231, + "phase_ticks_remaining": 35, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 189 + "tick": 183 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 189 + "tick": 183 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "d1dabac97c0796235601ecfb44cc54b2e8302bb73eb162670229676993ff1fab", + "checksum": "b635c792b67c8db853108bf1aae2cb222b4f66de5267034b107cc66776e44ce1", "events": [], "fighters": [ { @@ -25919,29 +29057,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 903, - "facing_y": -431, - "get_up_count": 2, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -25956,11 +29095,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -102, - "y": 192 + "x": -360, + "y": 362 }, { "action": null, @@ -25981,15 +29120,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -903, - "facing_y": 431, - "get_up_count": 2, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -26006,12 +29146,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -26021,22 +29161,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 230, + "phase_ticks_remaining": 34, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 190 + "tick": 184 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 190 + "tick": 184 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "62fb3de6064aab6a8d4b37b99ff577b461cd2000376005bef7ec5dba4d980dce", + "checksum": "69766961e5918f1404f5bf9fd809210921abf126667be86c8856d3bf7f51e863", "events": [], "fighters": [ { @@ -26053,29 +29213,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 902, - "facing_y": -433, - "get_up_count": 2, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -26090,11 +29251,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -106, - "y": 195 + "x": -360, + "y": 362 }, { "action": null, @@ -26115,15 +29276,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -902, - "facing_y": 433, - "get_up_count": 2, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -26140,12 +29302,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -26155,22 +29317,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 229, + "phase_ticks_remaining": 33, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 191 + "tick": 185 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 191 + "tick": 185 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "83549f57eff9de933785c2858b843676facdb7daf66b79f43cd393a9f1912fb9", + "checksum": "595fbf09263e8f4376c4342f8aa807991092e4b5bca83359429b40db7e39d7cc", "events": [], "fighters": [ { @@ -26187,29 +29369,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 901, - "facing_y": -435, - "get_up_count": 2, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -26224,11 +29407,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -110, - "y": 198 + "x": -360, + "y": 362 }, { "action": null, @@ -26249,15 +29432,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -901, - "facing_y": 435, - "get_up_count": 2, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -26274,12 +29458,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -26289,22 +29473,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 228, + "phase_ticks_remaining": 32, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 192 + "tick": 186 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 192 + "tick": 186 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "038b354ffddcc4ae8ba7a2af04e2f4bf5f5d175772558241d52afc1baeada171", + "checksum": "5cb8f6ed633b4b1b26a3bc86d83b90ec4b8113414050424e8d649e18bdcf2603", "events": [], "fighters": [ { @@ -26321,29 +29525,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 902, - "facing_y": -434, - "get_up_count": 2, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -26358,11 +29563,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -115, - "y": 200 + "x": -360, + "y": 362 }, { "action": null, @@ -26383,15 +29588,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -902, - "facing_y": 434, - "get_up_count": 2, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -26408,12 +29614,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -26423,22 +29629,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 227, + "phase_ticks_remaining": 31, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 193 + "tick": 187 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 193 + "tick": 187 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "b14bbb2244860917e3bacea7e5a64fd5b226a9f7b194b942a05e5d8e2ea8c42b", + "checksum": "b2474b50537b12c6bd080d3d6b5ea2f0370ba0c8c1a97a54703589ae0b365547", "events": [], "fighters": [ { @@ -26455,29 +29681,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 901, - "facing_y": -436, - "get_up_count": 2, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -26492,11 +29719,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -119, - "y": 203 + "x": -360, + "y": 362 }, { "action": null, @@ -26517,15 +29744,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -901, - "facing_y": 436, - "get_up_count": 2, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -26542,12 +29770,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -26557,22 +29785,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 226, + "phase_ticks_remaining": 30, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 194 + "tick": 188 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 194 + "tick": 188 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "876b3bd470668c441dd2ba881979a751441d30a51f4724d7e313b6f8a9c76e77", + "checksum": "9000b1bfa26e89582f2673971166cc21f1893a36239aa3612e0dbaa183c4eef0", "events": [], "fighters": [ { @@ -26589,29 +29837,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 900, - "facing_y": -438, - "get_up_count": 2, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -26626,11 +29875,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -123, - "y": 206 + "x": -360, + "y": 362 }, { "action": null, @@ -26651,15 +29900,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -900, - "facing_y": 438, - "get_up_count": 2, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -26676,12 +29926,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -26691,22 +29941,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 225, + "phase_ticks_remaining": 29, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 195 + "tick": 189 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 195 + "tick": 189 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "b25d654edfff0f8be455a30e912ec7ede33b001eed8d2aa2d8801f6182f89f22", + "checksum": "99d3fef4201bc972e09d42ac092fda90892771af377583be2ac313634d2e93bf", "events": [], "fighters": [ { @@ -26723,29 +29993,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 898, - "facing_y": -440, - "get_up_count": 2, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -26760,11 +30031,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -127, - "y": 209 + "x": -360, + "y": 362 }, { "action": null, @@ -26785,15 +30056,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -898, - "facing_y": 440, - "get_up_count": 2, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -26810,12 +30082,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -26825,22 +30097,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 224, + "phase_ticks_remaining": 28, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 196 + "tick": 190 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 196 + "tick": 190 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "5a7be1a98a9fdceec1c776c04cc1b85c7d3e13450a9367036f0a2953dcb3839f", + "checksum": "4431bcdfdcfa812baf8ce6e57ea392dfbfb085a257534f99ef56bfba44562739", "events": [], "fighters": [ { @@ -26857,29 +30149,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 899, - "facing_y": -440, - "get_up_count": 2, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -26894,11 +30187,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -131, - "y": 211 + "x": -360, + "y": 362 }, { "action": null, @@ -26919,15 +30212,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -899, - "facing_y": 440, - "get_up_count": 2, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -26944,12 +30238,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -26959,22 +30253,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 223, + "phase_ticks_remaining": 27, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 197 + "tick": 191 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 197 + "tick": 191 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "eee9c2671186b9e17996fada442518188c67e30539b80c0a5c7fddc7117330e1", + "checksum": "5f774bb0ca4a80ae527cb4513c4cad0ceb49fa513d85ce73b52bf2a89dbd9d32", "events": [], "fighters": [ { @@ -26991,29 +30305,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 898, - "facing_y": -441, - "get_up_count": 2, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -27028,11 +30343,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -136, - "y": 214 + "x": -360, + "y": 362 }, { "action": null, @@ -27053,15 +30368,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -898, - "facing_y": 441, - "get_up_count": 2, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -27078,12 +30394,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -27093,22 +30409,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 222, + "phase_ticks_remaining": 26, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 198 + "tick": 192 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 198 + "tick": 192 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "03294ea39be9fdf8043d2206c721659ce731e63966d80afec5e4e78d64398143", + "checksum": "769997b34f48639b5c1fc2c9f673a42d0fc6e29da7f00ff7507281528a63a2e4", "events": [], "fighters": [ { @@ -27125,29 +30461,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 897, - "facing_y": -442, - "get_up_count": 2, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -27162,11 +30499,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -140, - "y": 217 + "x": -360, + "y": 362 }, { "action": null, @@ -27187,15 +30524,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -897, - "facing_y": 442, - "get_up_count": 2, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -27212,12 +30550,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -27227,22 +30565,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 221, + "phase_ticks_remaining": 25, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 199 + "tick": 193 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 199 + "tick": 193 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "f992c4cf302664ecb032a9008751da09913352bab3e6b40650f03fb62c50f8f8", + "checksum": "c28bef4bd830a25d91a5d11219291a4490577c59623f7a35edd51b46b07456ad", "events": [], "fighters": [ { @@ -27259,29 +30617,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 896, - "facing_y": -444, - "get_up_count": 2, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -27296,11 +30655,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -144, - "y": 220 + "x": -360, + "y": 362 }, { "action": null, @@ -27321,15 +30680,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -896, - "facing_y": 444, - "get_up_count": 2, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -27346,12 +30706,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -27361,22 +30721,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 220, + "phase_ticks_remaining": 24, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 200 + "tick": 194 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 200 + "tick": 194 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "1b12b557e36836dea846d175b5f88402d1e539f6262a040d280649afe90f115b", + "checksum": "a292419401652cbdd2b2b117e5bce5570c26c04004cae99144b9a8aaf1f605bd", "events": [], "fighters": [ { @@ -27393,29 +30773,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 897, - "facing_y": -444, - "get_up_count": 2, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -27430,11 +30811,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -148, - "y": 222 + "x": -360, + "y": 362 }, { "action": null, @@ -27455,15 +30836,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -897, - "facing_y": 444, - "get_up_count": 2, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -27480,12 +30862,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -27495,22 +30877,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 219, + "phase_ticks_remaining": 23, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 201 + "tick": 195 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 201 + "tick": 195 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "9daad6824fe6da942556ff1380d41c8576690c4c84c7e1cdbedeb8d4cd1d34e0", + "checksum": "7f8c33e1190f152757f664391138f94536b660fe3400edb071b6e9afaf9b1e6e", "events": [], "fighters": [ { @@ -27527,29 +30929,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 896, - "facing_y": -446, - "get_up_count": 2, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -27564,11 +30967,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -152, - "y": 225 + "x": -360, + "y": 362 }, { "action": null, @@ -27589,15 +30992,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -896, - "facing_y": 446, - "get_up_count": 2, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -27614,12 +31018,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -27629,22 +31033,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 218, + "phase_ticks_remaining": 22, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 202 + "tick": 196 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 202 + "tick": 196 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "f4d6afcf699b92660f6a588f44fc771ae787b6e247519a0b95bb9564f6aadcd8", + "checksum": "890fd7e5e066987bfe6acfe9f49d8398a8ff18e84f5e3b4920c193238c19e893", "events": [], "fighters": [ { @@ -27661,29 +31085,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 895, - "facing_y": -447, - "get_up_count": 2, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -27698,11 +31123,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -156, - "y": 228 + "x": -360, + "y": 362 }, { "action": null, @@ -27723,15 +31148,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -895, - "facing_y": 447, - "get_up_count": 2, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 4, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -27748,12 +31174,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -27763,23 +31189,56 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 217, + "phase_ticks_remaining": 21, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 203 + "tick": 197 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 203 + "tick": 197 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "e19411fa75d5524a24bcf1eba8e32a493e555b0f9164ce249567125b442764ac", - "events": [], + "checksum": "da438ae52a67c82614c822925ea9cf345a3480efb8c0b954409801734f9f7ca7", + "events": [ + { + "action_id": null, + "actor_id": null, + "amount": 5, + "blood": 0, + "detail": "", + "direction": 0, + "event_id": 18, + "kind": "count", + "target_id": "two", + "tick": 198 + } + ], "fighters": [ { "action": null, @@ -27795,29 +31254,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 895, - "facing_y": -448, - "get_up_count": 2, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -27832,11 +31292,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -161, - "y": 231 + "x": -360, + "y": 362 }, { "action": null, @@ -27857,15 +31317,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -895, - "facing_y": 448, - "get_up_count": 2, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -27882,12 +31343,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -27897,22 +31358,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 216, + "phase_ticks_remaining": 20, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 204 + "tick": 198 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 204 + "tick": 198 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "653461f3ceedd17728a8456db3fb7ac0a46a2d666fa0e556a78c852b22a16695", + "checksum": "53393a71b964d29f5eeea00109f52e5cf7d5a120aac55b51db5f06b077f8e9d9", "events": [], "fighters": [ { @@ -27929,29 +31410,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 894, - "facing_y": -448, - "get_up_count": 2, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -27966,11 +31448,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -165, - "y": 233 + "x": -360, + "y": 362 }, { "action": null, @@ -27991,15 +31473,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -894, - "facing_y": 448, - "get_up_count": 2, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -28016,12 +31499,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -28031,22 +31514,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 215, + "phase_ticks_remaining": 19, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 205 + "tick": 199 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 205 + "tick": 199 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "5eb4a56731d61f504cc458c44a5e0b17d45e1a929311c3a5f34164e4019e44ba", + "checksum": "0efdf1a21b5767bdee391b5378c204ccf4fa133a963c7922a396343d733e0928", "events": [], "fighters": [ { @@ -28063,29 +31566,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 893, - "facing_y": -449, - "get_up_count": 2, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -28100,11 +31604,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -169, - "y": 236 + "x": -360, + "y": 362 }, { "action": null, @@ -28125,15 +31629,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -893, - "facing_y": 449, - "get_up_count": 2, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -28150,12 +31655,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -28165,22 +31670,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 214, + "phase_ticks_remaining": 18, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 206 + "tick": 200 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 206 + "tick": 200 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "9d6ecbc5f1ab19908c86882e94e3a665e9f0dbaf0df862298147749c770c3056", + "checksum": "cf876073ccc0001bd2a2df0ad5e3f472bc7556551d9fccb8d6b7a6d2dbc5d051", "events": [], "fighters": [ { @@ -28197,29 +31722,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 894, - "facing_y": -451, - "get_up_count": 2, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -28234,11 +31760,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -173, - "y": 239 + "x": -360, + "y": 362 }, { "action": null, @@ -28259,15 +31785,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -894, - "facing_y": 451, - "get_up_count": 2, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -28284,12 +31811,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -28299,22 +31826,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 213, + "phase_ticks_remaining": 17, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 207 + "tick": 201 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 207 + "tick": 201 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "d19f093c79af813cb9133504cada6050bbf9ac7aaa4552d6f72b04c0e31b54df", + "checksum": "ac8f9ee2a803e1e0ac459c7dba6609b53a8e13594b0487f4806ec5f7225e125a", "events": [], "fighters": [ { @@ -28331,29 +31878,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 893, - "facing_y": -453, - "get_up_count": 2, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -28368,11 +31916,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -177, - "y": 242 + "x": -360, + "y": 362 }, { "action": null, @@ -28393,15 +31941,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -893, - "facing_y": 453, - "get_up_count": 2, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -28418,12 +31967,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -28433,22 +31982,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 212, + "phase_ticks_remaining": 16, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 208 + "tick": 202 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 208 + "tick": 202 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "a021ea4b93620151a1b74679a48942b1bbbc904c6145de7aa50c4079aa887f57", + "checksum": "f2725743e67f9b23d07283ac0e88c0614f0b744d235c43db3c1a6c635a99b73b", "events": [], "fighters": [ { @@ -28465,29 +32034,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 892, - "facing_y": -451, - "get_up_count": 2, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -28502,158 +32072,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, - "warnings": 0, - "x": -182, - "y": 244 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -892, - "facing_y": 451, - "get_up_count": 2, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 211, - "result": null, - "round_number": 1, - "tick": 209 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 209 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "5729f34425be9291eb34430dafc02e447e6da41795c5caefe9dc28733c7de8d4", - "events": [ - { - "action_id": null, - "actor_id": null, - "amount": 3, - "blood": 0, - "detail": "", - "direction": 0, - "event_id": 16, - "kind": "count", - "target_id": "two", - "tick": 210 - } - ], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 891, - "facing_y": -453, - "get_up_count": 3, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": -4, - "velocity_y": 3, - "warnings": 0, - "x": -186, - "y": 247 + "x": -360, + "y": 362 }, { "action": null, @@ -28674,15 +32097,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -891, - "facing_y": 453, - "get_up_count": 3, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -28699,12 +32123,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -28714,22 +32138,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 210, + "phase_ticks_remaining": 15, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 210 + "tick": 203 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 210 + "tick": 203 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "865df050112d466c5805b072a22f533e9550abded499c7485e42fb41289af7b4", + "checksum": "f6b359160c05bfe253204cf5b20930c4572031a355aa6614f22efd92e0103eef", "events": [], "fighters": [ { @@ -28746,29 +32190,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 890, - "facing_y": -454, - "get_up_count": 3, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -28783,11 +32228,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -190, - "y": 250 + "x": -360, + "y": 362 }, { "action": null, @@ -28808,15 +32253,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -890, - "facing_y": 454, - "get_up_count": 3, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -28833,12 +32279,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -28848,22 +32294,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 209, + "phase_ticks_remaining": 14, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 211 + "tick": 204 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 211 + "tick": 204 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "1cde72cfec8151ffc972eb1fe52765a142d4858a72497f4161a4416bbd147e25", + "checksum": "d30ca7ab91efaa66363c65f69c30bea9da09bde0217cdad0694d78736d170c20", "events": [], "fighters": [ { @@ -28880,29 +32346,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 890, - "facing_y": -455, - "get_up_count": 3, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -28917,11 +32384,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -194, - "y": 253 + "x": -360, + "y": 362 }, { "action": null, @@ -28942,15 +32409,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -890, - "facing_y": 455, - "get_up_count": 3, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -28967,12 +32435,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -28982,22 +32450,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 208, + "phase_ticks_remaining": 13, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 212 + "tick": 205 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 212 + "tick": 205 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "c5584d8af84c346275204d56618b8572132cfd388d691d394646828f290636f4", + "checksum": "f35059062a8954c12431f566730a4a6e03491422cd9caa051365140c43a37f0f", "events": [], "fighters": [ { @@ -29014,29 +32502,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 890, - "facing_y": -456, - "get_up_count": 3, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -29051,11 +32540,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -198, - "y": 255 + "x": -360, + "y": 362 }, { "action": null, @@ -29076,15 +32565,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -890, - "facing_y": 456, - "get_up_count": 3, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -29101,12 +32591,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -29116,22 +32606,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 207, + "phase_ticks_remaining": 12, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 213 + "tick": 206 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 213 + "tick": 206 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "b8a5f9585521bcfd31903762a45907c8bf32fc07e696086539ced2e29ba5d96c", + "checksum": "e0141b65fdff7685182206d0272c819f344d511352f68237bdf9cd0586978369", "events": [], "fighters": [ { @@ -29148,29 +32658,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 890, - "facing_y": -456, - "get_up_count": 3, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -29185,11 +32696,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -203, - "y": 258 + "x": -360, + "y": 362 }, { "action": null, @@ -29210,15 +32721,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -890, - "facing_y": 456, - "get_up_count": 3, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -29235,12 +32747,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -29250,22 +32762,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 206, + "phase_ticks_remaining": 11, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 214 + "tick": 207 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 214 + "tick": 207 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "ed44b35bc2f473f025f5649a09c2303f552e6bf4817c9dae4296dd46307fb2ee", + "checksum": "56cd9670d32f884243584468fd946ab1efb3a98f91cd4e3db3db41d4f1affbdf", "events": [], "fighters": [ { @@ -29282,29 +32814,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 889, - "facing_y": -457, - "get_up_count": 3, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -29319,11 +32852,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -207, - "y": 261 + "x": -360, + "y": 362 }, { "action": null, @@ -29344,15 +32877,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -889, - "facing_y": 457, - "get_up_count": 3, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -29369,12 +32903,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -29384,22 +32918,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 205, + "phase_ticks_remaining": 10, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 215 + "tick": 208 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 215 + "tick": 208 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "20dac6f0a365815cf58ab12fde73f6200d7e77212330392aa28a8c5f6d5ed90f", + "checksum": "f75d9c1e91bf7e7e1dcb424f10c4b2d12faa84a67fc72ecefa639fb4554d6dfa", "events": [], "fighters": [ { @@ -29416,29 +32970,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 888, - "facing_y": -459, - "get_up_count": 3, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -29453,11 +33008,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -211, - "y": 264 + "x": -360, + "y": 362 }, { "action": null, @@ -29478,15 +33033,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -888, - "facing_y": 459, - "get_up_count": 3, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -29503,12 +33059,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -29518,22 +33074,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 204, + "phase_ticks_remaining": 9, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 216 + "tick": 209 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 216 + "tick": 209 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "55852e1a042a4d4e1960f58a185fc0cd2b2759d6b6ba3843adcbfe8dbc6608b9", + "checksum": "92652baf5fb0686cacee534e1f28d25d40cf427c29da404a46a4f66c4a81c9eb", "events": [], "fighters": [ { @@ -29550,29 +33126,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 889, - "facing_y": -459, - "get_up_count": 3, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -29587,11 +33164,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -215, - "y": 266 + "x": -360, + "y": 362 }, { "action": null, @@ -29612,15 +33189,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -889, - "facing_y": 459, - "get_up_count": 3, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -29637,12 +33215,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -29652,22 +33230,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 203, + "phase_ticks_remaining": 8, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 217 + "tick": 210 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 217 + "tick": 210 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "527b87dfc2c4d7faa5ef38467cfe392f12eb65f0a2c78ea4cb8e52abcf6098cb", + "checksum": "7746188ec04cd993bb67c6abba9c2f50f0b3700065fbe8ee02ac3e6ac324324a", "events": [], "fighters": [ { @@ -29684,29 +33282,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 888, - "facing_y": -460, - "get_up_count": 3, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -29721,11 +33320,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -219, - "y": 269 + "x": -360, + "y": 362 }, { "action": null, @@ -29746,15 +33345,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -888, - "facing_y": 460, - "get_up_count": 3, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -29771,12 +33371,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -29786,22 +33386,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 202, + "phase_ticks_remaining": 7, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 218 + "tick": 211 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 218 + "tick": 211 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "ccf6645eb9df455ac0236ecc3a7830eb4e97b352207bc6648a5e6be7d32a92b8", + "checksum": "640b24c919d3606711fb4b2839f8ce2b45ccf49dfb24115f290687aabc8bbae4", "events": [], "fighters": [ { @@ -29818,29 +33438,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 887, - "facing_y": -461, - "get_up_count": 3, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -29855,11 +33476,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -223, - "y": 272 + "x": -360, + "y": 362 }, { "action": null, @@ -29880,15 +33501,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -887, - "facing_y": 461, - "get_up_count": 3, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -29905,12 +33527,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -29920,22 +33542,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 201, + "phase_ticks_remaining": 6, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 219 + "tick": 212 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 219 + "tick": 212 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "aff58b6d010950e4a5b2d3b7013aefb9a98f09c6ac7cc1341359704321571847", + "checksum": "5c6270d779db49fae606a8d8d9e0780c73f598f57f6de75433d17c512f37261e", "events": [], "fighters": [ { @@ -29952,29 +33594,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 887, - "facing_y": -462, - "get_up_count": 3, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -29989,11 +33632,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -228, - "y": 275 + "x": -360, + "y": 362 }, { "action": null, @@ -30014,15 +33657,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -887, - "facing_y": 462, - "get_up_count": 3, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -30039,12 +33683,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -30054,22 +33698,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 200, + "phase_ticks_remaining": 5, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 220 + "tick": 213 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 220 + "tick": 213 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "bfbdb326cce0eb19b342e7c216d1dcf3120f8668493f9598a9895436153279fc", + "checksum": "c87854f5f4cf3fd51b9687c1b56c299b5549790e0f16565f617ebe8d9f26ca53", "events": [], "fighters": [ { @@ -30086,29 +33750,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 888, - "facing_y": -462, - "get_up_count": 3, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -30123,11 +33788,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -232, - "y": 277 + "x": -360, + "y": 362 }, { "action": null, @@ -30148,15 +33813,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -888, - "facing_y": 462, - "get_up_count": 3, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -30173,12 +33839,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -30188,22 +33854,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 199, + "phase_ticks_remaining": 4, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 221 + "tick": 214 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 221 + "tick": 214 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "b11f39359bc16dc435a7506b2e2af0fe04b4d343ffa14a0cd999af9899cd3f08", + "checksum": "70eaefe44657c4b0a985527971987051d8c7f0cd39b8ffb0e66e74d029e57b53", "events": [], "fighters": [ { @@ -30220,29 +33906,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 887, - "facing_y": -463, - "get_up_count": 3, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -30257,11 +33944,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -236, - "y": 280 + "x": -360, + "y": 362 }, { "action": null, @@ -30282,15 +33969,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -887, - "facing_y": 463, - "get_up_count": 3, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -30307,12 +33995,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -30322,22 +34010,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 198, + "phase_ticks_remaining": 3, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 222 + "tick": 215 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 222 + "tick": 215 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "f533f604df81f0e69fca658ac465a53f8e96b30eb01d49c4fc94ea623f792d32", + "checksum": "6d73d3218965a05126affdf7d14ca3185cf632742b427a26e33a5a9644253cbe", "events": [], "fighters": [ { @@ -30354,29 +34062,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 886, - "facing_y": -464, - "get_up_count": 3, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -30391,11 +34100,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -240, - "y": 283 + "x": -360, + "y": 362 }, { "action": null, @@ -30416,15 +34125,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -886, - "facing_y": 464, - "get_up_count": 3, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -30441,12 +34151,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -30456,22 +34166,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 197, + "phase_ticks_remaining": 2, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 223 + "tick": 216 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 223 + "tick": 216 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "3a77442f8eb6db3cadbcac9f41fe7a11958b9f4a77cb39f6fc528eb88b84a2af", + "checksum": "54ccc8d07356bb2fd7176294c67fe74aff0d95aa4117a7b473e67d250b94c075", "events": [], "fighters": [ { @@ -30488,29 +34218,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 885, - "facing_y": -465, - "get_up_count": 3, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -30525,11 +34256,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -244, - "y": 286 + "x": -360, + "y": 362 }, { "action": null, @@ -30550,15 +34281,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -885, - "facing_y": 465, - "get_up_count": 3, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -30575,12 +34307,12 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -30590,23 +34322,56 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 196, + "phase_ticks_remaining": 1, + "referee": { + "alive": true, + "facing_x": 644, + "facing_y": -766, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 242, + "y": 69 + }, "result": null, "round_number": 1, - "tick": 224 + "tick": 217 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 224 + "tick": 217 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "da5264c2a3b9516b662dad84c60d30b6c3fb0dbff34215559a4b33016cd3d56f", - "events": [], + "checksum": "b628888ff02411c2865a7c29efbf60c045b9db3e62b912b54714e38c6828a756", + "events": [ + { + "action_id": null, + "actor_id": null, + "amount": 0, + "blood": 0, + "detail": "", + "direction": 0, + "event_id": 19, + "kind": "box", + "target_id": "two", + "tick": 218 + } + ], "fighters": [ { "action": null, @@ -30622,29 +34387,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 886, - "facing_y": -465, - "get_up_count": 3, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -30659,11 +34425,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -249, - "y": 288 + "x": -360, + "y": 362 }, { "action": null, @@ -30684,15 +34450,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -886, - "facing_y": 465, - "get_up_count": 3, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 530, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -30703,18 +34470,18 @@ "queued_actions": 0, "stamina": 1000, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 12, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -30723,23 +34490,43 @@ "y": 0 } ], - "phase": "knockdown", - "phase_ticks_remaining": 195, + "phase": "fight", + "phase_ticks_remaining": 999902, + "referee": { + "alive": true, + "facing_x": -927, + "facing_y": 377, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": 3, + "x": 238, + "y": 72 + }, "result": null, "round_number": 1, - "tick": 225 + "tick": 218 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 225 + "tick": 218 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "73d90ed48ab43832793274a940bd8184cf2b109b9c747a594da0baa5ee0f1d0d", + "checksum": "9405f7e9ee4b06f111a36646ea133de6d6aec7af5653e1306da31bf3d9469ece", "events": [], "fighters": [ { @@ -30756,29 +34543,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 886, - "facing_y": -466, - "get_up_count": 3, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 64, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 979, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -30793,11 +34581,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -253, - "y": 291 + "x": -360, + "y": 362 }, { "action": null, @@ -30818,15 +34606,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -886, - "facing_y": 466, - "get_up_count": 3, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 534, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -30837,18 +34626,18 @@ "queued_actions": 0, "stamina": 1000, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 11, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, @@ -30857,23 +34646,43 @@ "y": 0 } ], - "phase": "knockdown", - "phase_ticks_remaining": 194, + "phase": "fight", + "phase_ticks_remaining": 999901, + "referee": { + "alive": true, + "facing_x": -929, + "facing_y": 373, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": 3, + "x": 234, + "y": 75 + }, "result": null, "round_number": 1, - "tick": 226 + "tick": 219 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 226 + "tick": 219 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "928c1201db76297fe291cc7d6af7d54bc92453402effa79273a302408fa46333", + "checksum": "e81c5c69794e899e0cd23d851889ac6c6459c74f9f23f10d1d38839e506f86ea", "events": [], "fighters": [ { @@ -30890,29 +34699,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 885, - "facing_y": -467, - "get_up_count": 3, + "facing_x": 876, + "facing_y": -481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 65, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 982, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -30927,11 +34737,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 7, + "velocity_y": -4, "warnings": 0, - "x": -257, - "y": 294 + "x": -354, + "y": 359 }, { "action": null, @@ -30952,15 +34762,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -885, - "facing_y": 467, - "get_up_count": 3, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 538, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -30971,43 +34782,63 @@ "queued_actions": 0, "stamina": 1000, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 10, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -4, + "velocity_y": 2, "warnings": 0, - "x": 300, - "y": 0 + "x": 296, + "y": 2 } ], - "phase": "knockdown", - "phase_ticks_remaining": 193, + "phase": "fight", + "phase_ticks_remaining": 999900, + "referee": { + "alive": true, + "facing_x": -931, + "facing_y": 366, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": 3, + "x": 230, + "y": 78 + }, "result": null, "round_number": 1, - "tick": 227 + "tick": 220 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 227 + "tick": 220 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "167286039c349cc3c57e17d9480a5a709edde18fb2463489e98a1843f7d76bae", + "checksum": "6bdc1393687363d1e79116c08dd2c5a03857e538f08e03fdb3ffafe2511f64da", "events": [], "fighters": [ { @@ -31024,29 +34855,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 884, - "facing_y": -468, - "get_up_count": 3, + "facing_x": 877, + "facing_y": -480, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 66, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 985, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -31061,11 +34893,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -261, - "y": 297 + "x": -346, + "y": 354 }, { "action": null, @@ -31086,15 +34918,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -884, - "facing_y": 468, - "get_up_count": 3, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 542, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -31105,43 +34938,63 @@ "queued_actions": 0, "stamina": 1000, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 9, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -6, + "velocity_y": 3, "warnings": 0, - "x": 300, - "y": 0 + "x": 291, + "y": 5 } ], - "phase": "knockdown", - "phase_ticks_remaining": 192, + "phase": "fight", + "phase_ticks_remaining": 999899, + "referee": { + "alive": true, + "facing_x": -933, + "facing_y": 361, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": 3, + "x": 226, + "y": 81 + }, "result": null, "round_number": 1, - "tick": 228 + "tick": 221 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 228 + "tick": 221 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "f113bed5eabaf2aeef80d7700b4d53a599333dbb3a146fecae566b584a88ae7c", + "checksum": "432cb758381ba7afadf9467dec504cd7e1fa7bd5f2a6887f00bf767fbded9f98", "events": [], "fighters": [ { @@ -31158,29 +35011,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 884, - "facing_y": -467, - "get_up_count": 3, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 67, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 988, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -31195,11 +35049,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -265, - "y": 299 + "x": -337, + "y": 350 }, { "action": null, @@ -31220,15 +35074,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -884, - "facing_y": 467, - "get_up_count": 3, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 546, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -31239,43 +35094,63 @@ "queued_actions": 0, "stamina": 1000, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 8, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -6, + "velocity_y": 3, "warnings": 0, - "x": 300, - "y": 0 + "x": 285, + "y": 8 } ], - "phase": "knockdown", - "phase_ticks_remaining": 191, + "phase": "fight", + "phase_ticks_remaining": 999898, + "referee": { + "alive": true, + "facing_x": -935, + "facing_y": 358, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": 3, + "x": 222, + "y": 84 + }, "result": null, "round_number": 1, - "tick": 229 + "tick": 222 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 229 + "tick": 222 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "a6441f4a487cf8a9549daa01a3ea4cd180f05bc00bb3e189f1291511f25cfc99", + "checksum": "375c2fe96ac95f55d325c6cfbe65f28598a0b9acf893d25d5c139afde9a1b7f8", "events": [], "fighters": [ { @@ -31292,29 +35167,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 883, - "facing_y": -468, - "get_up_count": 3, + "facing_x": 876, + "facing_y": -482, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 68, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 991, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -31329,11 +35205,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -270, - "y": 302 + "x": -328, + "y": 345 }, { "action": null, @@ -31354,15 +35230,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -883, - "facing_y": 468, - "get_up_count": 3, + "facing_x": -877, + "facing_y": 482, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 550, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -31373,43 +35250,63 @@ "queued_actions": 0, "stamina": 1000, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 7, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -6, + "velocity_y": 3, "warnings": 0, - "x": 300, - "y": 0 + "x": 279, + "y": 11 } ], - "phase": "knockdown", - "phase_ticks_remaining": 190, + "phase": "fight", + "phase_ticks_remaining": 999897, + "referee": { + "alive": true, + "facing_x": -937, + "facing_y": 352, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": 3, + "x": 218, + "y": 87 + }, "result": null, "round_number": 1, - "tick": 230 + "tick": 223 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 230 + "tick": 223 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "22187d4b89f1526beffd97c2130f6c7a5c859c3d7e5b0425d0d71c7e5fe43e14", + "checksum": "42a27ddf541d4b6411add5047b52610c79cba00ddd0c995589706125eb796170", "events": [], "fighters": [ { @@ -31426,29 +35323,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 883, - "facing_y": -469, - "get_up_count": 3, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 69, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 994, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -31463,11 +35361,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -274, - "y": 305 + "x": -320, + "y": 340 }, { "action": null, @@ -31488,15 +35386,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -883, - "facing_y": 469, - "get_up_count": 3, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 554, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -31507,43 +35406,63 @@ "queued_actions": 0, "stamina": 1000, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 6, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -6, + "velocity_y": 3, "warnings": 0, - "x": 300, - "y": 0 + "x": 273, + "y": 15 } ], - "phase": "knockdown", - "phase_ticks_remaining": 189, + "phase": "fight", + "phase_ticks_remaining": 999896, + "referee": { + "alive": true, + "facing_x": -940, + "facing_y": 345, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": 3, + "x": 214, + "y": 90 + }, "result": null, "round_number": 1, - "tick": 231 + "tick": 224 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 231 + "tick": 224 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "f8c09cb160f6e13fa20ffddea06507d1a1937d68f2425575f0834d36538c4407", + "checksum": "43f5e59de3cfffd3502f31c6f009e2e43cc908201cdf455f0e6fb54f83ffc363", "events": [], "fighters": [ { @@ -31560,29 +35479,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 883, - "facing_y": -470, - "get_up_count": 3, + "facing_x": 878, + "facing_y": -481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 70, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -31597,11 +35517,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -278, - "y": 308 + "x": -311, + "y": 335 }, { "action": null, @@ -31622,15 +35542,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -883, - "facing_y": 470, - "get_up_count": 3, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 558, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -31641,43 +35562,63 @@ "queued_actions": 0, "stamina": 1000, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 5, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -6, + "velocity_y": 3, "warnings": 0, - "x": 300, - "y": 0 + "x": 267, + "y": 18 } ], - "phase": "knockdown", - "phase_ticks_remaining": 188, + "phase": "fight", + "phase_ticks_remaining": 999895, + "referee": { + "alive": true, + "facing_x": -943, + "facing_y": 337, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": 3, + "x": 210, + "y": 93 + }, "result": null, "round_number": 1, - "tick": 232 + "tick": 225 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 232 + "tick": 225 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "54d6bfad70b30ebd2a1fb0a409d14b14d6f53a2aa167dd0c70949f3afce69582", + "checksum": "d2cfcf9e4d8bd82e28ea140b36b53136c3aab9ac8bdca1ce6edbe203c77b4dc9", "events": [], "fighters": [ { @@ -31694,29 +35635,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 883, - "facing_y": -470, - "get_up_count": 3, + "facing_x": 878, + "facing_y": -481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 71, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -31731,11 +35673,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -282, - "y": 310 + "x": -302, + "y": 330 }, { "action": null, @@ -31756,15 +35698,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -883, - "facing_y": 470, - "get_up_count": 3, + "facing_x": -876, + "facing_y": 481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 562, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -31775,43 +35718,63 @@ "queued_actions": 0, "stamina": 1000, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 4, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -6, + "velocity_y": 3, "warnings": 0, - "x": 300, - "y": 0 + "x": 261, + "y": 21 } ], - "phase": "knockdown", - "phase_ticks_remaining": 187, + "phase": "fight", + "phase_ticks_remaining": 999894, + "referee": { + "alive": true, + "facing_x": -945, + "facing_y": 330, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": 3, + "x": 206, + "y": 96 + }, "result": null, "round_number": 1, - "tick": 233 + "tick": 226 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 233 + "tick": 226 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "e28e40883cff618c6cbdb7b45d882076a74d4b11a8a975654e4a3c4ea9a61ea9", + "checksum": "e9d6e69dc48fae578e42d525addff4ae594713e93b0eda3e070f7f49db883387", "events": [], "fighters": [ { @@ -31828,29 +35791,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 882, - "facing_y": -471, - "get_up_count": 3, + "facing_x": 876, + "facing_y": -482, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 72, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -31865,11 +35829,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -286, - "y": 313 + "x": -293, + "y": 326 }, { "action": null, @@ -31890,15 +35854,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -882, - "facing_y": 471, - "get_up_count": 3, + "facing_x": -876, + "facing_y": 482, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 566, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -31909,43 +35874,63 @@ "queued_actions": 0, "stamina": 1000, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 3, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -6, + "velocity_y": 3, "warnings": 0, - "x": 300, - "y": 0 + "x": 255, + "y": 24 } ], - "phase": "knockdown", - "phase_ticks_remaining": 186, + "phase": "fight", + "phase_ticks_remaining": 999893, + "referee": { + "alive": true, + "facing_x": -948, + "facing_y": 326, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": 3, + "x": 202, + "y": 99 + }, "result": null, "round_number": 1, - "tick": 234 + "tick": 227 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 234 + "tick": 227 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "f85c25b99da335a8ce08cd1a328efc779e7c8745bf23d17e640a6b2052357750", + "checksum": "9aa23c3583a490f8bb097223ac451febe024100bd4052742ba8a68c2be1572bb", "events": [], "fighters": [ { @@ -31962,29 +35947,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 881, - "facing_y": -472, - "get_up_count": 3, + "facing_x": 876, + "facing_y": -482, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 73, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -31999,11 +35985,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -290, - "y": 316 + "x": -285, + "y": 321 }, { "action": null, @@ -32024,15 +36010,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -881, - "facing_y": 472, - "get_up_count": 3, + "facing_x": -876, + "facing_y": 482, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 570, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -32043,43 +36030,63 @@ "queued_actions": 0, "stamina": 1000, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 2, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -6, + "velocity_y": 3, "warnings": 0, - "x": 300, - "y": 0 + "x": 249, + "y": 28 } ], - "phase": "knockdown", - "phase_ticks_remaining": 185, + "phase": "fight", + "phase_ticks_remaining": 999892, + "referee": { + "alive": true, + "facing_x": -951, + "facing_y": 317, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": 3, + "x": 198, + "y": 102 + }, "result": null, "round_number": 1, - "tick": 235 + "tick": 228 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 235 + "tick": 228 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "a5610a57b34aa10825f7cc73be3d5668c3b7c72c43d02d13f81d71837882013e", + "checksum": "ca66a5547085a17d395a530e0dfc19f29ecdb5b3c7710f56dd14fd793cf8aee0", "events": [], "fighters": [ { @@ -32096,29 +36103,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 881, - "facing_y": -472, - "get_up_count": 3, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 74, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -32133,11 +36141,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -295, - "y": 319 + "x": -276, + "y": 316 }, { "action": null, @@ -32158,15 +36166,16 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -881, - "facing_y": 472, - "get_up_count": 3, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 574, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, @@ -32177,43 +36186,63 @@ "queued_actions": 0, "stamina": 1000, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -6, + "velocity_y": 3, "warnings": 0, - "x": 300, - "y": 0 + "x": 244, + "y": 31 } ], - "phase": "knockdown", - "phase_ticks_remaining": 184, + "phase": "fight", + "phase_ticks_remaining": 999891, + "referee": { + "alive": true, + "facing_x": -954, + "facing_y": 309, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": 3, + "x": 194, + "y": 105 + }, "result": null, "round_number": 1, - "tick": 236 + "tick": 229 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 236 + "tick": 229 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "2c63e9bb5b871c60c67e564c0f6393565a41f6c6be25f6529cff1ef9b9c0e1ad", + "checksum": "bf6c42979ecadbb19cc621f8004fa11a24e6d46f4beab27dd41d26b2acde85b3", "events": [], "fighters": [ { @@ -32230,29 +36259,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 882, - "facing_y": -472, - "get_up_count": 3, + "facing_x": 878, + "facing_y": -481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 75, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -32267,11 +36297,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -299, - "y": 321 + "x": -267, + "y": 311 }, { "action": null, @@ -32292,22 +36322,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -882, - "facing_y": 472, - "get_up_count": 3, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 578, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 301, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -32317,37 +36348,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 4, "warnings": 0, - "x": 300, - "y": 0 + "x": 236, + "y": 35 } ], - "phase": "knockdown", - "phase_ticks_remaining": 183, + "phase": "fight", + "phase_ticks_remaining": 999890, + "referee": { + "alive": true, + "facing_x": -953, + "facing_y": 302, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": 3, + "x": 190, + "y": 108 + }, "result": null, "round_number": 1, - "tick": 237 + "tick": 230 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 237 + "tick": 230 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "a1cf7a6fa887accab0e188accc5ba27fcd378048fa02b7a1fd2c2417061bebe7", + "checksum": "d5d6ffe0791d32ec20480642cd301b9d1d546795ef4d24919ffcf8f87129cad5", "events": [], "fighters": [ { @@ -32364,29 +36415,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 881, - "facing_y": -473, - "get_up_count": 3, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 76, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -32401,11 +36453,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -303, - "y": 324 + "x": -258, + "y": 306 }, { "action": null, @@ -32426,22 +36478,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -881, - "facing_y": 473, - "get_up_count": 3, + "facing_x": -877, + "facing_y": 480, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 582, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 301, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -32451,37 +36504,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 300, - "y": 0 + "x": 228, + "y": 40 } ], - "phase": "knockdown", - "phase_ticks_remaining": 182, + "phase": "fight", + "phase_ticks_remaining": 999889, + "referee": { + "alive": true, + "facing_x": -957, + "facing_y": 295, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": 3, + "x": 186, + "y": 111 + }, "result": null, "round_number": 1, - "tick": 238 + "tick": 231 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 238 + "tick": 231 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "1432cea6fcd431ed4cdaae9bcc25a2483575493279fd7ed0a73a6318bfccdc9e", + "checksum": "8aaf35af9bcadd8989e21d0854c1b62433d0cfb9550f4ea821d6e3cd85a57abd", "events": [], "fighters": [ { @@ -32498,29 +36571,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 880, - "facing_y": -474, - "get_up_count": 3, + "facing_x": 877, + "facing_y": -480, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 77, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -32535,11 +36609,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -307, - "y": 327 + "x": -250, + "y": 302 }, { "action": null, @@ -32560,22 +36634,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -880, - "facing_y": 474, - "get_up_count": 3, + "facing_x": -876, + "facing_y": 482, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 586, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 302, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -32585,51 +36660,58 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 300, - "y": 0 + "x": 219, + "y": 44 } ], - "phase": "knockdown", - "phase_ticks_remaining": 181, + "phase": "fight", + "phase_ticks_remaining": 999888, + "referee": { + "alive": true, + "facing_x": -960, + "facing_y": 287, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": 3, + "x": 182, + "y": 114 + }, "result": null, "round_number": 1, - "tick": 239 + "tick": 232 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 239 + "tick": 232 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "a9ef3d098d94b69ebe1d500dcb64aa1c7e9df4335bfe88dd6e5c5af344574997", - "events": [ - { - "action_id": null, - "actor_id": null, - "amount": 4, - "blood": 0, - "detail": "", - "direction": 0, - "event_id": 17, - "kind": "count", - "target_id": "two", - "tick": 240 - } - ], + "checksum": "94b72525f0145c0db9019e21fd37be53328aea6f54a31d5dfb7e2be63970d019", + "events": [], "fighters": [ { "action": null, @@ -32645,29 +36727,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 880, - "facing_y": -475, - "get_up_count": 4, + "facing_x": 877, + "facing_y": -482, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 78, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -32682,11 +36765,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -311, - "y": 330 + "x": -241, + "y": 297 }, { "action": null, @@ -32707,22 +36790,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -880, - "facing_y": 475, - "get_up_count": 4, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 590, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 302, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -32732,37 +36816,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 300, - "y": 0 + "x": 211, + "y": 49 } ], - "phase": "knockdown", - "phase_ticks_remaining": 180, + "phase": "fight", + "phase_ticks_remaining": 999887, + "referee": { + "alive": true, + "facing_x": -965, + "facing_y": 280, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": 3, + "x": 178, + "y": 117 + }, "result": null, "round_number": 1, - "tick": 240 + "tick": 233 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 240 + "tick": 233 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "a1141dee6ebaba25ddce2cd2b71e698eeea9522ab2b1d772ae2af8abf7ce0b13", + "checksum": "e90fbf900ba04d9e9702347ba40d4d63834c8b1ce10df6d57fa37a696f10c8d3", "events": [], "fighters": [ { @@ -32779,29 +36883,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 881, - "facing_y": -474, - "get_up_count": 4, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 79, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -32816,11 +36921,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -316, - "y": 332 + "x": -232, + "y": 292 }, { "action": null, @@ -32841,22 +36946,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -881, - "facing_y": 474, - "get_up_count": 4, + "facing_x": -876, + "facing_y": 482, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 594, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 303, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -32866,37 +36972,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 300, - "y": 0 + "x": 202, + "y": 53 } ], - "phase": "knockdown", - "phase_ticks_remaining": 179, + "phase": "fight", + "phase_ticks_remaining": 999886, + "referee": { + "alive": true, + "facing_x": -964, + "facing_y": 266, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -5, + "velocity_y": 3, + "x": 173, + "y": 120 + }, "result": null, "round_number": 1, - "tick": 241 + "tick": 234 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 241 + "tick": 234 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "ac896b8460b618bc7b8c49a10039981a832334b9323b3e41654bbb71666de95e", + "checksum": "c0cbd7ac7a5bb22ad83dcc9560ca9a4bba531e125eaa11738c06591568072da7", "events": [], "fighters": [ { @@ -32913,29 +37039,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 880, - "facing_y": -475, - "get_up_count": 4, + "facing_x": 876, + "facing_y": -482, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 80, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -32950,11 +37077,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -320, - "y": 335 + "x": -223, + "y": 287 }, { "action": null, @@ -32975,22 +37102,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -880, - "facing_y": 475, - "get_up_count": 4, + "facing_x": -877, + "facing_y": 482, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 598, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 303, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -33000,37 +37128,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 300, - "y": 0 + "x": 194, + "y": 58 } ], - "phase": "knockdown", - "phase_ticks_remaining": 178, + "phase": "fight", + "phase_ticks_remaining": 999885, + "referee": { + "alive": true, + "facing_x": -973, + "facing_y": 247, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": 3, + "x": 167, + "y": 126 + }, "result": null, "round_number": 1, - "tick": 242 + "tick": 235 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 242 + "tick": 235 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "35924c4d49e20e49b3e2411bc976f2f48a6aac1d7baa4676fc70152baba0b9d0", + "checksum": "83ac52bb4824a835ac0d68d4d657b3d71972bc23056c2f4a59e200394c0208e0", "events": [], "fighters": [ { @@ -33047,29 +37195,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 880, - "facing_y": -476, - "get_up_count": 4, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 81, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -33084,11 +37233,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -324, - "y": 338 + "x": -214, + "y": 282 }, { "action": null, @@ -33109,22 +37258,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -880, - "facing_y": 476, - "get_up_count": 4, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 602, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 304, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -33134,37 +37284,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 300, - "y": 0 + "x": 186, + "y": 63 } ], - "phase": "knockdown", - "phase_ticks_remaining": 177, + "phase": "fight", + "phase_ticks_remaining": 999884, + "referee": { + "alive": true, + "facing_x": -977, + "facing_y": 229, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -5, + "velocity_y": 3, + "x": 161, + "y": 131 + }, "result": null, "round_number": 1, - "tick": 243 + "tick": 236 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 243 + "tick": 236 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "f7a001d9e036fc5e12d5820e73d83f6f2e6c3542de7493bb98035bd258149e0f", + "checksum": "0f4141737c5540a5158f871916bd2a2bc9dbb12f516feeb92d0739deb8eb9605", "events": [], "fighters": [ { @@ -33181,29 +37351,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 879, - "facing_y": -477, - "get_up_count": 4, + "facing_x": 876, + "facing_y": -480, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 82, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -33218,11 +37389,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -328, - "y": 341 + "x": -206, + "y": 278 }, { "action": null, @@ -33243,22 +37414,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -879, - "facing_y": 477, - "get_up_count": 4, + "facing_x": -876, + "facing_y": 482, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 606, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 304, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -33268,37 +37440,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 300, - "y": 0 + "x": 177, + "y": 67 } ], - "phase": "knockdown", - "phase_ticks_remaining": 176, + "phase": "fight", + "phase_ticks_remaining": 999883, + "referee": { + "alive": true, + "facing_x": -982, + "facing_y": 209, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -5, + "velocity_y": 3, + "x": 155, + "y": 136 + }, "result": null, "round_number": 1, - "tick": 244 + "tick": 237 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 244 + "tick": 237 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "517b0e4024ca2f10091de455635650bfc024fd10e9dfe0ef3966516966feed01", + "checksum": "90df036eb3e035e69480b18713fec4634ea8e175f2247b9647ab73656710dcb1", "events": [], "fighters": [ { @@ -33315,29 +37507,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 878, - "facing_y": -478, - "get_up_count": 4, + "facing_x": 877, + "facing_y": -483, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 83, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -33352,11 +37545,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -332, - "y": 344 + "x": -197, + "y": 273 }, { "action": null, @@ -33377,22 +37570,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -878, - "facing_y": 478, - "get_up_count": 4, + "facing_x": -877, + "facing_y": 482, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 610, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 305, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -33402,37 +37596,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 300, - "y": 0 + "x": 169, + "y": 72 } ], - "phase": "knockdown", - "phase_ticks_remaining": 175, + "phase": "fight", + "phase_ticks_remaining": 999882, + "referee": { + "alive": true, + "facing_x": -987, + "facing_y": 181, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -5, + "velocity_y": 3, + "x": 149, + "y": 142 + }, "result": null, "round_number": 1, - "tick": 245 + "tick": 238 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 245 + "tick": 238 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "aa50905b6040e4b89f953741bb7c68f750d85c91a3084385f8bcf32f96f06ba7", + "checksum": "637f991c185d93c1585354a9f049d4d1eabe0f3ea5563a46f90b207a17f7f363", "events": [], "fighters": [ { @@ -33449,29 +37663,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 879, - "facing_y": -477, - "get_up_count": 4, + "facing_x": 877, + "facing_y": -481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, "last_input_sequence": 84, - "maximum_stamina": 996, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -33486,11 +37701,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -337, - "y": 346 + "x": -188, + "y": 268 }, { "action": null, @@ -33511,22 +37726,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -879, - "facing_y": 477, - "get_up_count": 4, + "facing_x": -876, + "facing_y": 483, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 614, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 305, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -33536,37 +37752,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 300, - "y": 0 + "x": 160, + "y": 76 } ], - "phase": "knockdown", - "phase_ticks_remaining": 174, + "phase": "fight", + "phase_ticks_remaining": 999881, + "referee": { + "alive": true, + "facing_x": -993, + "facing_y": 158, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -5, + "velocity_y": 3, + "x": 143, + "y": 147 + }, "result": null, "round_number": 1, - "tick": 246 + "tick": 239 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 246 + "tick": 239 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "dd0c32574bd68e0a9cdbeda037b9db218591c61ea054ba3e12d6407eb0c6d9bd", + "checksum": "a78d23fa6db35871f0c4b3be00e23510fd915bcc88fce7d6e2c9c8f81c47bc06", "events": [], "fighters": [ { @@ -33583,29 +37819,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 879, - "facing_y": -478, - "get_up_count": 4, + "facing_x": 875, + "facing_y": -483, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 85, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -33620,11 +37857,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -341, - "y": 349 + "x": -179, + "y": 263 }, { "action": null, @@ -33645,22 +37882,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -879, - "facing_y": 478, - "get_up_count": 4, + "facing_x": -877, + "facing_y": 482, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 618, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 306, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -33670,37 +37908,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 300, - "y": 0 + "x": 152, + "y": 81 } ], - "phase": "knockdown", - "phase_ticks_remaining": 173, + "phase": "fight", + "phase_ticks_remaining": 999880, + "referee": { + "alive": true, + "facing_x": -993, + "facing_y": 132, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -5, + "velocity_y": 3, + "x": 137, + "y": 152 + }, "result": null, "round_number": 1, - "tick": 247 + "tick": 240 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 247 + "tick": 240 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "4a8550ca5ba923a40aea071e67849f9af42222d21914d1290006c373217c4522", + "checksum": "f0ae9c48893e3e94bff96e8beec1defea6f83165905af057e20343d16cb788c8", "events": [], "fighters": [ { @@ -33717,29 +37975,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 878, - "facing_y": -479, - "get_up_count": 4, + "facing_x": 877, + "facing_y": -480, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 86, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -33754,11 +38013,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -345, - "y": 352 + "x": -171, + "y": 258 }, { "action": null, @@ -33779,22 +38038,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -878, - "facing_y": 479, - "get_up_count": 4, + "facing_x": -877, + "facing_y": 481, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 622, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 306, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -33804,37 +38064,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 300, - "y": 0 + "x": 144, + "y": 86 } ], - "phase": "knockdown", - "phase_ticks_remaining": 172, + "phase": "fight", + "phase_ticks_remaining": 999879, + "referee": { + "alive": true, + "facing_x": -1000, + "facing_y": 104, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -5, + "velocity_y": 3, + "x": 131, + "y": 157 + }, "result": null, "round_number": 1, - "tick": 248 + "tick": 241 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 248 + "tick": 241 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "696af26d915de90a07d3af37ad613ba142df66718192b105675aad13ac49aa72", + "checksum": "0bf93bfa2fc82b387e3645c922a585cf3cce881b9e86d8ba43d90aef68c3fddc", "events": [], "fighters": [ { @@ -33851,29 +38131,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 878, - "facing_y": -480, - "get_up_count": 4, + "facing_x": 879, + "facing_y": -479, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 87, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -33888,11 +38169,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -349, - "y": 355 + "x": -162, + "y": 253 }, { "action": null, @@ -33914,21 +38195,22 @@ "defense": "none", "facing": -1, "facing_x": -878, - "facing_y": 480, - "get_up_count": 4, + "facing_y": 482, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 626, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 307, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -33938,37 +38220,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 300, - "y": 0 + "x": 135, + "y": 90 } ], - "phase": "knockdown", - "phase_ticks_remaining": 171, + "phase": "fight", + "phase_ticks_remaining": 999878, + "referee": { + "alive": true, + "facing_x": -1000, + "facing_y": 65, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -5, + "velocity_y": 3, + "x": 125, + "y": 162 + }, "result": null, "round_number": 1, - "tick": 249 + "tick": 242 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 249 + "tick": 242 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "41dd4f6741fc31f469b5c83221f991a83f399883a478488959f14a62c47f57db", + "checksum": "9cf4eb520387458c03dda9dd113985e4b83de7456890457fe44084a8b593581c", "events": [], "fighters": [ { @@ -33985,29 +38287,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 877, - "facing_y": -480, - "get_up_count": 4, + "facing_x": 878, + "facing_y": -484, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 88, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -34022,11 +38325,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -354, - "y": 358 + "x": -153, + "y": 249 }, { "action": null, @@ -34048,21 +38351,22 @@ "defense": "none", "facing": -1, "facing_x": -877, - "facing_y": 480, - "get_up_count": 4, + "facing_y": 482, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 630, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 307, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -34072,37 +38376,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 300, - "y": 0 + "x": 127, + "y": 95 } ], - "phase": "knockdown", - "phase_ticks_remaining": 170, + "phase": "fight", + "phase_ticks_remaining": 999877, + "referee": { + "alive": true, + "facing_x": -1000, + "facing_y": 37, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -5, + "velocity_y": 3, + "x": 119, + "y": 167 + }, "result": null, "round_number": 1, - "tick": 250 + "tick": 243 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 250 + "tick": 243 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "91b0f244bacd18a7a9a98c582667268ca63d505490731b8f2807e392153b15c6", + "checksum": "31ea2e7a023c0c18c5f8c70ee78e69ed6ac0aba2486842ebfaf2f1549824049e", "events": [], "fighters": [ { @@ -34119,29 +38443,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, "facing_x": 877, - "facing_y": -480, - "get_up_count": 4, + "facing_y": -482, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 89, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -34156,11 +38481,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -358, - "y": 360 + "x": -144, + "y": 244 }, { "action": null, @@ -34181,22 +38506,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -877, - "facing_y": 480, - "get_up_count": 4, + "facing_x": -879, + "facing_y": 483, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 634, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 308, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -34206,37 +38532,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 300, - "y": 0 + "x": 118, + "y": 100 } ], - "phase": "knockdown", - "phase_ticks_remaining": 169, + "phase": "fight", + "phase_ticks_remaining": 999876, + "referee": { + "alive": true, + "facing_x": -1000, + "facing_y": 0, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -5, + "velocity_y": 3, + "x": 113, + "y": 172 + }, "result": null, "round_number": 1, - "tick": 251 + "tick": 244 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 251 + "tick": 244 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "cfb7a475ec60ca0ad0032d544f335826227319e4abd88b2fc2fc78c0700c085c", + "checksum": "7d445cbf6dea27e341df2852fc9d6ca66ad96145d690a95bfa9ce95aab052c95", "events": [], "fighters": [ { @@ -34253,29 +38599,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 4, + "facing_x": 878, + "facing_y": -480, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 90, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -34290,11 +38637,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -362, - "y": 363 + "x": -136, + "y": 239 }, { "action": null, @@ -34315,22 +38662,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 4, + "facing_x": -878, + "facing_y": 482, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 638, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 308, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -34340,37 +38688,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 300, - "y": 0 + "x": 110, + "y": 104 } ], - "phase": "knockdown", - "phase_ticks_remaining": 168, + "phase": "fight", + "phase_ticks_remaining": 999875, + "referee": { + "alive": true, + "facing_x": -1000, + "facing_y": -41, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -5, + "velocity_y": 2, + "x": 107, + "y": 176 + }, "result": null, "round_number": 1, - "tick": 252 + "tick": 245 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 252 + "tick": 245 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "d8dda6048c61a051a906017e558c19bfeafdd10a05176e6081e74f9f8a78d46f", + "checksum": "3256c4033dbba7db4e8f7d4a095d05ccf0cee07e2e1547f7c8a5c44e9fabccee", "events": [], "fighters": [ { @@ -34387,29 +38755,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, "facing_x": 877, "facing_y": -481, - "get_up_count": 4, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 91, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -34424,11 +38793,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -362, - "y": 363 + "x": -127, + "y": 234 }, { "action": null, @@ -34451,20 +38820,21 @@ "facing": -1, "facing_x": -877, "facing_y": 481, - "get_up_count": 4, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 642, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 309, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -34474,37 +38844,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 300, - "y": 0 + "x": 101, + "y": 109 } ], - "phase": "knockdown", - "phase_ticks_remaining": 167, + "phase": "fight", + "phase_ticks_remaining": 999874, + "referee": { + "alive": true, + "facing_x": -1000, + "facing_y": -86, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -5, + "velocity_y": 2, + "x": 103, + "y": 181 + }, "result": null, "round_number": 1, - "tick": 253 + "tick": 246 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 253 + "tick": 246 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "d6dd530d7b3e665cc90061791add203ffa3f1b53d21d1581cb396aa28fbf1ccc", + "checksum": "a294a981ab23aac3f6182bcfde4bbaeea57a11741f33562f908f5afa5fdc5867", "events": [], "fighters": [ { @@ -34521,29 +38911,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 877, + "facing_x": 879, "facing_y": -481, - "get_up_count": 4, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 92, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -34558,11 +38949,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -362, - "y": 363 + "x": -118, + "y": 229 }, { "action": null, @@ -34583,22 +38974,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 4, + "facing_x": -879, + "facing_y": 483, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 646, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 309, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -34608,37 +39000,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 300, - "y": 0 + "x": 93, + "y": 113 } ], - "phase": "knockdown", - "phase_ticks_remaining": 166, + "phase": "fight", + "phase_ticks_remaining": 999873, + "referee": { + "alive": true, + "facing_x": -1000, + "facing_y": -126, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -5, + "velocity_y": 2, + "x": 99, + "y": 185 + }, "result": null, "round_number": 1, - "tick": 254 + "tick": 247 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 254 + "tick": 247 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "fc5d7f5d24c8af782e197e3a54f9db12aa298be40fde1063ae36e2648899cd88", + "checksum": "17ff43ed36408474786af96790fd2cc31dce32b16309bc81953e7797f2c04bc5", "events": [], "fighters": [ { @@ -34655,29 +39067,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 4, + "facing_x": 878, + "facing_y": -486, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 93, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -34692,11 +39105,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -362, - "y": 363 + "x": -109, + "y": 225 }, { "action": null, @@ -34717,22 +39130,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 4, + "facing_x": -876, + "facing_y": 483, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 650, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 310, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -34742,37 +39156,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 300, - "y": 0 + "x": 85, + "y": 118 } ], - "phase": "knockdown", - "phase_ticks_remaining": 165, + "phase": "fight", + "phase_ticks_remaining": 999872, + "referee": { + "alive": true, + "facing_x": -990, + "facing_y": -175, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -5, + "velocity_y": 2, + "x": 95, + "y": 190 + }, "result": null, "round_number": 1, - "tick": 255 + "tick": 248 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 255 + "tick": 248 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "0f7f249e1c0c562a79cf0c746403e79d2fe3a25997e5659a20b5c99ca71aad29", + "checksum": "ceda661699d27bdbaad856413ccd515067111e212ce696a9c0cba87f60dfca50", "events": [], "fighters": [ { @@ -34789,29 +39223,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, "facing_x": 877, "facing_y": -481, - "get_up_count": 4, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 94, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -34826,11 +39261,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -362, - "y": 363 + "x": -101, + "y": 220 }, { "action": null, @@ -34851,22 +39286,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 4, + "facing_x": -876, + "facing_y": 483, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 654, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 310, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -34876,37 +39312,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 300, - "y": 0 + "x": 76, + "y": 123 } ], - "phase": "knockdown", - "phase_ticks_remaining": 164, + "phase": "fight", + "phase_ticks_remaining": 999871, + "referee": { + "alive": true, + "facing_x": -980, + "facing_y": -219, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -5, + "velocity_y": 2, + "x": 91, + "y": 194 + }, "result": null, "round_number": 1, - "tick": 256 + "tick": 249 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 256 + "tick": 249 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "40499ad4335de8d24effbe875d12008b3a12ff2ca967f04bf611811584ed4006", + "checksum": "200da2de9216e8f5dbedc54453ea9e31557955208ce0c8956bfb9fb38cba0436", "events": [], "fighters": [ { @@ -34923,29 +39379,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 877, + "facing_x": 879, "facing_y": -481, - "get_up_count": 4, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 95, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -34960,11 +39417,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -362, - "y": 363 + "x": -92, + "y": 215 }, { "action": null, @@ -34985,22 +39442,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 4, + "facing_x": -879, + "facing_y": 483, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 658, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 311, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -35010,37 +39468,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 300, - "y": 0 + "x": 68, + "y": 127 } ], - "phase": "knockdown", - "phase_ticks_remaining": 163, + "phase": "fight", + "phase_ticks_remaining": 999870, + "referee": { + "alive": true, + "facing_x": -970, + "facing_y": -254, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -5, + "velocity_y": 2, + "x": 87, + "y": 197 + }, "result": null, "round_number": 1, - "tick": 257 + "tick": 250 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 257 + "tick": 250 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "074655fd3873b3e6defe1438a8be79e49da8481f1323fb6c63ee59a36b7df724", + "checksum": "36136802b66f3fa875b9e12d0b49dd111072520e69a8c9531ca2be64ecd4b245", "events": [], "fighters": [ { @@ -35057,29 +39535,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, "facing_x": 877, - "facing_y": -481, - "get_up_count": 4, + "facing_y": -482, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 96, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -35094,11 +39573,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -362, - "y": 363 + "x": -83, + "y": 210 }, { "action": null, @@ -35119,22 +39598,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -877, + "facing_x": -876, "facing_y": 481, - "get_up_count": 4, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 662, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 311, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -35144,37 +39624,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 300, - "y": 0 + "x": 59, + "y": 132 } ], - "phase": "knockdown", - "phase_ticks_remaining": 162, + "phase": "fight", + "phase_ticks_remaining": 999869, + "referee": { + "alive": true, + "facing_x": -959, + "facing_y": -303, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -5, + "velocity_y": 2, + "x": 83, + "y": 201 + }, "result": null, "round_number": 1, - "tick": 258 + "tick": 251 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 258 + "tick": 251 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "25bdf174d9f9d7ea1556783e6166ef6a1c054949cdcbdb7aa9c9cd400df45e85", + "checksum": "9a77f97b209cda8f521120c4fa138d0864c9bbc5b9356848611e46aac656a7d1", "events": [], "fighters": [ { @@ -35191,29 +39691,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 4, + "facing_x": 880, + "facing_y": -483, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 97, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -35228,11 +39729,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -362, - "y": 363 + "x": -74, + "y": 205 }, { "action": null, @@ -35253,22 +39754,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 4, + "facing_x": -879, + "facing_y": 477, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 666, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 312, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -35278,37 +39780,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -8, + "velocity_y": 5, "warnings": 0, - "x": 300, - "y": 0 + "x": 51, + "y": 137 } ], - "phase": "knockdown", - "phase_ticks_remaining": 161, + "phase": "fight", + "phase_ticks_remaining": 999868, + "referee": { + "alive": true, + "facing_x": -947, + "facing_y": -347, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -5, + "velocity_y": 2, + "x": 79, + "y": 204 + }, "result": null, "round_number": 1, - "tick": 259 + "tick": 252 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 259 + "tick": 252 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "8acc027e784a30eaa4d815acd62ef1571ac8d322090bc4c65f1956bf98da75eb", + "checksum": "ac473d444faec19df7e14997a6f65a867d44bd281336a831bb2397db3ac13fd7", "events": [], "fighters": [ { @@ -35325,29 +39847,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 4, + "facing_x": 886, + "facing_y": -477, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 97, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -35362,11 +39885,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -362, - "y": 363 + "x": -66, + "y": 200 }, { "action": null, @@ -35387,22 +39910,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 4, + "facing_x": -879, + "facing_y": 477, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 670, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 312, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -35412,37 +39936,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -2, + "velocity_y": 1, "warnings": 0, - "x": 300, - "y": 0 + "x": 49, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 160, + "phase": "fight", + "phase_ticks_remaining": 999867, + "referee": { + "alive": true, + "facing_x": -922, + "facing_y": -411, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -5, + "velocity_y": 1, + "x": 75, + "y": 206 + }, "result": null, "round_number": 1, - "tick": 260 + "tick": 253 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 260 + "tick": 253 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "a7ccee00be433010cc2b246dd1df3541887f65fa5471056dfa41f09b7be22c87", + "checksum": "5c50ae0213f90d1cd59863cbd0b12522d5d6ab9158502a9c79b61528a27db752", "events": [], "fighters": [ { @@ -35459,29 +40003,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 4, + "facing_x": 854, + "facing_y": -524, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 98, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -35496,11 +40041,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 8, + "velocity_y": 3, "warnings": 0, - "x": -362, - "y": 363 + "x": -57, + "y": 203 }, { "action": null, @@ -35521,22 +40066,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 4, + "facing_x": -879, + "facing_y": 478, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 674, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 313, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -35546,37 +40092,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, - "velocity_x": 0, + "velocity_x": -1, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 159, + "phase": "fight", + "phase_ticks_remaining": 999866, + "referee": { + "alive": true, + "facing_x": -902, + "facing_y": -451, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -5, + "velocity_y": 1, + "x": 70, + "y": 207 + }, "result": null, "round_number": 1, - "tick": 261 + "tick": 254 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 261 + "tick": 254 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "63eaa5ad5aa62ffcec5466e92d8ee4f929fd8b6b64c8c960d13347ef1ee889c5", + "checksum": "92ac201dc1b1936bdec7ebf2945b93fce14b4f8051980e34b7aaf6a39a77d47d", "events": [], "fighters": [ { @@ -35593,29 +40159,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 4, + "facing_x": 809, + "facing_y": -586, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 99, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -35630,11 +40197,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 7, + "velocity_y": 6, "warnings": 0, - "x": -362, - "y": 363 + "x": -50, + "y": 209 }, { "action": null, @@ -35655,22 +40222,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 4, + "facing_x": -853, + "facing_y": 528, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 678, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 313, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -35680,37 +40248,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 158, + "phase": "fight", + "phase_ticks_remaining": 999865, + "referee": { + "alive": true, + "facing_x": -880, + "facing_y": -480, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -5, + "velocity_y": 2, + "x": 65, + "y": 209 + }, "result": null, "round_number": 1, - "tick": 262 + "tick": 255 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 262 + "tick": 255 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "e62882418c31c39d6e82f4721b950e39ecc7ddc89a83fe4744dcffa46889dc92", + "checksum": "b63b571c01a1a6cb210bc736fc3865b9cbbc7ae68674ccebfa3e62d7938edbdc", "events": [], "fighters": [ { @@ -35727,29 +40315,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 4, + "facing_x": 760, + "facing_y": -652, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 100, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -35764,11 +40353,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 6, + "velocity_y": 7, "warnings": 0, - "x": -362, - "y": 363 + "x": -44, + "y": 217 }, { "action": null, @@ -35789,22 +40378,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 4, + "facing_x": -815, + "facing_y": 580, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 682, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 314, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -35814,37 +40404,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 157, + "phase": "fight", + "phase_ticks_remaining": 999864, + "referee": { + "alive": true, + "facing_x": -865, + "facing_y": -522, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -5, + "velocity_y": 3, + "x": 60, + "y": 212 + }, "result": null, "round_number": 1, - "tick": 263 + "tick": 256 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 263 + "tick": 256 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "2ca79476b2f0fbc8c0746f1ba7ea1b56b50a9dbb36b1a51e68da6d3eec65597f", + "checksum": "0e1451e7967f6eebe48716a988fe60df640a38d1a326e3e738088c55db2869e3", "events": [], "fighters": [ { @@ -35861,29 +40471,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 4, + "facing_x": 708, + "facing_y": -716, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 101, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -35898,11 +40509,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -362, - "y": 363 + "x": -37, + "y": 224 }, { "action": null, @@ -35923,22 +40534,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 4, + "facing_x": -776, + "facing_y": 631, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 686, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 314, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -35948,37 +40560,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 156, + "phase": "fight", + "phase_ticks_remaining": 999863, + "referee": { + "alive": true, + "facing_x": -836, + "facing_y": -573, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": 4, + "x": 56, + "y": 216 + }, "result": null, "round_number": 1, - "tick": 264 + "tick": 257 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 264 + "tick": 257 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "2103b77b21b15d5c7ebf58c260102f4ba3e89ed362827f37cfc69b83ddc30e43", + "checksum": "c2ed0f44a78eea947dcd3e9f062a2cf9a6a1aaed17d00260cd57e0e6aeba86a1", "events": [], "fighters": [ { @@ -35995,29 +40627,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 4, + "facing_x": 644, + "facing_y": -768, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 102, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -36032,11 +40665,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -362, - "y": 363 + "x": -30, + "y": 231 }, { "action": null, @@ -36057,22 +40690,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 4, + "facing_x": -734, + "facing_y": 679, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 690, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 315, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -36082,37 +40716,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 155, + "phase": "fight", + "phase_ticks_remaining": 999862, + "referee": { + "alive": true, + "facing_x": -783, + "facing_y": -633, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 6, + "x": 56, + "y": 222 + }, "result": null, "round_number": 1, - "tick": 265 + "tick": 258 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 265 + "tick": 258 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "47d503500cc4d84c4f6133e332d67ef8fc2d7d9c825ac89f6c92eca6e3cda218", + "checksum": "0232bd275fc3716927c856b29f9c3354f3eaf5aac8f8411a5f1c43b37f325d82", "events": [], "fighters": [ { @@ -36129,29 +40783,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 4, + "facing_x": 578, + "facing_y": -818, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 103, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -36166,11 +40821,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 8, + "velocity_y": 6, "warnings": 0, - "x": -362, - "y": 363 + "x": -22, + "y": 237 }, { "action": null, @@ -36191,22 +40846,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 4, + "facing_x": -689, + "facing_y": 725, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 694, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 315, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -36216,37 +40872,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 154, + "phase": "fight", + "phase_ticks_remaining": 999861, + "referee": { + "alive": true, + "facing_x": -816, + "facing_y": -583, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 6, + "velocity_y": 0, + "x": 62, + "y": 222 + }, "result": null, "round_number": 1, - "tick": 266 + "tick": 259 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 266 + "tick": 259 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "3c6b932327085456a281bf0b090f4eb6625bde2eed0ddc915adf9189363c6ac9", + "checksum": "3729b75c84a580908cd17e0f8cd2e8861f5d2f0d1b4dbb8e2f47d9e9d88393ca", "events": [], "fighters": [ { @@ -36263,29 +40939,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 4, + "facing_x": 512, + "facing_y": -867, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 104, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -36300,11 +40977,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 8, + "velocity_y": 6, "warnings": 0, - "x": -362, - "y": 363 + "x": -14, + "y": 243 }, { "action": null, @@ -36325,22 +41002,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 4, + "facing_x": -641, + "facing_y": 767, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 698, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 316, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -36350,37 +41028,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 153, + "phase": "fight", + "phase_ticks_remaining": 999860, + "referee": { + "alive": true, + "facing_x": -850, + "facing_y": -533, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 6, + "velocity_y": 0, + "x": 68, + "y": 222 + }, "result": null, "round_number": 1, - "tick": 267 + "tick": 260 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 267 + "tick": 260 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "461efdb128195eefa2a4a193b448b9901bfeb49c121f3c2947cca5bcff8447b2", + "checksum": "89fede5fbac77bedf49e86ce4d7fc149e64a99031b62188f853d53106f9c1a07", "events": [], "fighters": [ { @@ -36397,29 +41095,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 4, + "facing_x": 434, + "facing_y": -901, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 105, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -36434,11 +41133,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 8, + "velocity_y": 5, "warnings": 0, - "x": -362, - "y": 363 + "x": -5, + "y": 248 }, { "action": null, @@ -36459,22 +41158,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 4, + "facing_x": -591, + "facing_y": 807, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 316, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -36484,37 +41184,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 152, + "phase": "fight", + "phase_ticks_remaining": 999859, + "referee": { + "alive": true, + "facing_x": -898, + "facing_y": -457, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 6, + "velocity_y": -2, + "x": 74, + "y": 220 + }, "result": null, "round_number": 1, - "tick": 268 + "tick": 261 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 268 + "tick": 261 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "3654b7d43252e361d254f1ac06f31aa9b8de9551c640b84cab945dc62ceed7b3", + "checksum": "d77ef65550889b7b3250664d2aa6cfa53ac7b9a4347e04abf3f9eb988825d0fa", "events": [], "fighters": [ { @@ -36531,29 +41251,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 4, + "facing_x": 360, + "facing_y": -934, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 106, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -36568,11 +41289,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 9, + "velocity_y": 4, "warnings": 0, - "x": -362, - "y": 363 + "x": 4, + "y": 252 }, { "action": null, @@ -36593,22 +41314,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 4, + "facing_x": -538, + "facing_y": 843, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 317, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -36618,51 +41340,58 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 151, + "phase": "fight", + "phase_ticks_remaining": 999858, + "referee": { + "alive": true, + "facing_x": -931, + "facing_y": -396, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 6, + "velocity_y": -2, + "x": 80, + "y": 218 + }, "result": null, "round_number": 1, - "tick": 269 + "tick": 262 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 269 + "tick": 262 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "ab163992fef247d59a26edaf14b4602f1599cff377260c6b7c795f2d0cd1041a", - "events": [ - { - "action_id": null, - "actor_id": null, - "amount": 5, - "blood": 0, - "detail": "", - "direction": 0, - "event_id": 18, - "kind": "count", - "target_id": "two", - "tick": 270 - } - ], + "checksum": "36022a29eb60b706fd37c5670a9ecfd22bf08f121a443a640f1689e7291059d8", + "events": [], "fighters": [ { "action": null, @@ -36678,29 +41407,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 877, - "facing_y": -481, + "facing_x": 289, + "facing_y": -958, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 107, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -36715,11 +41445,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 9, + "velocity_y": 3, "warnings": 0, - "x": -362, - "y": 363 + "x": 13, + "y": 254 }, { "action": null, @@ -36740,22 +41470,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -877, - "facing_y": 481, + "facing_x": -483, + "facing_y": 876, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 317, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -36765,37 +41496,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 150, + "phase": "fight", + "phase_ticks_remaining": 999857, + "referee": { + "alive": true, + "facing_x": -948, + "facing_y": -327, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": -3, + "x": 85, + "y": 215 + }, "result": null, "round_number": 1, - "tick": 270 + "tick": 263 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 270 + "tick": 263 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "5c4ae538140a1881c758860c0aa2e2689f52fd51f38cea7cbe69844c9f1daabc", + "checksum": "04d56c02d48ce50d0588c5debd9c281da00bcf093c798f458dbc07d3eb2eea76", "events": [], "fighters": [ { @@ -36812,29 +41563,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 877, - "facing_y": -481, + "facing_x": 206, + "facing_y": -983, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 108, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -36849,11 +41601,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 9, + "velocity_y": 3, "warnings": 0, - "x": -362, - "y": 363 + "x": 23, + "y": 257 }, { "action": null, @@ -36874,22 +41626,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -877, - "facing_y": 481, + "facing_x": -426, + "facing_y": 905, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 318, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -36899,37 +41652,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 149, + "phase": "fight", + "phase_ticks_remaining": 999856, + "referee": { + "alive": true, + "facing_x": -964, + "facing_y": -263, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": -3, + "x": 90, + "y": 212 + }, "result": null, "round_number": 1, - "tick": 271 + "tick": 264 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 271 + "tick": 264 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "f9dfc7a624e0872afe4c3adb2946df6f2446e7b6d89a27c20c46afd556cd2c6d", + "checksum": "c86238b79675793baa30e9902b556ee308e1688000dfe0991634aa68ff671757", "events": [], "fighters": [ { @@ -36946,29 +41719,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 877, - "facing_y": -481, + "facing_x": 123, + "facing_y": -1000, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 109, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -36983,11 +41757,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 9, + "velocity_y": 2, "warnings": 0, - "x": -362, - "y": 363 + "x": 33, + "y": 259 }, { "action": null, @@ -37008,22 +41782,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -877, - "facing_y": 481, + "facing_x": -367, + "facing_y": 930, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 318, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -37033,37 +41808,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 148, + "phase": "fight", + "phase_ticks_remaining": 999855, + "referee": { + "alive": true, + "facing_x": -982, + "facing_y": -196, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": -3, + "x": 95, + "y": 209 + }, "result": null, "round_number": 1, - "tick": 272 + "tick": 265 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 272 + "tick": 265 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "cffe8673936cd0b20a9dacc02a6fdfb75693176e012f5cea6cc20ac0d2a7a90c", + "checksum": "cd83dd1eee2e994cc574c43f4923142ba640c7d20b7790c0e016c905e15dde04", "events": [], "fighters": [ { @@ -37080,29 +41875,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 877, - "facing_y": -481, + "facing_x": 40, + "facing_y": -1000, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 110, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -37117,11 +41913,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 9, + "velocity_y": 1, "warnings": 0, - "x": -362, - "y": 363 + "x": 43, + "y": 260 }, { "action": null, @@ -37142,22 +41938,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -877, - "facing_y": 481, + "facing_x": -307, + "facing_y": 952, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 319, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -37167,37 +41964,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 147, + "phase": "fight", + "phase_ticks_remaining": 999854, + "referee": { + "alive": true, + "facing_x": -1000, + "facing_y": -127, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": -3, + "x": 100, + "y": 206 + }, "result": null, "round_number": 1, - "tick": 273 + "tick": 266 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 273 + "tick": 266 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "23bbf48026ce8809f3ea4e5f59149adbcf4ed99d6d2ecdf2130223b1043dae83", + "checksum": "aae246de3dd786e871622f5e2e87c883484f26da8f08f0ea2b37f1c66c879425", "events": [], "fighters": [ { @@ -37214,29 +42031,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, + "facing": -1, + "facing_x": -40, + "facing_y": -1000, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 111, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -37251,11 +42069,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, + "velocity_x": 10, "velocity_y": 0, "warnings": 0, - "x": -362, - "y": 363 + "x": 53, + "y": 260 }, { "action": null, @@ -37276,22 +42094,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -877, - "facing_y": 481, + "facing_x": -245, + "facing_y": 969, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 319, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -37301,37 +42120,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 146, + "phase": "fight", + "phase_ticks_remaining": 999853, + "referee": { + "alive": true, + "facing_x": -1000, + "facing_y": -74, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 4, + "velocity_y": -3, + "x": 104, + "y": 203 + }, "result": null, "round_number": 1, - "tick": 274 + "tick": 267 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 274 + "tick": 267 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "78b755916938ab2ab09013e533b8a567fee6c8f802d9819b637240d017826430", + "checksum": "4e936e69c16d115ee19eca91162490385d0bcd159f0bc173b1ef3944aef692b8", "events": [], "fighters": [ { @@ -37348,29 +42187,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, + "facing": -1, + "facing_x": -122, + "facing_y": -1000, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 112, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -37385,11 +42225,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 9, + "velocity_y": -1, "warnings": 0, - "x": -362, - "y": 363 + "x": 63, + "y": 260 }, { "action": null, @@ -37410,22 +42250,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -877, - "facing_y": 481, + "facing_x": -183, + "facing_y": 983, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 320, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -37435,37 +42276,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 145, + "phase": "fight", + "phase_ticks_remaining": 999852, + "referee": { + "alive": true, + "facing_x": -1000, + "facing_y": -18, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 4, + "velocity_y": -3, + "x": 108, + "y": 200 + }, "result": null, "round_number": 1, - "tick": 275 + "tick": 268 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 275 + "tick": 268 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "17df00f2a3458ff262b40f0a5bd6f2ec29e2f2a5810e97c206bab6dcc77712e4", + "checksum": "09ec7ed7ad4f5a4689ef0059ba1742151d66e5bceca9caca9e4a8a90ce6ccbd3", "events": [], "fighters": [ { @@ -37482,29 +42343,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, + "facing": -1, + "facing_x": -196, + "facing_y": -983, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 113, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -37519,11 +42381,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 9, + "velocity_y": -2, "warnings": 0, - "x": -362, - "y": 363 + "x": 72, + "y": 258 }, { "action": null, @@ -37544,22 +42406,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -877, - "facing_y": 481, + "facing_x": -120, + "facing_y": 993, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 320, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -37569,37 +42432,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 144, + "phase": "fight", + "phase_ticks_remaining": 999851, + "referee": { + "alive": true, + "facing_x": -1000, + "facing_y": 38, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 4, + "velocity_y": -4, + "x": 112, + "y": 196 + }, "result": null, "round_number": 1, - "tick": 276 + "tick": 269 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 276 + "tick": 269 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "98000f0cd08c84427cf53e1a9896f7561819b5d82c3ee5d7c26fa31cfa2bc477", + "checksum": "f25c99f1d2ff979d21295c75536c4841ec7cd9d5d44ccda6849403dd78d4ff8e", "events": [], "fighters": [ { @@ -37616,29 +42499,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, + "facing": -1, + "facing_x": -280, + "facing_y": -966, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 114, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -37653,11 +42537,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 9, + "velocity_y": -3, "warnings": 0, - "x": -362, - "y": 363 + "x": 82, + "y": 255 }, { "action": null, @@ -37678,22 +42562,23 @@ "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -877, - "facing_y": 481, + "facing_x": -56, + "facing_y": 998, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 321, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -37703,37 +42588,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 143, + "phase": "fight", + "phase_ticks_remaining": 999850, + "referee": { + "alive": true, + "facing_x": -1000, + "facing_y": 100, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 3, + "velocity_y": -5, + "x": 115, + "y": 191 + }, "result": null, "round_number": 1, - "tick": 277 + "tick": 270 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 277 + "tick": 270 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "06d50974db6dab1db3dd2edc468b580665c40fd69451bc19b968c5b64188d2f0", + "checksum": "6264531d178ab1918d99aff713177c2cb0a12fcb3e716cb06f6c6ee5fe534c8a", "events": [], "fighters": [ { @@ -37750,29 +42655,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, + "facing": -1, + "facing_x": -355, + "facing_y": -942, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 115, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -37787,11 +42693,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 9, + "velocity_y": -3, "warnings": 0, - "x": -362, - "y": 363 + "x": 91, + "y": 252 }, { "action": null, @@ -37811,23 +42717,24 @@ "corner_choice": null, "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, + "facing": 1, + "facing_x": 8, + "facing_y": 1000, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 321, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -37837,37 +42744,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 142, + "phase": "fight", + "phase_ticks_remaining": 999849, + "referee": { + "alive": true, + "facing_x": -1000, + "facing_y": 200, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 3, + "velocity_y": -5, + "x": 119, + "y": 185 + }, "result": null, "round_number": 1, - "tick": 278 + "tick": 271 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 278 + "tick": 271 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "ea5ee5a0c5ff3fe05853e4031dc0e26b42aaf51ad379ca6c66f1acb639a68c5a", + "checksum": "b0b268b938cbac17fa4adbc119df5b1ddbc67dc3a6edf1fd865196548b398c78", "events": [], "fighters": [ { @@ -37884,29 +42811,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, + "facing": -1, + "facing_x": -434, + "facing_y": -901, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 116, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -37921,11 +42849,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 9, + "velocity_y": -4, "warnings": 0, - "x": -362, - "y": 363 + "x": 101, + "y": 248 }, { "action": null, @@ -37945,23 +42873,24 @@ "corner_choice": null, "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, + "facing": 1, + "facing_x": 72, + "facing_y": 997, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 322, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -37971,37 +42900,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 141, + "phase": "fight", + "phase_ticks_remaining": 999848, + "referee": { + "alive": true, + "facing_x": -980, + "facing_y": 280, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 3, + "velocity_y": -5, + "x": 123, + "y": 179 + }, "result": null, "round_number": 1, - "tick": 279 + "tick": 272 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 279 + "tick": 272 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "12cf2acdc33361221a9659ef991606d779120ee32c504b8edce06177c2146a54", + "checksum": "4b9ee72f277246cad5885184792953380a479675e1c691a457ebe31e46dd8011", "events": [], "fighters": [ { @@ -38018,29 +42967,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, + "facing": -1, + "facing_x": -504, + "facing_y": -867, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 117, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -38055,11 +43005,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -362, - "y": 363 + "x": 109, + "y": 243 }, { "action": null, @@ -38079,23 +43029,24 @@ "corner_choice": null, "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, + "facing": 1, + "facing_x": 136, + "facing_y": 991, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 322, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -38105,37 +43056,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 140, + "phase": "fight", + "phase_ticks_remaining": 999847, + "referee": { + "alive": true, + "facing_x": -941, + "facing_y": 352, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 2, + "velocity_y": -5, + "x": 126, + "y": 172 + }, "result": null, "round_number": 1, - "tick": 280 + "tick": 273 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 280 + "tick": 273 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "678a906d1a40e49900b51b37de1d60859bb65b30cfd24e9229b099f689429301", + "checksum": "44da9f895125447efd971c7e4a198148a7de4932f37c138661479c53c12ef7ee", "events": [], "fighters": [ { @@ -38152,29 +43123,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, + "facing": -1, + "facing_x": -573, + "facing_y": -819, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 118, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -38189,11 +43161,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 8, + "velocity_y": -5, "warnings": 0, - "x": -362, - "y": 363 + "x": 118, + "y": 238 }, { "action": null, @@ -38213,23 +43185,24 @@ "corner_choice": null, "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, + "facing": 1, + "facing_x": 199, + "facing_y": 980, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 323, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -38239,37 +43212,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 139, + "phase": "fight", + "phase_ticks_remaining": 999846, + "referee": { + "alive": true, + "facing_x": -920, + "facing_y": 440, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 2, + "velocity_y": -5, + "x": 129, + "y": 166 + }, "result": null, "round_number": 1, - "tick": 281 + "tick": 274 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 281 + "tick": 274 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "4bfaa3038aae046d58081e90c8ad07f44eaf6d0a9c88dfcf9eadbea89497bf26", + "checksum": "9a5969d15c1025af906886cd9c88421089745a8c4c152fa37cf755cfda6171fa", "events": [], "fighters": [ { @@ -38286,29 +43279,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, + "facing": -1, + "facing_x": -639, + "facing_y": -770, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 119, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -38323,11 +43317,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 8, + "velocity_y": -6, "warnings": 0, - "x": -362, - "y": 363 + "x": 126, + "y": 232 }, { "action": null, @@ -38347,23 +43341,24 @@ "corner_choice": null, "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, + "facing": 1, + "facing_x": 261, + "facing_y": 965, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 323, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -38373,37 +43368,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 138, + "phase": "fight", + "phase_ticks_remaining": 999845, + "referee": { + "alive": true, + "facing_x": -877, + "facing_y": 510, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 1, + "velocity_y": -6, + "x": 130, + "y": 160 + }, "result": null, "round_number": 1, - "tick": 282 + "tick": 275 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 282 + "tick": 275 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "4d94515505b96d1d07b2a00e0203c4a3c9e180bf5170cc52756facee9b550d0e", + "checksum": "98f9e1313b9ea5a57f8957ee5a2d36bb2e330bfce9d0c61b3d58b3618d50d450", "events": [], "fighters": [ { @@ -38420,29 +43435,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, + "facing": -1, + "facing_x": -702, + "facing_y": -719, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 120, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -38457,11 +43473,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 7, + "velocity_y": -7, "warnings": 0, - "x": -362, - "y": 363 + "x": 133, + "y": 225 }, { "action": null, @@ -38481,23 +43497,24 @@ "corner_choice": null, "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, + "facing": 1, + "facing_x": 322, + "facing_y": 947, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 324, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -38507,37 +43524,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 137, + "phase": "fight", + "phase_ticks_remaining": 999844, + "referee": { + "alive": true, + "facing_x": -833, + "facing_y": 583, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 1, + "velocity_y": -6, + "x": 130, + "y": 153 + }, "result": null, "round_number": 1, - "tick": 283 + "tick": 276 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 283 + "tick": 276 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "34d9f606fab06c79a17f3c83395e0b765dd5a92bb1743c537ac5d7f655cccdcc", + "checksum": "869984007fd15a1e2ebd3e90b96941b0e2aedc36470e632f874387d07b3417d5", "events": [], "fighters": [ { @@ -38554,29 +43591,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, + "facing": -1, + "facing_x": -760, + "facing_y": -661, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 121, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -38591,11 +43629,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 7, + "velocity_y": -7, "warnings": 0, - "x": -362, - "y": 363 + "x": 140, + "y": 218 }, { "action": null, @@ -38615,23 +43653,24 @@ "corner_choice": null, "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, + "facing": 1, + "facing_x": 382, + "facing_y": 924, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 324, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -38641,37 +43680,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 136, + "phase": "fight", + "phase_ticks_remaining": 999843, + "referee": { + "alive": true, + "facing_x": -750, + "facing_y": 666, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 1, + "velocity_y": -6, + "x": 130, + "y": 146 + }, "result": null, "round_number": 1, - "tick": 284 + "tick": 277 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 284 + "tick": 277 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "d7b4d37e77584dbc493224ba1e0e107ebb69197eea2ce3026fbbb06de88ca852", + "checksum": "2cdcf0ca939ea860d2819b365d2e23ac09921196160d83461a1006b847fab35d", "events": [], "fighters": [ { @@ -38688,29 +43747,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, + "facing": -1, + "facing_x": -809, + "facing_y": -595, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 122, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -38725,11 +43785,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 6, + "velocity_y": -8, "warnings": 0, - "x": -362, - "y": 363 + "x": 146, + "y": 210 }, { "action": null, @@ -38749,23 +43809,24 @@ "corner_choice": null, "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, + "facing": 1, + "facing_x": 440, + "facing_y": 898, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 325, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -38775,37 +43836,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 135, + "phase": "fight", + "phase_ticks_remaining": 999842, + "referee": { + "alive": true, + "facing_x": -680, + "facing_y": 744, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": -6, + "x": 129, + "y": 139 + }, "result": null, "round_number": 1, - "tick": 285 + "tick": 278 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 285 + "tick": 278 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "dfc26f9ab386b1d5de83d55c814f15093c791cf2b1197c72c29af7e42c04b9b1", + "checksum": "4047bca2527d7d7ba5bea55a637b9d4256a272a47a24d8b50227de72f97cdb9d", "events": [], "fighters": [ { @@ -38822,29 +43903,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, + "facing": -1, + "facing_x": -852, + "facing_y": -524, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 123, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -38859,11 +43941,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 6, + "velocity_y": -8, "warnings": 0, - "x": -362, - "y": 363 + "x": 152, + "y": 202 }, { "action": null, @@ -38883,23 +43965,24 @@ "corner_choice": null, "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, + "facing": 1, + "facing_x": 497, + "facing_y": 868, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 325, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -38909,37 +43992,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 134, + "phase": "fight", + "phase_ticks_remaining": 999841, + "referee": { + "alive": true, + "facing_x": -617, + "facing_y": 787, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": -6, + "x": 129, + "y": 133 + }, "result": null, "round_number": 1, - "tick": 286 + "tick": 279 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 286 + "tick": 279 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "b3fe3b3439a8174b8cc046a183481c78962f2aa7517e19ebbf0a82d61fea8f4d", + "checksum": "e73fb0553a4bc23c758e245b7b8914857aad53458c8b0541dd3fede1997c794f", "events": [], "fighters": [ { @@ -38956,29 +44059,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, + "facing": -1, + "facing_x": -893, + "facing_y": -450, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 124, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -38993,11 +44097,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 5, + "velocity_y": -8, "warnings": 0, - "x": -362, - "y": 363 + "x": 157, + "y": 193 }, { "action": null, @@ -39017,23 +44121,24 @@ "corner_choice": null, "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, + "facing": 1, + "facing_x": 551, + "facing_y": 834, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 326, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -39043,37 +44148,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 133, + "phase": "fight", + "phase_ticks_remaining": 999840, + "referee": { + "alive": true, + "facing_x": -565, + "facing_y": 847, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": -6, + "x": 128, + "y": 126 + }, "result": null, "round_number": 1, - "tick": 287 + "tick": 280 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 287 + "tick": 280 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "dd059314114e92be6546651e0f902fd7a71ce11dc4f2cf7ae2069ae20e538947", + "checksum": "01eb0dab30b243a41000a2ed31c44cb0e03225d3161cd40c259b5edb69639d70", "events": [], "fighters": [ { @@ -39090,29 +44215,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, + "facing": -1, + "facing_x": -926, + "facing_y": -377, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 125, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -39127,11 +44253,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 4, + "velocity_y": -9, "warnings": 0, - "x": -362, - "y": 363 + "x": 161, + "y": 184 }, { "action": null, @@ -39151,23 +44277,24 @@ "corner_choice": null, "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, + "facing": 1, + "facing_x": 603, + "facing_y": 797, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 326, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -39177,37 +44304,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 132, + "phase": "fight", + "phase_ticks_remaining": 999839, + "referee": { + "alive": true, + "facing_x": -510, + "facing_y": 872, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": -6, + "x": 128, + "y": 120 + }, "result": null, "round_number": 1, - "tick": 288 + "tick": 281 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 288 + "tick": 281 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "72b45df39505ae3353ee432858ea6a2cd8a7fc6e2ca78db4d79e7bc73296565e", + "checksum": "9da55e0ff96d613f402eb1abbf0e15c9c2e872e0e48c788f83598ec11bfd1624", "events": [], "fighters": [ { @@ -39224,29 +44371,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, + "facing": -1, + "facing_x": -958, + "facing_y": -297, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 126, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -39261,11 +44409,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 3, + "velocity_y": -9, "warnings": 0, - "x": -362, - "y": 363 + "x": 164, + "y": 174 }, { "action": null, @@ -39285,23 +44433,24 @@ "corner_choice": null, "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, + "facing": 1, + "facing_x": 653, + "facing_y": 757, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 327, "queued_actions": 0, "stamina": 1000, "stance": "orthodox", @@ -39311,38 +44460,82 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 131, + "phase": "fight", + "phase_ticks_remaining": 999838, + "referee": { + "alive": true, + "facing_x": -404, + "facing_y": 936, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -1, + "velocity_y": -6, + "x": 125, + "y": 112 + }, "result": null, "round_number": 1, - "tick": 289 + "tick": 282 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 289 + "tick": 282 }, { "attack_one": null, - "attack_two": null, + "attack_two": { + "active": 2, + "age": 0, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": false, + "startup": 4, + "target": "head" + }, "snapshot": { "payload": { - "checksum": "ee830a461e627eca1395c5581156563c8fcf335395466a0fe840d30bd441b854", - "events": [], + "checksum": "56ae99b21c4e8df2fe085a6d6a8f385a722c055e7f364f3e2df5c64e6135259a", + "events": [ + { + "action_id": "two@283", + "actor_id": "two", + "amount": 0, + "blood": 0, + "detail": "right:straight:head", + "direction": 0, + "event_id": 20, + "kind": "punch_start", + "target_id": null, + "tick": 283 + } + ], "fighters": [ { "action": null, @@ -39358,29 +44551,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, + "facing": -1, + "facing_x": -975, + "facing_y": -223, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 127, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -39395,49 +44589,50 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 3, + "velocity_y": -9, "warnings": 0, - "x": -362, - "y": 363 + "x": 166, + "y": 165 }, { - "action": null, - "action_active_ticks": 0, + "action": "straight", + "action_active_ticks": 2, "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action_hand": "right", + "action_id": "two@283", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 283, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 1000, + "conditioning": 998, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, + "facing": 1, + "facing_x": 700, + "facing_y": 714, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 327, "queued_actions": 0, - "stamina": 1000, + "stamina": 958, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -39445,37 +44640,68 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 130, + "phase": "fight", + "phase_ticks_remaining": 999837, + "referee": { + "alive": true, + "facing_x": -354, + "facing_y": 937, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -1, + "velocity_y": -6, + "x": 124, + "y": 106 + }, "result": null, "round_number": 1, - "tick": 290 + "tick": 283 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 290 + "tick": 283 }, { "attack_one": null, - "attack_two": null, + "attack_two": { + "active": 2, + "age": 1, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": false, + "startup": 4, + "target": "head" + }, "snapshot": { "payload": { - "checksum": "bbcfe44c64bdc49ac4cda1bb68a0dd93066140856a5a64ebd8fa02f4c2a6fc9b", + "checksum": "b1964c482ddf8f2c5e65ee858f573b516f85e2b5f33a320e8247332066d0fc5b", "events": [], "fighters": [ { @@ -39492,29 +44718,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, + "facing": -1, + "facing_x": -991, + "facing_y": -140, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 128, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -39529,49 +44756,50 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 2, + "velocity_y": -9, "warnings": 0, - "x": -362, - "y": 363 + "x": 168, + "y": 155 }, { - "action": null, - "action_active_ticks": 0, + "action": "straight", + "action_active_ticks": 2, "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action_hand": "right", + "action_id": "two@283", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 283, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 1000, + "conditioning": 998, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, + "facing": 1, + "facing_x": 700, + "facing_y": 714, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 327, "queued_actions": 0, - "stamina": 1000, + "stamina": 960, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -39579,37 +44807,68 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 129, + "phase": "fight", + "phase_ticks_remaining": 999836, + "referee": { + "alive": true, + "facing_x": -250, + "facing_y": 979, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -2, + "velocity_y": -5, + "x": 120, + "y": 99 + }, "result": null, "round_number": 1, - "tick": 291 + "tick": 284 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 291 + "tick": 284 }, { "attack_one": null, - "attack_two": null, + "attack_two": { + "active": 2, + "age": 2, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": false, + "startup": 4, + "target": "head" + }, "snapshot": { "payload": { - "checksum": "0ea933c64487309d50a1949947eb94adfa1a279b58c31ad3c47073e938d3feee", + "checksum": "2a75ec6bce6a263d5473b144c5ff4bcff47098a7bfe0383dc7be3f96a53e9b67", "events": [], "fighters": [ { @@ -39626,29 +44885,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, + "facing": -1, + "facing_x": -1000, + "facing_y": -57, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 129, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -39663,49 +44923,50 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": 1, + "velocity_y": -9, "warnings": 0, - "x": -362, - "y": 363 + "x": 169, + "y": 145 }, { - "action": null, - "action_active_ticks": 0, + "action": "straight", + "action_active_ticks": 2, "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action_hand": "right", + "action_id": "two@283", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 283, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 1000, + "conditioning": 998, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, + "facing": 1, + "facing_x": 700, + "facing_y": 714, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 327, "queued_actions": 0, - "stamina": 1000, + "stamina": 962, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -39713,37 +44974,68 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 128, + "phase": "fight", + "phase_ticks_remaining": 999835, + "referee": { + "alive": true, + "facing_x": -208, + "facing_y": 979, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -2, + "velocity_y": -5, + "x": 118, + "y": 94 + }, "result": null, "round_number": 1, - "tick": 292 + "tick": 285 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 292 + "tick": 285 }, { "attack_one": null, - "attack_two": null, + "attack_two": { + "active": 2, + "age": 3, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": false, + "startup": 4, + "target": "head" + }, "snapshot": { "payload": { - "checksum": "4c0605317dc89824d77868b74fa1d8c761798501a7d76a287f28fdacde41bb6b", + "checksum": "b63fd41d125e611392e1c48e906f3f296611b94ba55cf241171454520308ecb0", "events": [], "fighters": [ { @@ -39760,29 +45052,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, + "facing": -1, + "facing_x": -1000, + "facing_y": 24, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 130, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -39798,48 +45091,49 @@ "swelling": 0 }, "velocity_x": 0, - "velocity_y": 0, + "velocity_y": -10, "warnings": 0, - "x": -362, - "y": 363 + "x": 170, + "y": 135 }, { - "action": null, - "action_active_ticks": 0, + "action": "straight", + "action_active_ticks": 2, "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action_hand": "right", + "action_id": "two@283", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 283, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 1000, + "conditioning": 998, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, + "facing": 1, + "facing_x": 700, + "facing_y": 714, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, "maximum_stamina": 1000, "player_id": "two", - "poise": 300, + "poise": 327, "queued_actions": 0, - "stamina": 1000, + "stamina": 964, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -39847,38 +45141,82 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 127, + "phase": "fight", + "phase_ticks_remaining": 999834, + "referee": { + "alive": true, + "facing_x": -102, + "facing_y": 1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -2, + "velocity_y": -5, + "x": 114, + "y": 87 + }, "result": null, "round_number": 1, - "tick": 293 + "tick": 286 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 293 + "tick": 286 }, { "attack_one": null, - "attack_two": null, + "attack_two": { + "active": 2, + "age": 4, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": true, + "startup": 4, + "target": "head" + }, "snapshot": { "payload": { - "checksum": "2e3494e2f3b7fe2fff08e145817b1f419e1253777a339d30252b1a4904f22bc3", - "events": [], + "checksum": "dba0239888dcf28374d056a1a2c1112a6eb5362de4bc5bb63ad894b062e606f7", + "events": [ + { + "action_id": "two@283", + "actor_id": "two", + "amount": 16, + "blood": 0, + "detail": "", + "direction": 0, + "event_id": 21, + "kind": "whiff", + "target_id": "one", + "tick": 287 + } + ], "fighters": [ { "action": null, @@ -39894,29 +45232,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, + "facing": -1, + "facing_x": -1000, + "facing_y": 106, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 131, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -39931,49 +45270,50 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -1, + "velocity_y": -9, "warnings": 0, - "x": -362, - "y": 363 + "x": 170, + "y": 125 }, { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 287, + "action_hand": "right", + "action_id": "two@283", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 283, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 1000, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, + "facing": 1, + "facing_x": 700, + "facing_y": 714, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 1000, + "maximum_stamina": 999, "player_id": "two", - "poise": 300, + "poise": 327, "queued_actions": 0, - "stamina": 1000, + "stamina": 950, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -39981,37 +45321,68 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 126, + "phase": "fight", + "phase_ticks_remaining": 999833, + "referee": { + "alive": true, + "facing_x": -40, + "facing_y": 1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -3, + "velocity_y": -5, + "x": 111, + "y": 82 + }, "result": null, "round_number": 1, - "tick": 294 + "tick": 287 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 294 + "tick": 287 }, { "attack_one": null, - "attack_two": null, + "attack_two": { + "active": 2, + "age": 5, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": true, + "startup": 4, + "target": "head" + }, "snapshot": { "payload": { - "checksum": "a2402aa21feb9ea55146ddb65da62912ace0aed7f70ead2b0d5e592cf0654de8", + "checksum": "1f841b9a12cc0b324669fe18d2d8882d8a4ddbcc3bbcaebf48db0dd393968262", "events": [], "fighters": [ { @@ -40028,29 +45399,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, + "facing": -1, + "facing_x": -983, + "facing_y": 188, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 132, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -40065,49 +45437,50 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -2, + "velocity_y": -9, "warnings": 0, - "x": -362, - "y": 363 + "x": 168, + "y": 115 }, { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 287, + "action_hand": "right", + "action_id": "two@283", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 283, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 1000, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, + "facing": 1, + "facing_x": 700, + "facing_y": 714, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 1000, + "maximum_stamina": 999, "player_id": "two", - "poise": 300, + "poise": 327, "queued_actions": 0, - "stamina": 1000, + "stamina": 952, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -40115,37 +45488,68 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 125, + "phase": "fight", + "phase_ticks_remaining": 999832, + "referee": { + "alive": true, + "facing_x": 40, + "facing_y": 1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": -4, + "x": 106, + "y": 77 + }, "result": null, "round_number": 1, - "tick": 295 + "tick": 288 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 295 + "tick": 288 }, { "attack_one": null, - "attack_two": null, + "attack_two": { + "active": 2, + "age": 6, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": true, + "startup": 4, + "target": "head" + }, "snapshot": { "payload": { - "checksum": "287c28aab6fb2fd31d6a932184e0a8d26811c45ef699e2889d33d3e9ae3f39d5", + "checksum": "79b153be15e488e964e5fd5679a69cd812a6729b5039aeef54b3069942964d61", "events": [], "fighters": [ { @@ -40162,29 +45566,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, + "facing": -1, + "facing_x": -967, + "facing_y": 262, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 133, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -40199,49 +45604,50 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -3, + "velocity_y": -9, "warnings": 0, - "x": -362, - "y": 363 + "x": 166, + "y": 106 }, { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 287, + "action_hand": "right", + "action_id": "two@283", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 283, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 1000, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, + "facing": 1, + "facing_x": 700, + "facing_y": 714, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 1000, + "maximum_stamina": 999, "player_id": "two", - "poise": 300, + "poise": 327, "queued_actions": 0, - "stamina": 1000, + "stamina": 954, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -40249,37 +45655,68 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 124, + "phase": "fight", + "phase_ticks_remaining": 999831, + "referee": { + "alive": true, + "facing_x": 102, + "facing_y": 1000, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": -4, + "x": 102, + "y": 73 + }, "result": null, "round_number": 1, - "tick": 296 + "tick": 289 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 296 + "tick": 289 }, { "attack_one": null, - "attack_two": null, + "attack_two": { + "active": 2, + "age": 7, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": true, + "startup": 4, + "target": "head" + }, "snapshot": { "payload": { - "checksum": "33263c73a4607fe2f28408388d211d3c07c19d14e2582356611fdc4245a14484", + "checksum": "214aa17a50123655d9340f5e63e259690fa0a98586edafb4dbc375dbda0ab490", "events": [], "fighters": [ { @@ -40296,29 +45733,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, + "facing": -1, + "facing_x": -942, + "facing_y": 347, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 134, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -40333,49 +45771,50 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -3, + "velocity_y": -9, "warnings": 0, - "x": -362, - "y": 363 + "x": 162, + "y": 96 }, { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 287, + "action_hand": "right", + "action_id": "two@283", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 283, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 1000, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, + "facing": 1, + "facing_x": 744, + "facing_y": 668, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 1000, + "maximum_stamina": 999, "player_id": "two", - "poise": 300, + "poise": 327, "queued_actions": 0, - "stamina": 1000, + "stamina": 956, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -40383,37 +45822,68 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 123, + "phase": "fight", + "phase_ticks_remaining": 999830, + "referee": { + "alive": true, + "facing_x": 200, + "facing_y": 980, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": -3, + "x": 95, + "y": 68 + }, "result": null, "round_number": 1, - "tick": 297 + "tick": 290 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 297 + "tick": 290 }, { "attack_one": null, - "attack_two": null, + "attack_two": { + "active": 2, + "age": 8, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": true, + "startup": 4, + "target": "head" + }, "snapshot": { "payload": { - "checksum": "f3fdd9a3d542c54c2d7207b36d67ebe11e2e00bcdc0b0cb8c4003bbe8055a1e5", + "checksum": "5d36515d69a568e4b9154fedeba4a578b8b5e05670c7ad87705fe609d229b4b5", "events": [], "fighters": [ { @@ -40430,29 +45900,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, + "facing": -1, + "facing_x": -909, + "facing_y": 418, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 135, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -40467,49 +45938,50 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -4, + "velocity_y": -9, "warnings": 0, - "x": -362, - "y": 363 + "x": 159, + "y": 87 }, { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 287, + "action_hand": "right", + "action_id": "two@283", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 283, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 1000, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, + "facing": 1, + "facing_x": 785, + "facing_y": 619, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 1000, + "maximum_stamina": 999, "player_id": "two", - "poise": 300, + "poise": 327, "queued_actions": 0, - "stamina": 1000, + "stamina": 958, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -40517,37 +45989,68 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 122, + "phase": "fight", + "phase_ticks_remaining": 999829, + "referee": { + "alive": true, + "facing_x": 270, + "facing_y": 979, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -5, + "velocity_y": -3, + "x": 90, + "y": 65 + }, "result": null, "round_number": 1, - "tick": 298 + "tick": 291 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 298 + "tick": 291 }, { "attack_one": null, - "attack_two": null, + "attack_two": { + "active": 2, + "age": 9, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": true, + "startup": 4, + "target": "head" + }, "snapshot": { "payload": { - "checksum": "0135010a8873833df89a166896b64c77ec81cac14f6a1c54d4337496d019952a", + "checksum": "26a5dc8e5f7002ed32a27bd5dd2ad42245b1249f46dcded2075b70e59bf8de83", "events": [], "fighters": [ { @@ -40564,29 +46067,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, + "facing": -1, + "facing_x": -876, + "facing_y": 495, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 136, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -40601,49 +46105,50 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -5, + "velocity_y": -8, "warnings": 0, - "x": -362, - "y": 363 + "x": 154, + "y": 78 }, { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 287, + "action_hand": "right", + "action_id": "two@283", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 283, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 1000, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, + "facing": 1, + "facing_x": 823, + "facing_y": 568, "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 1000, + "maximum_stamina": 999, "player_id": "two", - "poise": 300, + "poise": 327, "queued_actions": 0, - "stamina": 1000, + "stamina": 960, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -40651,51 +46156,69 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 121, + "phase": "fight", + "phase_ticks_remaining": 999828, + "referee": { + "alive": true, + "facing_x": 360, + "facing_y": 940, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -5, + "velocity_y": -3, + "x": 83, + "y": 61 + }, "result": null, "round_number": 1, - "tick": 299 + "tick": 292 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 299 + "tick": 292 }, { "attack_one": null, - "attack_two": null, + "attack_two": { + "active": 2, + "age": 10, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": true, + "startup": 4, + "target": "head" + }, "snapshot": { "payload": { - "checksum": "460e519e79285df2f5b21813c0be7a0334d8f93a66de6c1be67bd89ad75b26d2", - "events": [ - { - "action_id": null, - "actor_id": null, - "amount": 6, - "blood": 0, - "detail": "", - "direction": 0, - "event_id": 19, - "kind": "count", - "target_id": "two", - "tick": 300 - } - ], + "checksum": "ba7a761ae0a4d38e4b3f01ce6526ed673584233ee73156abc2c197baf12ba095", + "events": [], "fighters": [ { "action": null, @@ -40711,29 +46234,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 6, + "facing": -1, + "facing_x": -834, + "facing_y": 561, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 137, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -40748,49 +46272,50 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -5, + "velocity_y": -8, "warnings": 0, - "x": -362, - "y": 363 + "x": 149, + "y": 70 }, { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 287, + "action_hand": "right", + "action_id": "two@283", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 283, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 1000, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 6, + "facing": 1, + "facing_x": 858, + "facing_y": 514, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 1000, + "maximum_stamina": 999, "player_id": "two", - "poise": 300, + "poise": 327, "queued_actions": 0, - "stamina": 1000, + "stamina": 962, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -40798,37 +46323,68 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 120, + "phase": "fight", + "phase_ticks_remaining": 999827, + "referee": { + "alive": true, + "facing_x": 420, + "facing_y": 920, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -5, + "velocity_y": -2, + "x": 77, + "y": 58 + }, "result": null, "round_number": 1, - "tick": 300 + "tick": 293 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 300 + "tick": 293 }, { "attack_one": null, - "attack_two": null, + "attack_two": { + "active": 2, + "age": 11, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": true, + "startup": 4, + "target": "head" + }, "snapshot": { "payload": { - "checksum": "ba2ac12ca64934da42d7ad449139abe65136f449af7ba8b9473593ec4ff74080", + "checksum": "ced681b069e9b4f133913a6f74ab2fd308e7273afad4953deb8c2b6744ecace5", "events": [], "fighters": [ { @@ -40845,29 +46401,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 6, + "facing": -1, + "facing_x": -778, + "facing_y": 631, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, + "last_input_sequence": 138, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 932, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -40882,49 +46439,50 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -6, + "velocity_y": -8, "warnings": 0, - "x": -362, - "y": 363 + "x": 143, + "y": 61 }, { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 287, + "action_hand": "right", + "action_id": "two@283", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 283, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 1000, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 6, + "facing": 1, + "facing_x": 889, + "facing_y": 458, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, - "guard": 690, + "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 1000, + "maximum_stamina": 999, "player_id": "two", - "poise": 300, + "poise": 327, "queued_actions": 0, - "stamina": 1000, + "stamina": 964, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -40932,37 +46490,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 70, + "head": 42, "left_cut": 0, - "left_eye": 44, + "left_eye": 40, "right_cut": 0, "right_eye": 0, - "swelling": 20 + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 300, - "y": 0 + "x": 48, + "y": 138 } ], - "phase": "knockdown", - "phase_ticks_remaining": 119, + "phase": "fight", + "phase_ticks_remaining": 999826, + "referee": { + "alive": true, + "facing_x": 489, + "facing_y": 877, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -5, + "velocity_y": -1, + "x": 71, + "y": 56 + }, "result": null, "round_number": 1, - "tick": 301 + "tick": 294 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 301 + "tick": 294 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "faddb8218b3e815480aa2be5e3b3ee5aa08a294df8a1e5227c61140a33f6e756", + "checksum": "4a60321898e1e95f6acc63a16e63fca0955b5dd4d70045e4b9f8fb3649057199", "events": [], "fighters": [ { @@ -40979,45670 +46557,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 990, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 6, + "facing": -1, + "facing_x": -727, + "facing_y": 694, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 118, - "result": null, - "round_number": 1, - "tick": 302 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 302 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "175b6a2c13b191cd8ca9eea0ba4a975d2090e668ee5994045ed4935f3a7d1b73", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 117, - "result": null, - "round_number": 1, - "tick": 303 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 303 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "4f495d9ff2f459cbf307f8fa1b7085eb83aff9dd154d8bccec0d6631c34700cf", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 116, - "result": null, - "round_number": 1, - "tick": 304 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 304 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "fe6814ddd79b73ba021c146aeac25e72430b1e9ab092aa7a0c34ed7203469a63", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 115, - "result": null, - "round_number": 1, - "tick": 305 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 305 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "120248ea332dbdf6d7c424f118783aefab1736d2b267c406ac2a920e96a0c0a0", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 114, - "result": null, - "round_number": 1, - "tick": 306 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 306 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "08bd625bb793f3e3967ab720cba1d2734ed38c0bda6bd6a3cf76ee338cafe7b1", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 113, - "result": null, - "round_number": 1, - "tick": 307 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 307 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "07ddd2f2c670825c6ea929cd99222a279de8edd29cb9f1c85f3556c9ac1d6ddc", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 112, - "result": null, - "round_number": 1, - "tick": 308 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 308 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "0b7c98bbee9ece69c7c444817038c8ea97735eecc27e06b8eda18849712d51e6", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 111, - "result": null, - "round_number": 1, - "tick": 309 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 309 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "13443923482c4a9ac3f1bc00cc29ade29a66925364124be9d313dd5ce3008c38", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 110, - "result": null, - "round_number": 1, - "tick": 310 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 310 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "6c943dce70e24f63de20d30c43e6c0293179ff26750edb5d76db91cbdcea9094", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 109, - "result": null, - "round_number": 1, - "tick": 311 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 311 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "ee8a40e9cf52f2d907888a94b1c560ae6882a7c62ef80d3608e375bbd37038a8", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 108, - "result": null, - "round_number": 1, - "tick": 312 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 312 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "f4fa6b4f7e9ccb31b5d0609e3ff0ecd9b44d54a8222ffc08b87bb1a86ec13c80", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 107, - "result": null, - "round_number": 1, - "tick": 313 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 313 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "6e8c6ed64e6f4e7b074bc94ce5c37e1fd9ca7a1e50b9129b155678e981f79fa3", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 106, - "result": null, - "round_number": 1, - "tick": 314 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 314 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "870bf34cc4ecaee0570455949614866437a0aedcbf73a3701e847e4aeaeddbfd", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 105, - "result": null, - "round_number": 1, - "tick": 315 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 315 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "3cbf2813eb3812c65723697e0275167a9d0323a8af8843f935e1fad4b8c5c84a", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 104, - "result": null, - "round_number": 1, - "tick": 316 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 316 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "4c520479a72bc0efaabb489487311f657758d340d73596d6c43aa4ff5790bbb3", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 103, - "result": null, - "round_number": 1, - "tick": 317 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 317 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "2892b7bd943c0b414020c1ed9ef32e5474295fc04d4f806cce170ce28c5c9532", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 102, - "result": null, - "round_number": 1, - "tick": 318 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 318 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "e6168e2e27468ca3d5ef852cd1ffe368e2b30c64c2bcb6808e3983b7972e57ec", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 101, - "result": null, - "round_number": 1, - "tick": 319 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 319 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "b4605488f7390fed09991d56b1a89d3984fcce043833d388366cf5725dcb8fb3", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 100, - "result": null, - "round_number": 1, - "tick": 320 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 320 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "83907a4daec8c3fd3309c36b30786cfc3ca181b9d1a38554ecf7251972437018", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 99, - "result": null, - "round_number": 1, - "tick": 321 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 321 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "121152006820811508edaec665395d839ff083bac65a2c1d05d10d7e3b365e4f", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 98, - "result": null, - "round_number": 1, - "tick": 322 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 322 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "115446924c4e1cffca399ee29135fd9edbffc92ae2b803d8054e6300cb32014d", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 97, - "result": null, - "round_number": 1, - "tick": 323 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 323 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "547044cd2694503a22b99f35225b765418cb0854f8b9211323b23c5cab5d114e", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 96, - "result": null, - "round_number": 1, - "tick": 324 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 324 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "5742c8738d5c3fc22278ad5cd6209a0d760c03f237805e14dcaf688fabef06f6", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 95, - "result": null, - "round_number": 1, - "tick": 325 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 325 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "dae9efe6bced9c8d115b2d87d5fc51b4a73a9f923d468b7d33ca938dd714cc06", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 94, - "result": null, - "round_number": 1, - "tick": 326 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 326 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "09ae5cfe92bf6f01225ae887834fbd2224b1a857dff8745ca29c649ee649b87b", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 93, - "result": null, - "round_number": 1, - "tick": 327 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 327 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "1bc94f389434afef99a399c017c19b3b0d6a69cf1a4134bd0fd9841a48ef1b47", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 92, - "result": null, - "round_number": 1, - "tick": 328 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 328 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "a568fe81bbd683e6353eca6fea2c4df71420c6c830c91322ea557976956ae917", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 6, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 91, - "result": null, - "round_number": 1, - "tick": 329 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 329 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "af8fd005d129d9214150aa936b24f506548aec212f57750199aaafa08c405381", - "events": [ - { - "action_id": null, - "actor_id": null, - "amount": 7, - "blood": 0, - "detail": "", - "direction": 0, - "event_id": 20, - "kind": "count", - "target_id": "two", - "tick": 330 - } - ], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 90, - "result": null, - "round_number": 1, - "tick": 330 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 330 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "13c464a3001ae295f67d353286f514b794307a5628109d81f368adf6a9f9892f", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 89, - "result": null, - "round_number": 1, - "tick": 331 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 331 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "ca6db413657a10765883177932aad17c67d4a0f83f16adbe7ea66674ccd350d2", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 88, - "result": null, - "round_number": 1, - "tick": 332 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 332 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "8c76bb196149428919dd74780c00bfa6d81689da9957e7c25e7297eaf32aeb60", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 87, - "result": null, - "round_number": 1, - "tick": 333 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 333 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "7271b278516f06cb409fec5919263bcb51ecb5712821fcef1b3042ee782349b6", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 86, - "result": null, - "round_number": 1, - "tick": 334 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 334 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "3de71d19e9f71ee5c51c109a47cb32d7dea9666b6cd9618331ef9e6f924181b8", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 85, - "result": null, - "round_number": 1, - "tick": 335 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 335 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "2ebf2e2f1dbcfa51288258bbdab2dde8719fa8359ff917e87d972aa4f2814619", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 84, - "result": null, - "round_number": 1, - "tick": 336 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 336 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "065c997cf3387723ae632eac82eb63c85b70415f592657db456c9c05e040b6bf", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 83, - "result": null, - "round_number": 1, - "tick": 337 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 337 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "38eb6c4c054a525b13527967ae38574b95d5675adf4eee79df14d32cb8f2672d", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 82, - "result": null, - "round_number": 1, - "tick": 338 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 338 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "67b70d2187f8a4f991ab7b8423f9aad083792770d04b7bab3616e8b16dbe2fdb", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 81, - "result": null, - "round_number": 1, - "tick": 339 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 339 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "5c79719133166a8a598bcd484ec0095e7661862dddd059ed589a092881374f7e", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 80, - "result": null, - "round_number": 1, - "tick": 340 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 340 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "7adfc23d4194ed0d1313de58ce1c3457adae0ed0bac3324e48e7e5b8736c2673", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 79, - "result": null, - "round_number": 1, - "tick": 341 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 341 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "6569d229be9b8f910a6f1fc9cc5d4dd99ef3f6825993664e28a62a9bc19b1b16", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 78, - "result": null, - "round_number": 1, - "tick": 342 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 342 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "2dc9a24a3abfa20779df70474931e62f8a4d55f7fc6d9c5731768fc93e1ec803", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 77, - "result": null, - "round_number": 1, - "tick": 343 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 343 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "90fba9de4feea68cf77a7bda6729024699f561068bb979da15f22eecb45ca5ee", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 76, - "result": null, - "round_number": 1, - "tick": 344 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 344 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "8e54590f07b406b2a764d1d109b52f347656b5c5617c31ab249707f331f07bc8", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 75, - "result": null, - "round_number": 1, - "tick": 345 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 345 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "83c121180342665be2b11de6978c5c0c1ebdb78f205a6398e5934d766d34759c", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 74, - "result": null, - "round_number": 1, - "tick": 346 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 346 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "2fa7113ad232aa6ce05ff488a605aca1e808cba79758444ec95b7b92aeebeca1", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 73, - "result": null, - "round_number": 1, - "tick": 347 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 347 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "67c3309ba659f61a6e95bf1341c48a74ab01c6c1d2dee7466659affba4b6a2f2", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 72, - "result": null, - "round_number": 1, - "tick": 348 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 348 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "e3961829a38664c9afc3a27cffadf3fb4af545471f01edecb9f1bb20612bf913", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 71, - "result": null, - "round_number": 1, - "tick": 349 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 349 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "ad269ba7d5594b7b11a1de50bc28f0e76205cc4134cb6b2b096f7960a4bc86db", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 70, - "result": null, - "round_number": 1, - "tick": 350 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 350 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "059c3b24226edeacca6e33428ba3d21e43a986d18ba70b10a4e2b08597fce06a", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 69, - "result": null, - "round_number": 1, - "tick": 351 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 351 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "6a355275986c350748c40d185cae0bd1a0bcb788e82197d7e9f49275126d240d", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 68, - "result": null, - "round_number": 1, - "tick": 352 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 352 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "e8fdc44b98fd484bd9d955e2df04c1df529d8ceefc968b19b00809f66c6afe5b", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 67, - "result": null, - "round_number": 1, - "tick": 353 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 353 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "1f3b4f64e4bf7bdd98b194cc645ccac683c76fc523b01075079d612c48bbfc15", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 66, - "result": null, - "round_number": 1, - "tick": 354 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 354 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "81b4145758cf4526cc4d64a2eda84cb87465d36e04332069b6b833489edc3f1e", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 65, - "result": null, - "round_number": 1, - "tick": 355 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 355 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "9ca2699486fc5ea9ecf1b14ac79e881c17b422c7215c63af0136c0539a0f0220", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 64, - "result": null, - "round_number": 1, - "tick": 356 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 356 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "58f0cfa2fce5475b436ac440cb499112a730f1d674f1ee8bfa9f9fd4355cfbbe", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 63, - "result": null, - "round_number": 1, - "tick": 357 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 357 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "1c83127ccb4e7da4eba11b0771c2959236a0f8f96904d3c6ff2685fa38d0564b", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 62, - "result": null, - "round_number": 1, - "tick": 358 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 358 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "be96865d491da93fdfdd9589527166ea775bd63ced00dc114a946423dcb2dd2b", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 7, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 61, - "result": null, - "round_number": 1, - "tick": 359 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 359 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "fdc5cab1d7d1248b30276c6b9d61271c1c78081704fe4c12c5b3fd5a2abc9128", - "events": [ - { - "action_id": null, - "actor_id": null, - "amount": 8, - "blood": 0, - "detail": "", - "direction": 0, - "event_id": 21, - "kind": "count", - "target_id": "two", - "tick": 360 - } - ], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 60, - "result": null, - "round_number": 1, - "tick": 360 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 360 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "441a7fb3089eb6c0167e6ba460bbb6a4310a12f79cc89aa4ed255c2f441c398a", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 59, - "result": null, - "round_number": 1, - "tick": 361 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 361 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "0a222540e9785325cccb44de82d9090347c728f9340002b8df6e366e360e1231", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 58, - "result": null, - "round_number": 1, - "tick": 362 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 362 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "957daab7bcea9587baa010a0a8ad3612e3d6362ec59ad5955007b4149d621ff6", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 57, - "result": null, - "round_number": 1, - "tick": 363 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 363 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "b5aaa18e0fcca2ec57c1194ac5deb946f01657c4e3a46d8abacd708714669487", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 56, - "result": null, - "round_number": 1, - "tick": 364 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 364 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "f62a2177c491b529f765f996e4e45cce663aa3b360a8deae319249e8f6654323", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 55, - "result": null, - "round_number": 1, - "tick": 365 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 365 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "6f453959472f16d05a8fb081a78c9c81f01434106943d235218795dca3a2becb", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 54, - "result": null, - "round_number": 1, - "tick": 366 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 366 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "75570967548ee9ea728581319f955ecc86ed6b9b5438ec7e2c3e8532f0e24380", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 53, - "result": null, - "round_number": 1, - "tick": 367 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 367 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "ecf6c67a01c967da05d1d0021f3ced0a69a7bec7819f90b064b4c58617627573", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 52, - "result": null, - "round_number": 1, - "tick": 368 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 368 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "cc860ef791ee93c3ec86f1d91ae135668f6bd71c7c9fe3bd2e3b87ac19326a4e", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 51, - "result": null, - "round_number": 1, - "tick": 369 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 369 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "63d666758fd42c8503887f56086501dcc363415352f768c0128457b957b04dc0", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 50, - "result": null, - "round_number": 1, - "tick": 370 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 370 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "6df02c7428f62718b4d2e15f5a74aa9c5859f102f3f9c277d245dd71fd174f25", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 49, - "result": null, - "round_number": 1, - "tick": 371 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 371 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "68b778e6d069c9d5c2d821cbe1acc79550157d8168607670442f6ac96015bfe2", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 48, - "result": null, - "round_number": 1, - "tick": 372 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 372 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "8192ba9a4cc2368cab2fbb706ee3a709c1dc210828af3cc241b8d3b10e503af5", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 47, - "result": null, - "round_number": 1, - "tick": 373 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 373 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "0c6298ceb65b68dc4856f77e4f13f31daba9567c6806f93224d23a5afca9032f", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 46, - "result": null, - "round_number": 1, - "tick": 374 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 374 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "12116d1707be2cb1b28346a011d3d3242e0997bba6cbd8ed874c66ef5120388c", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 45, - "result": null, - "round_number": 1, - "tick": 375 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 375 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "dbeaf9dc381e79d39027bf60d420b17f11a02f95d7744822cf870a4235b0af3e", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 44, - "result": null, - "round_number": 1, - "tick": 376 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 376 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "4f4aa5222d22a032ff798e0a85197c82bfd79c4bbfe70e363b378bee40900ad3", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 43, - "result": null, - "round_number": 1, - "tick": 377 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 377 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "84ab08d6822c5aed7045bc62a8d7272dcc492327483846e5eaadefcf88370b29", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 42, - "result": null, - "round_number": 1, - "tick": 378 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 378 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "bd228768537658c15a7d7f22c4034371d1c314f3d39b69dd470f0468296a7747", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 41, - "result": null, - "round_number": 1, - "tick": 379 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 379 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "1eb5855beb0b3d280b1eb530c59041a9a14fe6de8d97e139e59a11a595510acb", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 40, - "result": null, - "round_number": 1, - "tick": 380 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 380 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "81d4921c774da7d3386b809aea3b0dd00e56dbcd47c38ee8dda3e0b424254cbf", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 39, - "result": null, - "round_number": 1, - "tick": 381 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 381 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "464127c077cdfd4b7f328be0a984e3a314fb8b6230ccd39de38ebcf5c0aebf89", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 38, - "result": null, - "round_number": 1, - "tick": 382 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 382 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "7b8bbec785191250947ac1a94056595e6ee1ed6cf86fcb35d81ac18b4f9e1671", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 37, - "result": null, - "round_number": 1, - "tick": 383 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 383 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "2bcca6d7f6164e9a59902f44e93defa79f8bf8a538de57d2c791fba86f6c5ebd", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 36, - "result": null, - "round_number": 1, - "tick": 384 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 384 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "931e95d6fb95d1903a7eaf14109457d7dcccda97d6ee1ace806968bfceb9216c", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 35, - "result": null, - "round_number": 1, - "tick": 385 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 385 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "e1e02380e2f7a029d21de64fdccf975546613c8ae642c6b2f8029a035bdf7885", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 34, - "result": null, - "round_number": 1, - "tick": 386 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 386 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "107003b6a11cbb92478044a4ea6da6ac9fa4e90e07fd5ff18b543bea0bb52121", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 33, - "result": null, - "round_number": 1, - "tick": 387 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 387 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "15ebbeaad4a7771768a9ff64c2f302f81eedba9480e91a8ae601714a8a61daa5", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 32, - "result": null, - "round_number": 1, - "tick": 388 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 388 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "d32ff9c86a1d2f8c4cb9e7f41546693052b5e2c65274f71c52f258207f78dc7f", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 31, - "result": null, - "round_number": 1, - "tick": 389 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 389 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "7ce5afaa1dddda0bbb2e83fd1be02f90ec018db5d9fa9b147b81964be70d4d7b", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 30, - "result": null, - "round_number": 1, - "tick": 390 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 390 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "2e9eea693dff854d47279487ff2c53ab062d27629ea024e952f51cf5c97a711b", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 29, - "result": null, - "round_number": 1, - "tick": 391 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 391 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "6400c8db14dd7ce6d9200876aa7604282e024d41cf79a84617531c48e93eb21e", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 28, - "result": null, - "round_number": 1, - "tick": 392 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 392 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "760dbb650621b74cb2132054437321cc85c8ee1637037059bc6fd0ec1a40cd11", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 27, - "result": null, - "round_number": 1, - "tick": 393 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 393 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "16486b2e92116dbf35c5565e3addf6abacdc0decf94852d2dcb9ed1eb33e6c6e", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 26, - "result": null, - "round_number": 1, - "tick": 394 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 394 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "878a73c38f54c603853b96537f6fc632670408b407974d10faff61bf1aa257fd", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 25, - "result": null, - "round_number": 1, - "tick": 395 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 395 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "084054a168aee588139bf93f1d07cc77a4df1df912da8807bda400efd18904ca", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 24, - "result": null, - "round_number": 1, - "tick": 396 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 396 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "37ece5761cf4f6d536bbc5a3502811c9412ad4dffdeae7e4e2f5bd96d5a034b2", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 23, - "result": null, - "round_number": 1, - "tick": 397 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 397 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "5c043135ca5bccc8a0424bc45ff65b3d601b210800578e6c18c6fd7667718183", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 22, - "result": null, - "round_number": 1, - "tick": 398 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 398 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "72aa03144fbce55c2004dd1a3a1d5a4d8864d7564afb9def8f266bd020497572", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 21, - "result": null, - "round_number": 1, - "tick": 399 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 399 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "c6c7b8f1c0371bf0efa66f11280d8ea8b46a5072c1c3d09a6c6091b7e63c94ca", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 20, - "result": null, - "round_number": 1, - "tick": 400 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 400 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "d0684948fe63988db33074aecff2bd50fc343150a23648a86c5b8b6ddf1124a7", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 19, - "result": null, - "round_number": 1, - "tick": 401 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 401 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "5ff07b941242687d1e116af66adc85c243da5900717f47be6581f5ad7852b099", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 18, - "result": null, - "round_number": 1, - "tick": 402 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 402 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "a7015a6ca340d7de9e302a4f0a504b1009720563a54ff06751e51db8bbf05a5d", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 17, - "result": null, - "round_number": 1, - "tick": 403 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 403 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "895f16130ca14159f88a2c571dc4987aa0a16e14f24d242bee5c8748f994379f", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 16, - "result": null, - "round_number": 1, - "tick": 404 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 404 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "64c375bacf521d5d534e7d6f67008fd6f59b67f0333ea05a93e645afc24e20bd", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 15, - "result": null, - "round_number": 1, - "tick": 405 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 405 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "97c4037e92d518e4eb4bb83523b13bf68744ef803dcbf5093d800e2414bc7329", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 14, - "result": null, - "round_number": 1, - "tick": 406 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 406 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "8b4a6daa3c364c79c98a9bfc06f2631ff680864d071430d905e3dce485239545", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 13, - "result": null, - "round_number": 1, - "tick": 407 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 407 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "773cdf287cf2f45d815503a4886fe6a5aabb40fad1deee9238fc607175580473", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 12, - "result": null, - "round_number": 1, - "tick": 408 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 408 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "c56be768b50a02904c7382e6547c8ddf228eba4cf4d4e63f4cf3c3fce9074f1e", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 11, - "result": null, - "round_number": 1, - "tick": 409 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 409 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "1671a3cf8581e7602a209f731c8d9aac68eca0e7df6a1efa6449463bbabedd96", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 10, - "result": null, - "round_number": 1, - "tick": 410 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 410 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "1270b471596269cbc0f189fc07134551838c15c16fa0e5e602de8cfa2cf14fd8", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 9, - "result": null, - "round_number": 1, - "tick": 411 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 411 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "8c45b9ff5b0265c70c2f5dee20df0e5a94611ddb02b2d33cdbca5f04f095f849", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 8, - "result": null, - "round_number": 1, - "tick": 412 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 412 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "e2fd5d5d0e114bb2d18f6b233397aff0f6b1b07355b91f6c170fe19694fa4e75", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 7, - "result": null, - "round_number": 1, - "tick": 413 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 413 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "e0fd739737a4c4ec9b0dcd0f1c9977cf7ecb25593eee3829f365ed81e184f2a5", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 6, - "result": null, - "round_number": 1, - "tick": 414 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 414 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "aab7210092621c4cc1c524c81359a6402c95d1e90e66769e16e1636c53b6b954", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 5, - "result": null, - "round_number": 1, - "tick": 415 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 415 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "6042f9bf81076dc86aa8efddcc0d4196f158e70de94d88f02296e2edd17ca3c0", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 4, - "result": null, - "round_number": 1, - "tick": 416 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 416 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "46b8553794c6a610c3eb88a336ac3790f5e11fadf34902072b022e30cf698e8c", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 3, - "result": null, - "round_number": 1, - "tick": 417 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 417 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "39c68e143fd3a7e9d6d4d1258923cecae9704a5a3047bb0ce8cc50f909e5389a", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 2, - "result": null, - "round_number": 1, - "tick": 418 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 418 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "00f70b49c669f763417b10a42347d07e4eb11daba355583abfe8b763f40834ca", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "knockdown", - "phase_ticks_remaining": 1, - "result": null, - "round_number": 1, - "tick": 419 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 419 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "712d80bf56ca7d7f4df1e9637d6a64f81d88d170914dafbcca2b65b09957ee34", - "events": [ - { - "action_id": null, - "actor_id": null, - "amount": 0, - "blood": 0, - "detail": "", - "direction": 0, - "event_id": 22, - "kind": "box", - "target_id": "two", - "tick": 420 - } - ], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 20, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999880, - "result": null, - "round_number": 1, - "tick": 420 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 420 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "4b29ea0f3e913b99ea2455e171a595b9eaf6d4e679fd03ed0c517ccee9970f0c", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 84, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 936, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": -362, - "y": 363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 19, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 300, - "y": 0 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999879, - "result": null, - "round_number": 1, - "tick": 421 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 421 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "ff9c110b590c737676c5a1027fba4c93a4c520983eb47d8e184333e0e9e9765d", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -482, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 85, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 939, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 3, - "velocity_y": -2, - "warnings": 0, - "x": -359, - "y": 362 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 18, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -2, - "velocity_y": 1, - "warnings": 0, - "x": 298, - "y": 1 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999878, - "result": null, - "round_number": 1, - "tick": 422 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 422 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "762e19b1a906cebe4bbebc64809155555087b8b8859d1e00b2709254551532ac", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 86, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 942, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 5, - "velocity_y": -3, - "warnings": 0, - "x": -355, - "y": 359 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 17, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -3, - "velocity_y": 2, - "warnings": 0, - "x": 295, - "y": 2 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999877, - "result": null, - "round_number": 1, - "tick": 423 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 423 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "cfbd68fa40d504150e632c336dce46da2a9adb1aa528637dcf36b18efc549e73", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -482, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 87, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 945, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 5, - "velocity_y": -3, - "warnings": 0, - "x": -349, - "y": 356 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 16, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -4, - "velocity_y": 2, - "warnings": 0, - "x": 292, - "y": 4 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999876, - "result": null, - "round_number": 1, - "tick": 424 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 424 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "0bbd4de3921fbf05284f6292a56d59f38924b1166b4445027aa20197ce8a9224", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 88, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 948, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -344, - "y": 353 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 15, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -4, - "velocity_y": 2, - "warnings": 0, - "x": 288, - "y": 7 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999875, - "result": null, - "round_number": 1, - "tick": 425 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 425 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "5e012e83703284714a31d2f5224bbc98294053bb9e28b8fbab1cb00c49a0894a", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 89, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 951, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -338, - "y": 350 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 480, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 14, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -4, - "velocity_y": 2, - "warnings": 0, - "x": 284, - "y": 9 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999874, - "result": null, - "round_number": 1, - "tick": 426 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 426 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "5f3bf340c1f1afe7c045562e75c2814b9b6b0de9a63d497d0b4cad8853662a55", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 90, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 954, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -332, - "y": 347 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 13, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -4, - "velocity_y": 2, - "warnings": 0, - "x": 279, - "y": 11 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999873, - "result": null, - "round_number": 1, - "tick": 427 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 427 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "ee5fb3b066b1c6388a438e8940859cd9ab8bb0ae27b88374812f21b74cd96efa", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 876, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 91, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 957, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -326, - "y": 343 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -876, - "facing_y": 482, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 12, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -4, - "velocity_y": 2, - "warnings": 0, - "x": 275, - "y": 13 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999872, - "result": null, - "round_number": 1, - "tick": 428 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 428 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "0ca656d93c3d7d6c5fb1fc34e39af609c62b5e279572555d49e72f0fb836942b", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -482, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 92, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 960, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -320, - "y": 340 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -878, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 11, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -4, - "velocity_y": 2, - "warnings": 0, - "x": 271, - "y": 16 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999871, - "result": null, - "round_number": 1, - "tick": 429 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 429 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "cb2767c0ac6128869b3d8226b38c3a01fc0635c696883095c58e0b6d6786c4bc", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 876, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 93, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 963, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -313, - "y": 337 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 10, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -4, - "velocity_y": 2, - "warnings": 0, - "x": 267, - "y": 18 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999870, - "result": null, - "round_number": 1, - "tick": 430 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 430 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "5979d409f4c708174cceb9955e4c56800144ea242c143b29fc63023a1103a41f", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 94, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 966, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -307, - "y": 333 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -876, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 9, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -4, - "velocity_y": 2, - "warnings": 0, - "x": 263, - "y": 20 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999869, - "result": null, - "round_number": 1, - "tick": 431 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 431 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "fea0ec718da55297c060c8032aa8206917aff021892a781e0378f94b96234bfa", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -482, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 95, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 969, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -301, - "y": 330 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 8, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -4, - "velocity_y": 2, - "warnings": 0, - "x": 258, - "y": 23 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999868, - "result": null, - "round_number": 1, - "tick": 432 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 432 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "66ed85129a6bf8f365c811923e21f13171bffa3450882a2083ad7f2efae35bbb", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -480, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 96, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 972, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -295, - "y": 326 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -876, - "facing_y": 480, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 7, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -4, - "velocity_y": 2, - "warnings": 0, - "x": 254, - "y": 25 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999867, - "result": null, - "round_number": 1, - "tick": 433 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 433 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "e4963dff94f94a944fcb48cf01ea82cc87392506ba084f2453eeae796a90d0bf", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 97, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 975, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -289, - "y": 323 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 6, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -4, - "velocity_y": 2, - "warnings": 0, - "x": 250, - "y": 27 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999866, - "result": null, - "round_number": 1, - "tick": 434 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 434 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "248b859ea2fdd3f9de7d5a66f775a372d4d3ca68e0243b2b27982eaaaee9817e", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 876, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 98, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 978, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -283, - "y": 320 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 482, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 5, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -4, - "velocity_y": 2, - "warnings": 0, - "x": 246, - "y": 29 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999865, - "result": null, - "round_number": 1, - "tick": 435 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 435 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "7143a2db4325417a108d38d8c66dbb1dd67e665b93a0e3885899a6983cd2d814", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 99, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 981, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -277, - "y": 316 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 480, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 4, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -4, - "velocity_y": 2, - "warnings": 0, - "x": 242, - "y": 32 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999864, - "result": null, - "round_number": 1, - "tick": 436 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 436 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "ca15cb59d4adf29aadf96e9378383620314e3e593c090ac7166998eb905ff497", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 878, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 100, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 984, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -271, - "y": 313 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 480, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 3, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -4, - "velocity_y": 2, - "warnings": 0, - "x": 237, - "y": 34 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999863, - "result": null, - "round_number": 1, - "tick": 437 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 437 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "4bad5c0a308c5f1b14a5fc8be6698c4481c9c2f5121ce87b41ce7fb09a4e884a", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -483, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 101, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 987, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -264, - "y": 310 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 2, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -4, - "velocity_y": 2, - "warnings": 0, - "x": 233, - "y": 36 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999862, - "result": null, - "round_number": 1, - "tick": 438 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 438 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "d7ec1f3b73a0093aceb09116357afaa4888a50e0ce01dcff958ee7a5a1349a98", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 876, - "facing_y": -482, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 102, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 990, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -258, - "y": 306 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -876, - "facing_y": 482, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 690, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 300, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 1, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -4, - "velocity_y": 2, - "warnings": 0, - "x": 229, - "y": 39 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999861, - "result": null, - "round_number": 1, - "tick": 439 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 439 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "303defeffea49a884e406bd3f699af966281180f814bf8052d4c8e9999fc5593", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 103, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 993, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -252, - "y": 303 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -878, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 693, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 301, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -5, - "velocity_y": 3, - "warnings": 0, - "x": 224, - "y": 42 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999860, - "result": null, - "round_number": 1, - "tick": 440 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 440 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "e5c85a4ff7132a9ab18a45c0073a7ff70553a74b896465e903ab63fdc1d3cd50", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 876, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 104, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -246, - "y": 300 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 693, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 301, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -5, - "velocity_y": 3, - "warnings": 0, - "x": 219, - "y": 45 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999859, - "result": null, - "round_number": 1, - "tick": 441 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 441 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "34521cd66203118633159bb082e046480336211b13eb466142f7fe14348f78e8", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -479, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 105, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -240, - "y": 296 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 480, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 696, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 302, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -6, - "velocity_y": 3, - "warnings": 0, - "x": 213, - "y": 48 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999858, - "result": null, - "round_number": 1, - "tick": 442 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 442 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "033cb4e164fa70718ac73e0bad2dfda09e43757ad06c240b898410afdfad8638", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 878, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 106, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -234, - "y": 293 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 696, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 302, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -6, - "velocity_y": 3, - "warnings": 0, - "x": 207, - "y": 51 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999857, - "result": null, - "round_number": 1, - "tick": 443 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 443 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "15831709f0f46df000d8e89bf5abf1b4da7f16f9a60ed988bf81f56dc8b27c2e", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 878, - "facing_y": -480, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 107, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -228, - "y": 289 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 699, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 303, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -6, - "velocity_y": 3, - "warnings": 0, - "x": 201, - "y": 54 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999856, - "result": null, - "round_number": 1, - "tick": 444 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 444 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "2593b1d13f7ac230967a6e3844d844199a1558f22169978668cd6ca9f0f0d93f", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -482, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 108, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -221, - "y": 286 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 699, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 303, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -6, - "velocity_y": 3, - "warnings": 0, - "x": 195, - "y": 57 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999855, - "result": null, - "round_number": 1, - "tick": 445 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 445 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "31d85757337a91529aefc2c4d8e4f32da428ec2b5df762fa17b4708728a052c4", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 876, - "facing_y": -482, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 109, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -215, - "y": 283 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -876, - "facing_y": 483, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 304, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -6, - "velocity_y": 3, - "warnings": 0, - "x": 189, - "y": 60 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999854, - "result": null, - "round_number": 1, - "tick": 446 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 446 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "d540568219b218a51257c654487bdfb824dc93c21cf871cb352886d65d51d323", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 876, - "facing_y": -482, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 110, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -209, - "y": 279 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 480, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 304, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -6, - "velocity_y": 3, - "warnings": 0, - "x": 184, - "y": 64 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999853, - "result": null, - "round_number": 1, - "tick": 447 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 447 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "411189df6b7449d8d5b2b0a2e07bcd21daec8db5a210ecd7ad6c885b93e77b27", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -480, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 111, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -203, - "y": 276 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 480, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 305, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -6, - "velocity_y": 3, - "warnings": 0, - "x": 178, - "y": 67 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999852, - "result": null, - "round_number": 1, - "tick": 448 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 448 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "0256360028dcdf1980c18350319dbf4865bd978692b4acc4578e39a621f75a03", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 878, - "facing_y": -482, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 112, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -197, - "y": 273 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -876, - "facing_y": 482, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 305, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -6, - "velocity_y": 3, - "warnings": 0, - "x": 172, - "y": 70 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999851, - "result": null, - "round_number": 1, - "tick": 449 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 449 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "98f8db3613e782c7e4cc2387825b2947d7d272bb0771b2ec2cd68486872a3a29", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 878, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 113, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -191, - "y": 269 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -876, - "facing_y": 482, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 306, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -6, - "velocity_y": 3, - "warnings": 0, - "x": 166, - "y": 73 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999850, - "result": null, - "round_number": 1, - "tick": 450 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 450 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "66cec8752014ed7adebc83ceb7a74ab0af21c95ef9c848bf8aff1da1313a47a0", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -482, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 114, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -185, - "y": 266 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 480, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 306, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -6, - "velocity_y": 3, - "warnings": 0, - "x": 160, - "y": 77 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999849, - "result": null, - "round_number": 1, - "tick": 451 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 451 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "697a61b7f5da9e2933b769dd9646a13f044af3549d26c84149146310c2a70030", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 878, - "facing_y": -479, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 115, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -179, - "y": 262 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -878, - "facing_y": 480, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 307, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -6, - "velocity_y": 3, - "warnings": 0, - "x": 154, - "y": 80 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999848, - "result": null, - "round_number": 1, - "tick": 452 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 452 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "2c7f46cc6a0be75bbbfd0323bb0e74c1b0bdd4a3cb0ca43b40ecda0b10fffbc4", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 878, - "facing_y": -482, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 116, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -172, - "y": 259 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 307, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -6, - "velocity_y": 3, - "warnings": 0, - "x": 148, - "y": 83 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999847, - "result": null, - "round_number": 1, - "tick": 453 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 453 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "90b4ab23c4ccf29e4ed7350a8588cc510b1cb4e8aacd17ae25878acd28f91d15", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -483, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 117, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -166, - "y": 256 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -876, - "facing_y": 483, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 308, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -6, - "velocity_y": 3, - "warnings": 0, - "x": 142, - "y": 86 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999846, - "result": null, - "round_number": 1, - "tick": 454 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 454 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "da15f7bdf97974063c6a354a8de95be51238925686f139281f3bcf8a96d5b691", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -482, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 118, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -160, - "y": 252 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 480, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 308, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -6, - "velocity_y": 3, - "warnings": 0, - "x": 137, - "y": 90 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999845, - "result": null, - "round_number": 1, - "tick": 455 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 455 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "76c55d954bd1f01e38710d3203a84e4567bfc26825af004108dac3cb2f76b497", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 879, - "facing_y": -480, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 119, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -154, - "y": 249 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 480, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 309, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -6, - "velocity_y": 3, - "warnings": 0, - "x": 131, - "y": 93 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999844, - "result": null, - "round_number": 1, - "tick": 456 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 456 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "c18b9fa14177f1a6f54e1e91035e2e68bfc38876b9a5dddc6351fafd9c746a1a", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 120, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -148, - "y": 246 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 309, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -6, - "velocity_y": 3, - "warnings": 0, - "x": 125, - "y": 96 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999843, - "result": null, - "round_number": 1, - "tick": 457 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 457 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "81b494dd8423e0a8cbd7485f2af822d26abe6b779229ca2af374605a5fa8cfcb", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 878, - "facing_y": -480, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 121, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -142, - "y": 242 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 310, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -6, - "velocity_y": 3, - "warnings": 0, - "x": 119, - "y": 99 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999842, - "result": null, - "round_number": 1, - "tick": 458 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 458 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "2738e9f9d994c1d6434f04bb149e7f3b4d6b0fdf950ccca18944a7d9b2cf4eab", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 879, - "facing_y": -482, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 122, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -136, - "y": 239 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -876, - "facing_y": 482, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 310, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -6, - "velocity_y": 3, - "warnings": 0, - "x": 113, - "y": 102 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999841, - "result": null, - "round_number": 1, - "tick": 459 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 459 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "504b7f3c05a41845d716978b4951c0932ac3c97bf3be3a79507aa0cc92879d46", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 876, - "facing_y": -485, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 123, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -129, - "y": 236 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 483, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 311, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -6, - "velocity_y": 3, - "warnings": 0, - "x": 107, - "y": 106 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999840, - "result": null, - "round_number": 1, - "tick": 460 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 460 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "f2d3e7199b3b0d9227a1ae5ea16b06204928abc6676d69975007b644926942ba", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -480, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 124, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -123, - "y": 232 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 311, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -6, - "velocity_y": 3, - "warnings": 0, - "x": 101, - "y": 109 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999839, - "result": null, - "round_number": 1, - "tick": 461 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 461 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "ffa64d781d835f4ce0f367cc4a831d84d4112cad718631ba226ba911159c01ee", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 879, - "facing_y": -483, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 125, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -117, - "y": 229 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -876, - "facing_y": 482, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 312, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -6, - "velocity_y": 3, - "warnings": 0, - "x": 95, - "y": 112 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999838, - "result": null, - "round_number": 1, - "tick": 462 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 462 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "4afff8afe3a2ea44d4d14da93fe6fbaf40ebc50885ce63ca529c2ecfe807ac24", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 880, - "facing_y": -482, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 126, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -111, - "y": 225 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 482, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 312, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -6, - "velocity_y": 3, - "warnings": 0, - "x": 89, - "y": 115 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999837, - "result": null, - "round_number": 1, - "tick": 463 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 463 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "6ad22b7a831453ee26a961f0fff15909ce63dac882e6b0d5f23728ad89e2ffbe", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -484, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 127, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -105, - "y": 222 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -879, - "facing_y": 479, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 313, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -6, - "velocity_y": 3, - "warnings": 0, - "x": 84, - "y": 119 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999836, - "result": null, - "round_number": 1, - "tick": 464 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 464 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "a092d6c6c67427ccddc9ec9b17efef50d418c6bd2f253b80487475a6e20b9c20", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 879, - "facing_y": -480, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 128, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -99, - "y": 219 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 480, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 313, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -6, - "velocity_y": 3, - "warnings": 0, - "x": 78, - "y": 122 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999835, - "result": null, - "round_number": 1, - "tick": 465 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 465 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "212c45657aeee8e551fa9e9431287c29dd0f99e6d0bea63359364e7db2b84d12", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 881, - "facing_y": -479, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 129, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -93, - "y": 215 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -878, - "facing_y": 479, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 314, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -6, - "velocity_y": 3, - "warnings": 0, - "x": 72, - "y": 125 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999834, - "result": null, - "round_number": 1, - "tick": 466 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 466 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "d10ec8b5c174792d5084620a93503733304233f9f0af01d04bdd72a7f8481fde", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 878, - "facing_y": -480, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 130, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -87, - "y": 212 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 480, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 314, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -6, - "velocity_y": 3, - "warnings": 0, - "x": 66, - "y": 128 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999833, - "result": null, - "round_number": 1, - "tick": 467 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 467 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "9c2bba98e40529a09dca51abdfdbb8e8f8c1edb093477bb1d400fbb535f35ee2", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 879, - "facing_y": -487, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 131, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -80, - "y": 209 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -880, - "facing_y": 484, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 315, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -6, - "velocity_y": 3, - "warnings": 0, - "x": 60, - "y": 132 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999832, - "result": null, - "round_number": 1, - "tick": 468 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 468 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "67ec434b3c69297ea188c607caccefdf689321404625ed19fb9bf8abe6fc7721", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 881, - "facing_y": -480, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 132, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -74, - "y": 205 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -877, - "facing_y": 481, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 315, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -6, - "velocity_y": 3, - "warnings": 0, - "x": 54, - "y": 135 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999831, - "result": null, - "round_number": 1, - "tick": 469 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 469 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "74e857482c07aa32629cb6beb9924235ff6dcdf939e7031c89944c9b3bc68672", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 877, - "facing_y": -482, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 132, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": -68, - "y": 202 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -876, - "facing_y": 483, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 316, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -3, - "velocity_y": 2, - "warnings": 0, - "x": 51, - "y": 136 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999830, - "result": null, - "round_number": 1, - "tick": 470 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 470 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "5fe9ce1ea119d625bb758d8a47a886977fb5f43b700ea5c11a66035cbdb7545c", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 869, - "facing_y": -500, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 133, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": 0, - "warnings": 0, - "x": -62, - "y": 201 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -873, - "facing_y": 487, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 316, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -1, - "velocity_y": 1, - "warnings": 0, - "x": 50, - "y": 137 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999829, - "result": null, - "round_number": 1, - "tick": 471 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 471 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "14f296c61d02a6317160507d7fdf7f2e93e0ca71ede05ea04fb7a2fae1a975ad", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 854, - "facing_y": -524, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 134, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": 2, - "warnings": 0, - "x": -56, - "y": 202 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -867, - "facing_y": 499, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 317, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": -1, - "velocity_y": 0, - "warnings": 0, - "x": 49, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999828, - "result": null, - "round_number": 1, - "tick": 472 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 472 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "99342729cf9173787058dbee7b2bb156d95124f8692edeab3a198fdf22113ae4", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 833, - "facing_y": -566, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 135, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 5, - "velocity_y": 4, - "warnings": 0, - "x": -51, - "y": 206 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -860, - "facing_y": 524, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 317, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 49, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999827, - "result": null, - "round_number": 1, - "tick": 473 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 473 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "7077251c40c40cd95fc7389e5ef89616e279484b5835edf71131f921e1122603", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 798, - "facing_y": -613, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 136, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 4, - "velocity_y": 5, - "warnings": 0, - "x": -46, - "y": 211 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -827, - "facing_y": 562, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 318, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999826, - "result": null, - "round_number": 1, - "tick": 474 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 474 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "dde22705216735d1d84416397f7ca363467835ab0d2c55dff85f1e5ec8476416", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 756, - "facing_y": -655, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 137, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 4, - "velocity_y": 5, - "warnings": 0, - "x": -42, - "y": 216 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -802, - "facing_y": 598, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 318, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999825, - "result": null, - "round_number": 1, - "tick": 475 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 475 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "366840607c19aa47d9f15dd82de0f5bdd28900dc2a31d69b571bf8c4b0c41ac9", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 716, - "facing_y": -700, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 138, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 4, - "velocity_y": 5, - "warnings": 0, - "x": -38, - "y": 222 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -775, - "facing_y": 632, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 319, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999824, - "result": null, - "round_number": 1, - "tick": 476 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 476 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "0de5aa23da9b1bd8c0d3486bc7e676a0db0f10b4f279befb4afc6e74ed795c7d", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 675, - "facing_y": -741, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 139, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 4, - "velocity_y": 5, - "warnings": 0, - "x": -33, - "y": 227 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -747, - "facing_y": 665, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 319, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999823, - "result": null, - "round_number": 1, - "tick": 477 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 477 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "16fbf08d451ec0cfa410d6a49d6eee7a4445579d4a9f631734ccb68ec7ff7243", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 633, - "facing_y": -783, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 140, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 4, - "velocity_y": 5, - "warnings": 0, - "x": -28, - "y": 232 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -717, - "facing_y": 697, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 320, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999822, - "result": null, - "round_number": 1, - "tick": 478 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 478 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "0e878443a3dae156368a9cabb38d02bb4b431ac8cb17261b055c0c00fecffafb", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 586, - "facing_y": -818, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 141, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 4, - "velocity_y": 5, - "warnings": 0, - "x": -23, - "y": 237 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -686, - "facing_y": 728, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 320, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999821, - "result": null, - "round_number": 1, - "tick": 479 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 479 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "0531e69eb33a8f5f57f84785a068b123bc17674bd35da6da2b08998fd42f90e4", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 540, - "facing_y": -844, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 142, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 5, - "velocity_y": 4, - "warnings": 0, - "x": -18, - "y": 241 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -653, - "facing_y": 757, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 321, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999820, - "result": null, - "round_number": 1, - "tick": 480 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 480 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "531127f7fd3e0c0998fca8291bb4430dd9506843c0b36d3b0a2a93c4591085c0", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 495, - "facing_y": -876, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 143, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 5, - "velocity_y": 4, - "warnings": 0, - "x": -12, - "y": 244 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -620, - "facing_y": 785, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 321, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999819, - "result": null, - "round_number": 1, - "tick": 481 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 481 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "ba2d1ac7010edbae25c85146bea21265fc21c9a75df1d38abe33431257661bda", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 442, - "facing_y": -901, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 144, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": 3, - "warnings": 0, - "x": -6, - "y": 248 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -585, - "facing_y": 811, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 322, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999818, - "result": null, - "round_number": 1, - "tick": 482 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 482 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "a5cb4bcdd6c87645c68be36b1ccab8e765af29629d2201bf772c5ba48f4b055d", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 385, - "facing_y": -926, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 145, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": 3, - "warnings": 0, - "x": 1, - "y": 251 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -549, - "facing_y": 836, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 322, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999817, - "result": null, - "round_number": 1, - "tick": 483 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 483 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "f77337010bfcf1eb3b15a2b8179ffb9aa8da17e170e53ffb35ce67f89bc3e56e", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 336, - "facing_y": -942, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 146, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": 2, - "warnings": 0, - "x": 7, - "y": 253 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -512, - "facing_y": 859, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 323, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999816, - "result": null, - "round_number": 1, - "tick": 484 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 484 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "12ad55bc40b28f5c5506cfd3d5e57e15e3ebd16f6a48b88c68daf193b4274687", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 280, - "facing_y": -966, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 147, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": 2, - "warnings": 0, - "x": 14, - "y": 255 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -474, - "facing_y": 881, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 323, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999815, - "result": null, - "round_number": 1, - "tick": 485 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 485 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "34e865330d815826e06d5d5ffd3be18eb2d72da1781f554b632466cb16c4bb5c", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 229, - "facing_y": -975, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 148, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": 2, - "warnings": 0, - "x": 20, - "y": 257 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -435, - "facing_y": 900, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 324, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999814, - "result": null, - "round_number": 1, - "tick": 486 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 486 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "3fc34ce9ccc8c311177d938817dd3c9b8baae8216d3e9dfe07a671020424f324", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 172, - "facing_y": -991, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 149, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": 1, - "warnings": 0, - "x": 27, - "y": 259 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -395, - "facing_y": 918, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 324, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999813, - "result": null, - "round_number": 1, - "tick": 487 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 487 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "f45dded4702add34002629a0de1e962da56950388b32e721d1baff904aee872b", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 114, - "facing_y": -1000, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 150, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": 1, - "warnings": 0, - "x": 34, - "y": 260 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -355, - "facing_y": 935, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 325, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999812, - "result": null, - "round_number": 1, - "tick": 488 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 488 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "e8d1455b1fbb14a64e909605c54192d95d8002e938bdbba0c19a7c0c770f4d1e", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 57, - "facing_y": -1000, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 151, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": 1, - "warnings": 0, - "x": 41, - "y": 260 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -314, - "facing_y": 949, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 325, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999811, - "result": null, - "round_number": 1, - "tick": 489 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 489 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "26137cdb33a85d57f986600027f221daa8f6a08acbf8da9a96e7e57935a7917c", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 0, - "facing_y": -1000, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 152, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 7, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 260 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -272, - "facing_y": 962, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 326, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999810, - "result": null, - "round_number": 1, - "tick": 490 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 490 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "b19cfb13e0b60d9e5ffc653a4115ee805b3b987b997ae2ff00c1c8511a19455d", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -57, - "facing_y": -1000, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 153, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 7, - "velocity_y": 0, - "warnings": 0, - "x": 55, - "y": 260 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -230, - "facing_y": 973, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 326, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999809, - "result": null, - "round_number": 1, - "tick": 491 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 491 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "550c87f815f2b95baffefb1cfe370f67134440b4f8148074c4e9ae88b870070c", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -114, - "facing_y": -1000, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 154, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -1, - "warnings": 0, - "x": 62, - "y": 260 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -187, - "facing_y": 982, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 327, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999808, - "result": null, - "round_number": 1, - "tick": 492 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 492 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "66cdd327ce776e87e57e5fe91a136dbc12e11fc745334674974aaa6b82975b45", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -172, - "facing_y": -991, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 155, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -1, - "warnings": 0, - "x": 69, - "y": 259 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -144, - "facing_y": 990, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 327, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999807, - "result": null, - "round_number": 1, - "tick": 493 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 493 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "4fb926ad6b80eb134b14814c1ecc06d136e0d7bf396ad53db359bea337e6cfc8", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -227, - "facing_y": -975, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 156, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -1, - "warnings": 0, - "x": 76, - "y": 258 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -101, - "facing_y": 995, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 328, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999806, - "result": null, - "round_number": 1, - "tick": 494 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 494 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "e0f98f2ffaf226fa8b8125e865cdeb9c5fd78e6cbbacca2ff4214e0644803495", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -278, - "facing_y": -967, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 157, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -2, - "warnings": 0, - "x": 82, - "y": 256 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -57, - "facing_y": 998, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 328, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999805, - "result": null, - "round_number": 1, - "tick": 495 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 495 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "57c0e006a7a9277f5818fb7343ba9151d66b5cf400aa8c0e6cb904a2f60f2d31", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -336, - "facing_y": -942, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 158, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -2, - "warnings": 0, - "x": 89, - "y": 253 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -13, - "facing_y": 1000, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 329, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999804, - "result": null, - "round_number": 1, - "tick": 496 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 496 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "c1e2aac052f38a85ab0aa4e95880d5e2ea25807f888cd7c331104dbbc802fb52", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -385, - "facing_y": -926, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 159, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": 95, - "y": 251 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 31, - "facing_y": 1000, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 329, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999803, - "result": null, - "round_number": 1, - "tick": 497 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 497 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "dc2e3753b7ad40b831de8bb0327b635ab693136902be5883c6bc5b22fbd1aea6", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -442, - "facing_y": -901, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 160, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": 102, - "y": 248 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 75, - "facing_y": 997, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 330, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999802, - "result": null, - "round_number": 1, - "tick": 498 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 498 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "fd3bef654bb6fa8050c40e5277ef72943d633b405e739d4a1cf1e78992bb13ab", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -495, - "facing_y": -876, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 161, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 6, - "velocity_y": -3, - "warnings": 0, - "x": 108, - "y": 244 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 1000, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 118, - "facing_y": 993, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 1000, - "player_id": "two", - "poise": 330, - "queued_actions": 0, - "stamina": 1000, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999801, - "result": null, - "round_number": 1, - "tick": 499 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 499 - }, - { - "attack_one": null, - "attack_two": { - "active": 2, - "age": 0, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": false, - "startup": 6, - "target": "head" - }, - "snapshot": { - "payload": { - "checksum": "d03b2be64817561ee44a44cf6f4882f7dec8dd7079981f898c3e9d5b10f5b32d", - "events": [ - { - "action_id": "two@500", - "actor_id": "two", - "amount": 0, - "blood": 0, - "detail": "right:straight:head", - "direction": 0, - "event_id": 23, - "kind": "punch_start", - "target_id": null, - "tick": 500 - } - ], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -540, - "facing_y": -844, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 162, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 5, - "velocity_y": -4, - "warnings": 0, - "x": 114, - "y": 241 - }, - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": null, - "action_hand": "right", - "action_id": "two@500", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 500, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 994, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 161, - "facing_y": 987, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 998, - "player_id": "two", - "poise": 330, - "queued_actions": 0, - "stamina": 927, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999800, - "result": null, - "round_number": 1, - "tick": 500 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 500 - }, - { - "attack_one": null, - "attack_two": { - "active": 2, - "age": 1, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": false, - "startup": 6, - "target": "head" - }, - "snapshot": { - "payload": { - "checksum": "07a143f83a0b8463f9bbbafb7a91fa5d3b3de00ec4526f60589f8f4e3b36c48e", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -590, - "facing_y": -811, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 163, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 5, - "velocity_y": -4, - "warnings": 0, - "x": 120, - "y": 237 - }, - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": null, - "action_hand": "right", - "action_id": "two@500", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 500, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 994, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 161, - "facing_y": 987, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 998, - "player_id": "two", - "poise": 330, - "queued_actions": 0, - "stamina": 928, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999799, - "result": null, - "round_number": 1, - "tick": 501 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 501 - }, - { - "attack_one": null, - "attack_two": { - "active": 2, - "age": 2, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": false, - "startup": 6, - "target": "head" - }, - "snapshot": { - "payload": { - "checksum": "079643f0852296aef79afc713fca27374d0ffae871bb3dfd6b9fe74725a14ff3", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -631, - "facing_y": -778, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 164, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 5, - "velocity_y": -4, - "warnings": 0, - "x": 125, - "y": 233 - }, - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": null, - "action_hand": "right", - "action_id": "two@500", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 500, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 994, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 161, - "facing_y": 987, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 998, - "player_id": "two", - "poise": 330, - "queued_actions": 0, - "stamina": 929, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999798, - "result": null, - "round_number": 1, - "tick": 502 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 502 - }, - { - "attack_one": null, - "attack_two": { - "active": 2, - "age": 3, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": false, - "startup": 6, - "target": "head" - }, - "snapshot": { - "payload": { - "checksum": "8476d11998458aaead015062a29b24d6c1612e241315129ad543ca55f5d8c366", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -677, - "facing_y": -743, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 165, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 4, - "velocity_y": -5, - "warnings": 0, - "x": 130, - "y": 228 - }, - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": null, - "action_hand": "right", - "action_id": "two@500", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 500, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 994, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 161, - "facing_y": 987, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 998, - "player_id": "two", - "poise": 330, - "queued_actions": 0, - "stamina": 930, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999797, - "result": null, - "round_number": 1, - "tick": 503 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 503 - }, - { - "attack_one": null, - "attack_two": { - "active": 2, - "age": 4, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": false, - "startup": 6, - "target": "head" - }, - "snapshot": { - "payload": { - "checksum": "37b81b1d96894da9aab0343690de3e6cd8a8d463440f642059cf0bf0dca891b1", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -719, - "facing_y": -702, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 166, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 4, - "velocity_y": -5, - "warnings": 0, - "x": 135, - "y": 223 - }, - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": null, - "action_hand": "right", - "action_id": "two@500", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 500, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 994, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 161, - "facing_y": 987, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 998, - "player_id": "two", - "poise": 330, - "queued_actions": 0, - "stamina": 931, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999796, - "result": null, - "round_number": 1, - "tick": 504 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 504 - }, - { - "attack_one": null, - "attack_two": { - "active": 2, - "age": 5, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": false, - "startup": 6, - "target": "head" - }, - "snapshot": { - "payload": { - "checksum": "87fa6331cd51d81343bff78a5674be7edcf44204bed0fe9ce20b89433b0ee229", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -760, - "facing_y": -661, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 167, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 4, - "velocity_y": -5, - "warnings": 0, - "x": 140, - "y": 218 - }, - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": null, - "action_hand": "right", - "action_id": "two@500", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 500, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 994, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 161, - "facing_y": 987, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 998, - "player_id": "two", - "poise": 330, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999795, - "result": null, - "round_number": 1, - "tick": 505 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 505 - }, - { - "attack_one": null, - "attack_two": { - "active": 2, - "age": 6, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "snapshot": { - "payload": { - "checksum": "c9f93776f8e6973585dc4f27eac5aed6684eec30aa30a9ed816c492b523758f8", - "events": [ - { - "action_id": "two@500", - "actor_id": "two", - "amount": 32, - "blood": 0, - "detail": "", - "direction": 0, - "event_id": 24, - "kind": "whiff", - "target_id": "one", - "tick": 506 - } - ], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -795, - "facing_y": -614, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 168, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 4, - "velocity_y": -5, - "warnings": 0, - "x": 145, - "y": 213 - }, - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 506, - "action_hand": "right", - "action_id": "two@500", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 500, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 161, - "facing_y": 987, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 330, - "queued_actions": 0, - "stamina": 901, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999794, - "result": null, - "round_number": 1, - "tick": 506 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 506 - }, - { - "attack_one": null, - "attack_two": { - "active": 2, - "age": 7, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "snapshot": { - "payload": { - "checksum": "6aaad6dd620d9d31805e43f1a8d6388d9bbcf10a728926dd6621692c10234713", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -827, - "facing_y": -565, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 169, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 4, - "velocity_y": -5, - "warnings": 0, - "x": 149, - "y": 207 - }, - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 506, - "action_hand": "right", - "action_id": "two@500", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 500, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 161, - "facing_y": 987, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 330, - "queued_actions": 0, - "stamina": 902, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999793, - "result": null, - "round_number": 1, - "tick": 507 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 507 - }, - { - "attack_one": null, - "attack_two": { - "active": 2, - "age": 8, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "snapshot": { - "payload": { - "checksum": "2904a3807933a61baf129ced5d14bf2221265af06cbe66c53dac59432dac9ad2", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -860, - "facing_y": -516, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 170, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 4, - "velocity_y": -5, - "warnings": 0, - "x": 153, - "y": 201 - }, - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 506, - "action_hand": "right", - "action_id": "two@500", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 500, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 161, - "facing_y": 987, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 330, - "queued_actions": 0, - "stamina": 903, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999792, - "result": null, - "round_number": 1, - "tick": 508 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 508 - }, - { - "attack_one": null, - "attack_two": { - "active": 2, - "age": 9, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "snapshot": { - "payload": { - "checksum": "2a8cdc1c853f7fbf0d540c4f7f7050bd1d7998e7258afe708eabd12645c6e649", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -885, - "facing_y": -467, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 171, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 3, - "velocity_y": -6, - "warnings": 0, - "x": 156, - "y": 195 - }, - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 506, - "action_hand": "right", - "action_id": "two@500", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 500, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 204, - "facing_y": 979, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 330, - "queued_actions": 0, - "stamina": 904, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999791, - "result": null, - "round_number": 1, - "tick": 509 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 509 - }, - { - "attack_one": null, - "attack_two": { - "active": 2, - "age": 10, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "snapshot": { - "payload": { - "checksum": "f765f70742f37c80ad4c664294c73f9cecfe4fa31e7a74036ea7dd94ee7e7918", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -909, - "facing_y": -418, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 172, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 3, - "velocity_y": -6, - "warnings": 0, - "x": 159, - "y": 189 - }, - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 506, - "action_hand": "right", - "action_id": "two@500", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 500, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 247, - "facing_y": 969, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 330, - "queued_actions": 0, - "stamina": 905, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999790, - "result": null, - "round_number": 1, - "tick": 510 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 510 - }, - { - "attack_one": null, - "attack_two": { - "active": 2, - "age": 11, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "snapshot": { - "payload": { - "checksum": "2c811d436b1ba6367a6d395b3893e42ccbe13601789e2e6c7d3753e76c7aea8d", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -934, - "facing_y": -368, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 173, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 3, - "velocity_y": -6, - "warnings": 0, - "x": 162, - "y": 183 - }, - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 506, - "action_hand": "right", - "action_id": "two@500", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 500, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 289, - "facing_y": 957, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 330, - "queued_actions": 0, - "stamina": 906, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999789, - "result": null, - "round_number": 1, - "tick": 511 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 511 - }, - { - "attack_one": null, - "attack_two": { - "active": 2, - "age": 12, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "snapshot": { - "payload": { - "checksum": "57a4d8ad24c7e2d8eb10468bad2389399d81e99639990dcf55df83274afb5c74", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -950, - "facing_y": -311, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 174, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 2, - "velocity_y": -6, - "warnings": 0, - "x": 164, - "y": 176 - }, - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 506, - "action_hand": "right", - "action_id": "two@500", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 500, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 331, - "facing_y": 944, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 330, - "queued_actions": 0, - "stamina": 907, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999788, - "result": null, - "round_number": 1, - "tick": 512 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 512 - }, - { - "attack_one": null, - "attack_two": { - "active": 2, - "age": 13, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "snapshot": { - "payload": { - "checksum": "5ea5b0472ce014e66c2038c7d02b0e31fe22b06c7c8bf9050a053b5ace3a6ee2", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -967, - "facing_y": -254, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 175, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 2, - "velocity_y": -6, - "warnings": 0, - "x": 166, - "y": 169 - }, - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 506, - "action_hand": "right", - "action_id": "two@500", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 500, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 372, - "facing_y": 928, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 330, - "queued_actions": 0, - "stamina": 908, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999787, - "result": null, - "round_number": 1, - "tick": 513 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 513 - }, - { - "attack_one": null, - "attack_two": { - "active": 2, - "age": 14, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "snapshot": { - "payload": { - "checksum": "40fbaa1ae3498c8967927cf100778ee61476bbd6adebbb3688f0f2ae7962921e", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -983, - "facing_y": -198, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 176, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 1, - "velocity_y": -6, - "warnings": 0, - "x": 167, - "y": 162 - }, - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 506, - "action_hand": "right", - "action_id": "two@500", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 500, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 412, - "facing_y": 911, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 330, - "queued_actions": 0, - "stamina": 909, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999786, - "result": null, - "round_number": 1, - "tick": 514 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 514 - }, - { - "attack_one": null, - "attack_two": { - "active": 2, - "age": 15, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "snapshot": { - "payload": { - "checksum": "056a8aff9e2671ee37ef70790a50d7dceb9d239dadc7b8dfa5d052ab870664d5", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": -147, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 177, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 1, - "velocity_y": -6, - "warnings": 0, - "x": 169, - "y": 156 - }, - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 506, - "action_hand": "right", - "action_id": "two@500", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 500, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 451, - "facing_y": 892, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 330, - "queued_actions": 0, - "stamina": 910, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999785, - "result": null, - "round_number": 1, - "tick": 515 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 515 - }, - { - "attack_one": null, - "attack_two": { - "active": 2, - "age": 16, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "snapshot": { - "payload": { - "checksum": "da9ebe3fe72091ab0fd77366fc663fbad5fc305c37e411a9c01b8f7c17190450", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": -90, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 178, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 1, - "velocity_y": -6, - "warnings": 0, - "x": 169, - "y": 149 - }, - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 506, - "action_hand": "right", - "action_id": "two@500", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 500, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 490, - "facing_y": 872, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 330, - "queued_actions": 0, - "stamina": 911, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999784, - "result": null, - "round_number": 1, - "tick": 516 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 516 - }, - { - "attack_one": null, - "attack_two": { - "active": 2, - "age": 17, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "snapshot": { - "payload": { - "checksum": "6f0fe6e9d5895f7cda4b7581fc3f4183589de57cfb3b18741400b6e97d3b08bd", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": -32, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 179, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 1, - "velocity_y": -6, - "warnings": 0, - "x": 170, - "y": 142 - }, - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 506, - "action_hand": "right", - "action_id": "two@500", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 500, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 527, - "facing_y": 850, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 330, - "queued_actions": 0, - "stamina": 912, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999783, - "result": null, - "round_number": 1, - "tick": 517 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 517 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "4bc1c4232fdbe8f2c8b82cd6d6d24e6e50eae53d9975d1ce47a08110bd25cd61", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 24, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 180, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": -7, - "warnings": 0, - "x": 170, - "y": 135 - }, - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 506, - "action_hand": "right", - "action_id": "two@500", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 500, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 564, - "facing_y": 826, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 331, - "queued_actions": 0, - "stamina": 916, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999782, - "result": null, - "round_number": 1, - "tick": 518 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 518 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "8ed1f650ff122f5cba875da17737934d084178d6d6559b2faf4d9fd374cd56f1", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 81, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 181, - "maximum_stamina": 996, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": -7, - "warnings": 0, - "x": 170, - "y": 128 - }, - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 506, - "action_hand": "right", - "action_id": "two@500", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 500, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 599, - "facing_y": 800, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 331, - "queued_actions": 0, - "stamina": 920, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999781, - "result": null, - "round_number": 1, - "tick": 519 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 519 - }, - { - "attack_one": { - "active": 2, - "age": 0, - "class": "jab", - "combo_bonus": 0, - "hand": "left", - "power": "normal", - "recovery": 6, - "resolved": false, - "startup": 3, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "d4c5d48e1dc23c9f8413493dd50a57ed4c446c3df5ef4ab82001fa3b2f630c8a", - "events": [ - { - "action_id": "one@520", - "actor_id": "one", - "amount": 0, - "blood": 0, - "detail": "left:jab:head", - "direction": 0, - "event_id": 25, - "kind": "punch_start", - "target_id": null, - "tick": 520 - } - ], - "fighters": [ - { - "action": "jab", - "action_active_ticks": 2, - "action_contact_tick": null, - "action_hand": "left", - "action_id": "one@520", - "action_key": "jab:left:head:normal", - "action_power": "normal", - "action_recovery_ticks": 6, - "action_start_tick": 520, - "action_startup_ticks": 3, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 987, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 81, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 182, - "maximum_stamina": 995, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 955, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": -3, - "warnings": 0, - "x": 170, - "y": 124 - }, - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 506, - "action_hand": "right", - "action_id": "two@500", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 500, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 634, - "facing_y": 774, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 332, - "queued_actions": 0, - "stamina": 924, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999780, - "result": null, - "round_number": 1, - "tick": 520 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 520 - }, - { - "attack_one": { - "active": 2, - "age": 1, - "class": "jab", - "combo_bonus": 0, - "hand": "left", - "power": "normal", - "recovery": 6, - "resolved": false, - "startup": 3, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "44c2be0647ab5680c9ca4c53a9f341568db4ae97e07f4156145f495dbf073e20", - "events": [], - "fighters": [ - { - "action": "jab", - "action_active_ticks": 2, - "action_contact_tick": null, - "action_hand": "left", - "action_id": "one@520", - "action_key": "jab:left:head:normal", - "action_power": "normal", - "action_recovery_ticks": 6, - "action_start_tick": 520, - "action_startup_ticks": 3, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 987, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 81, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 183, - "maximum_stamina": 995, - "player_id": "one", - "poise": 600, - "queued_actions": 1, - "stamina": 956, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": -2, - "warnings": 0, - "x": 170, - "y": 123 - }, - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 506, - "action_hand": "right", - "action_id": "two@500", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 500, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 667, - "facing_y": 745, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 332, - "queued_actions": 0, - "stamina": 928, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999779, - "result": null, - "round_number": 1, - "tick": 521 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 521 - }, - { - "attack_one": { - "active": 2, - "age": 2, - "class": "jab", - "combo_bonus": 0, - "hand": "left", - "power": "normal", - "recovery": 6, - "resolved": false, - "startup": 3, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "577f88cb0a2146c700c6dfe7698f96c3ced4d860edc39cfabf7f7d90cd20b416", - "events": [], - "fighters": [ - { - "action": "jab", - "action_active_ticks": 2, - "action_contact_tick": null, - "action_hand": "left", - "action_id": "one@520", - "action_key": "jab:left:head:normal", - "action_power": "normal", - "action_recovery_ticks": 6, - "action_start_tick": 520, - "action_startup_ticks": 3, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 987, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 81, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 183, - "maximum_stamina": 995, - "player_id": "one", - "poise": 600, - "queued_actions": 1, - "stamina": 957, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": -1, - "warnings": 0, - "x": 170, - "y": 122 - }, - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 506, - "action_hand": "right", - "action_id": "two@500", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 500, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 699, - "facing_y": 715, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 333, - "queued_actions": 0, - "stamina": 932, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 70, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 0, - "swelling": 20 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999778, - "result": null, - "round_number": 1, - "tick": 522 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 522 - }, - { - "attack_one": { - "active": 2, - "age": 3, - "class": "jab", - "combo_bonus": 0, - "hand": "left", - "power": "normal", - "recovery": 6, - "resolved": true, - "startup": 3, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "280c12df8389ef657baa2908e61089f828860100574958b178c13e2a6cde79a2", - "events": [ - { - "action_id": "one@520", - "actor_id": "one", - "amount": 33, - "blood": 8, - "detail": "jab:head", - "direction": -1, - "event_id": 26, - "kind": "hit", - "target_id": "two", - "tick": 523 - } - ], - "fighters": [ - { - "action": "jab", - "action_active_ticks": 2, - "action_contact_tick": 523, - "action_hand": "left", - "action_id": "one@520", - "action_key": "jab:left:head:normal", - "action_power": "normal", - "action_recovery_ticks": 6, - "action_start_tick": 520, - "action_startup_ticks": 3, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 987, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 81, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 183, - "maximum_stamina": 995, - "player_id": "one", - "poise": 600, - "queued_actions": 1, - "stamina": 958, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 506, - "action_hand": "right", - "action_id": "two@500", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 500, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 730, - "facing_y": 684, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 301, - "queued_actions": 0, - "stamina": 936, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 103, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 23, - "swelling": 25 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999777, - "result": null, - "round_number": 1, - "tick": 523 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 523 - }, - { - "attack_one": { - "active": 2, - "age": 4, - "class": "jab", - "combo_bonus": 0, - "hand": "left", - "power": "normal", - "recovery": 6, - "resolved": true, - "startup": 3, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "b21b35268e6835ae91ff95d29e14b64e2f4481cac2082d9046ef0db45d0dc43d", - "events": [], - "fighters": [ - { - "action": "jab", - "action_active_ticks": 2, - "action_contact_tick": 523, - "action_hand": "left", - "action_id": "one@520", - "action_key": "jab:left:head:normal", - "action_power": "normal", - "action_recovery_ticks": 6, - "action_start_tick": 520, - "action_startup_ticks": 3, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 987, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 81, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 183, - "maximum_stamina": 995, - "player_id": "one", - "poise": 600, - "queued_actions": 1, - "stamina": 959, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 506, - "action_hand": "right", - "action_id": "two@500", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 500, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 759, - "facing_y": 651, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 302, - "queued_actions": 0, - "stamina": 940, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 103, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 23, - "swelling": 25 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999776, - "result": null, - "round_number": 1, - "tick": 524 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 524 - }, - { - "attack_one": { - "active": 2, - "age": 5, - "class": "jab", - "combo_bonus": 0, - "hand": "left", - "power": "normal", - "recovery": 6, - "resolved": true, - "startup": 3, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "e79047fa46623486ccb04f66187a6e767c80c8d6f916396f5da7d952393a1093", - "events": [], - "fighters": [ - { - "action": "jab", - "action_active_ticks": 2, - "action_contact_tick": 523, - "action_hand": "left", - "action_id": "one@520", - "action_key": "jab:left:head:normal", - "action_power": "normal", - "action_recovery_ticks": 6, - "action_start_tick": 520, - "action_startup_ticks": 3, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 987, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 81, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 183, - "maximum_stamina": 995, - "player_id": "one", - "poise": 600, - "queued_actions": 1, - "stamina": 960, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 506, - "action_hand": "right", - "action_id": "two@500", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 500, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 787, - "facing_y": 617, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 302, - "queued_actions": 0, - "stamina": 944, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 103, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 23, - "swelling": 25 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999775, - "result": null, - "round_number": 1, - "tick": 525 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 525 - }, - { - "attack_one": { - "active": 2, - "age": 6, - "class": "jab", - "combo_bonus": 0, - "hand": "left", - "power": "normal", - "recovery": 6, - "resolved": true, - "startup": 3, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "1ac91f634f62eab0fa7618ad66d39f733a34445fc439f5f4af7006e70fd02e54", - "events": [], - "fighters": [ - { - "action": "jab", - "action_active_ticks": 2, - "action_contact_tick": 523, - "action_hand": "left", - "action_id": "one@520", - "action_key": "jab:left:head:normal", - "action_power": "normal", - "action_recovery_ticks": 6, - "action_start_tick": 520, - "action_startup_ticks": 3, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 987, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -992, - "facing_y": 124, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 183, - "maximum_stamina": 995, - "player_id": "one", - "poise": 600, - "queued_actions": 1, - "stamina": 961, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 506, - "action_hand": "right", - "action_id": "two@500", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 500, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 813, - "facing_y": 582, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 303, - "queued_actions": 0, - "stamina": 948, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 103, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 23, - "swelling": 25 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999774, - "result": null, - "round_number": 1, - "tick": 526 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 526 - }, - { - "attack_one": { - "active": 2, - "age": 7, - "class": "jab", - "combo_bonus": 0, - "hand": "left", - "power": "normal", - "recovery": 6, - "resolved": true, - "startup": 3, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "fbe6fb14649de60b96747f4dc8e976ebb331b88c1ad425b7f08ec3fbd138f56d", - "events": [], - "fighters": [ - { - "action": "jab", - "action_active_ticks": 2, - "action_contact_tick": 523, - "action_hand": "left", - "action_id": "one@520", - "action_key": "jab:left:head:normal", - "action_power": "normal", - "action_recovery_ticks": 6, - "action_start_tick": 520, - "action_startup_ticks": 3, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 987, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 183, - "maximum_stamina": 995, - "player_id": "one", - "poise": 600, - "queued_actions": 1, - "stamina": 962, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 506, - "action_hand": "right", - "action_id": "two@500", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 500, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 838, - "facing_y": 546, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 303, - "queued_actions": 0, - "stamina": 952, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 103, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 23, - "swelling": 25 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999773, - "result": null, - "round_number": 1, - "tick": 527 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 527 - }, - { - "attack_one": { - "active": 2, - "age": 0, - "class": "straight", - "combo_bonus": 10, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": false, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "6a7ebd888707b66e7706357bd6ba0d307312c153aeac613c7723dc389fbe6924", - "events": [ - { - "action_id": "one@528", - "actor_id": "one", - "amount": 0, - "blood": 0, - "detail": "right:straight:head", - "direction": 0, - "event_id": 27, - "kind": "punch_start", - "target_id": null, - "tick": 528 - } - ], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": null, - "action_hand": "right", - "action_id": "one@528", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 528, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 983, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 183, - "maximum_stamina": 993, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 905, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 506, - "action_hand": "right", - "action_id": "two@500", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 500, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 861, - "facing_y": 509, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 304, - "queued_actions": 0, - "stamina": 956, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 103, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 23, - "swelling": 25 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999772, - "result": null, - "round_number": 1, - "tick": 528 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 528 - }, - { - "attack_one": { - "active": 2, - "age": 1, - "class": "straight", - "combo_bonus": 10, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": false, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "e3a87479a2e803fd8f61002b85113df8e6f5aa76a37dcd0d6c7b1b540b6e7f7c", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": null, - "action_hand": "right", - "action_id": "one@528", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 528, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 983, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 183, - "maximum_stamina": 993, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 906, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 506, - "action_hand": "right", - "action_id": "two@500", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 500, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 882, - "facing_y": 471, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 304, - "queued_actions": 0, - "stamina": 960, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 103, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 23, - "swelling": 25 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999771, - "result": null, - "round_number": 1, - "tick": 529 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 529 - }, - { - "attack_one": { - "active": 2, - "age": 2, - "class": "straight", - "combo_bonus": 10, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": false, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "b7fca15bc4b05f3ed09d517f09af34a6020ee64f2110cb377055a788fa33fd69", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": null, - "action_hand": "right", - "action_id": "one@528", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 528, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 983, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 183, - "maximum_stamina": 993, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 907, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 506, - "action_hand": "right", - "action_id": "two@500", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 500, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 902, - "facing_y": 432, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 305, - "queued_actions": 0, - "stamina": 964, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 103, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 23, - "swelling": 25 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999770, - "result": null, - "round_number": 1, - "tick": 530 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 530 - }, - { - "attack_one": { - "active": 2, - "age": 3, - "class": "straight", - "combo_bonus": 10, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": false, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "15c5174f950a2ccf6fad2a5d9a38938d849d2dd5bbc351f4c749470922a110a1", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": null, - "action_hand": "right", - "action_id": "one@528", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 528, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 983, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 183, - "maximum_stamina": 993, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 908, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 506, - "action_hand": "right", - "action_id": "two@500", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 500, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 920, - "facing_y": 392, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 305, - "queued_actions": 0, - "stamina": 968, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 103, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 23, - "swelling": 25 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999769, - "result": null, - "round_number": 1, - "tick": 531 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 531 - }, - { - "attack_one": { - "active": 2, - "age": 4, - "class": "straight", - "combo_bonus": 10, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": false, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "403803cebcf0f1ea382020a58521b4aa488a2847354eeec1e0034a3d872034d4", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": null, - "action_hand": "right", - "action_id": "one@528", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 528, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 983, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 183, - "maximum_stamina": 993, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 909, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 506, - "action_hand": "right", - "action_id": "two@500", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 500, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 936, - "facing_y": 351, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 306, - "queued_actions": 0, - "stamina": 972, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 103, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 23, - "swelling": 25 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999768, - "result": null, - "round_number": 1, - "tick": 532 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 532 - }, - { - "attack_one": { - "active": 2, - "age": 5, - "class": "straight", - "combo_bonus": 10, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": false, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "dfc6aacc4dfc3483296634970b8cae5b5ded470e864d0e9d95df68a4674a40ab", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": null, - "action_hand": "right", - "action_id": "one@528", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 528, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 983, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 183, - "maximum_stamina": 993, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 910, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 506, - "action_hand": "right", - "action_id": "two@500", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 500, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 951, - "facing_y": 310, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 306, - "queued_actions": 0, - "stamina": 976, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 103, - "left_cut": 0, - "left_eye": 44, - "right_cut": 0, - "right_eye": 23, - "swelling": 25 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999767, - "result": null, - "round_number": 1, - "tick": 533 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 533 - }, - { - "attack_one": { - "active": 2, - "age": 6, - "class": "straight", - "combo_bonus": 10, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "3bfecaf9211088a64ee817cad18235a530c5a3cadbfaa0a53554673bd034291a", - "events": [ - { - "action_id": "one@528", - "actor_id": "one", - "amount": 63, - "blood": 15, - "detail": "straight:head", - "direction": -1, - "event_id": 28, - "kind": "hit", - "target_id": "two", - "tick": 534 - } - ], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 534, - "action_hand": "right", - "action_id": "one@528", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 528, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 983, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 183, - "maximum_stamina": 993, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 911, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 963, - "facing_y": 268, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 253, - "queued_actions": 0, - "stamina": 977, - "stance": "orthodox", - "stunned_ticks": 7, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 166, - "left_cut": 0, - "left_eye": 88, - "right_cut": 0, - "right_eye": 23, - "swelling": 45 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999766, - "result": null, - "round_number": 1, - "tick": 534 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 534 - }, - { - "attack_one": { - "active": 2, - "age": 7, - "class": "straight", - "combo_bonus": 10, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "b9bb16f087cdcb38ecc28a44b6ec137460b5fb890a81bf590fd8763efb76a3e4", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 534, - "action_hand": "right", - "action_id": "one@528", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 528, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 983, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 183, - "maximum_stamina": 993, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 912, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 974, - "facing_y": 226, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 253, - "queued_actions": 0, - "stamina": 978, - "stance": "orthodox", - "stunned_ticks": 6, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 166, - "left_cut": 0, - "left_eye": 88, - "right_cut": 0, - "right_eye": 23, - "swelling": 45 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999765, - "result": null, - "round_number": 1, - "tick": 535 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 535 - }, - { - "attack_one": { - "active": 2, - "age": 8, - "class": "straight", - "combo_bonus": 10, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "7290149d90bceec2d9e55f6657a20e5c3e50dd35e443c185bd6e6492ae4392dd", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 534, - "action_hand": "right", - "action_id": "one@528", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 528, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 983, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 183, - "maximum_stamina": 993, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 913, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 983, - "facing_y": 183, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 253, - "queued_actions": 0, - "stamina": 979, - "stance": "orthodox", - "stunned_ticks": 5, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 166, - "left_cut": 0, - "left_eye": 88, - "right_cut": 0, - "right_eye": 23, - "swelling": 45 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999764, - "result": null, - "round_number": 1, - "tick": 536 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 536 - }, - { - "attack_one": { - "active": 2, - "age": 9, - "class": "straight", - "combo_bonus": 10, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "b6864156138ef8a45d51358fb93959d6acbc1260198162436e0d902e370eb2cc", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 534, - "action_hand": "right", - "action_id": "one@528", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 528, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 983, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 183, - "maximum_stamina": 993, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 914, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 990, - "facing_y": 140, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 253, - "queued_actions": 0, - "stamina": 980, - "stance": "orthodox", - "stunned_ticks": 4, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 166, - "left_cut": 0, - "left_eye": 88, - "right_cut": 0, - "right_eye": 23, - "swelling": 45 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999763, - "result": null, - "round_number": 1, - "tick": 537 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 537 - }, - { - "attack_one": { - "active": 2, - "age": 10, - "class": "straight", - "combo_bonus": 10, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "423bcaca0b5bce6e02aad33a169a0c5b59d774a005967cedae4b1c64cc3018b5", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 534, - "action_hand": "right", - "action_id": "one@528", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 528, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 983, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 183, - "maximum_stamina": 993, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 915, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 995, - "facing_y": 97, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 253, - "queued_actions": 0, - "stamina": 981, - "stance": "orthodox", - "stunned_ticks": 3, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 166, - "left_cut": 0, - "left_eye": 88, - "right_cut": 0, - "right_eye": 23, - "swelling": 45 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999762, - "result": null, - "round_number": 1, - "tick": 538 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 538 - }, - { - "attack_one": { - "active": 2, - "age": 11, - "class": "straight", - "combo_bonus": 10, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "7b6960cc6990bc03e9c4804e618898d13c6653fca471aafbc821fade46c37d46", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 534, - "action_hand": "right", - "action_id": "one@528", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 528, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 983, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 183, - "maximum_stamina": 993, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 916, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 999, - "facing_y": 54, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 253, - "queued_actions": 0, - "stamina": 982, - "stance": "orthodox", - "stunned_ticks": 2, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 166, - "left_cut": 0, - "left_eye": 88, - "right_cut": 0, - "right_eye": 23, - "swelling": 45 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999761, - "result": null, - "round_number": 1, - "tick": 539 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 539 - }, - { - "attack_one": { - "active": 2, - "age": 12, - "class": "straight", - "combo_bonus": 10, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "46b31f5bf0efa4ed7527a16132706452740660894b42228b9520af995079bc63", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 534, - "action_hand": "right", - "action_id": "one@528", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 528, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 983, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 183, - "maximum_stamina": 993, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 917, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": 10, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 253, - "queued_actions": 0, - "stamina": 983, - "stance": "orthodox", - "stunned_ticks": 1, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 166, - "left_cut": 0, - "left_eye": 88, - "right_cut": 0, - "right_eye": 23, - "swelling": 45 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999760, - "result": null, - "round_number": 1, - "tick": 540 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 540 - }, - { - "attack_one": { - "active": 2, - "age": 13, - "class": "straight", - "combo_bonus": 10, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "da3839d7305132b9c61ad7228b2ea39c0816c5fcfd1c5ba1d97d6856247679a1", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 534, - "action_hand": "right", - "action_id": "one@528", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 528, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 983, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 183, - "maximum_stamina": 993, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 918, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 999, - "facing_y": -34, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 253, - "queued_actions": 0, - "stamina": 987, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 166, - "left_cut": 0, - "left_eye": 88, - "right_cut": 0, - "right_eye": 23, - "swelling": 45 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999759, - "result": null, - "round_number": 1, - "tick": 541 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 541 - }, - { - "attack_one": { - "active": 2, - "age": 14, - "class": "straight", - "combo_bonus": 10, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "55681c96643d66ce0112b2b03a0f9965bf7792d4733c60945caa8493613a5919", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 534, - "action_hand": "right", - "action_id": "one@528", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 528, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 983, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 183, - "maximum_stamina": 993, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 919, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 997, - "facing_y": -78, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 254, - "queued_actions": 0, - "stamina": 991, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 166, - "left_cut": 0, - "left_eye": 88, - "right_cut": 0, - "right_eye": 23, - "swelling": 45 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999758, - "result": null, - "round_number": 1, - "tick": 542 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 542 - }, - { - "attack_one": { - "active": 2, - "age": 15, - "class": "straight", - "combo_bonus": 10, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "037d30fa154fd5907f93c56a023a6426fe81027a0c9d7b629044462c659d0900", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 534, - "action_hand": "right", - "action_id": "one@528", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 528, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 983, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 183, - "maximum_stamina": 993, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 920, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 993, - "facing_y": -121, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 254, - "queued_actions": 0, - "stamina": 995, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 166, - "left_cut": 0, - "left_eye": 88, - "right_cut": 0, - "right_eye": 23, - "swelling": 45 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999757, - "result": null, - "round_number": 1, - "tick": 543 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 543 - }, - { - "attack_one": { - "active": 2, - "age": 16, - "class": "straight", - "combo_bonus": 10, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "c40a77984182f4a62e46e0e3cc347092eea1ab7e1f313c14e8d3151a45c0a1db", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 534, - "action_hand": "right", - "action_id": "one@528", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 528, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 983, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 183, - "maximum_stamina": 993, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 921, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 255, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 166, - "left_cut": 0, - "left_eye": 88, - "right_cut": 0, - "right_eye": 23, - "swelling": 45 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999756, - "result": null, - "round_number": 1, - "tick": 544 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 544 - }, - { - "attack_one": { - "active": 2, - "age": 17, - "class": "straight", - "combo_bonus": 10, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "6028e6d1b44708fbe0d04730cad4fbccbc64f1af49740efdfa77661465d805d2", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 534, - "action_hand": "right", - "action_id": "one@528", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 528, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 983, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 183, - "maximum_stamina": 993, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 922, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 255, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 166, - "left_cut": 0, - "left_eye": 88, - "right_cut": 0, - "right_eye": 23, - "swelling": 45 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999755, - "result": null, - "round_number": 1, - "tick": 545 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 545 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "2febf8b3bc78e245c6cc9b342eed1cc95f4354e7248d85bded2fee5bcd168465", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 534, - "action_hand": "right", - "action_id": "one@528", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 528, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 983, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 183, - "maximum_stamina": 993, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 926, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 256, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 166, - "left_cut": 0, - "left_eye": 88, - "right_cut": 0, - "right_eye": 23, - "swelling": 45 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999754, - "result": null, - "round_number": 1, - "tick": 546 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 546 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "79808045c1129827bd95209bb5dbec08c7a83eae33e79118a479f575a715162c", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 534, - "action_hand": "right", - "action_id": "one@528", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 528, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 983, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 183, - "maximum_stamina": 993, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 930, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 256, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 166, - "left_cut": 0, - "left_eye": 88, - "right_cut": 0, - "right_eye": 23, - "swelling": 45 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999753, - "result": null, - "round_number": 1, - "tick": 547 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 547 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "ae8b2dcef1d203252ee9a12d9503c260448dfd65423fed6a239be5448a6f294b", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 534, - "action_hand": "right", - "action_id": "one@528", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 528, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 983, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 183, - "maximum_stamina": 993, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 934, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 257, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 166, - "left_cut": 0, - "left_eye": 88, - "right_cut": 0, - "right_eye": 23, - "swelling": 45 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999752, - "result": null, - "round_number": 1, - "tick": 548 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 548 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "b2bcaf02e6cbe57c620dd48cf8aed59dab232c32b83cece0e216d8373933e08f", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 534, - "action_hand": "right", - "action_id": "one@528", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 528, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 983, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 183, - "maximum_stamina": 993, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 938, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 257, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 166, - "left_cut": 0, - "left_eye": 88, - "right_cut": 0, - "right_eye": 23, - "swelling": 45 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999751, - "result": null, - "round_number": 1, - "tick": 549 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 549 - }, - { - "attack_one": { - "active": 3, - "age": 0, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "power", - "recovery": 13, - "resolved": false, - "startup": 8, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "b338ee16962ed534d84e4322dad5d56951e2af8a4580844738ce5783150122fb", - "events": [ - { - "action_id": "one@550", - "actor_id": "one", - "amount": 0, - "blood": 0, - "detail": "right:straight:head", - "direction": 0, - "event_id": 29, - "kind": "punch_start", - "target_id": null, - "tick": 550 - } - ], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 3, - "action_contact_tick": null, - "action_hand": "right", - "action_id": "one@550", - "action_key": "straight:right:head:power", - "action_power": "power", - "action_recovery_ticks": 13, - "action_start_tick": 550, - "action_startup_ticks": 8, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 975, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 184, - "maximum_stamina": 989, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 839, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 171, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 166, - "left_cut": 0, - "left_eye": 88, - "right_cut": 0, - "right_eye": 23, - "swelling": 45 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999750, - "result": null, - "round_number": 1, - "tick": 550 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 550 - }, - { - "attack_one": { - "active": 3, - "age": 1, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "power", - "recovery": 13, - "resolved": false, - "startup": 8, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "17af76df2959c7d427684bb685c60e0698b43acfa181a42ce0265af8a2ff5e18", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 3, - "action_contact_tick": null, - "action_hand": "right", - "action_id": "one@550", - "action_key": "straight:right:head:power", - "action_power": "power", - "action_recovery_ticks": 13, - "action_start_tick": 550, - "action_startup_ticks": 8, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 975, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 184, - "maximum_stamina": 989, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 840, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 171, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 166, - "left_cut": 0, - "left_eye": 88, - "right_cut": 0, - "right_eye": 23, - "swelling": 45 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999749, - "result": null, - "round_number": 1, - "tick": 551 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 551 - }, - { - "attack_one": { - "active": 3, - "age": 2, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "power", - "recovery": 13, - "resolved": false, - "startup": 8, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "c2cd3a92ad3db7344e6c3c87b4934f7df3a897a0bb19b11257edddf1e2f4549d", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 3, - "action_contact_tick": null, - "action_hand": "right", - "action_id": "one@550", - "action_key": "straight:right:head:power", - "action_power": "power", - "action_recovery_ticks": 13, - "action_start_tick": 550, - "action_startup_ticks": 8, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 975, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 184, - "maximum_stamina": 989, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 841, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 172, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 166, - "left_cut": 0, - "left_eye": 88, - "right_cut": 0, - "right_eye": 23, - "swelling": 45 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999748, - "result": null, - "round_number": 1, - "tick": 552 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 552 - }, - { - "attack_one": { - "active": 3, - "age": 3, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "power", - "recovery": 13, - "resolved": false, - "startup": 8, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "a88246abbadef54d7213b54fdd78668103f57cd31d1ecaf78497a53c446c7498", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 3, - "action_contact_tick": null, - "action_hand": "right", - "action_id": "one@550", - "action_key": "straight:right:head:power", - "action_power": "power", - "action_recovery_ticks": 13, - "action_start_tick": 550, - "action_startup_ticks": 8, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 975, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 184, - "maximum_stamina": 989, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 842, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 172, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 166, - "left_cut": 0, - "left_eye": 88, - "right_cut": 0, - "right_eye": 23, - "swelling": 45 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999747, - "result": null, - "round_number": 1, - "tick": 553 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 553 - }, - { - "attack_one": { - "active": 3, - "age": 4, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "power", - "recovery": 13, - "resolved": false, - "startup": 8, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "097a6de15df4a665d868d3fb10c0edcefa617bece4dbaca00a37a1b105240ef0", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 3, - "action_contact_tick": null, - "action_hand": "right", - "action_id": "one@550", - "action_key": "straight:right:head:power", - "action_power": "power", - "action_recovery_ticks": 13, - "action_start_tick": 550, - "action_startup_ticks": 8, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 975, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 184, - "maximum_stamina": 989, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 843, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 173, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 166, - "left_cut": 0, - "left_eye": 88, - "right_cut": 0, - "right_eye": 23, - "swelling": 45 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999746, - "result": null, - "round_number": 1, - "tick": 554 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 554 - }, - { - "attack_one": { - "active": 3, - "age": 5, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "power", - "recovery": 13, - "resolved": false, - "startup": 8, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "99464fbf94442fee73d569a2987ae20aff1355a64dd74a3728e50fcb00dea6eb", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 3, - "action_contact_tick": null, - "action_hand": "right", - "action_id": "one@550", - "action_key": "straight:right:head:power", - "action_power": "power", - "action_recovery_ticks": 13, - "action_start_tick": 550, - "action_startup_ticks": 8, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 975, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 184, - "maximum_stamina": 989, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 844, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 173, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 166, - "left_cut": 0, - "left_eye": 88, - "right_cut": 0, - "right_eye": 23, - "swelling": 45 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999745, - "result": null, - "round_number": 1, - "tick": 555 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 555 - }, - { - "attack_one": { - "active": 3, - "age": 6, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "power", - "recovery": 13, - "resolved": false, - "startup": 8, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "8b2ffca67f1ec932616c7036b1795ca5585e046925094a77a4b7066e49be7462", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 3, - "action_contact_tick": null, - "action_hand": "right", - "action_id": "one@550", - "action_key": "straight:right:head:power", - "action_power": "power", - "action_recovery_ticks": 13, - "action_start_tick": 550, - "action_startup_ticks": 8, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 975, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 184, - "maximum_stamina": 989, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 845, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 174, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 166, - "left_cut": 0, - "left_eye": 88, - "right_cut": 0, - "right_eye": 23, - "swelling": 45 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999744, - "result": null, - "round_number": 1, - "tick": 556 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 556 - }, - { - "attack_one": { - "active": 3, - "age": 7, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "power", - "recovery": 13, - "resolved": false, - "startup": 8, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "19d64f35a87e328a3dc39169c7a4deaa6e9a879bd144b2c2934bfe980fb73e30", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 3, - "action_contact_tick": null, - "action_hand": "right", - "action_id": "one@550", - "action_key": "straight:right:head:power", - "action_power": "power", - "action_recovery_ticks": 13, - "action_start_tick": 550, - "action_startup_ticks": 8, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 975, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 184, - "maximum_stamina": 989, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 846, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 174, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 166, - "left_cut": 0, - "left_eye": 88, - "right_cut": 0, - "right_eye": 23, - "swelling": 45 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999743, - "result": null, - "round_number": 1, - "tick": 557 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 557 - }, - { - "attack_one": { - "active": 3, - "age": 8, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "power", - "recovery": 13, - "resolved": true, - "startup": 8, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "2c885c0ca7cd494ddbc3cbf9bdb50c087739421209e424a4afdb6fea42aec26b", - "events": [ - { - "action_id": "one@550", - "actor_id": "one", - "amount": 84, - "blood": 21, - "detail": "straight:head", - "direction": -1, - "event_id": 30, - "kind": "hit", - "target_id": "two", - "tick": 558 - }, - { - "action_id": null, - "actor_id": "one", - "amount": 84, - "blood": 0, - "detail": "", - "direction": 0, - "event_id": 31, - "kind": "stun", - "target_id": "two", - "tick": 558 - } - ], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 3, - "action_contact_tick": 558, - "action_hand": "right", - "action_id": "one@550", - "action_key": "straight:right:head:power", - "action_power": "power", - "action_recovery_ticks": 13, - "action_start_tick": 550, - "action_startup_ticks": 8, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 975, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 184, - "maximum_stamina": 989, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 847, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 97, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 29, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 250, - "left_cut": 0, - "left_eye": 146, - "right_cut": 0, - "right_eye": 23, - "swelling": 72 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999742, - "result": null, - "round_number": 1, - "tick": 558 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 558 - }, - { - "attack_one": { - "active": 3, - "age": 9, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "power", - "recovery": 13, - "resolved": true, - "startup": 8, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "81627b36b6481b8db2052afc580c995a3288cf6171a968ae7755d2dfb0af9778", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 3, - "action_contact_tick": 558, - "action_hand": "right", - "action_id": "one@550", - "action_key": "straight:right:head:power", - "action_power": "power", - "action_recovery_ticks": 13, - "action_start_tick": 550, - "action_startup_ticks": 8, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 975, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 184, - "maximum_stamina": 989, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 848, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 97, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 28, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 250, - "left_cut": 0, - "left_eye": 146, - "right_cut": 0, - "right_eye": 23, - "swelling": 72 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999741, - "result": null, - "round_number": 1, - "tick": 559 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 559 - }, - { - "attack_one": { - "active": 3, - "age": 10, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "power", - "recovery": 13, - "resolved": true, - "startup": 8, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "24f8a7be1fdaea22db0aa6d1ebb40885d238eaa7df20f1faa62cc6d7e29d3edd", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 3, - "action_contact_tick": 558, - "action_hand": "right", - "action_id": "one@550", - "action_key": "straight:right:head:power", - "action_power": "power", - "action_recovery_ticks": 13, - "action_start_tick": 550, - "action_startup_ticks": 8, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 975, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 184, - "maximum_stamina": 989, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 849, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 97, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 27, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 250, - "left_cut": 0, - "left_eye": 146, - "right_cut": 0, - "right_eye": 23, - "swelling": 72 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999740, - "result": null, - "round_number": 1, - "tick": 560 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 560 - }, - { - "attack_one": { - "active": 3, - "age": 11, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "power", - "recovery": 13, - "resolved": true, - "startup": 8, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "b40804e1ac935ff2cbb60ced9d5cfa6986abff840491be4add1537c8e4033eb3", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 3, - "action_contact_tick": 558, - "action_hand": "right", - "action_id": "one@550", - "action_key": "straight:right:head:power", - "action_power": "power", - "action_recovery_ticks": 13, - "action_start_tick": 550, - "action_startup_ticks": 8, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 975, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 184, - "maximum_stamina": 989, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 850, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 97, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 26, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 250, - "left_cut": 0, - "left_eye": 146, - "right_cut": 0, - "right_eye": 23, - "swelling": 72 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999739, - "result": null, - "round_number": 1, - "tick": 561 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 561 - }, - { - "attack_one": { - "active": 3, - "age": 12, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "power", - "recovery": 13, - "resolved": true, - "startup": 8, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "69ad433f8534e143c09a34e4a506d18e3dff7cd60753149781b281cbcc947658", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 3, - "action_contact_tick": 558, - "action_hand": "right", - "action_id": "one@550", - "action_key": "straight:right:head:power", - "action_power": "power", - "action_recovery_ticks": 13, - "action_start_tick": 550, - "action_startup_ticks": 8, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 975, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 184, - "maximum_stamina": 989, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 851, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 97, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 25, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 250, - "left_cut": 0, - "left_eye": 146, - "right_cut": 0, - "right_eye": 23, - "swelling": 72 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999738, - "result": null, - "round_number": 1, - "tick": 562 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 562 - }, - { - "attack_one": { - "active": 3, - "age": 13, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "power", - "recovery": 13, - "resolved": true, - "startup": 8, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "5efd742ada6819678f84cfba98bc9ce9a08fff837e91159a7c8e3f61831792af", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 3, - "action_contact_tick": 558, - "action_hand": "right", - "action_id": "one@550", - "action_key": "straight:right:head:power", - "action_power": "power", - "action_recovery_ticks": 13, - "action_start_tick": 550, - "action_startup_ticks": 8, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 975, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 184, - "maximum_stamina": 989, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 852, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 97, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 24, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 250, - "left_cut": 0, - "left_eye": 146, - "right_cut": 0, - "right_eye": 23, - "swelling": 72 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999737, - "result": null, - "round_number": 1, - "tick": 563 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 563 - }, - { - "attack_one": { - "active": 3, - "age": 14, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "power", - "recovery": 13, - "resolved": true, - "startup": 8, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "9f622d59e6f6d2bee70516a12b0460937e5818107d89232d0eabf625e1ce2d8c", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 3, - "action_contact_tick": 558, - "action_hand": "right", - "action_id": "one@550", - "action_key": "straight:right:head:power", - "action_power": "power", - "action_recovery_ticks": 13, - "action_start_tick": 550, - "action_startup_ticks": 8, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 975, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 184, - "maximum_stamina": 989, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 853, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 97, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 23, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 250, - "left_cut": 0, - "left_eye": 146, - "right_cut": 0, - "right_eye": 23, - "swelling": 72 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999736, - "result": null, - "round_number": 1, - "tick": 564 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 564 - }, - { - "attack_one": { - "active": 3, - "age": 15, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "power", - "recovery": 13, - "resolved": true, - "startup": 8, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "7560dd562dd38c27fcdbdbf8dd24a33de6c6ba64a9c213a525f4a1c82922ea5f", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 3, - "action_contact_tick": 558, - "action_hand": "right", - "action_id": "one@550", - "action_key": "straight:right:head:power", - "action_power": "power", - "action_recovery_ticks": 13, - "action_start_tick": 550, - "action_startup_ticks": 8, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 975, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 184, - "maximum_stamina": 989, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 854, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 97, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 22, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 250, - "left_cut": 0, - "left_eye": 146, - "right_cut": 0, - "right_eye": 23, - "swelling": 72 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999735, - "result": null, - "round_number": 1, - "tick": 565 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 565 - }, - { - "attack_one": { - "active": 3, - "age": 16, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "power", - "recovery": 13, - "resolved": true, - "startup": 8, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "ad0a88a92c3c2dda362c4e4a5e806a53d8e7d3239723c9f1f85e93c1cd8062ef", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 3, - "action_contact_tick": 558, - "action_hand": "right", - "action_id": "one@550", - "action_key": "straight:right:head:power", - "action_power": "power", - "action_recovery_ticks": 13, - "action_start_tick": 550, - "action_startup_ticks": 8, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 975, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 184, - "maximum_stamina": 989, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 855, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 97, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 21, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 250, - "left_cut": 0, - "left_eye": 146, - "right_cut": 0, - "right_eye": 23, - "swelling": 72 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999734, - "result": null, - "round_number": 1, - "tick": 566 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 566 - }, - { - "attack_one": { - "active": 3, - "age": 17, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "power", - "recovery": 13, - "resolved": true, - "startup": 8, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "1a77c7758df636feff4632c252f47b4cddbfee87f5ae7a9e20e864d591dd0f02", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 3, - "action_contact_tick": 558, - "action_hand": "right", - "action_id": "one@550", - "action_key": "straight:right:head:power", - "action_power": "power", - "action_recovery_ticks": 13, - "action_start_tick": 550, - "action_startup_ticks": 8, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 975, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 184, - "maximum_stamina": 989, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 856, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 97, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 20, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 250, - "left_cut": 0, - "left_eye": 146, - "right_cut": 0, - "right_eye": 23, - "swelling": 72 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999733, - "result": null, - "round_number": 1, - "tick": 567 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 567 - }, - { - "attack_one": { - "active": 3, - "age": 18, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "power", - "recovery": 13, - "resolved": true, - "startup": 8, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "42e1c0105c1e82309e63ef371a64bad4e1c67b671cbcd0497471dac43772c1b3", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 3, - "action_contact_tick": 558, - "action_hand": "right", - "action_id": "one@550", - "action_key": "straight:right:head:power", - "action_power": "power", - "action_recovery_ticks": 13, - "action_start_tick": 550, - "action_startup_ticks": 8, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 975, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 184, - "maximum_stamina": 989, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 857, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 97, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 19, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 250, - "left_cut": 0, - "left_eye": 146, - "right_cut": 0, - "right_eye": 23, - "swelling": 72 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999732, - "result": null, - "round_number": 1, - "tick": 568 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 568 - }, - { - "attack_one": { - "active": 3, - "age": 19, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "power", - "recovery": 13, - "resolved": true, - "startup": 8, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "96006c21d09332e3e7daec8a9aa6a37764817650f3dcd50efca2d02764a12357", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 3, - "action_contact_tick": 558, - "action_hand": "right", - "action_id": "one@550", - "action_key": "straight:right:head:power", - "action_power": "power", - "action_recovery_ticks": 13, - "action_start_tick": 550, - "action_startup_ticks": 8, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 975, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 184, - "maximum_stamina": 989, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 858, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 97, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 18, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 250, - "left_cut": 0, - "left_eye": 146, - "right_cut": 0, - "right_eye": 23, - "swelling": 72 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999731, - "result": null, - "round_number": 1, - "tick": 569 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 569 - }, - { - "attack_one": { - "active": 3, - "age": 20, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "power", - "recovery": 13, - "resolved": true, - "startup": 8, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "2dea52584f886f24943f8a9913d77113e727092412eab6cbf965fa8d70b5a3af", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 3, - "action_contact_tick": 558, - "action_hand": "right", - "action_id": "one@550", - "action_key": "straight:right:head:power", - "action_power": "power", - "action_recovery_ticks": 13, - "action_start_tick": 550, - "action_startup_ticks": 8, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 975, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 184, - "maximum_stamina": 989, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 859, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 97, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 17, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 250, - "left_cut": 0, - "left_eye": 146, - "right_cut": 0, - "right_eye": 23, - "swelling": 72 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999730, - "result": null, - "round_number": 1, - "tick": 570 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 570 - }, - { - "attack_one": { - "active": 3, - "age": 21, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "power", - "recovery": 13, - "resolved": true, - "startup": 8, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "db78cdce9fb1c6c33f74536205861727af96173be66dee213cb1be4c0b054610", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 3, - "action_contact_tick": 558, - "action_hand": "right", - "action_id": "one@550", - "action_key": "straight:right:head:power", - "action_power": "power", - "action_recovery_ticks": 13, - "action_start_tick": 550, - "action_startup_ticks": 8, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 975, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 184, - "maximum_stamina": 989, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 860, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 97, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 16, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 250, - "left_cut": 0, - "left_eye": 146, - "right_cut": 0, - "right_eye": 23, - "swelling": 72 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999729, - "result": null, - "round_number": 1, - "tick": 571 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 571 - }, - { - "attack_one": { - "active": 3, - "age": 22, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "power", - "recovery": 13, - "resolved": true, - "startup": 8, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "dea9d69664ca0a777f9c3e3997f5dc12e2222714464c82db662d69ac634886d0", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 3, - "action_contact_tick": 558, - "action_hand": "right", - "action_id": "one@550", - "action_key": "straight:right:head:power", - "action_power": "power", - "action_recovery_ticks": 13, - "action_start_tick": 550, - "action_startup_ticks": 8, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 975, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 184, - "maximum_stamina": 989, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 861, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 97, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 15, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 250, - "left_cut": 0, - "left_eye": 146, - "right_cut": 0, - "right_eye": 23, - "swelling": 72 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999728, - "result": null, - "round_number": 1, - "tick": 572 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 572 - }, - { - "attack_one": { - "active": 3, - "age": 23, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "power", - "recovery": 13, - "resolved": true, - "startup": 8, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "16348989d8990111e3f6fb2c121e16a59d2053be590a9dbe260ca82c4ed88979", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 3, - "action_contact_tick": 558, - "action_hand": "right", - "action_id": "one@550", - "action_key": "straight:right:head:power", - "action_power": "power", - "action_recovery_ticks": 13, - "action_start_tick": 550, - "action_startup_ticks": 8, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 975, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 184, - "maximum_stamina": 989, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 862, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 97, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 14, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 250, - "left_cut": 0, - "left_eye": 146, - "right_cut": 0, - "right_eye": 23, - "swelling": 72 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999727, - "result": null, - "round_number": 1, - "tick": 573 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 573 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "c19529f8d09e6f32b5cd5ee3dc36d989ff6ae4597e1e2d0763e250c721d89fbe", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 3, - "action_contact_tick": 558, - "action_hand": "right", - "action_id": "one@550", - "action_key": "straight:right:head:power", - "action_power": "power", - "action_recovery_ticks": 13, - "action_start_tick": 550, - "action_startup_ticks": 8, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 975, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 184, - "maximum_stamina": 989, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 865, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 97, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 13, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 250, - "left_cut": 0, - "left_eye": 146, - "right_cut": 0, - "right_eye": 23, - "swelling": 72 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999726, - "result": null, - "round_number": 1, - "tick": 574 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 574 - }, - { - "attack_one": { - "active": 2, - "age": 0, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": false, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "9983ffbddcb0fb9facb9ea23f82a7e273aa6a779839729649d9e174321a69728", - "events": [ - { - "action_id": "one@575", - "actor_id": "one", - "amount": 0, - "blood": 0, - "detail": "right:straight:head", - "direction": 0, - "event_id": 32, - "kind": "punch_start", - "target_id": null, - "tick": 575 - } - ], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": null, - "action_hand": "right", - "action_id": "one@575", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 575, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 801, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 97, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 12, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 250, - "left_cut": 0, - "left_eye": 146, - "right_cut": 0, - "right_eye": 23, - "swelling": 72 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999725, - "result": null, - "round_number": 1, - "tick": 575 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 575 - }, - { - "attack_one": { - "active": 2, - "age": 1, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": false, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "e0cd3d5a35a07977e3462845b2bdd5135f80a71eb332308b51735537ce453ef0", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": null, - "action_hand": "right", - "action_id": "one@575", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 575, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 802, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 97, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 11, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 250, - "left_cut": 0, - "left_eye": 146, - "right_cut": 0, - "right_eye": 23, - "swelling": 72 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999724, - "result": null, - "round_number": 1, - "tick": 576 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 576 - }, - { - "attack_one": { - "active": 2, - "age": 2, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": false, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "6cc2548079f2edf86d11c39bf5076bc96145344313cdcae1caf2812c46ac8411", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": null, - "action_hand": "right", - "action_id": "one@575", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 575, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 803, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 97, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 10, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 250, - "left_cut": 0, - "left_eye": 146, - "right_cut": 0, - "right_eye": 23, - "swelling": 72 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999723, - "result": null, - "round_number": 1, - "tick": 577 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 577 - }, - { - "attack_one": { - "active": 2, - "age": 3, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": false, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "143685aa5fb1b7faddc097515014164fc08105a477fdc6d6da01b8f8a386e234", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": null, - "action_hand": "right", - "action_id": "one@575", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 575, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 804, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 97, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 9, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 250, - "left_cut": 0, - "left_eye": 146, - "right_cut": 0, - "right_eye": 23, - "swelling": 72 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999722, - "result": null, - "round_number": 1, - "tick": 578 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 578 - }, - { - "attack_one": { - "active": 2, - "age": 4, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": false, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "c841ee043aac12d01d9a3545b326091c1cde96f34a31cd9dcd1272858338c87e", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": null, - "action_hand": "right", - "action_id": "one@575", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 575, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 805, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 97, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 8, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 250, - "left_cut": 0, - "left_eye": 146, - "right_cut": 0, - "right_eye": 23, - "swelling": 72 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999721, - "result": null, - "round_number": 1, - "tick": 579 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 579 - }, - { - "attack_one": { - "active": 2, - "age": 5, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": false, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "feb8f537ea13ad9e31e8a3ec0c9e7184cf5ab948440c3c9a474a9065121e1cba", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": null, - "action_hand": "right", - "action_id": "one@575", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 575, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 806, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 97, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 7, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 250, - "left_cut": 0, - "left_eye": 146, - "right_cut": 0, - "right_eye": 23, - "swelling": 72 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999720, - "result": null, - "round_number": 1, - "tick": 580 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 580 - }, - { - "attack_one": { - "active": 2, - "age": 6, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "43283767347b385bfff8037a1f846b1d37d6662639d0ac06fdeaa582cdb2f327", - "events": [ - { - "action_id": "one@575", - "actor_id": "one", - "amount": 57, - "blood": 14, - "detail": "straight:head", - "direction": -1, - "event_id": 33, - "kind": "hit", - "target_id": "two", - "tick": 581 - } - ], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 581, - "action_hand": "right", - "action_id": "one@575", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 575, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 807, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 44, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 6, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999719, - "result": null, - "round_number": 1, - "tick": 581 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 581 - }, - { - "attack_one": { - "active": 2, - "age": 7, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "4fd8e50d2a71fdb7f51efa2ce369b4fc1282ab2c75c3d98b4464e9d20c3d0d56", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 581, - "action_hand": "right", - "action_id": "one@575", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 575, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 808, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 44, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 5, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999718, - "result": null, - "round_number": 1, - "tick": 582 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 582 - }, - { - "attack_one": { - "active": 2, - "age": 8, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "d0f394847535938e24cf93c7e490dbdb9cbae5f97291c10fbd18f92498518364", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 581, - "action_hand": "right", - "action_id": "one@575", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 575, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 809, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 44, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 4, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999717, - "result": null, - "round_number": 1, - "tick": 583 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 583 - }, - { - "attack_one": { - "active": 2, - "age": 9, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "d0b48816c2cb87b9c196fbcde6bb4f10ad4b8f073d74431c882ff36e49cc09d9", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 581, - "action_hand": "right", - "action_id": "one@575", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 575, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 810, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 44, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 3, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999716, - "result": null, - "round_number": 1, - "tick": 584 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 584 - }, - { - "attack_one": { - "active": 2, - "age": 10, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "1003d52efd16e0e7f9e8b149f1e74990bbb70f634c64a2c7e3c3d23742f7aab7", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 581, - "action_hand": "right", - "action_id": "one@575", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 575, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 811, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 44, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 2, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999715, - "result": null, - "round_number": 1, - "tick": 585 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 585 - }, - { - "attack_one": { - "active": 2, - "age": 11, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "4efc850371677d031f523dd5aabb35c42332f688cd3b837c6124555a27a6346d", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 581, - "action_hand": "right", - "action_id": "one@575", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 575, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 812, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 44, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 1, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999714, - "result": null, - "round_number": 1, - "tick": 586 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 586 - }, - { - "attack_one": { - "active": 2, - "age": 12, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "d20bdb1f08a342bfe6398caa9b50cbd816efcff4f7fdb21beb9e620b47b3fe4e", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 581, - "action_hand": "right", - "action_id": "one@575", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 575, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 813, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 44, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999713, - "result": null, - "round_number": 1, - "tick": 587 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 587 - }, - { - "attack_one": { - "active": 2, - "age": 13, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "cd9b07123f0767ee94ed70a614d8ae9beea2f163c687daa8f6e3d418b0447af0", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 581, - "action_hand": "right", - "action_id": "one@575", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 575, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 814, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 45, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999712, - "result": null, - "round_number": 1, - "tick": 588 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 588 - }, - { - "attack_one": { - "active": 2, - "age": 14, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "0c7b93035e4554a4ab2de952d70a35a3c43c98991474888007e586a17e244d83", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 581, - "action_hand": "right", - "action_id": "one@575", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 575, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 815, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 45, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999711, - "result": null, - "round_number": 1, - "tick": 589 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 589 - }, - { - "attack_one": { - "active": 2, - "age": 15, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "053615cd2b3e87665056a53fee0d5256d04b482e8fac1235dae6c9e5f41b4b19", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 581, - "action_hand": "right", - "action_id": "one@575", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 575, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 816, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 46, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999710, - "result": null, - "round_number": 1, - "tick": 590 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 590 - }, - { - "attack_one": { - "active": 2, - "age": 16, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "8bd6a809c8f9333c3c34fb6701d1b299310a99c1a7d520ce900a007e79247baa", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 581, - "action_hand": "right", - "action_id": "one@575", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 575, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 817, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 46, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999709, - "result": null, - "round_number": 1, - "tick": 591 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 591 - }, - { - "attack_one": { - "active": 2, - "age": 17, - "class": "straight", - "combo_bonus": 0, - "hand": "right", - "power": "normal", - "recovery": 10, - "resolved": true, - "startup": 6, - "target": "head" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "4d9be169805d06926cfb180e7d1e35d84c7db679783b63351b757ff8769090d1", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 581, - "action_hand": "right", - "action_id": "one@575", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 575, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 818, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 47, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999708, - "result": null, - "round_number": 1, - "tick": 592 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 592 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "3fbe1fc3f318fc0878d2c597718acbcc09e48ad737f3a2bc4ca6496f40b00c9d", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 581, - "action_hand": "right", - "action_id": "one@575", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 575, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 821, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 47, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999707, - "result": null, - "round_number": 1, - "tick": 593 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 593 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "689603e71d94c5a207f69c44cede59b6450790e33e64ef42534a11b885b19dba", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 581, - "action_hand": "right", - "action_id": "one@575", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 575, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 824, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 48, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 48, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999706, - "result": null, - "round_number": 1, - "tick": 594 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 594 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "79e3e2e6c2dadd483ec00eaa25ba812484b4b53d87ecbfdeaa5866a29c6e4b3f", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 581, - "action_hand": "right", - "action_id": "one@575", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 575, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 138, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 827, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -141, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 48, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 3, - "velocity_y": 0, - "warnings": 0, - "x": 51, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999705, - "result": null, - "round_number": 1, - "tick": 595 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 595 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "a533ff04f4cd05e5017419e9ff6ecedacd60856952294bf6d2822cc7f735a124", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 581, - "action_hand": "right", - "action_id": "one@575", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 575, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 141, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 830, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 991, - "facing_y": -147, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 49, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 5, - "velocity_y": -1, - "warnings": 0, - "x": 56, - "y": 138 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999704, - "result": null, - "round_number": 1, - "tick": 596 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 596 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "cefb735a017e9fb73f68dfa6888632146b6c321cdc8c68ea4e03ac2ea054305d", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 581, - "action_hand": "right", - "action_id": "one@575", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 575, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -991, - "facing_y": 147, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 833, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 990, - "facing_y": -145, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 49, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 6, - "velocity_y": -1, - "warnings": 0, - "x": 61, - "y": 137 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999703, - "result": null, - "round_number": 1, - "tick": 597 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 597 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "bac2ba934a7481bd9985ac50cefd95e7f340a17e5636427228e9d42ee9a13862", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 581, - "action_hand": "right", - "action_id": "one@575", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 575, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -990, - "facing_y": 145, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 836, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 990, - "facing_y": -145, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 50, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 6, - "velocity_y": -1, - "warnings": 0, - "x": 68, - "y": 136 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999702, - "result": null, - "round_number": 1, - "tick": 598 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 598 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "bae222fd42d2a9cefde6181009887aeb8515649489bcbf5aade97439e90bfc9c", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 581, - "action_hand": "right", - "action_id": "one@575", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 575, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -990, - "facing_y": 145, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 839, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 989, - "facing_y": -144, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 50, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 6, - "velocity_y": -1, - "warnings": 0, - "x": 74, - "y": 135 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999701, - "result": null, - "round_number": 1, - "tick": 599 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 599 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "e0ba15f3606b0766b716059d806072f6108ba8096177ae335dcc0fd9e130f4b2", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 581, - "action_hand": "right", - "action_id": "one@575", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 575, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -989, - "facing_y": 144, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 842, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": -146, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 51, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 6, - "velocity_y": -1, - "warnings": 0, - "x": 81, - "y": 134 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999700, - "result": null, - "round_number": 1, - "tick": 600 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 600 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "19d8e54e428b77a0b9a1075a5e12d27106370624860cadd245f5654e3a7041fa", - "events": [ - { - "action_id": null, - "actor_id": "two", - "amount": 0, - "blood": 0, - "detail": "", - "direction": 0, - "event_id": 34, - "kind": "clinch_start", - "target_id": "one", - "tick": 601 - } - ], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 581, - "action_hand": "right", - "action_id": "one@575", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 575, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 146, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 845, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 8, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": -146, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 51, - "queued_actions": 0, - "stamina": 972, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 3, - "velocity_y": 0, - "warnings": 0, - "x": 84, - "y": 134 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999699, - "result": null, - "round_number": 1, - "tick": 601 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 601 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "62bc03f8f7499e8aff24be20616df6393ae197e7e9871c0d94e502d0251a4654", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 581, - "action_hand": "right", - "action_id": "one@575", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 575, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 151, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 848, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 7, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": -146, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 51, - "queued_actions": 0, - "stamina": 973, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 2, - "velocity_y": 0, - "warnings": 0, - "x": 85, - "y": 134 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999698, - "result": null, - "round_number": 1, - "tick": 602 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 602 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "231f4d4ff5198dc740d9c0baa2a2ac4e6621f26adc381ffc469c8c944bb1d342", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 581, - "action_hand": "right", - "action_id": "one@575", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 575, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 152, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 851, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 6, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": -146, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 51, - "queued_actions": 0, - "stamina": 974, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 1, - "velocity_y": 0, - "warnings": 0, - "x": 86, - "y": 133 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999697, - "result": null, - "round_number": 1, - "tick": 603 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 603 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "972a290311bb59b026a48b256f3d1e43bd5af14bed992402aa2dccc294316b86", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 581, - "action_hand": "right", - "action_id": "one@575", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 575, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 142, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 854, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 5, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": -146, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 51, - "queued_actions": 0, - "stamina": 975, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 87, - "y": 133 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999696, - "result": null, - "round_number": 1, - "tick": 604 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 604 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "f7befe6c1d37bf6a5aa41dd20f75b5ea1ecc52c29edb6cf5891e95ab8e479652", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 581, - "action_hand": "right", - "action_id": "one@575", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 575, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 144, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 857, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 4, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": -146, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 51, - "queued_actions": 0, - "stamina": 976, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 87, - "y": 133 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999695, - "result": null, - "round_number": 1, - "tick": 605 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 605 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "f46d22b3085f6190d5b0f0e513bb034d595798e5dba6ecc50de1eeb8805b175d", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 581, - "action_hand": "right", - "action_id": "one@575", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 575, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 144, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 860, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 3, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": -146, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 51, - "queued_actions": 0, - "stamina": 977, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 87, - "y": 133 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999694, - "result": null, - "round_number": 1, - "tick": 606 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 606 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "9af5310a55d26a20b06e4e68f30feb87127f553e5263b7f89579992da1b7b146", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 581, - "action_hand": "right", - "action_id": "one@575", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 575, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 144, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 863, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 2, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": -146, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 51, - "queued_actions": 0, - "stamina": 978, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 87, - "y": 133 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999693, - "result": null, - "round_number": 1, - "tick": 607 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 607 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "f00d740be35f4d22f365874fb0af683637d160c7bb65f00a63f2db5c02c1c9d0", - "events": [], - "fighters": [ - { - "action": "straight", - "action_active_ticks": 2, - "action_contact_tick": 581, - "action_hand": "right", - "action_id": "one@575", - "action_key": "straight:right:head:normal", - "action_power": "normal", - "action_recovery_ticks": 10, - "action_start_tick": 575, - "action_startup_ticks": 6, - "action_target": "head", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 144, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 866, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 1, - "clinch_ticks": 0, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": -146, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 51, - "queued_actions": 0, - "stamina": 979, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 87, - "y": 133 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999692, - "result": null, - "round_number": 1, - "tick": 608 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 608 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "72b464234d57853a378e6430c2d267c9d5fed255b01bc80e43ec8efa236caac7", - "events": [ - { - "action_id": null, - "actor_id": "two", - "amount": 0, - "blood": 0, - "detail": "", - "direction": 0, - "event_id": 35, - "kind": "clinch", - "target_id": "one", - "tick": 609 - } - ], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 45, - "conditioning": 970, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 144, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 847, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 170, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 45, - "conditioning": 991, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": -146, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 51, - "queued_actions": 0, - "stamina": 960, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 87, - "y": 133 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999691, - "result": null, - "round_number": 1, - "tick": 609 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 609 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "a3a1ea7357f2605e22e23c6941747f6cda3c104fc35f626edc49a91e97a51a0e", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 44, - "conditioning": 969, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 144, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 849, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 164, - "y": 121 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 44, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": -144, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 51, - "queued_actions": 0, - "stamina": 962, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 93, - "y": 133 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999690, - "result": null, - "round_number": 1, - "tick": 610 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 610 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "b5d6eb2b5cf99d9f0b5b7a43ac320a18f6a25fc429fc8901078ccbfc678f9021", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 43, - "conditioning": 969, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -986, - "facing_y": 166, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 851, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 159, - "y": 122 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 43, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 986, - "facing_y": -166, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 51, - "queued_actions": 0, - "stamina": 964, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 98, - "y": 132 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999689, - "result": null, - "round_number": 1, - "tick": 611 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 611 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "9f2755e30f5fea8f81ae8ade45cf26a735bf8a66ec29e07b9f89474e404728bb", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 42, - "conditioning": 969, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 853, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 159, - "y": 122 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 42, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 51, - "queued_actions": 0, - "stamina": 966, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 98, - "y": 132 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999688, - "result": null, - "round_number": 1, - "tick": 612 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 612 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "8ab193de17da1c3e593d62c829c0d45a95ffd987e073b9ddfd4721baf7d99fbe", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 41, - "conditioning": 969, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 855, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 159, - "y": 122 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 41, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 51, - "queued_actions": 0, - "stamina": 968, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 98, - "y": 132 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999687, - "result": null, - "round_number": 1, - "tick": 613 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 613 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "da04e32d650590ab5b5a52f1d72361e5bac7d0c964a37b947bc2ed16bf4d382c", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 40, - "conditioning": 969, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 857, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 159, - "y": 122 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 40, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 51, - "queued_actions": 0, - "stamina": 970, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 98, - "y": 132 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999686, - "result": null, - "round_number": 1, - "tick": 614 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 614 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "18f76c674edadf1820d38f67d27fe306f7c9f749ad04001af78e02869d0113f7", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 39, - "conditioning": 969, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 859, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 159, - "y": 122 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 39, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 51, - "queued_actions": 0, - "stamina": 972, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 98, - "y": 132 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999685, - "result": null, - "round_number": 1, - "tick": 615 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 615 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "daa42285f54dc95e664fb0ccbbf229037a899b01c443e7f40a147bde73535f96", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 38, - "conditioning": 969, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 861, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 159, - "y": 122 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 38, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 51, - "queued_actions": 0, - "stamina": 974, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 98, - "y": 132 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999684, - "result": null, - "round_number": 1, - "tick": 616 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 616 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "66c0c94e1c3603f934be3e8671f959e201e4cc6cde39c67a6243637e3f1c38ed", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 37, - "conditioning": 969, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 863, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 159, - "y": 122 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 37, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 51, - "queued_actions": 0, - "stamina": 976, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 98, - "y": 132 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999683, - "result": null, - "round_number": 1, - "tick": 617 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 617 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "d144523e2f23baab979b754a3d1a81ae1b7a5a5a0cd7bff661b5a9497621a546", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 36, - "conditioning": 969, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 865, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 159, - "y": 122 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 36, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 51, - "queued_actions": 0, - "stamina": 978, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 98, - "y": 132 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999682, - "result": null, - "round_number": 1, - "tick": 618 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 618 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "0fc9664d844c50b27647e6cd49cd2a87be6cccaf13e7a41079c8b457cf893a6f", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 35, - "conditioning": 969, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 987, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 867, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 159, - "y": 122 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 35, - "conditioning": 990, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 51, - "queued_actions": 0, - "stamina": 980, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 98, - "y": 132 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999681, - "result": null, - "round_number": 1, - "tick": 619 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 619 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "4ca9162da6c0bb8658fa6d79e253b8ad7d94ae3b49c3d382806cb678515b9d9d", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 34, - "conditioning": 968, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 986, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 869, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 159, - "y": 122 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 34, - "conditioning": 989, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 51, - "queued_actions": 0, - "stamina": 982, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 98, - "y": 132 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999680, - "result": null, - "round_number": 1, - "tick": 620 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 620 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "ff596197e8bb669f03302b57bcc0f7a8566f57f085793bd8cadf84ee531d3a08", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 33, - "conditioning": 968, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 986, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 871, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 159, - "y": 122 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 33, - "conditioning": 989, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 51, - "queued_actions": 0, - "stamina": 984, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 98, - "y": 132 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999679, - "result": null, - "round_number": 1, - "tick": 621 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 621 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "b0045bd1fc4ba2a29b67e894701b7eba2e151ea39508aeef98854b742679103f", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 32, - "conditioning": 968, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 986, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 873, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 159, - "y": 122 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 32, - "conditioning": 989, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 51, - "queued_actions": 0, - "stamina": 986, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 98, - "y": 132 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999678, - "result": null, - "round_number": 1, - "tick": 622 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 622 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "472415f63a24a686c229f618dbbe9c1de33d90b81d70da51fecd9e21f6f20c6d", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 31, - "conditioning": 968, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 986, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 875, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 159, - "y": 122 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 31, - "conditioning": 989, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 51, - "queued_actions": 0, - "stamina": 988, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 98, - "y": 132 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999677, - "result": null, - "round_number": 1, - "tick": 623 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 623 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "4b6156985805ab464ff5b8de011f0f07c91de4fd7f75989f2ce54b37373b567b", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 30, - "conditioning": 968, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 986, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 877, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 159, - "y": 122 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 30, - "conditioning": 989, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 51, - "queued_actions": 0, - "stamina": 990, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 98, - "y": 132 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999676, - "result": null, - "round_number": 1, - "tick": 624 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 624 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "03edfd886362e1aa98df139611367fa1e19def2a99dad8c58a6530613481b589", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 29, - "conditioning": 968, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 986, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 879, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 159, - "y": 122 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 29, - "conditioning": 989, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 51, - "queued_actions": 0, - "stamina": 992, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 98, - "y": 132 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999675, - "result": null, - "round_number": 1, - "tick": 625 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 625 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "9c867a2922562690440e4c5114cec627df7906ba88992a744727030faa8541e6", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 28, - "conditioning": 968, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 986, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 881, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 159, - "y": 122 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 28, - "conditioning": 989, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 51, - "queued_actions": 0, - "stamina": 994, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 98, - "y": 132 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999674, - "result": null, - "round_number": 1, - "tick": 626 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 626 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "5a6168100e0ccfd8886d4b68e679e45d822609c8f2744d7b87d83c932bb92403", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 27, - "conditioning": 968, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 986, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 883, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 159, - "y": 122 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 27, - "conditioning": 989, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 51, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 98, - "y": 132 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999673, - "result": null, - "round_number": 1, - "tick": 627 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 627 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "48eb134770cc3289d1ba59cd091f89645d14fd261af46a3bd0303a9d61d4624b", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 26, - "conditioning": 968, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 986, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 885, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 159, - "y": 122 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 26, - "conditioning": 989, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 51, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 98, - "y": 132 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999672, - "result": null, - "round_number": 1, - "tick": 628 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 628 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "dee2a494f6d530f08c21f52457a281b4b5f7ab20c7029acb7fb1bca5b07c0a31", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 25, - "conditioning": 968, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 986, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 887, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 159, - "y": 122 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 25, - "conditioning": 989, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 996, - "player_id": "two", - "poise": 51, - "queued_actions": 0, - "stamina": 996, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 98, - "y": 132 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999671, - "result": null, - "round_number": 1, - "tick": 629 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 629 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "d5d55d283ebf01fc21c2ae4f97c927f8aefee0c178320caf528ba32ab142057d", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 24, - "conditioning": 967, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 986, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 889, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 159, - "y": 122 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 24, - "conditioning": 988, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 995, - "player_id": "two", - "poise": 51, - "queued_actions": 0, - "stamina": 995, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 98, - "y": 132 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999670, - "result": null, - "round_number": 1, - "tick": 630 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 630 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "0cea5c0f8d83b834067b718d4545ebb1986acaeeecbb49b41aec2b53f489ebf0", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 23, - "conditioning": 967, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 986, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 891, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 159, - "y": 122 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 23, - "conditioning": 988, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 995, - "player_id": "two", - "poise": 51, - "queued_actions": 0, - "stamina": 995, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 98, - "y": 132 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999669, - "result": null, - "round_number": 1, - "tick": 631 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 631 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "7377d894fe96776a667b84626963109c8ece8e268b6d0df2af3a21a6c107a4e5", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 22, - "conditioning": 967, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 986, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 893, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 159, - "y": 122 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 22, - "conditioning": 988, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 995, - "player_id": "two", - "poise": 51, - "queued_actions": 0, - "stamina": 995, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 98, - "y": 132 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999668, - "result": null, - "round_number": 1, - "tick": 632 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 632 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "218e52cf821fc0434e82d989bdce79e72fe7761a6732a0fb644d3a884c11b36a", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 21, - "conditioning": 967, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 986, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 895, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 159, - "y": 122 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 21, - "conditioning": 988, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 995, - "player_id": "two", - "poise": 51, - "queued_actions": 0, - "stamina": 995, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 98, - "y": 132 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999667, - "result": null, - "round_number": 1, - "tick": 633 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 633 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "b693b5e83590034305ce67c64917d83b5d39dc1950596eaf7db839c0e96a8cfc", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 20, - "conditioning": 967, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 986, + "last_input_sequence": 139, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 897, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -86657,49 +46595,50 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -7, + "velocity_y": -7, "warnings": 0, - "x": 159, - "y": 122 + "x": 136, + "y": 54 }, { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 287, + "action_hand": "right", + "action_id": "two@283", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 283, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 20, - "conditioning": 988, + "clinch_ticks": 0, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, + "facing_x": 916, + "facing_y": 400, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 995, + "maximum_stamina": 999, "player_id": "two", - "poise": 51, + "poise": 327, "queued_actions": 0, - "stamina": 995, + "stamina": 969, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -86707,37 +46646,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 42, "left_cut": 0, - "left_eye": 185, + "left_eye": 40, "right_cut": 0, - "right_eye": 23, - "swelling": 90 + "right_eye": 0, + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 98, - "y": 132 + "x": 48, + "y": 138 } ], "phase": "fight", - "phase_ticks_remaining": 999666, + "phase_ticks_remaining": 999825, + "referee": { + "alive": true, + "facing_x": 583, + "facing_y": 833, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -6, + "velocity_y": -1, + "x": 64, + "y": 56 + }, "result": null, "round_number": 1, - "tick": 634 + "tick": 295 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 634 + "tick": 295 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "0e231d2726d1da87c9694be4a15180f913c897d8b4c88e84a51715487e6e26da", + "checksum": "9a8df8feed68240128b314c2f9934f811df2fd62873efea947a4fd9c9429b79a", "events": [], "fighters": [ { @@ -86753,30 +46712,31 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 19, - "conditioning": 967, + "clinch_ticks": 0, + "conditioning": 997, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, + "facing_x": -669, + "facing_y": 752, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 986, + "last_input_sequence": 140, + "maximum_stamina": 1000, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 899, + "stamina": 1000, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -86791,49 +46751,50 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -7, + "velocity_y": -7, "warnings": 0, - "x": 159, - "y": 122 + "x": 129, + "y": 47 }, { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 287, + "action_hand": "right", + "action_id": "two@283", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 283, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 19, - "conditioning": 988, + "clinch_ticks": 0, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, + "facing_x": 940, + "facing_y": 341, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 995, + "maximum_stamina": 999, "player_id": "two", - "poise": 51, + "poise": 328, "queued_actions": 0, - "stamina": 995, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -86841,76 +46802,121 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 42, "left_cut": 0, - "left_eye": 185, + "left_eye": 40, "right_cut": 0, - "right_eye": 23, - "swelling": 90 + "right_eye": 0, + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 98, - "y": 132 + "x": 48, + "y": 138 } ], "phase": "fight", - "phase_ticks_remaining": 999665, + "phase_ticks_remaining": 999824, + "referee": { + "alive": true, + "facing_x": 659, + "facing_y": 765, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -6, + "velocity_y": -1, + "x": 57, + "y": 56 + }, "result": null, "round_number": 1, - "tick": 635 + "tick": 296 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 635 + "tick": 296 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 0, + "class": "jab", + "combo_bonus": 0, + "hand": "left", + "power": "normal", + "recovery": 3, + "resolved": false, + "startup": 2, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "60eb5440ab44af04b6f754132c8416a37ca89e9e4c9d38dc419bfc270f76d17b", - "events": [], + "checksum": "0dc6eb4d98f93353aae47ce322e664aa9f79529c82d273ca7464ffd01bf98ad7", + "events": [ + { + "action_id": "one@297", + "actor_id": "one", + "amount": 0, + "blood": 0, + "detail": "left:jab:head", + "direction": 0, + "event_id": 22, + "kind": "punch_start", + "target_id": null, + "tick": 297 + } + ], "fighters": [ { - "action": null, - "action_active_ticks": 0, + "action": "jab", + "action_active_ticks": 2, "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action_hand": "left", + "action_id": "one@297", + "action_key": "jab:left:head:normal", + "action_power": "normal", + "action_recovery_ticks": 3, + "action_start_tick": 297, + "action_startup_ticks": 2, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 18, - "conditioning": 967, + "clinch_ticks": 0, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, + "facing_x": -669, + "facing_y": 752, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 986, + "last_input_sequence": 141, + "maximum_stamina": 999, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 901, + "stamina": 976, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -86925,49 +46931,50 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 0, - "velocity_y": 0, + "velocity_x": -2, + "velocity_y": -2, "warnings": 0, - "x": 159, - "y": 122 + "x": 127, + "y": 45 }, { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 287, + "action_hand": "right", + "action_id": "two@283", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 283, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 18, - "conditioning": 988, + "clinch_ticks": 0, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, + "facing_x": 960, + "facing_y": 280, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 995, + "maximum_stamina": 999, "player_id": "two", - "poise": 51, + "poise": 328, "queued_actions": 0, - "stamina": 995, + "stamina": 979, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -86975,76 +46982,108 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 42, "left_cut": 0, - "left_eye": 185, + "left_eye": 40, "right_cut": 0, - "right_eye": 23, - "swelling": 90 + "right_eye": 0, + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 98, - "y": 132 + "x": 48, + "y": 138 } ], "phase": "fight", - "phase_ticks_remaining": 999664, + "phase_ticks_remaining": 999823, + "referee": { + "alive": true, + "facing_x": 720, + "facing_y": 720, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -6, + "velocity_y": -1, + "x": 51, + "y": 55 + }, "result": null, "round_number": 1, - "tick": 636 + "tick": 297 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 636 + "tick": 297 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 1, + "class": "jab", + "combo_bonus": 0, + "hand": "left", + "power": "normal", + "recovery": 3, + "resolved": false, + "startup": 2, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "1a1b919cd7013aaa93a4171dfb80b9a07e7eb1addc8116411e6603bd3d1cbf92", + "checksum": "3166d0a9467b0659411b60543017b381468364bc107577ee1bb89f99107f02b1", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, + "action": "jab", + "action_active_ticks": 2, "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action_hand": "left", + "action_id": "one@297", + "action_key": "jab:left:head:normal", + "action_power": "normal", + "action_recovery_ticks": 3, + "action_start_tick": 297, + "action_startup_ticks": 2, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 17, - "conditioning": 967, + "clinch_ticks": 0, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, + "facing_x": -669, + "facing_y": 752, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 986, + "last_input_sequence": 142, + "maximum_stamina": 999, "player_id": "one", "poise": 600, - "queued_actions": 0, - "stamina": 903, + "queued_actions": 1, + "stamina": 977, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -87062,46 +47101,47 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 159, - "y": 122 + "x": 127, + "y": 45 }, { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 287, + "action_hand": "right", + "action_id": "two@283", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 283, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 17, - "conditioning": 988, + "clinch_ticks": 0, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, + "facing_x": 976, + "facing_y": 218, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 995, + "maximum_stamina": 999, "player_id": "two", - "poise": 51, + "poise": 329, "queued_actions": 0, - "stamina": 995, + "stamina": 984, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -87109,76 +47149,121 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 42, "left_cut": 0, - "left_eye": 185, + "left_eye": 40, "right_cut": 0, - "right_eye": 23, - "swelling": 90 + "right_eye": 0, + "swelling": 19 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 98, - "y": 132 + "x": 48, + "y": 138 } ], "phase": "fight", - "phase_ticks_remaining": 999663, + "phase_ticks_remaining": 999822, + "referee": { + "alive": true, + "facing_x": 750, + "facing_y": 678, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -6, + "velocity_y": -2, + "x": 45, + "y": 53 + }, "result": null, "round_number": 1, - "tick": 637 + "tick": 298 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 637 + "tick": 298 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 2, + "class": "jab", + "combo_bonus": 0, + "hand": "left", + "power": "normal", + "recovery": 3, + "resolved": true, + "startup": 2, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "dd683ec6bbfd2221bf32f8b3db2574a8074e8edaf7c8774e97c5afbc75d95096", - "events": [], + "checksum": "fbd23a63a0242fdfaf210a46c345088266c269c3629026ee0c7849c3ffa8b8fc", + "events": [ + { + "action_id": "one@297", + "actor_id": "one", + "amount": 33, + "blood": 11, + "detail": "jab:head", + "direction": -1, + "event_id": 23, + "kind": "hit", + "target_id": "two", + "tick": 299 + } + ], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "jab", + "action_active_ticks": 2, + "action_contact_tick": 299, + "action_hand": "left", + "action_id": "one@297", + "action_key": "jab:left:head:normal", + "action_power": "normal", + "action_recovery_ticks": 3, + "action_start_tick": 297, + "action_startup_ticks": 2, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 16, - "conditioning": 967, + "clinch_ticks": 0, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, + "facing_x": -669, + "facing_y": 752, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 986, + "last_input_sequence": 142, + "maximum_stamina": 999, "player_id": "one", "poise": 600, - "queued_actions": 0, - "stamina": 905, + "queued_actions": 1, + "stamina": 978, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -87196,46 +47281,47 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 159, - "y": 122 + "x": 127, + "y": 45 }, { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 287, + "action_hand": "right", + "action_id": "two@283", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 283, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 16, - "conditioning": 988, + "clinch_ticks": 0, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, + "facing_x": 988, + "facing_y": 155, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 995, + "maximum_stamina": 999, "player_id": "two", - "poise": 51, + "poise": 303, "queued_actions": 0, - "stamina": 995, + "stamina": 989, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -87243,76 +47329,108 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 61, "left_cut": 0, - "left_eye": 185, + "left_eye": 40, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 24 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 98, - "y": 132 + "x": 48, + "y": 138 } ], "phase": "fight", - "phase_ticks_remaining": 999662, + "phase_ticks_remaining": 999821, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -5, + "velocity_y": -2, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 638 + "tick": 299 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 638 + "tick": 299 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 3, + "class": "jab", + "combo_bonus": 0, + "hand": "left", + "power": "normal", + "recovery": 3, + "resolved": true, + "startup": 2, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "f3c159f73e81217cc30e1a9aee7e9eb96f7e93f538b560e926eada9e78e965d3", + "checksum": "edf23ece4d0a6842334fdc89fc8aab6a16c7efb5f2952abea6c561d3b0dff455", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "jab", + "action_active_ticks": 2, + "action_contact_tick": 299, + "action_hand": "left", + "action_id": "one@297", + "action_key": "jab:left:head:normal", + "action_power": "normal", + "action_recovery_ticks": 3, + "action_start_tick": 297, + "action_startup_ticks": 2, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 15, - "conditioning": 967, + "clinch_ticks": 0, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, + "facing_x": -669, + "facing_y": 752, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 986, + "last_input_sequence": 142, + "maximum_stamina": 999, "player_id": "one", "poise": 600, - "queued_actions": 0, - "stamina": 907, + "queued_actions": 1, + "stamina": 979, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -87324,52 +47442,53 @@ "left_cut": 0, "left_eye": 0, "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 159, - "y": 122 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "warnings": 0, + "x": 127, + "y": 45 + }, + { + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 287, + "action_hand": "right", + "action_id": "two@283", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 283, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 15, - "conditioning": 988, + "clinch_ticks": 0, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, + "facing_x": 996, + "facing_y": 91, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 995, + "maximum_stamina": 999, "player_id": "two", - "poise": 51, + "poise": 304, "queued_actions": 0, - "stamina": 995, + "stamina": 994, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -87377,76 +47496,108 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 61, "left_cut": 0, - "left_eye": 185, + "left_eye": 40, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 24 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 98, - "y": 132 + "x": 48, + "y": 138 } ], "phase": "fight", - "phase_ticks_remaining": 999661, + "phase_ticks_remaining": 999820, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 639 + "tick": 300 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 639 + "tick": 300 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 4, + "class": "jab", + "combo_bonus": 0, + "hand": "left", + "power": "normal", + "recovery": 3, + "resolved": true, + "startup": 2, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "3758de1098668236c56f2ebbd505c8d5f1270ed0b2da19b4b0fb480c75a19a6f", + "checksum": "42a439140d0bfcf8e3b053376fb99c7a7b42130a70fd0bcba99f62b0f08c14b1", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "jab", + "action_active_ticks": 2, + "action_contact_tick": 299, + "action_hand": "left", + "action_id": "one@297", + "action_key": "jab:left:head:normal", + "action_power": "normal", + "action_recovery_ticks": 3, + "action_start_tick": 297, + "action_startup_ticks": 2, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 14, - "conditioning": 966, + "clinch_ticks": 0, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, + "facing_x": -669, + "facing_y": 752, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 142, + "maximum_stamina": 999, "player_id": "one", "poise": 600, - "queued_actions": 0, - "stamina": 909, + "queued_actions": 1, + "stamina": 980, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -87464,46 +47615,47 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 159, - "y": 122 + "x": 127, + "y": 45 }, { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 287, + "action_hand": "right", + "action_id": "two@283", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 283, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 14, - "conditioning": 987, + "clinch_ticks": 0, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, + "facing_y": 27, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 995, + "maximum_stamina": 999, "player_id": "two", - "poise": 51, + "poise": 304, "queued_actions": 0, - "stamina": 995, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -87511,76 +47663,121 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 61, "left_cut": 0, - "left_eye": 185, + "left_eye": 40, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 24 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 98, - "y": 132 + "x": 48, + "y": 138 } ], "phase": "fight", - "phase_ticks_remaining": 999660, + "phase_ticks_remaining": 999819, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 640 + "tick": 301 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 640 + "tick": 301 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 0, + "class": "straight", + "combo_bonus": 10, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": false, + "startup": 4, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "715b4c501953b63ff257271bbf7a0337df7f6ee1dbc9c0f84354839d8e9c24b3", - "events": [], + "checksum": "f3ffa8a9e61900c5ffb8d569970247fe88697b114d374943796e4c5b3bdcb763", + "events": [ + { + "action_id": "one@302", + "actor_id": "one", + "amount": 0, + "blood": 0, + "detail": "right:straight:head", + "direction": 0, + "event_id": 24, + "kind": "punch_start", + "target_id": null, + "tick": 302 + } + ], "fighters": [ { - "action": null, - "action_active_ticks": 0, + "action": "straight", + "action_active_ticks": 2, "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action_hand": "right", + "action_id": "one@302", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 302, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 13, - "conditioning": 966, + "clinch_ticks": 0, + "conditioning": 995, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 142, + "maximum_stamina": 999, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 911, + "stamina": 946, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -87598,46 +47795,47 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 159, - "y": 122 + "x": 127, + "y": 45 }, { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 287, + "action_hand": "right", + "action_id": "two@283", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 283, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 13, - "conditioning": 987, + "clinch_ticks": 0, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, + "facing_x": 999, + "facing_y": -37, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 995, + "maximum_stamina": 999, "player_id": "two", - "poise": 51, + "poise": 305, "queued_actions": 0, - "stamina": 995, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -87645,76 +47843,108 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 61, "left_cut": 0, - "left_eye": 185, + "left_eye": 40, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 24 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 98, - "y": 132 + "x": 48, + "y": 138 } ], "phase": "fight", - "phase_ticks_remaining": 999659, + "phase_ticks_remaining": 999818, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 641 + "tick": 302 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 641 + "tick": 302 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 1, + "class": "straight", + "combo_bonus": 10, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": false, + "startup": 4, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "ac4fdd095ef57a3bdadaa4c5a77cbb3949c74eac32c7d2e04b848464d65bd476", + "checksum": "87b3dc37ef10d182b5e3f0ef12888d5d7d7b75825b611eb624ca8c9452f8fa34", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, + "action": "straight", + "action_active_ticks": 2, "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action_hand": "right", + "action_id": "one@302", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 302, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 12, - "conditioning": 966, + "clinch_ticks": 0, + "conditioning": 995, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 142, + "maximum_stamina": 999, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 913, + "stamina": 948, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -87732,46 +47962,47 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 159, - "y": 122 + "x": 127, + "y": 45 }, { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 287, + "action_hand": "right", + "action_id": "two@283", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 283, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 12, - "conditioning": 987, + "clinch_ticks": 0, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, + "facing_x": 995, + "facing_y": -101, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 995, + "maximum_stamina": 999, "player_id": "two", - "poise": 51, + "poise": 305, "queued_actions": 0, - "stamina": 995, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -87779,76 +48010,108 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 61, "left_cut": 0, - "left_eye": 185, + "left_eye": 40, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 24 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 98, - "y": 132 + "x": 48, + "y": 138 } ], "phase": "fight", - "phase_ticks_remaining": 999658, + "phase_ticks_remaining": 999817, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 642 + "tick": 303 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 642 + "tick": 303 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 2, + "class": "straight", + "combo_bonus": 10, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": false, + "startup": 4, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "bbb721a8d5ae33c811b1afbb041844be8e03f6a5bb069381f22791275851ec63", + "checksum": "b10eea0a1866ab1418b69b358c87bf4e874a3fae09b1380daa24c1e58eab182a", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, + "action": "straight", + "action_active_ticks": 2, "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action_hand": "right", + "action_id": "one@302", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 302, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 11, - "conditioning": 966, + "clinch_ticks": 0, + "conditioning": 995, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 142, + "maximum_stamina": 999, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 915, + "stamina": 950, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -87866,46 +48129,47 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 159, - "y": 122 + "x": 127, + "y": 45 }, { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 287, + "action_hand": "right", + "action_id": "two@283", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 283, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 11, - "conditioning": 987, + "clinch_ticks": 0, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, + "facing_x": 986, + "facing_y": -164, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 995, + "maximum_stamina": 999, "player_id": "two", - "poise": 51, + "poise": 306, "queued_actions": 0, - "stamina": 995, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -87913,76 +48177,108 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 61, "left_cut": 0, - "left_eye": 185, + "left_eye": 40, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 24 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 98, - "y": 132 + "x": 48, + "y": 138 } ], "phase": "fight", - "phase_ticks_remaining": 999657, + "phase_ticks_remaining": 999816, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 643 + "tick": 304 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 643 + "tick": 304 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 3, + "class": "straight", + "combo_bonus": 10, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": false, + "startup": 4, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "6527fd5e0b4b85fa62ceaacc9559e421df31e851c174f566f1579ea7b0a56577", + "checksum": "0828f61d2b224926bb21dc9c994f42587490f4468a631ca3778ba690146c9e6d", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, + "action": "straight", + "action_active_ticks": 2, "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action_hand": "right", + "action_id": "one@302", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 302, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 10, - "conditioning": 966, + "clinch_ticks": 0, + "conditioning": 995, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 142, + "maximum_stamina": 999, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 917, + "stamina": 952, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -88000,46 +48296,47 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 159, - "y": 122 + "x": 127, + "y": 45 }, { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 287, + "action_hand": "right", + "action_id": "two@283", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 283, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 10, - "conditioning": 987, + "clinch_ticks": 0, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, + "facing_x": 974, + "facing_y": -227, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 995, + "maximum_stamina": 999, "player_id": "two", - "poise": 51, + "poise": 306, "queued_actions": 0, - "stamina": 995, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -88047,76 +48344,121 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 61, "left_cut": 0, - "left_eye": 185, + "left_eye": 40, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 24 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 98, - "y": 132 + "x": 48, + "y": 138 } ], "phase": "fight", - "phase_ticks_remaining": 999656, + "phase_ticks_remaining": 999815, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 644 + "tick": 305 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 644 + "tick": 305 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 4, + "class": "straight", + "combo_bonus": 10, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": true, + "startup": 4, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "bf3f3385c331ea8882f47067a1bf23f259b929b1d9602be8c1c530571d06c9b9", - "events": [], + "checksum": "2ec7b002d9ab102d23fb4a89f8bb3c211b5caed46025bd6ada858e8d9e5172fb", + "events": [ + { + "action_id": "one@302", + "actor_id": "one", + "amount": 63, + "blood": 21, + "detail": "straight:head", + "direction": -1, + "event_id": 25, + "kind": "hit", + "target_id": "two", + "tick": 306 + } + ], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 306, + "action_hand": "right", + "action_id": "one@302", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 302, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 9, - "conditioning": 966, + "clinch_ticks": 0, + "conditioning": 995, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 142, + "maximum_stamina": 999, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 919, + "stamina": 954, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -88128,129 +48470,162 @@ "left_cut": 0, "left_eye": 0, "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 159, - "y": 122 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "warnings": 0, + "x": 127, + "y": 45 + }, + { + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 287, + "action_hand": "right", + "action_id": "two@283", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 283, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 9, - "conditioning": 987, + "clinch_ticks": 0, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, + "facing_x": 957, + "facing_y": -289, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 995, + "maximum_stamina": 999, "player_id": "two", - "poise": 51, + "poise": 262, "queued_actions": 0, - "stamina": 995, + "stamina": 999, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 6, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 98, "left_cut": 0, - "left_eye": 185, + "left_eye": 84, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 44 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 98, - "y": 132 + "x": 48, + "y": 138 } ], "phase": "fight", - "phase_ticks_remaining": 999655, + "phase_ticks_remaining": 999814, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 645 + "tick": 306 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 645 + "tick": 306 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 5, + "class": "straight", + "combo_bonus": 10, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": true, + "startup": 4, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "d287e099ba9f1bc0febc5f8578dde2b196e111112f9184d18c7eebe62d8feed0", + "checksum": "4276c0d0b6e923a8c8f6a791ec83592d780edebe82577afa37407d0bbcd2c8f8", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 306, + "action_hand": "right", + "action_id": "one@302", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 302, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 8, - "conditioning": 966, + "clinch_ticks": 0, + "conditioning": 995, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 142, + "maximum_stamina": 999, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 921, + "stamina": 956, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -88268,123 +48643,156 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 159, - "y": 122 + "x": 127, + "y": 45 }, { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 287, + "action_hand": "right", + "action_id": "two@283", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 283, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 8, - "conditioning": 987, + "clinch_ticks": 0, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, + "facing_x": 937, + "facing_y": -350, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 995, + "maximum_stamina": 999, "player_id": "two", - "poise": 51, + "poise": 262, "queued_actions": 0, - "stamina": 995, + "stamina": 999, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 5, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 98, "left_cut": 0, - "left_eye": 185, + "left_eye": 84, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 44 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 98, - "y": 132 + "x": 48, + "y": 138 } ], "phase": "fight", - "phase_ticks_remaining": 999654, + "phase_ticks_remaining": 999813, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 646 + "tick": 307 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 646 + "tick": 307 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 6, + "class": "straight", + "combo_bonus": 10, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": true, + "startup": 4, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "c7585ccff44e41cc6d3901b51fb76e3252ebf9693839732b72e8e056347c6253", + "checksum": "b8e7f603af2361edfcc9d993e7af9272b4ffaf717f9dba2ef80f5344473bd098", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 306, + "action_hand": "right", + "action_id": "one@302", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 302, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 7, - "conditioning": 966, + "clinch_ticks": 0, + "conditioning": 995, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 142, + "maximum_stamina": 999, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 923, + "stamina": 958, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -88402,123 +48810,156 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 159, - "y": 122 + "x": 127, + "y": 45 }, { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 287, + "action_hand": "right", + "action_id": "two@283", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 283, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 7, - "conditioning": 987, + "clinch_ticks": 0, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, + "facing_x": 912, + "facing_y": -409, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 995, + "maximum_stamina": 999, "player_id": "two", - "poise": 51, + "poise": 262, "queued_actions": 0, - "stamina": 995, + "stamina": 999, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 4, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 98, "left_cut": 0, - "left_eye": 185, + "left_eye": 84, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 44 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 98, - "y": 132 + "x": 48, + "y": 138 } ], "phase": "fight", - "phase_ticks_remaining": 999653, + "phase_ticks_remaining": 999812, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 647 + "tick": 308 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 647 + "tick": 308 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 7, + "class": "straight", + "combo_bonus": 10, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": true, + "startup": 4, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "194602f21fd4150e740e328dbf328fc6c13a1669e30e2dbcbd3a94bc4c91bbcc", + "checksum": "9f99a5aea912f21cac76e788f826d61f9cf7921cc25ed530fef4c54c4b6a582f", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 306, + "action_hand": "right", + "action_id": "one@302", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 302, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 6, - "conditioning": 966, + "clinch_ticks": 0, + "conditioning": 995, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 142, + "maximum_stamina": 999, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 925, + "stamina": 960, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -88536,123 +48977,156 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 159, - "y": 122 + "x": 127, + "y": 45 }, { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 287, + "action_hand": "right", + "action_id": "two@283", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 283, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 6, - "conditioning": 987, + "clinch_ticks": 0, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, + "facing_x": 884, + "facing_y": -467, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 995, + "maximum_stamina": 999, "player_id": "two", - "poise": 51, + "poise": 262, "queued_actions": 0, - "stamina": 995, + "stamina": 999, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 3, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 98, "left_cut": 0, - "left_eye": 185, + "left_eye": 84, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 44 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 98, - "y": 132 + "x": 48, + "y": 138 } ], "phase": "fight", - "phase_ticks_remaining": 999652, + "phase_ticks_remaining": 999811, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 648 + "tick": 309 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 648 + "tick": 309 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 8, + "class": "straight", + "combo_bonus": 10, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": true, + "startup": 4, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "6f6a04c21c2e831ce9004f8e7e675b5bb5361761e5ca1a7b2d837e9fe0b2fc94", + "checksum": "f311fef4803afb08b80fca58ece271e409fec0ef7ce3d1c53de22cdfd24a85f7", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 306, + "action_hand": "right", + "action_id": "one@302", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 302, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 5, - "conditioning": 966, + "clinch_ticks": 0, + "conditioning": 995, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 142, + "maximum_stamina": 999, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 927, + "stamina": 962, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -88670,123 +49144,156 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 159, - "y": 122 + "x": 127, + "y": 45 }, { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 287, + "action_hand": "right", + "action_id": "two@283", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 283, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 5, - "conditioning": 987, + "clinch_ticks": 0, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, + "facing_x": 853, + "facing_y": -523, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 995, + "maximum_stamina": 999, "player_id": "two", - "poise": 51, + "poise": 262, "queued_actions": 0, - "stamina": 995, + "stamina": 999, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 2, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 98, "left_cut": 0, - "left_eye": 185, + "left_eye": 84, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 44 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 98, - "y": 132 + "x": 48, + "y": 138 } ], "phase": "fight", - "phase_ticks_remaining": 999651, + "phase_ticks_remaining": 999810, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 649 + "tick": 310 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 649 + "tick": 310 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 9, + "class": "straight", + "combo_bonus": 10, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": true, + "startup": 4, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "32d0df85a37a70c1fb85867b892dbe249e45e6fba5fc0286d427cf86e1feea05", + "checksum": "368bf837952f29ebe500339665640d885aa40e5338339099553c62bfb6401775", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 306, + "action_hand": "right", + "action_id": "one@302", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 302, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 4, - "conditioning": 965, + "clinch_ticks": 0, + "conditioning": 995, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 142, + "maximum_stamina": 999, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 929, + "stamina": 964, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -88804,8 +49311,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 159, - "y": 122 + "x": 127, + "y": 45 }, { "action": null, @@ -88820,107 +49327,140 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 4, - "conditioning": 986, + "clinch_ticks": 0, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, + "facing_x": 817, + "facing_y": -576, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 994, + "maximum_stamina": 999, "player_id": "two", - "poise": 51, + "poise": 262, "queued_actions": 0, - "stamina": 994, + "stamina": 999, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 98, "left_cut": 0, - "left_eye": 185, + "left_eye": 84, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 44 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 98, - "y": 132 + "x": 48, + "y": 138 } ], "phase": "fight", - "phase_ticks_remaining": 999650, + "phase_ticks_remaining": 999809, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 650 + "tick": 311 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 650 + "tick": 311 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 10, + "class": "straight", + "combo_bonus": 10, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": true, + "startup": 4, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "5e080e7a40024393cc1e821f03514bc623572260f4006c8150b708876f45bfe4", + "checksum": "8f1c5e626475f293838156dd3f4ce9c5dda580a4868824d04e7e8bd9c3442809", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 306, + "action_hand": "right", + "action_id": "one@302", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 302, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 3, - "conditioning": 965, + "clinch_ticks": 0, + "conditioning": 995, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 142, + "maximum_stamina": 999, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 931, + "stamina": 966, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -88938,8 +49478,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 159, - "y": 122 + "x": 127, + "y": 45 }, { "action": null, @@ -88954,30 +49494,31 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 3, - "conditioning": 986, + "clinch_ticks": 0, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, + "facing_x": 779, + "facing_y": -627, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 994, + "maximum_stamina": 999, "player_id": "two", - "poise": 51, + "poise": 263, "queued_actions": 0, - "stamina": 994, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -88985,76 +49526,108 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 98, "left_cut": 0, - "left_eye": 185, + "left_eye": 84, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 44 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 98, - "y": 132 + "x": 48, + "y": 138 } ], "phase": "fight", - "phase_ticks_remaining": 999649, + "phase_ticks_remaining": 999808, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 651 + "tick": 312 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 651 + "tick": 312 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 11, + "class": "straight", + "combo_bonus": 10, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": true, + "startup": 4, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "380f9c38864fa7d27f6eea66794ef0e1cbc123f6503a34a83b91297fb331bac9", + "checksum": "630b75f83a48c83e207892ad945e71cbf0490d09b5a4ec082e7e50fd759e1793", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 306, + "action_hand": "right", + "action_id": "one@302", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 302, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 2, - "conditioning": 965, + "clinch_ticks": 0, + "conditioning": 995, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 142, + "maximum_stamina": 999, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 933, + "stamina": 968, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -89072,8 +49645,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 159, - "y": 122 + "x": 127, + "y": 45 }, { "action": null, @@ -89088,30 +49661,31 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 2, - "conditioning": 986, + "clinch_ticks": 0, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, + "facing_x": 737, + "facing_y": -676, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 994, + "maximum_stamina": 999, "player_id": "two", - "poise": 51, + "poise": 263, "queued_actions": 0, - "stamina": 994, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -89119,76 +49693,97 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 98, "left_cut": 0, - "left_eye": 185, + "left_eye": 84, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 44 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 98, - "y": 132 + "x": 48, + "y": 138 } ], "phase": "fight", - "phase_ticks_remaining": 999648, + "phase_ticks_remaining": 999807, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 652 + "tick": 313 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 652 + "tick": 313 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "7337e937346a5db5999e52e339c29a3b0f73cb34ca9493fe63ca73b1c9eaa4c3", + "checksum": "103846fddd2b3df9758941213e486802751ebbb75a91a8e6e306f3f447b6a359", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 306, + "action_hand": "right", + "action_id": "one@302", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 302, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 1, - "conditioning": 965, + "clinch_ticks": 0, + "conditioning": 995, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 142, + "maximum_stamina": 999, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 935, + "stamina": 973, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -89206,8 +49801,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 159, - "y": 122 + "x": 127, + "y": 45 }, { "action": null, @@ -89222,30 +49817,31 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 1, - "conditioning": 986, + "clinch_ticks": 0, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, + "facing_x": 692, + "facing_y": -722, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 994, + "maximum_stamina": 999, "player_id": "two", - "poise": 51, + "poise": 264, "queued_actions": 0, - "stamina": 994, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -89253,89 +49849,97 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 98, "left_cut": 0, - "left_eye": 185, + "left_eye": 84, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 44 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 98, - "y": 132 + "x": 48, + "y": 138 } ], "phase": "fight", - "phase_ticks_remaining": 999647, + "phase_ticks_remaining": 999806, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 653 + "tick": 314 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 653 + "tick": 314 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "ae514226986a2c93ee7d0dd905e451a77ce8b1111fb5c9f0891b3ef6207291e1", - "events": [ - { - "action_id": null, - "actor_id": "one", - "amount": 0, - "blood": 0, - "detail": "", - "direction": 0, - "event_id": 36, - "kind": "referee_break", - "target_id": "two", - "tick": 654 - } - ], + "checksum": "0b5f5e2c42f9a51e55809d9beb66820e75fb4335f6d42ea2ddefa307b5b7b1ae", + "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 306, + "action_hand": "right", + "action_id": "one@302", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 302, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 995, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -1000, - "facing_y": 163, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 142, + "maximum_stamina": 999, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 939, + "stamina": 978, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -89353,8 +49957,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 204, - "y": 115 + "x": 127, + "y": 45 }, { "action": null, @@ -89370,29 +49974,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 986, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": -163, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 994, + "maximum_stamina": 999, "player_id": "two", - "poise": 52, + "poise": 264, "queued_actions": 0, - "stamina": 994, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -89400,76 +50005,97 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 98, "left_cut": 0, - "left_eye": 185, + "left_eye": 84, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 44 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 53, - "y": 139 + "x": 48, + "y": 138 } ], "phase": "fight", - "phase_ticks_remaining": 999646, + "phase_ticks_remaining": 999805, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 654 + "tick": 315 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 654 + "tick": 315 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "e90015e01cdc572828dcb074316338bdcf1790e7b102cab4fdb785626be4e7cc", + "checksum": "c94270dd0aa5c046cb223f7962ae9eddfd2a4ad90e0972503ac07c0003ed813c", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 306, + "action_hand": "right", + "action_id": "one@302", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 302, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 995, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -993, - "facing_y": 157, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 142, + "maximum_stamina": 999, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 942, + "stamina": 983, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -89487,8 +50113,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 204, - "y": 115 + "x": 127, + "y": 45 }, { "action": null, @@ -89504,29 +50130,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 986, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 993, - "facing_y": -157, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 994, + "maximum_stamina": 999, "player_id": "two", - "poise": 52, + "poise": 265, "queued_actions": 0, - "stamina": 994, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -89534,76 +50161,97 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 98, "left_cut": 0, - "left_eye": 185, + "left_eye": 84, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 44 }, "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 53, - "y": 139 + "x": 48, + "y": 138 } ], "phase": "fight", - "phase_ticks_remaining": 999645, + "phase_ticks_remaining": 999804, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 655 + "tick": 316 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 655 + "tick": 316 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "306e1fe82deb5487b66d555d90196edae828a62c5640f42fe045fb2db9603e06", + "checksum": "15f0eedad0e252e9394235c5ca22d060c808f868ea9e3174f7a16a58e913f3d5", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 306, + "action_hand": "right", + "action_id": "one@302", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 302, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 995, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -993, - "facing_y": 157, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 142, + "maximum_stamina": 999, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 945, + "stamina": 988, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -89621,8 +50269,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 204, - "y": 115 + "x": 127, + "y": 45 }, { "action": null, @@ -89638,29 +50286,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 986, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 993, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 994, + "maximum_stamina": 999, "player_id": "two", - "poise": 53, + "poise": 265, "queued_actions": 0, - "stamina": 994, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -89668,76 +50317,97 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 98, "left_cut": 0, - "left_eye": 185, + "left_eye": 84, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 44 }, - "velocity_x": 3, - "velocity_y": -1, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 56, - "y": 139 + "x": 48, + "y": 138 } ], "phase": "fight", - "phase_ticks_remaining": 999644, + "phase_ticks_remaining": 999803, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 656 + "tick": 317 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 656 + "tick": 317 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "9d2ee11962dd35e39ca4dc17423852b87615a5507c4dc6053ccb853b095b8d3e", + "checksum": "03881de698c9974cfa98a8f41cf203d99be23d1b671ef23296093e65e209624d", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 306, + "action_hand": "right", + "action_id": "one@302", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 302, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 995, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -993, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 142, + "maximum_stamina": 999, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 948, + "stamina": 993, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -89755,8 +50425,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 204, - "y": 115 + "x": 127, + "y": 45 }, { "action": null, @@ -89772,29 +50442,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 986, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 993, - "facing_y": -159, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 994, + "maximum_stamina": 999, "player_id": "two", - "poise": 53, + "poise": 266, "queued_actions": 0, - "stamina": 994, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -89802,76 +50473,97 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 98, "left_cut": 0, - "left_eye": 185, + "left_eye": 84, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 44 }, - "velocity_x": 5, - "velocity_y": -1, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 61, + "x": 48, "y": 138 } ], "phase": "fight", - "phase_ticks_remaining": 999643, + "phase_ticks_remaining": 999802, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 657 + "tick": 318 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 657 + "tick": 318 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "e7aa781df6e5638cff4e9df0873b9bd464185c5101f098243025156750489810", + "checksum": "20a63d8d9a7f326fe736c73bc8ec765e1fc18d0e247e081232028af5bf5f2f48", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 306, + "action_hand": "right", + "action_id": "one@302", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 302, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 995, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -993, - "facing_y": 159, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 142, + "maximum_stamina": 999, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 951, + "stamina": 998, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -89889,8 +50581,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 204, - "y": 115 + "x": 127, + "y": 45 }, { "action": null, @@ -89906,29 +50598,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 986, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 992, - "facing_y": -159, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 994, + "maximum_stamina": 999, "player_id": "two", - "poise": 54, + "poise": 266, "queued_actions": 0, - "stamina": 994, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -89936,76 +50629,97 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 98, "left_cut": 0, - "left_eye": 185, + "left_eye": 84, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 44 }, - "velocity_x": 6, - "velocity_y": -1, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 67, - "y": 137 + "x": 48, + "y": 138 } ], "phase": "fight", - "phase_ticks_remaining": 999642, + "phase_ticks_remaining": 999801, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 658 + "tick": 319 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 658 + "tick": 319 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "ed435302302413aa92da66cd7460d36fe21b9e91af7e5bcb1a4eac101b77899f", + "checksum": "49ff3726ca83c7adf826ce31c13e0ae1a25a9bbc5c12b9e8c86811123d914f8b", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 306, + "action_hand": "right", + "action_id": "one@302", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 302, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 995, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -992, - "facing_y": 159, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 142, + "maximum_stamina": 999, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 954, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -90023,8 +50737,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 204, - "y": 115 + "x": 127, + "y": 45 }, { "action": null, @@ -90040,29 +50754,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 986, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 992, - "facing_y": -159, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 994, + "maximum_stamina": 999, "player_id": "two", - "poise": 54, + "poise": 267, "queued_actions": 0, - "stamina": 994, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -90070,76 +50785,121 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 98, "left_cut": 0, - "left_eye": 185, + "left_eye": 84, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 44 }, - "velocity_x": 6, - "velocity_y": -1, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 73, - "y": 136 + "x": 48, + "y": 138 } ], "phase": "fight", - "phase_ticks_remaining": 999641, + "phase_ticks_remaining": 999800, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 659 + "tick": 320 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 659 + "tick": 320 }, { - "attack_one": null, + "attack_one": { + "active": 3, + "age": 0, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "power", + "recovery": 9, + "resolved": false, + "startup": 7, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "5577eda3231fd594ac9e470020fe0b289ef55bdf28e9136ce65a87df42416f47", - "events": [], + "checksum": "e32c8038f7eb41e16b33775649c4636b0695d002cdb5c331f3c4bd64f96a1552", + "events": [ + { + "action_id": "one@321", + "actor_id": "one", + "amount": 0, + "blood": 0, + "detail": "right:straight:head", + "direction": 0, + "event_id": 26, + "kind": "punch_start", + "target_id": null, + "tick": 321 + } + ], "fighters": [ { - "action": null, - "action_active_ticks": 0, + "action": "straight", + "action_active_ticks": 3, "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action_hand": "right", + "action_id": "one@321", + "action_key": "straight:right:head:power", + "action_power": "power", + "action_recovery_ticks": 9, + "action_start_tick": 321, + "action_startup_ticks": 7, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 993, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -992, - "facing_y": 159, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 143, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 957, + "stamina": 947, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -90157,8 +50917,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 204, - "y": 115 + "x": 127, + "y": 45 }, { "action": null, @@ -90174,29 +50934,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 986, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 992, - "facing_y": -158, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 994, + "maximum_stamina": 999, "player_id": "two", - "poise": 55, + "poise": 170, "queued_actions": 0, - "stamina": 994, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -90204,76 +50965,108 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 98, "left_cut": 0, - "left_eye": 185, + "left_eye": 84, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 44 }, - "velocity_x": 6, - "velocity_y": -1, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 79, - "y": 135 + "x": 48, + "y": 138 } ], "phase": "fight", - "phase_ticks_remaining": 999640, + "phase_ticks_remaining": 999799, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 660 + "tick": 321 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 660 + "tick": 321 }, { - "attack_one": null, + "attack_one": { + "active": 3, + "age": 1, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "power", + "recovery": 9, + "resolved": false, + "startup": 7, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "3d02fb67125cb85eeeee244f8d5a2cdd1eab7672014a5fe6f2e5a5b5d07fb6a5", + "checksum": "19bd2209756fc17466ebd1df46dde2ce29d60245a57baa1bc701e59a08b99daf", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, + "action": "straight", + "action_active_ticks": 3, "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action_hand": "right", + "action_id": "one@321", + "action_key": "straight:right:head:power", + "action_power": "power", + "action_recovery_ticks": 9, + "action_start_tick": 321, + "action_startup_ticks": 7, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 993, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -992, - "facing_y": 158, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 143, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 960, + "stamina": 949, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -90291,8 +51084,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 204, - "y": 115 + "x": 127, + "y": 45 }, { "action": null, @@ -90308,29 +51101,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 986, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 991, - "facing_y": -159, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 994, + "maximum_stamina": 999, "player_id": "two", - "poise": 55, + "poise": 171, "queued_actions": 0, - "stamina": 994, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -90338,76 +51132,108 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 98, "left_cut": 0, - "left_eye": 185, + "left_eye": 84, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 44 }, - "velocity_x": 6, - "velocity_y": -1, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 86, - "y": 134 + "x": 48, + "y": 138 } ], "phase": "fight", - "phase_ticks_remaining": 999639, + "phase_ticks_remaining": 999798, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 661 + "tick": 322 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 661 + "tick": 322 }, { - "attack_one": null, + "attack_one": { + "active": 3, + "age": 2, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "power", + "recovery": 9, + "resolved": false, + "startup": 7, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "74e69e5d398ac1ebb163bc38380d1ac17d14018d8a893ecde72b5ad19b536935", + "checksum": "14753c07332271e37aab6916a6d3c3bfd869bccde495ad2729a8607c3fcdd814", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 3, + "action_contact_tick": null, + "action_hand": "right", + "action_id": "one@321", + "action_key": "straight:right:head:power", + "action_power": "power", + "action_recovery_ticks": 9, + "action_start_tick": 321, + "action_startup_ticks": 7, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 993, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -991, - "facing_y": 159, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 143, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 963, + "stamina": 951, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -90425,8 +51251,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 204, - "y": 115 + "x": 127, + "y": 45 }, { "action": null, @@ -90442,29 +51268,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 986, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 991, - "facing_y": -159, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 994, + "maximum_stamina": 999, "player_id": "two", - "poise": 56, + "poise": 171, "queued_actions": 0, - "stamina": 994, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -90472,76 +51299,108 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 98, "left_cut": 0, - "left_eye": 185, + "left_eye": 84, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 44 }, - "velocity_x": 6, - "velocity_y": -1, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 92, - "y": 133 + "x": 48, + "y": 138 } ], "phase": "fight", - "phase_ticks_remaining": 999638, + "phase_ticks_remaining": 999797, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 662 + "tick": 323 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 662 + "tick": 323 }, { - "attack_one": null, + "attack_one": { + "active": 3, + "age": 3, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "power", + "recovery": 9, + "resolved": false, + "startup": 7, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "8812d3b1d5b62d638ebbb8cb6b3aec08ca3bbeb557425af32647ea3e6860065a", + "checksum": "872dc9a22d72f59f12e1bfdd54a6ec983f3a02826a36c093fbce737a9a04ee74", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, + "action": "straight", + "action_active_ticks": 3, "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action_hand": "right", + "action_id": "one@321", + "action_key": "straight:right:head:power", + "action_power": "power", + "action_recovery_ticks": 9, + "action_start_tick": 321, + "action_startup_ticks": 7, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 993, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -991, - "facing_y": 159, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 143, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 966, + "stamina": 953, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -90559,8 +51418,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 204, - "y": 115 + "x": 127, + "y": 45 }, { "action": null, @@ -90576,29 +51435,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 986, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 990, - "facing_y": -160, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 994, + "maximum_stamina": 999, "player_id": "two", - "poise": 56, + "poise": 172, "queued_actions": 0, - "stamina": 994, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -90606,76 +51466,108 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 98, "left_cut": 0, - "left_eye": 185, + "left_eye": 84, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 44 }, - "velocity_x": 6, - "velocity_y": -1, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 99, - "y": 132 + "x": 48, + "y": 138 } ], "phase": "fight", - "phase_ticks_remaining": 999637, + "phase_ticks_remaining": 999796, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 663 + "tick": 324 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 663 + "tick": 324 }, { - "attack_one": null, + "attack_one": { + "active": 3, + "age": 4, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "power", + "recovery": 9, + "resolved": false, + "startup": 7, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "091dc95fafda9c2fcfd1de9946b7c5ba143b560878321ba397cdbd4ee75b353c", + "checksum": "5233e48305c1521357b437cea32febcf14387e2ce0bc4dd89162c294a94de32e", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, + "action": "straight", + "action_active_ticks": 3, "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action_hand": "right", + "action_id": "one@321", + "action_key": "straight:right:head:power", + "action_power": "power", + "action_recovery_ticks": 9, + "action_start_tick": 321, + "action_startup_ticks": 7, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 993, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -990, - "facing_y": 160, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 143, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 969, + "stamina": 955, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -90693,8 +51585,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 204, - "y": 115 + "x": 127, + "y": 45 }, { "action": null, @@ -90710,29 +51602,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 986, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 994, + "maximum_stamina": 999, "player_id": "two", - "poise": 57, + "poise": 172, "queued_actions": 0, - "stamina": 994, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -90740,76 +51633,108 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 98, "left_cut": 0, - "left_eye": 185, + "left_eye": 84, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 44 }, - "velocity_x": 6, - "velocity_y": -1, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 106, - "y": 131 + "x": 48, + "y": 138 } ], "phase": "fight", - "phase_ticks_remaining": 999636, + "phase_ticks_remaining": 999795, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 664 + "tick": 325 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 664 + "tick": 325 }, { - "attack_one": null, + "attack_one": { + "active": 3, + "age": 5, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "power", + "recovery": 9, + "resolved": false, + "startup": 7, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "99d410940b7e1e273cd2d77ac58e202d049472d395b7e61bf220b914a3cb06a1", + "checksum": "fb4e5ae8ab8133318c829e7efe7d8d19918d9a751a3c96e9a6b94127ada68599", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, + "action": "straight", + "action_active_ticks": 3, "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action_hand": "right", + "action_id": "one@321", + "action_key": "straight:right:head:power", + "action_power": "power", + "action_recovery_ticks": 9, + "action_start_tick": 321, + "action_startup_ticks": 7, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 993, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 143, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 972, + "stamina": 957, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -90827,8 +51752,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 204, - "y": 115 + "x": 127, + "y": 45 }, { "action": null, @@ -90844,29 +51769,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 986, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 994, + "maximum_stamina": 999, "player_id": "two", - "poise": 57, + "poise": 173, "queued_actions": 0, - "stamina": 994, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -90874,91 +51800,110 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 98, "left_cut": 0, - "left_eye": 185, + "left_eye": 84, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 44 }, - "velocity_x": 6, - "velocity_y": -1, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 112, - "y": 130 + "x": 48, + "y": 138 } ], "phase": "fight", - "phase_ticks_remaining": 999635, + "phase_ticks_remaining": 999794, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 665 + "tick": 326 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 665 + "tick": 326 }, { - "attack_one": null, + "attack_one": { + "active": 3, + "age": 6, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "power", + "recovery": 9, + "resolved": false, + "startup": 7, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "9163e577acd4651ba4d537a466c4a93d4b8743ec30843b719fd6a47e7d520bec", - "events": [ - { - "action_id": null, - "actor_id": "two", - "amount": 0, - "blood": 0, - "detail": "low_blow", - "direction": 0, - "event_id": 37, - "kind": "foul", - "target_id": "one", - "tick": 666 - } - ], + "checksum": "c704ae88095fe789ef9ff06152b2fbbb624508e55812e630ceb61236a2dfd1f8", + "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, + "action": "straight", + "action_active_ticks": 3, "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action_hand": "right", + "action_id": "one@321", + "action_key": "straight:right:head:power", + "action_power": "power", + "action_recovery_ticks": 9, + "action_start_tick": 321, + "action_startup_ticks": 7, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 993, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 143, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 973, + "stamina": 959, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -90974,8 +51919,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -90991,29 +51936,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 173, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -91021,78 +51967,135 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 98, "left_cut": 0, - "left_eye": 185, + "left_eye": 84, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 44 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 48, + "y": 138 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 60, + "phase": "fight", + "phase_ticks_remaining": 999793, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 666 + "tick": 327 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 666 + "tick": 327 }, { - "attack_one": null, + "attack_one": { + "active": 3, + "age": 7, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "power", + "recovery": 9, + "resolved": true, + "startup": 7, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "e1436ba49c538e9a06184988b789418d1f92664662f3a307500c29912362f05d", - "events": [], - "fighters": [ + "checksum": "4aef31de1c5263e9da3f538796b2160f1b42fbabd87015c3517e0813f15eea14", + "events": [ + { + "action_id": "one@321", + "actor_id": "one", + "amount": 101, + "blood": 33, + "detail": "straight:head", + "direction": -1, + "event_id": 27, + "kind": "hit", + "target_id": "two", + "tick": 328 + }, { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "actor_id": "one", + "amount": 101, + "blood": 0, + "detail": "", + "direction": 0, + "event_id": 28, + "kind": "stun", + "target_id": "two", + "tick": 328 + } + ], + "fighters": [ + { + "action": "straight", + "action_active_ticks": 3, + "action_contact_tick": 328, + "action_hand": "right", + "action_id": "one@321", + "action_key": "straight:right:head:power", + "action_power": "power", + "action_recovery_ticks": 9, + "action_start_tick": 321, + "action_startup_ticks": 7, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 993, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 143, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 977, + "stamina": 961, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -91108,8 +52111,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -91125,108 +52128,141 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 95, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 27, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 3, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 158, + "left_cut": 80, + "left_eye": 154, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 77 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 48, + "y": 138 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 59, + "phase": "fight", + "phase_ticks_remaining": 999792, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 667 + "tick": 328 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 667 + "tick": 328 }, { - "attack_one": null, + "attack_one": { + "active": 3, + "age": 8, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "power", + "recovery": 9, + "resolved": true, + "startup": 7, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "739577867f493cfff35444be6535e3d9a576bbce6a417fe603f5fc880a794d79", + "checksum": "1a415e94affdab570d58b4ecae091f6145c54ebd9c8b8e5c7edb10aee5eba2e2", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 3, + "action_contact_tick": 328, + "action_hand": "right", + "action_id": "one@321", + "action_key": "straight:right:head:power", + "action_power": "power", + "action_recovery_ticks": 9, + "action_start_tick": 321, + "action_startup_ticks": 7, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 993, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 143, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 981, + "stamina": 963, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -91242,8 +52278,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -91259,108 +52295,154 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 95, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 26, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 3, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 158, + "left_cut": 80, + "left_eye": 154, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 77 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 48, + "y": 138 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 58, + "phase": "fight", + "phase_ticks_remaining": 999791, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 668 + "tick": 329 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 668 + "tick": 329 }, { - "attack_one": null, + "attack_one": { + "active": 3, + "age": 9, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "power", + "recovery": 9, + "resolved": true, + "startup": 7, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "75eb598906e2248cce85e8f46ccb2beb82222464509977316557f19d4c48bb09", - "events": [], - "fighters": [ + "checksum": "924d88bb1ef2b4586e4c5d9ff0af4a7dd767f3695665d75a4577e0db2e36bf32", + "events": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "actor_id": "two", + "amount": 0, + "blood": 25, + "detail": "", + "direction": 0, + "event_id": 29, + "kind": "bleed", + "target_id": null, + "tick": 330 + } + ], + "fighters": [ + { + "action": "straight", + "action_active_ticks": 3, + "action_contact_tick": 328, + "action_hand": "right", + "action_id": "one@321", + "action_key": "straight:right:head:power", + "action_power": "power", + "action_recovery_ticks": 9, + "action_start_tick": 321, + "action_startup_ticks": 7, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 993, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 143, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 965, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -91376,8 +52458,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -91393,108 +52475,141 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 95, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 25, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 3, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 158, + "left_cut": 80, + "left_eye": 154, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 77 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 48, + "y": 138 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 57, + "phase": "fight", + "phase_ticks_remaining": 999790, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 669 + "tick": 330 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 669 + "tick": 330 }, { - "attack_one": null, + "attack_one": { + "active": 3, + "age": 10, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "power", + "recovery": 9, + "resolved": true, + "startup": 7, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "d0ada636e8fdb786e9c08b80b64210b311faa0820b355e92bcd783737dab3b96", + "checksum": "0cb5b1218dfdfe131e3fbd6ad6d597807729e86aa282bff5cfbdfc313cb0f010", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 3, + "action_contact_tick": 328, + "action_hand": "right", + "action_id": "one@321", + "action_key": "straight:right:head:power", + "action_power": "power", + "action_recovery_ticks": 9, + "action_start_tick": 321, + "action_startup_ticks": 7, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 993, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 143, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 967, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -91510,8 +52625,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -91527,108 +52642,141 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 95, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 24, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 3, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 158, + "left_cut": 80, + "left_eye": 154, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 77 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 48, + "y": 138 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 56, + "phase": "fight", + "phase_ticks_remaining": 999789, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 670 + "tick": 331 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 670 + "tick": 331 }, { - "attack_one": null, + "attack_one": { + "active": 3, + "age": 11, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "power", + "recovery": 9, + "resolved": true, + "startup": 7, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "90ec51ce19a2f679b6285e573b4b37656814c92365194cb60fdabad1975d3501", + "checksum": "f9367a29dc0e5f22b6d80d4f0d631a807100592004e0f12060cb51f3f0a74058", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 3, + "action_contact_tick": 328, + "action_hand": "right", + "action_id": "one@321", + "action_key": "straight:right:head:power", + "action_power": "power", + "action_recovery_ticks": 9, + "action_start_tick": 321, + "action_startup_ticks": 7, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 993, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 143, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 969, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -91644,8 +52792,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -91661,108 +52809,141 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 95, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 23, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 3, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 158, + "left_cut": 80, + "left_eye": 154, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 77 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 48, + "y": 138 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 55, + "phase": "fight", + "phase_ticks_remaining": 999788, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 671 + "tick": 332 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 671 + "tick": 332 }, { - "attack_one": null, + "attack_one": { + "active": 3, + "age": 12, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "power", + "recovery": 9, + "resolved": true, + "startup": 7, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "8e5d511cce4e2532c726185255a5196ddfea93a9b20588adfe0ab4242b9d3d50", + "checksum": "16181d2de93720fc50cbb3abf282c63b49b4674aba03fdf087e8768ec1d769b6", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 3, + "action_contact_tick": 328, + "action_hand": "right", + "action_id": "one@321", + "action_key": "straight:right:head:power", + "action_power": "power", + "action_recovery_ticks": 9, + "action_start_tick": 321, + "action_startup_ticks": 7, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 993, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 143, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 971, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -91778,8 +52959,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -91795,108 +52976,141 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 95, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 22, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 3, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 158, + "left_cut": 80, + "left_eye": 154, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 77 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 48, + "y": 138 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 54, + "phase": "fight", + "phase_ticks_remaining": 999787, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 672 + "tick": 333 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 672 + "tick": 333 }, { - "attack_one": null, + "attack_one": { + "active": 3, + "age": 13, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "power", + "recovery": 9, + "resolved": true, + "startup": 7, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "d3d5d5ac1965ef7703856703bdb4eaa5412210eb3e483141e243018b86e3716d", + "checksum": "c7cf68e32a8909015c5dceae543308870518e30f8139b83e4510950c54f5c620", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 3, + "action_contact_tick": 328, + "action_hand": "right", + "action_id": "one@321", + "action_key": "straight:right:head:power", + "action_power": "power", + "action_recovery_ticks": 9, + "action_start_tick": 321, + "action_startup_ticks": 7, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 993, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 143, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 973, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -91912,8 +53126,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -91929,108 +53143,141 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 95, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 21, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 3, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 158, + "left_cut": 80, + "left_eye": 154, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 77 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 48, + "y": 138 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 53, + "phase": "fight", + "phase_ticks_remaining": 999786, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 673 + "tick": 334 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 673 + "tick": 334 }, { - "attack_one": null, + "attack_one": { + "active": 3, + "age": 14, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "power", + "recovery": 9, + "resolved": true, + "startup": 7, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "9a7b8c0d2f00667b84c76e0870cb0ea4580a23067947726f9a2263313f5302b4", + "checksum": "0ae065c137e6698faeb95fb3bb5876ad474a8fcfb821ad29721096ddc10b37f8", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 3, + "action_contact_tick": 328, + "action_hand": "right", + "action_id": "one@321", + "action_key": "straight:right:head:power", + "action_power": "power", + "action_recovery_ticks": 9, + "action_start_tick": 321, + "action_startup_ticks": 7, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 993, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 143, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 975, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -92046,8 +53293,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -92063,108 +53310,141 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 95, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 20, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 3, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 158, + "left_cut": 80, + "left_eye": 154, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 77 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 48, + "y": 138 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 52, + "phase": "fight", + "phase_ticks_remaining": 999785, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 674 + "tick": 335 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 674 + "tick": 335 }, { - "attack_one": null, + "attack_one": { + "active": 3, + "age": 15, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "power", + "recovery": 9, + "resolved": true, + "startup": 7, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "1c6627bb84eb9553f9d873f6a7c789cfd3de026ab476892617dd117e8b6a0944", + "checksum": "ded14b432ee5776f17d59e96fc3908eb837b3f01e92b2d2c9ad006159f3c8779", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 3, + "action_contact_tick": 328, + "action_hand": "right", + "action_id": "one@321", + "action_key": "straight:right:head:power", + "action_power": "power", + "action_recovery_ticks": 9, + "action_start_tick": 321, + "action_startup_ticks": 7, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 993, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 143, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 977, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -92180,8 +53460,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -92197,108 +53477,141 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 95, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 19, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 3, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 158, + "left_cut": 80, + "left_eye": 154, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 77 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 48, + "y": 138 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 51, + "phase": "fight", + "phase_ticks_remaining": 999784, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 675 + "tick": 336 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 675 + "tick": 336 }, { - "attack_one": null, + "attack_one": { + "active": 3, + "age": 16, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "power", + "recovery": 9, + "resolved": true, + "startup": 7, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "1cc51001d33d4f03ce5b6048e112191d07de82d4a2039794dc469dd2fdab847f", + "checksum": "4ff92923f3ef19d5876092d960fbab67752931331f79d42869daaf27a566df2d", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 3, + "action_contact_tick": 328, + "action_hand": "right", + "action_id": "one@321", + "action_key": "straight:right:head:power", + "action_power": "power", + "action_recovery_ticks": 9, + "action_start_tick": 321, + "action_startup_ticks": 7, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 993, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 143, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 979, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -92314,8 +53627,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -92331,108 +53644,141 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 95, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 18, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 3, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 158, + "left_cut": 80, + "left_eye": 154, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 77 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 48, + "y": 138 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 50, + "phase": "fight", + "phase_ticks_remaining": 999783, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 676 + "tick": 337 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 676 + "tick": 337 }, { - "attack_one": null, + "attack_one": { + "active": 3, + "age": 17, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "power", + "recovery": 9, + "resolved": true, + "startup": 7, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "4c861f3d5fa680529b5cca983a7bd9259a770cc81d5344d4962274bd592433df", + "checksum": "430f61c580c00aace0f31fca2d5678cd0ed722a531cbf32380f8e02b18049e78", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 3, + "action_contact_tick": 328, + "action_hand": "right", + "action_id": "one@321", + "action_key": "straight:right:head:power", + "action_power": "power", + "action_recovery_ticks": 9, + "action_start_tick": 321, + "action_startup_ticks": 7, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 993, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 143, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 981, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -92448,8 +53794,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -92465,108 +53811,141 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 95, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 17, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 3, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 158, + "left_cut": 80, + "left_eye": 154, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 77 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 48, + "y": 138 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 49, + "phase": "fight", + "phase_ticks_remaining": 999782, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 677 + "tick": 338 }, "type": "snapshot", - "version": 4 + "version": 5 + }, + "tick": 338 + }, + { + "attack_one": { + "active": 3, + "age": 18, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "power", + "recovery": 9, + "resolved": true, + "startup": 7, + "target": "head" }, - "tick": 677 - }, - { - "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "90ba2d685a466867a62697740869cd4c83125f2262cafa9ac108d441d960fccb", + "checksum": "a60c92b00ee885f34ddf4feb2c977556534587d72dfbc3f69e548ee9903aab40", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 3, + "action_contact_tick": 328, + "action_hand": "right", + "action_id": "one@321", + "action_key": "straight:right:head:power", + "action_power": "power", + "action_recovery_ticks": 9, + "action_start_tick": 321, + "action_startup_ticks": 7, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 993, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 143, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 983, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -92582,8 +53961,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -92599,108 +53978,130 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 95, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 16, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 3, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 158, + "left_cut": 80, + "left_eye": 154, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 77 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 48, + "y": 138 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 48, + "phase": "fight", + "phase_ticks_remaining": 999781, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 678 + "tick": 339 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 678 + "tick": 339 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "9d5663a1e6b107129b8bc1eeecbfee4a748f5e9dc1560ad6832fccd2a579f317", + "checksum": "e4c122cdeb0530408b562e207ed6bc2a74fed53aa4634f71d655e5feb2afccca", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 3, + "action_contact_tick": 328, + "action_hand": "right", + "action_id": "one@321", + "action_key": "straight:right:head:power", + "action_power": "power", + "action_recovery_ticks": 9, + "action_start_tick": 321, + "action_startup_ticks": 7, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 993, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 143, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 988, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -92716,8 +54117,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -92733,108 +54134,154 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 95, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 15, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 3, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 158, + "left_cut": 80, + "left_eye": 154, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 77 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 48, + "y": 138 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 47, + "phase": "fight", + "phase_ticks_remaining": 999780, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 679 + "tick": 340 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 679 + "tick": 340 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 0, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": false, + "startup": 4, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "efd4bdb34ac15721842b4d29fb88e1e7f52bc8de7174aacff8cf55004bd30c29", - "events": [], + "checksum": "6b0d128ba9b935a95e03400bd059521f14f260c570bacb5ddd436770ee487b63", + "events": [ + { + "action_id": "one@341", + "actor_id": "one", + "amount": 0, + "blood": 0, + "detail": "right:straight:head", + "direction": 0, + "event_id": 30, + "kind": "punch_start", + "target_id": null, + "tick": 341 + } + ], "fighters": [ { - "action": null, - "action_active_ticks": 0, + "action": "straight", + "action_active_ticks": 2, "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action_hand": "right", + "action_id": "one@341", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 341, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 992, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 951, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -92850,8 +54297,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -92867,108 +54314,141 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 95, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 14, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 3, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 158, + "left_cut": 80, + "left_eye": 154, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 77 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 48, + "y": 138 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 46, + "phase": "fight", + "phase_ticks_remaining": 999779, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 680 + "tick": 341 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 680 + "tick": 341 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 1, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": false, + "startup": 4, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "f0656a207b4a24bec4bce154e736233b370ee88cb6a94135bf06329b8bfc21f6", + "checksum": "5bbf4a17866ce99fd41ed792a37d850672f02da15baa23411399998ab7c1857f", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, + "action": "straight", + "action_active_ticks": 2, "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action_hand": "right", + "action_id": "one@341", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 341, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 992, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 953, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -92984,8 +54464,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -93001,108 +54481,141 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 95, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 13, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 3, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 158, + "left_cut": 80, + "left_eye": 154, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 77 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 48, + "y": 138 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 45, + "phase": "fight", + "phase_ticks_remaining": 999778, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 681 + "tick": 342 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 681 + "tick": 342 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 2, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": false, + "startup": 4, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "dff8d59c58e4239a7dc2bf33bee1b1ade95d58f95eb234ab564f76f5f9a4270f", + "checksum": "95468ee163de907ba4b7059a7c6f12097ad3ba1cfee48d6ad17543f567a08f26", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, + "action": "straight", + "action_active_ticks": 2, "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action_hand": "right", + "action_id": "one@341", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 341, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 992, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 955, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -93118,8 +54631,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -93135,108 +54648,141 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 95, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 12, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 3, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 158, + "left_cut": 80, + "left_eye": 154, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 77 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 48, + "y": 138 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 44, + "phase": "fight", + "phase_ticks_remaining": 999777, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 682 + "tick": 343 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 682 + "tick": 343 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 3, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": false, + "startup": 4, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "6fcbfbdb21b5067cf231503d0a681922198b583f9ebd0cf89230e26900b8132f", + "checksum": "bb57a481c8d28a1106cc88e358a07c73ff16eef6308662bdd58ae7814ae30ddc", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, + "action": "straight", + "action_active_ticks": 2, "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action_hand": "right", + "action_id": "one@341", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 341, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 992, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 957, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -93252,8 +54798,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -93269,108 +54815,154 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 95, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 11, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 3, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 158, + "left_cut": 80, + "left_eye": 154, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 77 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 48, + "y": 138 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 43, + "phase": "fight", + "phase_ticks_remaining": 999776, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 683 + "tick": 344 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 683 + "tick": 344 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 4, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": true, + "startup": 4, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "9ed2a59e860da09b6675767ba80df6c0923c31cd86d7a83378cb6082f49bb631", - "events": [], + "checksum": "6cd2340c97b8674670d606441334e291b514786550be3fdba2dc6024e45a6da8", + "events": [ + { + "action_id": "one@341", + "actor_id": "one", + "amount": 58, + "blood": 20, + "detail": "straight:head", + "direction": -1, + "event_id": 31, + "kind": "hit", + "target_id": "two", + "tick": 345 + } + ], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 345, + "action_hand": "right", + "action_id": "one@341", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 341, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 992, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 959, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -93386,8 +54978,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -93403,108 +54995,141 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 51, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 10, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 48, + "y": 138 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 42, + "phase": "fight", + "phase_ticks_remaining": 999775, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 684 + "tick": 345 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 684 + "tick": 345 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 5, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": true, + "startup": 4, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "26f827e78ed673ed427d1d0024bd305c14e3266e700a733f1b5677e292982d1f", + "checksum": "38bb5856c04c68b62d3d4ed3cc359e040258fc6854c87a4550e6eb3e50c2cf55", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 345, + "action_hand": "right", + "action_id": "one@341", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 341, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 992, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 961, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -93520,8 +55145,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -93537,108 +55162,141 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 51, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 9, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 48, + "y": 138 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 41, + "phase": "fight", + "phase_ticks_remaining": 999774, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 685 + "tick": 346 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 685 + "tick": 346 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 6, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": true, + "startup": 4, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "92a5a4ec4744fdd1e876b63ef65f7a02535fdbd01de48c26a95df44a62254e17", + "checksum": "ddb5e2bbd6e313c2d542d0fa0371de93e2cba1c814a4a222e4949e06978a6639", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 345, + "action_hand": "right", + "action_id": "one@341", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 341, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 992, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 963, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -93654,8 +55312,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -93671,108 +55329,141 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 51, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 8, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 48, + "y": 138 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 40, + "phase": "fight", + "phase_ticks_remaining": 999773, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 686 + "tick": 347 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 686 + "tick": 347 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 7, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": true, + "startup": 4, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "cd3cdde6dc15367c01e932996b2cf846ad41cc01cbc81ef293e31051d6f1bfe5", + "checksum": "dfd75a852d2a4cc27b947138e0336f5bbb023ceb39bd40dbbe3243e219f735e6", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 345, + "action_hand": "right", + "action_id": "one@341", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 341, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 992, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 965, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -93788,8 +55479,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -93805,108 +55496,141 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 51, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 7, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 48, + "y": 138 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 39, + "phase": "fight", + "phase_ticks_remaining": 999772, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 687 + "tick": 348 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 687 + "tick": 348 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 8, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": true, + "startup": 4, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "f8bf906ef1d68e28da2a3ce674fb887c22ed72cd7f9a7e96719101bff47e391c", + "checksum": "35ec0b879b8bbda16fe6a6c4aa4263816821cd6f5c6392471e6193d29accd8d4", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 345, + "action_hand": "right", + "action_id": "one@341", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 341, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 992, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 967, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -93922,8 +55646,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -93939,108 +55663,141 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 51, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 6, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 48, + "y": 138 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 38, + "phase": "fight", + "phase_ticks_remaining": 999771, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 688 + "tick": 349 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 688 + "tick": 349 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 9, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": true, + "startup": 4, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "e96cee4c87822d501c744ae079194d9f9ff16480e9217732781a9aa2d1661750", + "checksum": "218d66ea8123ffd1a81f98146b654b6837c8d3475f85b97eabb84bccbdecd6bd", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 345, + "action_hand": "right", + "action_id": "one@341", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 341, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 992, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 969, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -94056,8 +55813,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -94073,108 +55830,141 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 51, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 5, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 48, + "y": 138 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 37, + "phase": "fight", + "phase_ticks_remaining": 999770, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 689 + "tick": 350 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 689 + "tick": 350 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 10, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": true, + "startup": 4, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "d18ad026126f6a75195c71ea25289843696416278118595f74ea33fdfa1f3d6d", + "checksum": "3d513fba3007312d704bbc443dfa42f0cb738fde50b39f48b9817955047cd9e0", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 345, + "action_hand": "right", + "action_id": "one@341", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 341, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 992, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 971, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -94190,8 +55980,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -94207,108 +55997,141 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 51, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 4, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 48, + "y": 138 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 36, + "phase": "fight", + "phase_ticks_remaining": 999769, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 690 + "tick": 351 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 690 + "tick": 351 }, { - "attack_one": null, + "attack_one": { + "active": 2, + "age": 11, + "class": "straight", + "combo_bonus": 0, + "hand": "right", + "power": "normal", + "recovery": 6, + "resolved": true, + "startup": 4, + "target": "head" + }, "attack_two": null, "snapshot": { "payload": { - "checksum": "34d857eb1c5cc01cfa8defe83798b477e87e871c377ea0a4ed39afd05c8b82f4", + "checksum": "1b1ae9ea44e66620ad4e5d4b6a9d8f6368a55ad5dc2dc2cde03b9db2f4d8e60e", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 345, + "action_hand": "right", + "action_id": "one@341", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 341, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 992, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 973, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -94324,8 +56147,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -94341,108 +56164,130 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 51, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 3, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 48, + "y": 138 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 35, + "phase": "fight", + "phase_ticks_remaining": 999768, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 691 + "tick": 352 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 691 + "tick": 352 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "eb5b5b96546eab5a3a0036cfbe9fb8093e39fcf22f875b85798fa3e745da1781", + "checksum": "441cd1eb3b145a0e54fd0fed898ccb0803a61bdbbf728778007ad8b87c2a1fe1", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 345, + "action_hand": "right", + "action_id": "one@341", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 341, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 992, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 978, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -94458,8 +56303,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -94475,108 +56320,130 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 51, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 2, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 48, + "y": 138 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 34, + "phase": "fight", + "phase_ticks_remaining": 999767, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 692 + "tick": 353 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 692 + "tick": 353 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "6d00d1a0accb5bc4418e0ecaaae7cb9d85c9285347240bf2cbb2f5717e4892ea", + "checksum": "23d25b0a9ba3a600bf0b0d09a57d7198b1ca41c82235d50f0f5a9f43cdb6f890", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 345, + "action_hand": "right", + "action_id": "one@341", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 341, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 992, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 983, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -94592,8 +56459,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -94609,108 +56476,130 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 51, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 48, + "y": 138 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 33, + "phase": "fight", + "phase_ticks_remaining": 999766, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 693 + "tick": 354 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 693 + "tick": 354 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "7bb3b075686508031682490c67e982e80347f010576792847b3e54e48e16ce2a", + "checksum": "aa98d6dd9958d110362c3f211ee31fbc18679bdb834a87014f0070c31cb0ebed", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 345, + "action_hand": "right", + "action_id": "one@341", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 341, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 992, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 988, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -94726,8 +56615,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -94743,108 +56632,130 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 51, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 48, + "y": 138 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 32, + "phase": "fight", + "phase_ticks_remaining": 999765, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 694 + "tick": 355 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 694 + "tick": 355 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "9705ba0edd635cc92cf095f9064f377cd0f4dc81991c37e6ef1f5b919b2e7d17", + "checksum": "89d359d85ff341285578c59870c3c0dc6851c9763e3e9062eb5c97c732a0f1f9", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 345, + "action_hand": "right", + "action_id": "one@341", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 341, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 992, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 993, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -94860,8 +56771,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -94877,108 +56788,130 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 52, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 48, + "y": 138 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 31, + "phase": "fight", + "phase_ticks_remaining": 999764, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 40, + "y": 51 + }, "result": null, "round_number": 1, - "tick": 695 + "tick": 356 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 695 + "tick": 356 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "9e0bce5319737e210e2d5edcadd0a73f0d094fa41159125e261041fe4cdb77b5", + "checksum": "d4044ce0d2cdb094cc2786f099703fec7a3b6f4315b2498dd78ecde11d3f4cfe", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 345, + "action_hand": "right", + "action_id": "one@341", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 341, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 992, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 998, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -94994,8 +56927,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -95011,108 +56944,130 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 646, + "facing_y": -767, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 52, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "velocity_x": 5, + "velocity_y": -5, + "warnings": 0, + "x": 52, + "y": 134 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 30, + "phase": "fight", + "phase_ticks_remaining": 999763, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 2, + "velocity_y": -2, + "x": 42, + "y": 49 + }, "result": null, "round_number": 1, - "tick": 696 + "tick": 357 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 696 + "tick": 357 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "85cdfdda7d372cb910b884e72e2e8ceb2a2e3741ba1390b9921a69342ea1859f", + "checksum": "38fab9322efb5b08a899ab80d1101f882d196482f86c388267ffc343eba7b3cc", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 345, + "action_hand": "right", + "action_id": "one@341", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 341, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 992, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -646, + "facing_y": 767, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 998, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -95128,8 +57083,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -95145,108 +57100,130 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 644, + "facing_y": -766, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 53, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "velocity_x": 6, + "velocity_y": -7, + "warnings": 0, + "x": 58, + "y": 127 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 29, + "phase": "fight", + "phase_ticks_remaining": 999762, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 639, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 3, + "velocity_y": -2, + "x": 45, + "y": 47 + }, "result": null, "round_number": 1, - "tick": 697 + "tick": 358 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 697 + "tick": 358 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "e9d0d2ad3e7559af8cc3a967a53a5829966b365508983716d553f9ac99713ffa", + "checksum": "bbf8d1b0da68ea3b87c18c015be702c80302b82521d356d1f4977f6525787fd7", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 345, + "action_hand": "right", + "action_id": "one@341", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 341, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 992, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -644, + "facing_y": 766, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 998, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -95262,8 +57239,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -95279,108 +57256,143 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 649, + "facing_y": -773, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 53, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "velocity_x": 6, + "velocity_y": -7, + "warnings": 0, + "x": 64, + "y": 120 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 28, + "phase": "fight", + "phase_ticks_remaining": 999761, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 3, + "velocity_y": -5, + "x": 48, + "y": 42 + }, "result": null, "round_number": 1, - "tick": 698 + "tick": 359 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 698 + "tick": 359 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "15fbd80fc4f86e5883f47d2162dd6d0b960452339162d1b46501afcb72dc1d3a", - "events": [], - "fighters": [ + "checksum": "1e862173d517445a967180792af1e062651ae17d437b34f96cb07d5e189feefc", + "events": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "actor_id": "two", + "amount": 0, + "blood": 25, + "detail": "", + "direction": 0, + "event_id": 32, + "kind": "bleed", + "target_id": null, + "tick": 360 + } + ], + "fighters": [ + { + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 345, + "action_hand": "right", + "action_id": "one@341", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 341, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 992, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -649, + "facing_y": 773, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 998, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -95396,8 +57408,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -95413,108 +57425,143 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 655, + "facing_y": -770, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 54, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "velocity_x": 6, + "velocity_y": -7, + "warnings": 0, + "x": 70, + "y": 112 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 27, + "phase": "fight", + "phase_ticks_remaining": 999760, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 3, + "velocity_y": -4, + "x": 51, + "y": 38 + }, "result": null, "round_number": 1, - "tick": 699 + "tick": 360 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 699 + "tick": 360 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "9d9b3bdad089085a2132791007987a7ccc9586259fed46cee17b8946f4838b3a", - "events": [], - "fighters": [ + "checksum": "5557d0986f30cf98ed40a6cf8620d6047c2cf3b923cdc6f78bcd3dfce385537d", + "events": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "actor_id": "two", + "amount": 0, + "blood": 0, + "detail": "", + "direction": 0, + "event_id": 33, + "kind": "clinch_start", + "target_id": "one", + "tick": 361 + } + ], + "fighters": [ + { + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 345, + "action_hand": "right", + "action_id": "one@341", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 341, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 992, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -655, + "facing_y": 770, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 998, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -95530,8 +57577,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -95545,110 +57592,132 @@ "action_start_tick": 0, "action_startup_ticks": 0, "action_target": null, - "clinch_startup_ticks": 0, + "clinch_startup_ticks": 6, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 655, + "facing_y": -770, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 54, "queued_actions": 0, - "stamina": 877, + "stamina": 975, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "velocity_x": 2, + "velocity_y": -2, + "warnings": 0, + "x": 71, + "y": 110 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 26, + "phase": "fight", + "phase_ticks_remaining": 999759, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 1, + "velocity_y": -1, + "x": 52, + "y": 37 + }, "result": null, "round_number": 1, - "tick": 700 + "tick": 361 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 700 + "tick": 361 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "84dd5d6a9a6c6ee796823a41fd3d126775db0ec0b005aecbffd753dec6dbbbb3", + "checksum": "41b19c5b31df7f1b14de1acca05f072be870ca06add354447b5358ce0215bf3c", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 345, + "action_hand": "right", + "action_id": "one@341", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 341, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 992, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -658, + "facing_y": 764, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 998, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -95664,8 +57733,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -95679,110 +57748,132 @@ "action_start_tick": 0, "action_startup_ticks": 0, "action_target": null, - "clinch_startup_ticks": 0, + "clinch_startup_ticks": 5, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 655, + "facing_y": -770, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 54, "queued_actions": 0, - "stamina": 877, + "stamina": 976, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 72, + "y": 110 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 25, + "phase": "fight", + "phase_ticks_remaining": 999758, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 52, + "y": 37 + }, "result": null, "round_number": 1, - "tick": 701 + "tick": 362 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 701 + "tick": 362 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "dbbd958fe8be9873fd9c3515702a23920e78d1750f4d088aec81f6066e08f9e5", + "checksum": "dfeffbddd7577aac2d26f3d13696c81cbb3fc81b16822d2b4e1ab6e181115f39", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 345, + "action_hand": "right", + "action_id": "one@341", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 341, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 992, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 764, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 998, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -95798,8 +57889,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -95813,110 +57904,132 @@ "action_start_tick": 0, "action_startup_ticks": 0, "action_target": null, - "clinch_startup_ticks": 0, + "clinch_startup_ticks": 4, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 655, + "facing_y": -770, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 54, "queued_actions": 0, - "stamina": 877, + "stamina": 977, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 72, + "y": 110 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 24, + "phase": "fight", + "phase_ticks_remaining": 999757, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 52, + "y": 37 + }, "result": null, "round_number": 1, - "tick": 702 + "tick": 363 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 702 + "tick": 363 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "95006f33a0b55186e1e5ea10e6ec8d78da25f2c3a485d2352ddbf1b37f3cdb87", + "checksum": "63b4f88ae7b075987eca17d737391d6ca09f2d71501750890f0dc4d063c0dddf", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 345, + "action_hand": "right", + "action_id": "one@341", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 341, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 992, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 764, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 998, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -95932,8 +58045,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -95947,110 +58060,132 @@ "action_start_tick": 0, "action_startup_ticks": 0, "action_target": null, - "clinch_startup_ticks": 0, + "clinch_startup_ticks": 3, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 655, + "facing_y": -770, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 54, "queued_actions": 0, - "stamina": 877, + "stamina": 978, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 72, + "y": 110 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 23, + "phase": "fight", + "phase_ticks_remaining": 999756, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 52, + "y": 37 + }, "result": null, "round_number": 1, - "tick": 703 + "tick": 364 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 703 + "tick": 364 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "d6f952e10bc8d70403fbe73c579cb3490d6ec9f377e6449c4870dd042ba815df", + "checksum": "f0b38b1eeef83811097885ac58c735f0bbd60b1025a9d75b3be42bab7f282181", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 345, + "action_hand": "right", + "action_id": "one@341", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 341, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 992, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 764, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 998, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -96066,8 +58201,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -96081,110 +58216,132 @@ "action_start_tick": 0, "action_startup_ticks": 0, "action_target": null, - "clinch_startup_ticks": 0, + "clinch_startup_ticks": 2, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 655, + "facing_y": -770, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 54, "queued_actions": 0, - "stamina": 877, + "stamina": 979, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 72, + "y": 110 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 22, + "phase": "fight", + "phase_ticks_remaining": 999755, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 52, + "y": 37 + }, "result": null, "round_number": 1, - "tick": 704 + "tick": 365 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 704 + "tick": 365 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "0a7efbdc23508f4122172a56b5b457e841147d75b26ec47b65df0c7e8086daf7", + "checksum": "017306d7ea85747ce52660330d7bcf89f59854371cb4c47b789eab7da765ccb2", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 345, + "action_hand": "right", + "action_id": "one@341", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 341, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 992, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 764, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 998, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -96200,8 +58357,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -96215,110 +58372,145 @@ "action_start_tick": 0, "action_startup_ticks": 0, "action_target": null, - "clinch_startup_ticks": 0, + "clinch_startup_ticks": 1, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 655, + "facing_y": -770, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 54, "queued_actions": 0, - "stamina": 877, + "stamina": 980, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 72, + "y": 110 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 21, + "phase": "fight", + "phase_ticks_remaining": 999754, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 52, + "y": 37 + }, "result": null, "round_number": 1, - "tick": 705 + "tick": 366 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 705 + "tick": 366 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "bf74e456b7733ed3d6a1a1016b3c5a8f386534f013d26cccba21cf1c8b209403", - "events": [], - "fighters": [ + "checksum": "a9c41810894d3d1a475d766db27c16361b7cf3eba72debc0307d37f12f10186d", + "events": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "actor_id": "two", + "amount": 0, + "blood": 0, + "detail": "", + "direction": 0, + "event_id": 34, + "kind": "clinch", + "target_id": "one", + "tick": 367 + } + ], + "fighters": [ + { + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 345, + "action_hand": "right", + "action_id": "one@341", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 341, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, + "clinch_ticks": 24, + "conditioning": 992, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 764, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 980, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -96334,8 +58526,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 127, + "y": 45 }, { "action": null, @@ -96350,109 +58542,131 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 966, + "clinch_ticks": 24, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 655, + "facing_y": -770, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 54, "queued_actions": 0, - "stamina": 877, + "stamina": 962, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 72, + "y": 110 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 20, + "phase": "fight", + "phase_ticks_remaining": 999753, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 52, + "y": 37 + }, "result": null, "round_number": 1, - "tick": 706 + "tick": 367 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 706 + "tick": 367 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "2457348732e97bc66f7a632ca5a3cad64bf05fcac5b12f0d800c1732c350cb1c", + "checksum": "5c65ab27d7df3604056abdb4519130495b99f265a3ec9317d7d758030b8c2446", "events": [], "fighters": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, + "action": "straight", + "action_active_ticks": 2, + "action_contact_tick": 345, + "action_hand": "right", + "action_id": "one@341", + "action_key": "straight:right:head:normal", + "action_power": "normal", + "action_recovery_ticks": 6, + "action_start_tick": 341, + "action_startup_ticks": 4, + "action_target": "head", "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, + "clinch_ticks": 23, + "conditioning": 992, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -647, + "facing_y": 764, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 983, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -96468,8 +58682,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 124, + "y": 49 }, { "action": null, @@ -96484,68 +58698,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 966, + "clinch_ticks": 23, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 647, + "facing_y": -764, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 54, "queued_actions": 0, - "stamina": 877, + "stamina": 965, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 75, + "y": 106 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 19, + "phase": "fight", + "phase_ticks_remaining": 999752, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 52, + "y": 37 + }, "result": null, "round_number": 1, - "tick": 707 + "tick": 368 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 707 + "tick": 368 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "5d5a0e19a0a3918b7e28043353f85a0a7c1ae89b7914531a4a955926d547a9e4", + "checksum": "6447ff62ba0d579ecd63bd3475c644b4d5fe882fb5ed007deac5cb2b376d1f58", "events": [], "fighters": [ { @@ -96561,32 +58796,33 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, + "clinch_ticks": 22, + "conditioning": 992, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -653, + "facing_y": 760, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 986, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -96602,8 +58838,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 121, + "y": 53 }, { "action": null, @@ -96618,68 +58854,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 966, + "clinch_ticks": 22, + "conditioning": 996, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 653, + "facing_y": -760, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 54, "queued_actions": 0, - "stamina": 877, + "stamina": 968, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 78, + "y": 102 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 18, + "phase": "fight", + "phase_ticks_remaining": 999751, + "referee": { + "alive": true, + "facing_x": 761, + "facing_y": 666, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 1, + "velocity_y": -1, + "x": 51, + "y": 35 + }, "result": null, "round_number": 1, - "tick": 708 + "tick": 369 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 708 + "tick": 369 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "0b77cc616ca9b5d9645049f402aecb592e8d1956dfe5f01779748b4a3bbea784", + "checksum": "0a041b930e122e43a76ec5d88cc7a286a078b41dbe68783ea00f2db36a8bba64", "events": [], "fighters": [ { @@ -96695,32 +58952,33 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, + "clinch_ticks": 21, + "conditioning": 991, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -661, + "facing_y": 753, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 989, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -96736,8 +58994,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 120, + "y": 54 }, { "action": null, @@ -96752,68 +59010,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 966, + "clinch_ticks": 21, + "conditioning": 995, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 661, + "facing_y": -753, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 54, "queued_actions": 0, - "stamina": 877, + "stamina": 971, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 79, + "y": 101 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 17, + "phase": "fight", + "phase_ticks_remaining": 999750, + "referee": { + "alive": true, + "facing_x": 765, + "facing_y": 656, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 1, + "velocity_y": 1, + "x": 50, + "y": 35 + }, "result": null, "round_number": 1, - "tick": 709 + "tick": 370 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 709 + "tick": 370 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "6b9196cc6a7aecaf4cef01ae33b3c4a290bddc011328c90c0bf5f71bbeda9695", + "checksum": "7b789afbde04945ba8900d91cfb5c1776ad6ed11af231cd57f58cc9dcc01136e", "events": [], "fighters": [ { @@ -96829,32 +59108,33 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, + "clinch_ticks": 20, + "conditioning": 991, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -661, + "facing_y": 758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -96870,8 +59150,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 120, + "y": 54 }, { "action": null, @@ -96886,68 +59166,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 966, + "clinch_ticks": 20, + "conditioning": 995, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 661, + "facing_y": -758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 54, "queued_actions": 0, - "stamina": 877, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 79, + "y": 101 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 16, + "phase": "fight", + "phase_ticks_remaining": 999749, + "referee": { + "alive": true, + "facing_x": 765, + "facing_y": 656, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 2, + "velocity_y": 1, + "x": 50, + "y": 35 + }, "result": null, "round_number": 1, - "tick": 710 + "tick": 371 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 710 + "tick": 371 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "12600ba803e0793198534d865f4a1fb5eac31674fa19e368ea638457056d57cc", + "checksum": "1bca85380812cd461735a509a31e602026960e17276f4b052b7393ca2d507420", "events": [], "fighters": [ { @@ -96963,32 +59264,33 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, + "clinch_ticks": 19, + "conditioning": 991, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -661, + "facing_y": 758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 995, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -97004,8 +59306,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 120, + "y": 54 }, { "action": null, @@ -97020,68 +59322,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 966, + "clinch_ticks": 19, + "conditioning": 995, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 661, + "facing_y": -758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 54, "queued_actions": 0, - "stamina": 877, + "stamina": 977, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 79, + "y": 101 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 15, + "phase": "fight", + "phase_ticks_remaining": 999748, + "referee": { + "alive": true, + "facing_x": 765, + "facing_y": 656, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 2, + "velocity_y": 1, + "x": 50, + "y": 35 + }, "result": null, "round_number": 1, - "tick": 711 + "tick": 372 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 711 + "tick": 372 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "b4d51788101e4183d59716718c9bf8189a58c82975ca3ec6fb61dec7a3cf0fad", + "checksum": "bebf56338cb97e688ab386dbd53651825846e0d089aecece606647bd949774b3", "events": [], "fighters": [ { @@ -97097,32 +59420,33 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, + "clinch_ticks": 18, + "conditioning": 991, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -661, + "facing_y": 758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 998, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -97138,8 +59462,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 120, + "y": 54 }, { "action": null, @@ -97154,68 +59478,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 966, + "clinch_ticks": 18, + "conditioning": 995, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 661, + "facing_y": -758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 54, "queued_actions": 0, - "stamina": 877, + "stamina": 980, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 79, + "y": 101 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 14, + "phase": "fight", + "phase_ticks_remaining": 999747, + "referee": { + "alive": true, + "facing_x": 765, + "facing_y": 656, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 2, + "velocity_y": 1, + "x": 50, + "y": 35 + }, "result": null, "round_number": 1, - "tick": 712 + "tick": 373 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 712 + "tick": 373 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "43252e3982b0fcbdb56900d72bd9a46dbebc93a9ed6d98306f58877394a9c212", + "checksum": "c4cd789cfe1a07daf778d832071dacc8553c211d298f62f36494e687f68af7c8", "events": [], "fighters": [ { @@ -97231,32 +59576,33 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, + "clinch_ticks": 17, + "conditioning": 991, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -661, + "facing_y": 758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 998, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -97272,8 +59618,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 120, + "y": 54 }, { "action": null, @@ -97288,68 +59634,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 966, + "clinch_ticks": 17, + "conditioning": 995, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 661, + "facing_y": -758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 54, "queued_actions": 0, - "stamina": 877, + "stamina": 983, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 79, + "y": 101 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 13, + "phase": "fight", + "phase_ticks_remaining": 999746, + "referee": { + "alive": true, + "facing_x": 765, + "facing_y": 656, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 2, + "velocity_y": 1, + "x": 50, + "y": 35 + }, "result": null, "round_number": 1, - "tick": 713 + "tick": 374 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 713 + "tick": 374 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "3932271ae93b77f1947b0ac6836715ea9b9374c40378f2efbf1f586465fcdd3f", + "checksum": "42c8226b8af2ef26442eaa51b0e6a99a3de7efabacdeee54e9f1f09793f173d8", "events": [], "fighters": [ { @@ -97365,32 +59732,33 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, + "clinch_ticks": 16, + "conditioning": 991, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -661, + "facing_y": 758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 998, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -97406,8 +59774,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 120, + "y": 54 }, { "action": null, @@ -97422,68 +59790,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 966, + "clinch_ticks": 16, + "conditioning": 995, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 661, + "facing_y": -758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 54, "queued_actions": 0, - "stamina": 877, + "stamina": 986, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 79, + "y": 101 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 12, + "phase": "fight", + "phase_ticks_remaining": 999745, + "referee": { + "alive": true, + "facing_x": 765, + "facing_y": 656, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 2, + "velocity_y": 1, + "x": 50, + "y": 35 + }, "result": null, "round_number": 1, - "tick": 714 + "tick": 375 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 714 + "tick": 375 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "de2c47c59adf679013a3f4cb86586cda74f6504774283109c4861ecf6e186784", + "checksum": "be607536f8fbeea2e5510f101e52334665b9d9b1296aac0091906e719d6c5031", "events": [], "fighters": [ { @@ -97499,32 +59888,33 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, + "clinch_ticks": 15, + "conditioning": 991, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -661, + "facing_y": 758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 998, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -97540,8 +59930,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 120, + "y": 54 }, { "action": null, @@ -97556,68 +59946,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 966, + "clinch_ticks": 15, + "conditioning": 995, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 661, + "facing_y": -758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 54, "queued_actions": 0, - "stamina": 877, + "stamina": 989, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 79, + "y": 101 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 11, + "phase": "fight", + "phase_ticks_remaining": 999744, + "referee": { + "alive": true, + "facing_x": 765, + "facing_y": 656, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 2, + "velocity_y": 1, + "x": 50, + "y": 35 + }, "result": null, "round_number": 1, - "tick": 715 + "tick": 376 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 715 + "tick": 376 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "6427fbee6ba0f0276eceb7cba38db306ecf208ba8a33c05f1ee83f4b6fa20725", + "checksum": "3c153acda0cc46f93bc8f9fc82216adea3596f4f4e3f7d5cdd21162cf7d55697", "events": [], "fighters": [ { @@ -97633,32 +60044,33 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, + "clinch_ticks": 14, + "conditioning": 991, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -661, + "facing_y": 758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 998, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -97674,8 +60086,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 120, + "y": 54 }, { "action": null, @@ -97690,68 +60102,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 966, + "clinch_ticks": 14, + "conditioning": 995, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 661, + "facing_y": -758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 54, "queued_actions": 0, - "stamina": 877, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 79, + "y": 101 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 10, + "phase": "fight", + "phase_ticks_remaining": 999743, + "referee": { + "alive": true, + "facing_x": 765, + "facing_y": 656, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 2, + "velocity_y": 1, + "x": 50, + "y": 35 + }, "result": null, "round_number": 1, - "tick": 716 + "tick": 377 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 716 + "tick": 377 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "a7330aef29fc895e99e276cef1667bfe551aa3b0037f63689338b49b30310891", + "checksum": "2243c723b6c1fd6253f60a4a242a751b434a95a31c3a40f4575ae61d61a5cd07", "events": [], "fighters": [ { @@ -97767,32 +60200,33 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, + "clinch_ticks": 13, + "conditioning": 991, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -661, + "facing_y": 758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 998, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -97808,8 +60242,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 120, + "y": 54 }, { "action": null, @@ -97824,68 +60258,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 966, + "clinch_ticks": 13, + "conditioning": 995, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 661, + "facing_y": -758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 54, "queued_actions": 0, - "stamina": 877, + "stamina": 995, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 79, + "y": 101 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 9, + "phase": "fight", + "phase_ticks_remaining": 999742, + "referee": { + "alive": true, + "facing_x": 765, + "facing_y": 656, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 2, + "velocity_y": 1, + "x": 50, + "y": 35 + }, "result": null, "round_number": 1, - "tick": 717 + "tick": 378 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 717 + "tick": 378 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "f8bc785a423f01e5ff843684f702bfb4518c1c594f4097edee11e032a6e4865d", + "checksum": "b909efa9ca2347279c052d18067f0c121d062a91aed0821bacf1be424f0e653b", "events": [], "fighters": [ { @@ -97901,32 +60356,33 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, + "clinch_ticks": 12, + "conditioning": 991, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -661, + "facing_y": 758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 998, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 998, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -97942,8 +60398,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 120, + "y": 54 }, { "action": null, @@ -97958,68 +60414,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 966, + "clinch_ticks": 12, + "conditioning": 995, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 661, + "facing_y": -758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 54, "queued_actions": 0, - "stamina": 877, + "stamina": 998, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 79, + "y": 101 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 8, + "phase": "fight", + "phase_ticks_remaining": 999741, + "referee": { + "alive": true, + "facing_x": 765, + "facing_y": 656, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 2, + "velocity_y": 1, + "x": 50, + "y": 35 + }, "result": null, "round_number": 1, - "tick": 718 + "tick": 379 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 718 + "tick": 379 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "80eff065facf0a06ce59908471e46f18536e3b991e03487682f6e5c97d2d8e37", + "checksum": "6396b30604540553844bac8313d2c164bdce8ea85dabd14aa4305bd19e897e33", "events": [], "fighters": [ { @@ -98035,32 +60512,33 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, + "clinch_ticks": 11, + "conditioning": 990, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -661, + "facing_y": 758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -98076,8 +60554,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 120, + "y": 54 }, { "action": null, @@ -98092,68 +60570,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 966, + "clinch_ticks": 11, + "conditioning": 994, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 661, + "facing_y": -758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 54, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 79, + "y": 101 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 7, + "phase": "fight", + "phase_ticks_remaining": 999740, + "referee": { + "alive": true, + "facing_x": 765, + "facing_y": 656, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 2, + "velocity_y": 1, + "x": 50, + "y": 35 + }, "result": null, "round_number": 1, - "tick": 719 + "tick": 380 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 719 + "tick": 380 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "257b84d3ffc68da2d4eef0d94afe282e1247ec4d1258cc2dd41f446ab83508fd", + "checksum": "6638ca3ce018f7318eb49b910713176558cb8ada7d856eca56a445f608c09836", "events": [], "fighters": [ { @@ -98169,32 +60668,33 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, + "clinch_ticks": 10, + "conditioning": 990, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -661, + "facing_y": 758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -98210,8 +60710,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 120, + "y": 54 }, { "action": null, @@ -98226,68 +60726,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 966, + "clinch_ticks": 10, + "conditioning": 994, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 661, + "facing_y": -758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 54, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 79, + "y": 101 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 6, + "phase": "fight", + "phase_ticks_remaining": 999739, + "referee": { + "alive": true, + "facing_x": 765, + "facing_y": 656, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 2, + "velocity_y": 1, + "x": 50, + "y": 35 + }, "result": null, "round_number": 1, - "tick": 720 + "tick": 381 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 720 + "tick": 381 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "3841b060942f82f9ba89ea785d1493ab7c2e392928cccf4df5a70a27ffec517e", + "checksum": "43554877f1aa234453e83c09731f7c3326cc528377925539f3ee429ffe763183", "events": [], "fighters": [ { @@ -98303,32 +60824,33 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, + "clinch_ticks": 9, + "conditioning": 990, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -661, + "facing_y": 758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -98344,8 +60866,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 120, + "y": 54 }, { "action": null, @@ -98360,68 +60882,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 966, + "clinch_ticks": 9, + "conditioning": 994, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 661, + "facing_y": -758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 54, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 79, + "y": 101 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 5, + "phase": "fight", + "phase_ticks_remaining": 999738, + "referee": { + "alive": true, + "facing_x": 765, + "facing_y": 656, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 2, + "velocity_y": 1, + "x": 50, + "y": 35 + }, "result": null, "round_number": 1, - "tick": 721 + "tick": 382 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 721 + "tick": 382 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "2515cf6efb6a21e571219120aec985f7aa88fba01df945d40d3af406144607da", + "checksum": "cc860d032fe21518aa21d0a13fb8f5b5a2949e0ff5870bbe350f83ffad45f703", "events": [], "fighters": [ { @@ -98437,32 +60980,33 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, + "clinch_ticks": 8, + "conditioning": 990, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -661, + "facing_y": 758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -98478,8 +61022,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 120, + "y": 54 }, { "action": null, @@ -98494,68 +61038,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 966, + "clinch_ticks": 8, + "conditioning": 994, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 661, + "facing_y": -758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 54, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 79, + "y": 101 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 4, + "phase": "fight", + "phase_ticks_remaining": 999737, + "referee": { + "alive": true, + "facing_x": 765, + "facing_y": 656, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 2, + "velocity_y": 1, + "x": 50, + "y": 35 + }, "result": null, "round_number": 1, - "tick": 722 + "tick": 383 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 722 + "tick": 383 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "dc012e6fa9fdf5e7df1a93e9634a39913fb881ea7460a8f9bd45f0bc7ff84c2b", + "checksum": "51db94e4c7af841b5e0193e4f2d5c3ae557c351f7a4605036e7d97e64ea36e9f", "events": [], "fighters": [ { @@ -98571,32 +61136,33 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, + "clinch_ticks": 7, + "conditioning": 990, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -661, + "facing_y": 758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -98612,8 +61178,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 120, + "y": 54 }, { "action": null, @@ -98628,68 +61194,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 966, + "clinch_ticks": 7, + "conditioning": 994, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 661, + "facing_y": -758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 54, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 79, + "y": 101 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 3, + "phase": "fight", + "phase_ticks_remaining": 999736, + "referee": { + "alive": true, + "facing_x": 765, + "facing_y": 656, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 2, + "velocity_y": 1, + "x": 50, + "y": 35 + }, "result": null, "round_number": 1, - "tick": 723 + "tick": 384 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 723 + "tick": 384 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "1ea3b992f8db12acc70114d3e8bfd2bd528fcbf7682c8bed694e006e3267d559", + "checksum": "37a1a7fae72817ebf3455ce84feb9b040b7b0b7696347d7d4cefb5de50f2b20d", "events": [], "fighters": [ { @@ -98705,32 +61292,33 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, + "clinch_ticks": 6, + "conditioning": 990, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -661, + "facing_y": 758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -98746,8 +61334,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 120, + "y": 54 }, { "action": null, @@ -98762,68 +61350,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 966, + "clinch_ticks": 6, + "conditioning": 994, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 661, + "facing_y": -758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 54, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 79, + "y": 101 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 2, + "phase": "fight", + "phase_ticks_remaining": 999735, + "referee": { + "alive": true, + "facing_x": 765, + "facing_y": 656, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 2, + "velocity_y": 1, + "x": 50, + "y": 35 + }, "result": null, "round_number": 1, - "tick": 724 + "tick": 385 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 724 + "tick": 385 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "dea79ee75a86848d7f6f3c2d433173f3dedef3e53842febc1e52ae9f729ef9af", + "checksum": "c23f3cc71dda13286d257d2885d0eb59cfbe14cdeecbd5b9129cfd2e4947e68f", "events": [], "fighters": [ { @@ -98839,32 +61448,33 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, + "clinch_ticks": 5, + "conditioning": 990, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -661, + "facing_y": 758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": true, + "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 30, + "stunned_ticks": 0, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -98880,8 +61490,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 120, + "y": 54 }, { "action": null, @@ -98896,82 +61506,90 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 966, + "clinch_ticks": 5, + "conditioning": 994, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 661, + "facing_y": -758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 54, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 79, + "y": 101 } ], - "phase": "foul_recovery", - "phase_ticks_remaining": 1, + "phase": "fight", + "phase_ticks_remaining": 999734, + "referee": { + "alive": true, + "facing_x": 765, + "facing_y": 656, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 2, + "velocity_y": 1, + "x": 50, + "y": 35 + }, "result": null, "round_number": 1, - "tick": 725 + "tick": 386 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 725 + "tick": 386 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "a4f335e0608a1e54c6ae96feb76dfc1d748194c4f31975bdb653c6623b187c6f", - "events": [ - { - "action_id": null, - "actor_id": null, - "amount": 0, - "blood": 0, - "detail": "foul_recovery_complete", - "direction": 0, - "event_id": 38, - "kind": "resume", - "target_id": null, - "tick": 726 - } - ], + "checksum": "c8f0abf5060820f298686e0216727eaef96753298e6f2a814e2b1b928197e52d", + "events": [], "fighters": [ { "action": null, @@ -98986,30 +61604,31 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, + "clinch_ticks": 4, + "conditioning": 990, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -661, + "facing_y": 758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -99027,8 +61646,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 120, + "y": 54 }, { "action": null, @@ -99043,68 +61662,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 966, + "clinch_ticks": 4, + "conditioning": 994, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 661, + "facing_y": -758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 54, "queued_actions": 0, - "stamina": 877, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 79, + "y": 101 } ], "phase": "fight", - "phase_ticks_remaining": 999634, + "phase_ticks_remaining": 999733, + "referee": { + "alive": true, + "facing_x": 765, + "facing_y": 656, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 2, + "velocity_y": 1, + "x": 50, + "y": 35 + }, "result": null, "round_number": 1, - "tick": 726 + "tick": 387 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 726 + "tick": 387 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "cd055eafdeb3bf582b8d8a9541124dabb1f291f0c5a2b81e50c2673dee02b241", + "checksum": "d0e6ee5e56668450d8e95d3793265ec25507a4e716b48e36287da4df085147af", "events": [], "fighters": [ { @@ -99120,30 +61760,31 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, + "clinch_ticks": 3, + "conditioning": 990, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 159, - "get_up_count": 8, + "facing_x": -661, + "facing_y": 758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 185, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -99161,8 +61802,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 248, - "y": 108 + "x": 120, + "y": 54 }, { "action": null, @@ -99177,68 +61818,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 966, + "clinch_ticks": 3, + "conditioning": 994, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -159, - "get_up_count": 8, + "facing_x": 661, + "facing_y": -758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 58, + "poise": 54, "queued_actions": 0, - "stamina": 880, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 79, + "y": 101 } ], "phase": "fight", - "phase_ticks_remaining": 999633, + "phase_ticks_remaining": 999732, + "referee": { + "alive": true, + "facing_x": 765, + "facing_y": 656, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 2, + "velocity_y": 1, + "x": 50, + "y": 35 + }, "result": null, "round_number": 1, - "tick": 727 + "tick": 388 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 727 + "tick": 388 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "bdbf092ae0f982d339b04d62522ff5f2f7aa6cf253497c13a472cffa0064bbe0", + "checksum": "0081313fec6407296d9924ce4ac8d7c3a746f052e3c3df3a12a528f113fcd6e1", "events": [], "fighters": [ { @@ -99254,30 +61916,31 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, + "clinch_ticks": 2, + "conditioning": 990, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -988, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -661, + "facing_y": 758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 186, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -99292,11 +61955,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, + "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 246, - "y": 108 + "x": 120, + "y": 54 }, { "action": null, @@ -99311,69 +61974,103 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 966, + "clinch_ticks": 2, + "conditioning": 994, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -159, - "get_up_count": 8, + "facing_x": 661, + "facing_y": -758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 999, "player_id": "two", - "poise": 59, + "poise": 54, "queued_actions": 0, - "stamina": 883, + "stamina": 999, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 79, + "y": 101 } ], "phase": "fight", - "phase_ticks_remaining": 999632, + "phase_ticks_remaining": 999731, + "referee": { + "alive": true, + "facing_x": 765, + "facing_y": 656, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 2, + "velocity_y": 1, + "x": 50, + "y": 35 + }, "result": null, "round_number": 1, - "tick": 728 + "tick": 389 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 728 + "tick": 389 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "017232ca430188d253b19c038cd5f3262a9bb57fd48fff1d91f7d58fbaa2a6a3", - "events": [], + "checksum": "3f5e0b3e5a1c758135fb50eac61e8774fdcf0c11dc553372d51d5c73f44d1277", + "events": [ + { + "action_id": null, + "actor_id": "two", + "amount": 0, + "blood": 25, + "detail": "", + "direction": 0, + "event_id": 35, + "kind": "bleed", + "target_id": null, + "tick": 390 + } + ], "fighters": [ { "action": null, @@ -99388,30 +62085,31 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, + "clinch_ticks": 1, + "conditioning": 989, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -988, - "facing_y": 160, - "get_up_count": 8, + "facing_x": -661, + "facing_y": 758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 187, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -99426,11 +62124,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": 1, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 241, - "y": 109 + "x": 120, + "y": 54 }, { "action": null, @@ -99445,69 +62143,103 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 966, + "clinch_ticks": 1, + "conditioning": 993, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 988, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 661, + "facing_y": -758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 998, "player_id": "two", - "poise": 59, + "poise": 54, "queued_actions": 0, - "stamina": 886, + "stamina": 998, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 79, + "y": 101 } ], "phase": "fight", - "phase_ticks_remaining": 999631, + "phase_ticks_remaining": 999730, + "referee": { + "alive": true, + "facing_x": 765, + "facing_y": 656, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 2, + "velocity_y": 1, + "x": 50, + "y": 35 + }, "result": null, "round_number": 1, - "tick": 729 + "tick": 390 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 729 + "tick": 390 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "fb9500735138ba82be9fe61bd6817b6006bd29e5c5be93ccdb0e7a81975e403e", - "events": [], + "checksum": "f2974cefb8feeeb9c5c93d77b08cdbffddb5a48090784dea2336fd1df52faf58", + "events": [ + { + "action_id": null, + "actor_id": "one", + "amount": 0, + "blood": 0, + "detail": "", + "direction": 0, + "event_id": 36, + "kind": "referee_break", + "target_id": "two", + "tick": 391 + } + ], "fighters": [ { "action": null, @@ -99523,29 +62255,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 989, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -988, - "facing_y": 158, - "get_up_count": 8, + "facing_x": -661, + "facing_y": 758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 188, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -99560,11 +62293,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -5, - "velocity_y": 1, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 236, - "y": 110 + "x": 149, + "y": 20 }, { "action": null, @@ -99580,67 +62313,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 993, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 988, - "facing_y": -160, - "get_up_count": 8, + "facing_x": 661, + "facing_y": -758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 998, "player_id": "two", - "poise": 60, + "poise": 54, "queued_actions": 0, - "stamina": 889, + "stamina": 998, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 50, + "y": 135 } ], "phase": "fight", - "phase_ticks_remaining": 999630, + "phase_ticks_remaining": 999729, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 2, + "velocity_y": 2, + "x": 52, + "y": 37 + }, "result": null, "round_number": 1, - "tick": 730 + "tick": 391 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 730 + "tick": 391 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "4ddf9498e9171490fe913b1aa4ec5f2a8ff59fd44838c19dc877a6d5e6485b62", + "checksum": "a78039347b8a6d0f911bf27ee25ce80b11ed4ef27601f39afc7cf44fee63dab5", "events": [], "fighters": [ { @@ -99657,29 +62411,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 989, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -987, - "facing_y": 164, - "get_up_count": 8, + "facing_x": -655, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 189, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -99694,11 +62449,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -5, - "velocity_y": 1, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 230, - "y": 110 + "x": 149, + "y": 20 }, { "action": null, @@ -99714,67 +62469,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 993, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 988, - "facing_y": -158, - "get_up_count": 8, + "facing_x": 655, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 998, "player_id": "two", - "poise": 60, + "poise": 55, "queued_actions": 0, - "stamina": 892, + "stamina": 998, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "warnings": 0, + "x": 50, + "y": 135 } ], "phase": "fight", - "phase_ticks_remaining": 999629, + "phase_ticks_remaining": 999728, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 52, + "y": 37 + }, "result": null, "round_number": 1, - "tick": 731 + "tick": 392 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 731 + "tick": 392 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "d024cbe07611fa3756dd7fcab29a3bf9bbcff9ee2d7dabe25b13e99003238dcc", + "checksum": "f2710fee62f8e30cf878e55dccf62cbc7d46a10266df5ac38b985d2935235230", "events": [], "fighters": [ { @@ -99791,29 +62567,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 989, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -987, - "facing_y": 163, - "get_up_count": 8, + "facing_x": -655, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 190, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -99828,11 +62605,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -5, - "velocity_y": 1, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 225, - "y": 111 + "x": 149, + "y": 20 }, { "action": null, @@ -99848,67 +62625,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 993, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 987, - "facing_y": -164, - "get_up_count": 8, + "facing_x": 655, + "facing_y": -758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 998, "player_id": "two", - "poise": 61, + "poise": 55, "queued_actions": 0, - "stamina": 895, + "stamina": 998, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "velocity_x": 5, + "velocity_y": -5, + "warnings": 0, + "x": 54, + "y": 130 } ], "phase": "fight", - "phase_ticks_remaining": 999628, + "phase_ticks_remaining": 999727, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 2, + "velocity_y": -2, + "x": 54, + "y": 35 + }, "result": null, "round_number": 1, - "tick": 732 + "tick": 393 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 732 + "tick": 393 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "81d99361f8debca9eb2ccfa4a5ff3013120461fbcf25536e230d47e0bfe17da2", + "checksum": "bf290fdc354ddcc2b1f9a35f9897abf42abe1a3995106ea34f45ff572dae1ee3", "events": [], "fighters": [ { @@ -99925,29 +62723,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 989, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -986, - "facing_y": 163, - "get_up_count": 8, + "facing_x": -655, + "facing_y": 758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 191, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -99962,11 +62761,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -5, - "velocity_y": 1, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 219, - "y": 112 + "x": 149, + "y": 20 }, { "action": null, @@ -99982,67 +62781,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 993, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 987, - "facing_y": -163, - "get_up_count": 8, + "facing_x": 654, + "facing_y": -757, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 998, "player_id": "two", - "poise": 61, + "poise": 56, "queued_actions": 0, - "stamina": 898, + "stamina": 998, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "velocity_x": 6, + "velocity_y": -7, + "warnings": 0, + "x": 60, + "y": 123 } ], "phase": "fight", - "phase_ticks_remaining": 999627, + "phase_ticks_remaining": 999726, + "referee": { + "alive": true, + "facing_x": 766, + "facing_y": 666, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 4, + "velocity_y": -4, + "x": 58, + "y": 31 + }, "result": null, "round_number": 1, - "tick": 733 + "tick": 394 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 733 + "tick": 394 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "173095545c76da2548207f8df3dd34241ee7a00edc4933890f503e017457da42", + "checksum": "0dd1694f338aba1a107a8ffe231e8ff41bd4fce3c9189e2397a7965f1bd320e8", "events": [], "fighters": [ { @@ -100059,29 +62879,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 989, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -993, - "facing_y": 164, - "get_up_count": 8, + "facing_x": -654, + "facing_y": 757, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 192, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -100096,11 +62917,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -5, - "velocity_y": 1, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 213, - "y": 113 + "x": 149, + "y": 20 }, { "action": null, @@ -100116,67 +62937,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 993, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 986, - "facing_y": -163, - "get_up_count": 8, + "facing_x": 658, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 998, "player_id": "two", - "poise": 62, + "poise": 56, "queued_actions": 0, - "stamina": 901, + "stamina": 998, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "velocity_x": 6, + "velocity_y": -7, + "warnings": 0, + "x": 66, + "y": 116 } ], "phase": "fight", - "phase_ticks_remaining": 999626, + "phase_ticks_remaining": 999725, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 2, + "velocity_y": -3, + "x": 60, + "y": 28 + }, "result": null, "round_number": 1, - "tick": 734 + "tick": 395 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 734 + "tick": 395 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "1ab3df8c73b4abeadc213df640e2bd448d1c377ff701e94f4239ab9242d05cc6", + "checksum": "49bc1eb66fe00e75c3d93e5d2efffa91eb15f8bf886ee8f7658f79cb4599e7f2", "events": [], "fighters": [ { @@ -100193,29 +63035,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 989, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -992, - "facing_y": 164, - "get_up_count": 8, + "facing_x": -658, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 193, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -100230,11 +63073,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -5, - "velocity_y": 1, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 207, - "y": 114 + "x": 149, + "y": 20 }, { "action": null, @@ -100250,67 +63093,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 993, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 993, - "facing_y": -164, - "get_up_count": 8, + "facing_x": 649, + "facing_y": -760, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 998, "player_id": "two", - "poise": 62, + "poise": 57, "queued_actions": 0, - "stamina": 904, + "stamina": 998, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "velocity_x": 6, + "velocity_y": -7, + "warnings": 0, + "x": 73, + "y": 109 } ], "phase": "fight", - "phase_ticks_remaining": 999625, + "phase_ticks_remaining": 999724, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 4, + "velocity_y": -4, + "x": 64, + "y": 24 + }, "result": null, "round_number": 1, - "tick": 735 + "tick": 396 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 735 + "tick": 396 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "3bdc73ba31bae3e092d0b14e319b51cadd3d1cc7a864825a2dacfe61103a73aa", + "checksum": "27d2b55f236a2556ea3fe9cd37e513d478d7a5886855072d538196a187bf79e0", "events": [], "fighters": [ { @@ -100327,29 +63191,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 989, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -992, - "facing_y": 164, - "get_up_count": 8, + "facing_x": -649, + "facing_y": 760, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 194, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -100364,11 +63229,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -5, - "velocity_y": 1, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 201, - "y": 115 + "x": 149, + "y": 20 }, { "action": null, @@ -100384,67 +63249,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 993, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 992, - "facing_y": -164, - "get_up_count": 8, + "facing_x": 654, + "facing_y": -766, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 998, "player_id": "two", - "poise": 63, + "poise": 57, "queued_actions": 0, - "stamina": 907, + "stamina": 998, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "velocity_x": 6, + "velocity_y": -7, + "warnings": 0, + "x": 79, + "y": 102 } ], "phase": "fight", - "phase_ticks_remaining": 999624, + "phase_ticks_remaining": 999723, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 3, + "velocity_y": -3, + "x": 67, + "y": 21 + }, "result": null, "round_number": 1, - "tick": 736 + "tick": 397 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 736 + "tick": 397 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "37d0f7310cbdd6aaec8b29e97563eaab89b06d2c53b0566964678947439e4a5e", + "checksum": "e95ca8c7429719970d6b0504e919daeb866844e4b5d289d81e508b50aae37d02", "events": [], "fighters": [ { @@ -100461,29 +63347,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 989, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -992, - "facing_y": 164, - "get_up_count": 8, + "facing_x": -654, + "facing_y": 766, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 195, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -100498,11 +63385,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -5, - "velocity_y": 1, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 195, - "y": 116 + "x": 149, + "y": 20 }, { "action": null, @@ -100518,67 +63405,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 993, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 992, - "facing_y": -164, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 998, "player_id": "two", - "poise": 63, + "poise": 58, "queued_actions": 0, - "stamina": 910, + "stamina": 998, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "velocity_x": 6, + "velocity_y": -7, + "warnings": 0, + "x": 85, + "y": 94 } ], "phase": "fight", - "phase_ticks_remaining": 999623, + "phase_ticks_remaining": 999722, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 3, + "velocity_y": -4, + "x": 70, + "y": 17 + }, "result": null, "round_number": 1, - "tick": 737 + "tick": 398 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 737 + "tick": 398 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "c52d6be0ab84f60923eb99ccdbbb843197fde6560c8b2b1e34ccd880cd1a09e7", + "checksum": "41c250062a59764d135ef0717602332e97c31235e27ae26697f2c784ed8c2888", "events": [], "fighters": [ { @@ -100595,29 +63503,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 989, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -991, - "facing_y": 163, - "get_up_count": 8, + "facing_x": -659, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 196, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -100632,11 +63541,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -5, - "velocity_y": 1, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 189, - "y": 117 + "x": 149, + "y": 20 }, { "action": null, @@ -100652,68 +63561,102 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 993, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 992, - "facing_y": -164, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 998, "player_id": "two", - "poise": 64, + "poise": 58, "queued_actions": 0, - "stamina": 913, + "stamina": 998, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 1, - "x": 68, - "y": 137 + "velocity_x": 6, + "velocity_y": -7, + "warnings": 0, + "x": 91, + "y": 87 } ], "phase": "fight", - "phase_ticks_remaining": 999622, + "phase_ticks_remaining": 999721, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 3, + "velocity_y": -4, + "x": 73, + "y": 13 + }, "result": null, "round_number": 1, - "tick": 738 + "tick": 399 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 738 + "tick": 399 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "d2c0a6d8f03450d3b0eae017e556808435da954402ea756b1a8f4e4a2985eee5", - "events": [], + "checksum": "8dec4cf7156e76786a4107d9a97d0b389217afc8f002a5b32787a11c4b89c563", + "events": [ + { + "action_id": null, + "actor_id": "two", + "amount": 0, + "blood": 0, + "detail": "low_blow", + "direction": 0, + "event_id": 37, + "kind": "foul", + "target_id": "one", + "tick": 400 + } + ], "fighters": [ { "action": null, @@ -100729,31 +63672,32 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 989, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -991, - "facing_y": 163, - "get_up_count": 8, + "facing_x": -659, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": false, + "is_foul_recovery_target": true, "knockdowns": 0, - "last_input_sequence": 197, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 30, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -100766,11 +63710,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -5, - "velocity_y": 1, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 183, - "y": 118 + "x": 178, + "y": -14 }, { "action": null, @@ -100786,67 +63730,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 973, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 991, - "facing_y": -163, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 64, + "poise": 59, "queued_actions": 0, - "stamina": 916, + "stamina": 883, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, "warnings": 1, - "x": 68, - "y": 137 + "x": 62, + "y": 121 } ], - "phase": "fight", - "phase_ticks_remaining": 999621, + "phase": "foul_recovery", + "phase_ticks_remaining": 30, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 73, + "y": 13 + }, "result": null, "round_number": 1, - "tick": 739 + "tick": 400 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 739 + "tick": 400 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "de4e04594b18ac74bb277d9d0add3417daf4a07addb29c956f266bbb347c3607", + "checksum": "26e056dff5688d00b4b0cef8bef87a6fc26fbece911571655ac9fcccfeff4a8c", "events": [], "fighters": [ { @@ -100863,31 +63828,32 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 989, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -990, - "facing_y": 163, - "get_up_count": 8, + "facing_x": -659, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": false, + "is_foul_recovery_target": true, "knockdowns": 0, - "last_input_sequence": 198, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 30, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -100900,11 +63866,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -5, - "velocity_y": 1, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 177, - "y": 119 + "x": 178, + "y": -14 }, { "action": null, @@ -100920,67 +63886,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 973, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 991, - "facing_y": -163, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 65, + "poise": 59, "queued_actions": 0, - "stamina": 919, + "stamina": 883, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, "warnings": 1, - "x": 68, - "y": 137 + "x": 62, + "y": 121 } ], - "phase": "fight", - "phase_ticks_remaining": 999620, + "phase": "foul_recovery", + "phase_ticks_remaining": 29, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 73, + "y": 13 + }, "result": null, "round_number": 1, - "tick": 740 + "tick": 401 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 740 + "tick": 401 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "fc12d596307e0929e0ce9daf537a344b92929393ef5d3f323964f2b634444f36", + "checksum": "3a619ec5bf8078fddfb1bb452caef4d302a9435c47a91dd41894fc0d7c3d42c2", "events": [], "fighters": [ { @@ -100997,31 +63984,32 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 989, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -990, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -659, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": false, + "is_foul_recovery_target": true, "knockdowns": 0, - "last_input_sequence": 199, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 30, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -101034,11 +64022,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -5, - "velocity_y": 1, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 172, - "y": 120 + "x": 178, + "y": -14 }, { "action": null, @@ -101054,67 +64042,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 973, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 990, - "facing_y": -163, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 65, + "poise": 59, "queued_actions": 0, - "stamina": 922, + "stamina": 883, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, "warnings": 1, - "x": 68, - "y": 137 + "x": 62, + "y": 121 } ], - "phase": "fight", - "phase_ticks_remaining": 999619, + "phase": "foul_recovery", + "phase_ticks_remaining": 28, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 73, + "y": 13 + }, "result": null, "round_number": 1, - "tick": 741 + "tick": 402 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 741 + "tick": 402 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "16bd4b479194e56d4e5e316af16bb2fa31e92baeb562c177ae15262dff44ea59", + "checksum": "a450435af1b823db4b5b0609a5079e321885c28c7d3141d46bde2eb0c099d02b", "events": [], "fighters": [ { @@ -101131,31 +64140,32 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 989, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -659, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": false, + "is_foul_recovery_target": true, "knockdowns": 0, - "last_input_sequence": 200, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 30, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -101168,11 +64178,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -5, - "velocity_y": 1, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 166, - "y": 121 + "x": 178, + "y": -14 }, { "action": null, @@ -101188,67 +64198,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 973, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 990, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 66, + "poise": 59, "queued_actions": 0, - "stamina": 925, + "stamina": 883, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, "warnings": 1, - "x": 68, - "y": 137 + "x": 62, + "y": 121 } ], - "phase": "fight", - "phase_ticks_remaining": 999618, + "phase": "foul_recovery", + "phase_ticks_remaining": 27, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 73, + "y": 13 + }, "result": null, "round_number": 1, - "tick": 742 + "tick": 403 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 742 + "tick": 403 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "49e9f6024130e634a67c2093a4ad41fbfb26d448b3dd180bb2b828fed649531a", + "checksum": "e45595e604fe9b4a7c58873a910967e00cee5c65aefaf6c68254bba8f503714f", "events": [], "fighters": [ { @@ -101265,31 +64296,32 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 989, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -659, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": false, + "is_foul_recovery_target": true, "knockdowns": 0, - "last_input_sequence": 201, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 985, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 30, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -101302,11 +64334,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -5, - "velocity_y": 1, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 160, - "y": 122 + "x": 178, + "y": -14 }, { "action": null, @@ -101322,81 +64354,89 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 973, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 66, + "poise": 59, "queued_actions": 0, - "stamina": 928, + "stamina": 883, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, "warnings": 1, - "x": 68, - "y": 137 + "x": 62, + "y": 121 } ], - "phase": "fight", - "phase_ticks_remaining": 999617, + "phase": "foul_recovery", + "phase_ticks_remaining": 26, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 73, + "y": 13 + }, "result": null, "round_number": 1, - "tick": 743 + "tick": 404 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 743 + "tick": 404 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "e426a74d3197afa28feddc2998ef1dbe435c4fa5ab068395525262271237c37f", - "events": [ - { - "action_id": null, - "actor_id": "one", - "amount": 0, - "blood": 0, - "detail": "", - "direction": 0, - "event_id": 39, - "kind": "clinch_start", - "target_id": "two", - "tick": 744 - } - ], + "checksum": "f95ba3d9584d4ed2e80464ea118a3fd8a7b2ea2f9993ace55c2ce99f773aef71", + "events": [], "fighters": [ { "action": null, @@ -101410,33 +64450,34 @@ "action_start_tick": 0, "action_startup_ticks": 0, "action_target": null, - "clinch_startup_ticks": 8, + "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 989, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -659, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": false, + "is_foul_recovery_target": true, "knockdowns": 0, - "last_input_sequence": 202, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 961, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 30, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -101449,11 +64490,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, + "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 157, - "y": 123 + "x": 178, + "y": -14 }, { "action": null, @@ -101469,67 +64510,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 973, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": -161, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 67, + "poise": 59, "queued_actions": 0, - "stamina": 931, + "stamina": 883, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, "warnings": 1, - "x": 68, - "y": 137 + "x": 62, + "y": 121 } ], - "phase": "fight", - "phase_ticks_remaining": 999616, + "phase": "foul_recovery", + "phase_ticks_remaining": 25, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 73, + "y": 13 + }, "result": null, "round_number": 1, - "tick": 744 + "tick": 405 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 744 + "tick": 405 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "7a3e665d659db6bc4d4bf20330b139b82db12cd5e6b3193079dbfe86221be64e", + "checksum": "702518df6f1055ded24b0d4b49eb20e0330a58d3d21f13974eeb33d8c836b17a", "events": [], "fighters": [ { @@ -101544,33 +64606,34 @@ "action_start_tick": 0, "action_startup_ticks": 0, "action_target": null, - "clinch_startup_ticks": 7, + "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 989, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -659, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": false, + "is_foul_recovery_target": true, "knockdowns": 0, - "last_input_sequence": 202, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 962, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 30, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -101583,11 +64646,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -1, + "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 155, - "y": 123 + "x": 178, + "y": -14 }, { "action": null, @@ -101603,67 +64666,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 973, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 988, - "facing_y": -155, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 67, + "poise": 59, "queued_actions": 0, - "stamina": 934, + "stamina": 883, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, "warnings": 1, - "x": 68, - "y": 137 + "x": 62, + "y": 121 } ], - "phase": "fight", - "phase_ticks_remaining": 999615, + "phase": "foul_recovery", + "phase_ticks_remaining": 24, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 73, + "y": 13 + }, "result": null, "round_number": 1, - "tick": 745 + "tick": 406 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 745 + "tick": 406 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "f363035277df97bf314dd7afccb6a5af9baf15d548aa7a8b1fa1206e7e2f2ff8", + "checksum": "afbfd826a15aef6dbb222400f0af1c75193e284223e1eb1a171ce78058d5bf04", "events": [], "fighters": [ { @@ -101678,33 +64762,34 @@ "action_start_tick": 0, "action_startup_ticks": 0, "action_target": null, - "clinch_startup_ticks": 6, + "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 989, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -659, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": false, + "is_foul_recovery_target": true, "knockdowns": 0, - "last_input_sequence": 202, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 963, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 30, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -101717,11 +64802,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -1, + "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 155, - "y": 123 + "x": 178, + "y": -14 }, { "action": null, @@ -101737,67 +64822,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 973, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 988, - "facing_y": -159, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 68, + "poise": 59, "queued_actions": 0, - "stamina": 937, + "stamina": 883, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, "warnings": 1, - "x": 68, - "y": 137 + "x": 62, + "y": 121 } ], - "phase": "fight", - "phase_ticks_remaining": 999614, + "phase": "foul_recovery", + "phase_ticks_remaining": 23, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 73, + "y": 13 + }, "result": null, "round_number": 1, - "tick": 746 + "tick": 407 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 746 + "tick": 407 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "2926e7e96f1fad02a7f70a0e06c3104547fa629f3520e529b5e89b38312c17df", + "checksum": "d8ed15ce9b4f2532dd69fd60fb584fb1279cc37530eee95080ccbb35c4607b67", "events": [], "fighters": [ { @@ -101812,33 +64918,34 @@ "action_start_tick": 0, "action_startup_ticks": 0, "action_target": null, - "clinch_startup_ticks": 5, + "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 989, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -659, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": false, + "is_foul_recovery_target": true, "knockdowns": 0, - "last_input_sequence": 202, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 964, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 30, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -101854,8 +64961,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 154, - "y": 123 + "x": 178, + "y": -14 }, { "action": null, @@ -101871,67 +64978,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 973, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 988, - "facing_y": -159, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 68, + "poise": 59, "queued_actions": 0, - "stamina": 940, + "stamina": 883, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, "warnings": 1, - "x": 68, - "y": 137 + "x": 62, + "y": 121 } ], - "phase": "fight", - "phase_ticks_remaining": 999613, + "phase": "foul_recovery", + "phase_ticks_remaining": 22, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 73, + "y": 13 + }, "result": null, "round_number": 1, - "tick": 747 + "tick": 408 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 747 + "tick": 408 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "ae12298365cc920956187ae57151ce78dc0c50ee0cd8c5ef71d201c8f52f0474", + "checksum": "16c9404bd12c8dd23a41a59b233226b625239797b92bcfbbff63d4e3007602c4", "events": [], "fighters": [ { @@ -101946,33 +65074,34 @@ "action_start_tick": 0, "action_startup_ticks": 0, "action_target": null, - "clinch_startup_ticks": 4, + "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 989, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -659, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": false, + "is_foul_recovery_target": true, "knockdowns": 0, - "last_input_sequence": 202, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 965, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 30, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -101988,8 +65117,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 154, - "y": 123 + "x": 178, + "y": -14 }, { "action": null, @@ -102005,67 +65134,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 973, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 988, - "facing_y": -160, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 69, + "poise": 59, "queued_actions": 0, - "stamina": 943, + "stamina": 883, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, "warnings": 1, - "x": 68, - "y": 137 + "x": 62, + "y": 121 } ], - "phase": "fight", - "phase_ticks_remaining": 999612, + "phase": "foul_recovery", + "phase_ticks_remaining": 21, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 73, + "y": 13 + }, "result": null, "round_number": 1, - "tick": 748 + "tick": 409 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 748 + "tick": 409 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "213f073b5dc83e618b4e91dc5bcc6002a5bb0d0435c9c34ca3d2895e8d082640", + "checksum": "c780f23f6f9c8df661372947039f1357a605e184be226f33578b2ea187894e80", "events": [], "fighters": [ { @@ -102080,33 +65230,34 @@ "action_start_tick": 0, "action_startup_ticks": 0, "action_target": null, - "clinch_startup_ticks": 3, + "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 989, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -659, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": false, + "is_foul_recovery_target": true, "knockdowns": 0, - "last_input_sequence": 202, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 966, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 30, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -102122,8 +65273,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 154, - "y": 123 + "x": 178, + "y": -14 }, { "action": null, @@ -102139,67 +65290,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 973, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 988, - "facing_y": -160, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 69, + "poise": 59, "queued_actions": 0, - "stamina": 946, + "stamina": 883, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, "warnings": 1, - "x": 68, - "y": 137 + "x": 62, + "y": 121 } ], - "phase": "fight", - "phase_ticks_remaining": 999611, + "phase": "foul_recovery", + "phase_ticks_remaining": 20, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 73, + "y": 13 + }, "result": null, "round_number": 1, - "tick": 749 + "tick": 410 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 749 + "tick": 410 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "cecb532da859eb198a0c9a3f957f56a336c96ef15e5677b3446d7a420916437e", + "checksum": "6d555157c69b0f7a6205d51e0e9a185dd2ea202437913740b54202309a68321b", "events": [], "fighters": [ { @@ -102214,33 +65386,34 @@ "action_start_tick": 0, "action_startup_ticks": 0, "action_target": null, - "clinch_startup_ticks": 2, + "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 989, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -659, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": false, + "is_foul_recovery_target": true, "knockdowns": 0, - "last_input_sequence": 202, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 967, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 30, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -102256,8 +65429,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 154, - "y": 123 + "x": 178, + "y": -14 }, { "action": null, @@ -102273,67 +65446,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 973, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 988, - "facing_y": -160, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 70, + "poise": 59, "queued_actions": 0, - "stamina": 949, + "stamina": 883, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, "warnings": 1, - "x": 68, - "y": 137 + "x": 62, + "y": 121 } ], - "phase": "fight", - "phase_ticks_remaining": 999610, + "phase": "foul_recovery", + "phase_ticks_remaining": 19, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 73, + "y": 13 + }, "result": null, "round_number": 1, - "tick": 750 + "tick": 411 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 750 + "tick": 411 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "d211983e0eecd7ada0114236130a6dacd03948efd24ee22a386acc18d0d02bda", + "checksum": "e3b25471f9916e3c9caf1fb269690ee19fe8b9368904e4dafc3e6ff6a29e1179", "events": [], "fighters": [ { @@ -102348,33 +65542,34 @@ "action_start_tick": 0, "action_startup_ticks": 0, "action_target": null, - "clinch_startup_ticks": 1, + "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 989, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -659, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": false, + "is_foul_recovery_target": true, "knockdowns": 0, - "last_input_sequence": 202, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 968, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 30, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -102390,8 +65585,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 154, - "y": 123 + "x": 178, + "y": -14 }, { "action": null, @@ -102407,81 +65602,245 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 966, + "conditioning": 973, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 988, - "facing_y": -160, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 70, + "poise": 59, "queued_actions": 0, - "stamina": 952, + "stamina": 883, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, "warnings": 1, - "x": 68, - "y": 137 + "x": 62, + "y": 121 } ], - "phase": "fight", - "phase_ticks_remaining": 999609, + "phase": "foul_recovery", + "phase_ticks_remaining": 18, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 73, + "y": 13 + }, "result": null, "round_number": 1, - "tick": 751 + "tick": 412 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 751 + "tick": 412 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "2ce1320e5f6cdafd6aac66e2a059d6d5c739dd8505cc4fe9e6e291b6dba4f478", - "events": [ + "checksum": "dea61e68cd626cb8c29202f2bb3da6b8ad6a91d6f48c200fffa187d76bef3e1a", + "events": [], + "fighters": [ { + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, "action_id": null, - "actor_id": "one", - "amount": 0, - "blood": 0, - "detail": "", - "direction": 0, - "event_id": 40, - "kind": "clinch", - "target_id": "two", - "tick": 752 + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, + "clinch_startup_ticks": 0, + "clinch_ticks": 0, + "conditioning": 989, + "corner_choice": null, + "deductions": 0, + "defense": "none", + "facing": -1, + "facing_x": -659, + "facing_y": 761, + "get_up_count": 5, + "get_up_meter": 0, + "get_up_prompt": null, + "get_up_required": 30, + "get_up_window_end_tick": 0, + "get_up_window_start_tick": 0, + "guard": 700, + "guard_broken": false, + "is_downed": false, + "is_foul_recovery_target": true, + "knockdowns": 0, + "last_input_sequence": 144, + "maximum_stamina": 997, + "player_id": "one", + "poise": 600, + "queued_actions": 0, + "stamina": 997, + "stance": "orthodox", + "stunned_ticks": 30, + "style": "boxer", + "taunt_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "warnings": 0, + "x": 178, + "y": -14 + }, + { + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, + "clinch_startup_ticks": 0, + "clinch_ticks": 0, + "conditioning": 973, + "corner_choice": null, + "deductions": 0, + "defense": "none", + "facing": 1, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, + "get_up_meter": 0, + "get_up_prompt": null, + "get_up_required": 0, + "get_up_window_end_tick": 0, + "get_up_window_start_tick": 0, + "guard": 700, + "guard_broken": false, + "is_downed": false, + "is_foul_recovery_target": false, + "knockdowns": 1, + "last_input_sequence": -1, + "maximum_stamina": 992, + "player_id": "two", + "poise": 59, + "queued_actions": 0, + "stamina": 883, + "stance": "orthodox", + "stunned_ticks": 0, + "style": "slugger", + "taunt_ticks": 0, + "trauma": { + "bleeding": 8, + "body": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, + "right_cut": 0, + "right_eye": 23, + "swelling": 96 + }, + "velocity_x": 0, + "velocity_y": 0, + "warnings": 1, + "x": 62, + "y": 121 } ], + "phase": "foul_recovery", + "phase_ticks_remaining": 17, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 73, + "y": 13 + }, + "result": null, + "round_number": 1, + "tick": 413 + }, + "type": "snapshot", + "version": 5 + }, + "tick": 413 + }, + { + "attack_one": null, + "attack_two": null, + "snapshot": { + "payload": { + "checksum": "fcadfedad85f2947df0dbfcab6409cbb60f375e096079e0e0a33c9ae8de52a41", + "events": [], "fighters": [ { "action": null, @@ -102496,32 +65855,33 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 45, - "conditioning": 965, + "clinch_ticks": 0, + "conditioning": 989, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -989, - "facing_y": 161, - "get_up_count": 8, + "facing_x": -659, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": false, + "is_foul_recovery_target": true, "knockdowns": 0, - "last_input_sequence": 202, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 949, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 30, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -102537,8 +65897,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 154, - "y": 123 + "x": 178, + "y": -14 }, { "action": null, @@ -102553,68 +65913,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 45, - "conditioning": 966, + "clinch_ticks": 0, + "conditioning": 973, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 988, - "facing_y": -160, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 70, + "poise": 59, "queued_actions": 0, - "stamina": 933, + "stamina": 883, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, "warnings": 1, - "x": 68, - "y": 137 + "x": 62, + "y": 121 } ], - "phase": "fight", - "phase_ticks_remaining": 999608, + "phase": "foul_recovery", + "phase_ticks_remaining": 16, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 73, + "y": 13 + }, "result": null, "round_number": 1, - "tick": 752 + "tick": 414 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 752 + "tick": 414 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "3257e5f9981fb9a098554cbdf07b1a00d313a79f172fec096d583070ff854f95", + "checksum": "25bbb1946c6156f87d99a186791c9cf1dd1fb511a17d6eecfc447df3d1828a09", "events": [], "fighters": [ { @@ -102630,32 +66011,33 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 44, - "conditioning": 965, + "clinch_ticks": 0, + "conditioning": 989, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -988, - "facing_y": 160, - "get_up_count": 8, + "facing_x": -659, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": false, + "is_foul_recovery_target": true, "knockdowns": 0, - "last_input_sequence": 202, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 951, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 30, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -102671,8 +66053,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 149, - "y": 123 + "x": 178, + "y": -14 }, { "action": null, @@ -102687,68 +66069,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 44, - "conditioning": 966, + "clinch_ticks": 0, + "conditioning": 973, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 988, - "facing_y": -160, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 70, + "poise": 59, "queued_actions": 0, - "stamina": 935, + "stamina": 883, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, "warnings": 1, - "x": 73, - "y": 137 + "x": 62, + "y": 121 } ], - "phase": "fight", - "phase_ticks_remaining": 9, + "phase": "foul_recovery", + "phase_ticks_remaining": 15, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 73, + "y": 13 + }, "result": null, "round_number": 1, - "tick": 753 + "tick": 415 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 753 + "tick": 415 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "175b8f08b46e9f71a3508ee9cf65f27fae92f992f384a2ca3517f803f6fc7b6c", + "checksum": "bdaecd71e0c0fdf804c8fdb1f2d192d42b267edaff23a8919dea9d27641e7321", "events": [], "fighters": [ { @@ -102764,166 +66167,33 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 43, - "conditioning": 965, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -987, - "facing_y": 181, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 202, - "maximum_stamina": 985, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 953, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 0, - "x": 144, - "y": 124 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 43, - "conditioning": 966, - "corner_choice": null, - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 987, - "facing_y": -181, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 985, - "player_id": "two", - "poise": 70, - "queued_actions": 0, - "stamina": 937, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, - "right_cut": 0, - "right_eye": 23, - "swelling": 90 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 1, - "x": 78, - "y": 136 - } - ], - "phase": "fight", - "phase_ticks_remaining": 8, - "result": null, - "round_number": 1, - "tick": 754 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 754 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "cf152c29d01d2a588ec4943d196bc00865b884a51b24828bd52d18b4ee108e86", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 42, - "conditioning": 965, + "clinch_ticks": 0, + "conditioning": 989, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -985, - "facing_y": 179, - "get_up_count": 8, + "facing_x": -659, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": false, + "is_foul_recovery_target": true, "knockdowns": 0, - "last_input_sequence": 202, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 955, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 30, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -102939,8 +66209,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 142, - "y": 124 + "x": 178, + "y": -14 }, { "action": null, @@ -102955,68 +66225,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 42, - "conditioning": 966, + "clinch_ticks": 0, + "conditioning": 973, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 985, - "facing_y": -179, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 70, + "poise": 59, "queued_actions": 0, - "stamina": 939, + "stamina": 883, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, "warnings": 1, - "x": 80, - "y": 136 + "x": 62, + "y": 121 } ], - "phase": "fight", - "phase_ticks_remaining": 7, + "phase": "foul_recovery", + "phase_ticks_remaining": 14, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 73, + "y": 13 + }, "result": null, "round_number": 1, - "tick": 755 + "tick": 416 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 755 + "tick": 416 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "1c4003562cbb1bac248e03d11f584575b3b4a4e9acb54b08847f98603302859a", + "checksum": "19b795534685b4abef0a9c8d155d486c272f3149da9fed259030c2aa4bd47d8b", "events": [], "fighters": [ { @@ -103032,32 +66323,33 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 41, - "conditioning": 965, + "clinch_ticks": 0, + "conditioning": 989, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -984, - "facing_y": 190, - "get_up_count": 8, + "facing_x": -659, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": false, + "is_foul_recovery_target": true, "knockdowns": 0, - "last_input_sequence": 202, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 957, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 30, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -103073,8 +66365,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 142, - "y": 124 + "x": 178, + "y": -14 }, { "action": null, @@ -103089,68 +66381,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 41, - "conditioning": 966, + "clinch_ticks": 0, + "conditioning": 973, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 984, - "facing_y": -190, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 70, + "poise": 59, "queued_actions": 0, - "stamina": 941, + "stamina": 883, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, "warnings": 1, - "x": 80, - "y": 136 + "x": 62, + "y": 121 } ], - "phase": "fight", - "phase_ticks_remaining": 6, + "phase": "foul_recovery", + "phase_ticks_remaining": 13, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 73, + "y": 13 + }, "result": null, "round_number": 1, - "tick": 756 + "tick": 417 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 756 + "tick": 417 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "1482c40d2959acc05b5641348d3b829a976beb0ce78922ff6937d7bb7913dd79", + "checksum": "9e87b2471883f2a9e3d6d1db115ca9493267aaa6dfd7485b50e83e75a1f0d9ed", "events": [], "fighters": [ { @@ -103166,32 +66479,33 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 40, - "conditioning": 965, + "clinch_ticks": 0, + "conditioning": 989, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -984, - "facing_y": 190, - "get_up_count": 8, + "facing_x": -659, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": false, + "is_foul_recovery_target": true, "knockdowns": 0, - "last_input_sequence": 202, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 959, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 30, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -103207,8 +66521,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 142, - "y": 124 + "x": 178, + "y": -14 }, { "action": null, @@ -103223,68 +66537,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 40, - "conditioning": 966, + "clinch_ticks": 0, + "conditioning": 973, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 984, - "facing_y": -190, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 70, + "poise": 59, "queued_actions": 0, - "stamina": 943, + "stamina": 883, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, "warnings": 1, - "x": 80, - "y": 136 + "x": 62, + "y": 121 } ], - "phase": "fight", - "phase_ticks_remaining": 5, + "phase": "foul_recovery", + "phase_ticks_remaining": 12, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 73, + "y": 13 + }, "result": null, "round_number": 1, - "tick": 757 + "tick": 418 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 757 + "tick": 418 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "b10d2d172cfd7dd6b071612e20f391795b2313d828fb14a2ce088c0276ad4faa", + "checksum": "c972105dac4ff74f902fbe80cccc784dde423d798195d4c79ec5686ebfa0a9d6", "events": [], "fighters": [ { @@ -103300,32 +66635,33 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 39, - "conditioning": 965, + "clinch_ticks": 0, + "conditioning": 989, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -984, - "facing_y": 190, - "get_up_count": 8, + "facing_x": -659, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": false, + "is_foul_recovery_target": true, "knockdowns": 0, - "last_input_sequence": 202, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 961, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 30, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -103341,8 +66677,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 142, - "y": 124 + "x": 178, + "y": -14 }, { "action": null, @@ -103357,68 +66693,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 39, - "conditioning": 966, + "clinch_ticks": 0, + "conditioning": 973, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 984, - "facing_y": -190, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 70, + "poise": 59, "queued_actions": 0, - "stamina": 945, + "stamina": 883, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, "warnings": 1, - "x": 80, - "y": 136 + "x": 62, + "y": 121 } ], - "phase": "fight", - "phase_ticks_remaining": 4, + "phase": "foul_recovery", + "phase_ticks_remaining": 11, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 73, + "y": 13 + }, "result": null, "round_number": 1, - "tick": 758 + "tick": 419 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 758 + "tick": 419 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "0d763c70447eb26dd02f0402329c762125bd90bbb4c085141b66d7ed042e1af7", + "checksum": "3f3391ff43b0197ddd27ac6bb4bc46464721f4691b19b38f794e7c96eabb338f", "events": [], "fighters": [ { @@ -103434,32 +66791,33 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 38, - "conditioning": 965, + "clinch_ticks": 0, + "conditioning": 989, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -984, - "facing_y": 190, - "get_up_count": 8, + "facing_x": -659, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": false, + "is_foul_recovery_target": true, "knockdowns": 0, - "last_input_sequence": 202, - "maximum_stamina": 985, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 963, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 30, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -103475,8 +66833,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 142, - "y": 124 + "x": 178, + "y": -14 }, { "action": null, @@ -103491,68 +66849,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 38, - "conditioning": 966, + "clinch_ticks": 0, + "conditioning": 973, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 984, - "facing_y": -190, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 70, + "poise": 59, "queued_actions": 0, - "stamina": 947, + "stamina": 883, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, "warnings": 1, - "x": 80, - "y": 136 + "x": 62, + "y": 121 } ], - "phase": "fight", - "phase_ticks_remaining": 3, + "phase": "foul_recovery", + "phase_ticks_remaining": 10, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 73, + "y": 13 + }, "result": null, "round_number": 1, - "tick": 759 + "tick": 420 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 759 + "tick": 420 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "5eb54f9b82b09a65813b36ae2230ce70f734dbd7983f976459becd8c485cd68d", + "checksum": "77ae0fc42b927f6656f36197c191789c8130495e7c984d8d79cbdd6b0ac63fc7", "events": [], "fighters": [ { @@ -103568,32 +66947,33 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 37, - "conditioning": 964, + "clinch_ticks": 0, + "conditioning": 989, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -984, - "facing_y": 190, - "get_up_count": 8, + "facing_x": -659, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": false, + "is_foul_recovery_target": true, "knockdowns": 0, - "last_input_sequence": 202, - "maximum_stamina": 984, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 965, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 30, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -103609,8 +66989,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 142, - "y": 124 + "x": 178, + "y": -14 }, { "action": null, @@ -103625,68 +67005,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 37, - "conditioning": 965, + "clinch_ticks": 0, + "conditioning": 973, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 984, - "facing_y": -190, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 70, + "poise": 59, "queued_actions": 0, - "stamina": 949, + "stamina": 883, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, "warnings": 1, - "x": 80, - "y": 136 + "x": 62, + "y": 121 } ], - "phase": "fight", - "phase_ticks_remaining": 2, + "phase": "foul_recovery", + "phase_ticks_remaining": 9, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 73, + "y": 13 + }, "result": null, "round_number": 1, - "tick": 760 + "tick": 421 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 760 + "tick": 421 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "99b7870ffb3828547f2d96328cd17c5dba2999eccedb86a63fc8bd66272c8e46", + "checksum": "4bdaed73e17b4984aee555ba8ed54d5712cf7db14337c77f4da89245b873c5c0", "events": [], "fighters": [ { @@ -103702,32 +67103,33 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 36, - "conditioning": 964, + "clinch_ticks": 0, + "conditioning": 989, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -984, - "facing_y": 190, - "get_up_count": 8, + "facing_x": -659, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": false, + "is_foul_recovery_target": true, "knockdowns": 0, - "last_input_sequence": 202, - "maximum_stamina": 984, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 967, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 30, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -103743,8 +67145,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 142, - "y": 124 + "x": 178, + "y": -14 }, { "action": null, @@ -103759,94 +67161,90 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 36, - "conditioning": 965, + "clinch_ticks": 0, + "conditioning": 973, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 984, - "facing_y": -190, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 70, + "poise": 59, "queued_actions": 0, - "stamina": 951, + "stamina": 883, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, "warnings": 1, - "x": 80, - "y": 136 + "x": 62, + "y": 121 } ], - "phase": "fight", - "phase_ticks_remaining": 1, + "phase": "foul_recovery", + "phase_ticks_remaining": 8, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 73, + "y": 13 + }, "result": null, "round_number": 1, - "tick": 761 + "tick": 422 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 761 + "tick": 422 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "97fc5f66b1843617bc07dc847696cea95d99a3f2779b7f17f51aa4ea0d666b89", - "events": [ - { - "action_id": null, - "actor_id": null, - "amount": 0, - "blood": 0, - "detail": "round_end", - "direction": 0, - "event_id": 41, - "kind": "bell", - "target_id": null, - "tick": 762 - }, - { - "action_id": null, - "actor_id": "one", - "amount": 0, - "blood": 0, - "detail": "", - "direction": 0, - "event_id": 42, - "kind": "referee_break", - "target_id": "two", - "tick": 762 - } - ], + "checksum": "a4acde8e0eb520b3581596264ab4c568b0ba0a76677ec7817b899274f2f8f90a", + "events": [], "fighters": [ { "action": null, @@ -103862,31 +67260,32 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 989, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -984, - "facing_y": 190, - "get_up_count": 8, + "facing_x": -659, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": false, + "is_foul_recovery_target": true, "knockdowns": 0, - "last_input_sequence": 202, - "maximum_stamina": 984, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 969, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 30, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -103902,8 +67301,8 @@ "velocity_x": 0, "velocity_y": 0, "warnings": 0, - "x": 186, - "y": 116 + "x": 178, + "y": -14 }, { "action": null, @@ -103919,67 +67318,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 973, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 984, - "facing_y": -190, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 70, + "poise": 59, "queued_actions": 0, - "stamina": 953, + "stamina": 883, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, "velocity_x": 0, "velocity_y": 0, "warnings": 1, - "x": 36, - "y": 144 + "x": 62, + "y": 121 } ], - "phase": "rest", - "phase_ticks_remaining": 240, + "phase": "foul_recovery", + "phase_ticks_remaining": 7, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 73, + "y": 13 + }, "result": null, "round_number": 1, - "tick": 762 + "tick": 423 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 762 + "tick": 423 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "8931200f7e7b5547167a31ffd157f344dafa679efe6229c0cbad9c55dca19cbc", + "checksum": "93c44a3626cb5c844533ef602a6df081b8fde5c433cbe8f4fd60691533944a2d", "events": [], "fighters": [ { @@ -103996,31 +67416,32 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 989, "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -659, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": false, + "is_foul_recovery_target": true, "knockdowns": 0, - "last_input_sequence": 202, - "maximum_stamina": 984, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 972, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 30, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -104033,11 +67454,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 183, - "y": 113 + "x": 178, + "y": -14 }, { "action": null, @@ -104053,93 +67474,89 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 973, "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 830, - "facing_y": 558, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 72, + "poise": 59, "queued_actions": 0, - "stamina": 956, + "stamina": 883, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 185, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, "right_eye": 23, - "swelling": 90 + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 40, - "y": 146 + "x": 62, + "y": 121 } ], - "phase": "rest", - "phase_ticks_remaining": 239, + "phase": "foul_recovery", + "phase_ticks_remaining": 6, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 73, + "y": 13 + }, "result": null, "round_number": 1, - "tick": 763 + "tick": 424 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 763 + "tick": 424 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "89dbb6237d9bb2d3d69bb8711f187957492570eeb578ff6422db4a98c8125a07", - "events": [ - { - "action_id": null, - "actor_id": "one", - "amount": 0, - "blood": 0, - "detail": "cut", - "direction": 0, - "event_id": 43, - "kind": "corner", - "target_id": null, - "tick": 764 - }, - { - "action_id": null, - "actor_id": "two", - "amount": 0, - "blood": 0, - "detail": "swelling", - "direction": 0, - "event_id": 44, - "kind": "corner", - "target_id": null, - "tick": 764 - } - ], + "checksum": "0fb7548be707f64d492c26bbec8045ab3783f91bd78a2925d072881a8f4f2e83", + "events": [], "fighters": [ { "action": null, @@ -104155,31 +67572,32 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", + "conditioning": 989, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -657, - "get_up_count": 8, + "facing_x": -659, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": false, + "is_foul_recovery_target": true, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 975, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 30, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -104192,11 +67610,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 179, - "y": 110 + "x": 178, + "y": -14 }, { "action": null, @@ -104212,67 +67630,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", + "conditioning": 973, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 831, - "facing_y": 560, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 74, + "poise": 59, "queued_actions": 0, - "stamina": 959, + "stamina": 883, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, - "right_eye": 0, - "swelling": 0 + "right_eye": 23, + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 44, - "y": 149 + "x": 62, + "y": 121 } ], - "phase": "rest", - "phase_ticks_remaining": 238, + "phase": "foul_recovery", + "phase_ticks_remaining": 5, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 73, + "y": 13 + }, "result": null, "round_number": 1, - "tick": 764 + "tick": 425 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 764 + "tick": 425 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "fcff0b9fb985bf79c0bf995c271e50af8e5db8d6cd538dbebc356d9321ad5c2b", + "checksum": "54f1e591e8350cb2c596e15fd1aaee895a16789dd99d4d409d8e86d6a9991597", "events": [], "fighters": [ { @@ -104289,31 +67728,32 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", + "conditioning": 989, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -657, - "get_up_count": 8, + "facing_x": -659, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": false, + "is_foul_recovery_target": true, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 978, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 30, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -104326,11 +67766,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 175, - "y": 107 + "x": 178, + "y": -14 }, { "action": null, @@ -104346,67 +67786,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", + "conditioning": 973, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 831, - "facing_y": 559, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 76, + "poise": 59, "queued_actions": 0, - "stamina": 962, + "stamina": 883, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, - "right_eye": 0, - "swelling": 0 + "right_eye": 23, + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 48, - "y": 152 + "x": 62, + "y": 121 } ], - "phase": "rest", - "phase_ticks_remaining": 237, + "phase": "foul_recovery", + "phase_ticks_remaining": 4, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 73, + "y": 13 + }, "result": null, "round_number": 1, - "tick": 765 + "tick": 426 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 765 + "tick": 426 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "eaeda4854c12d1d1c3cf64e2e9230ff0a31be61c07b34025c80045253a11eaf1", + "checksum": "0a36343c720b65a74d0012551a2321b96b2756b8086504ea46b6fa84d91cc353", "events": [], "fighters": [ { @@ -104423,31 +67884,32 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", + "conditioning": 989, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -659, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": false, + "is_foul_recovery_target": true, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 981, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 30, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -104460,11 +67922,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 171, - "y": 103 + "x": 178, + "y": -14 }, { "action": null, @@ -104480,67 +67942,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", + "conditioning": 973, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 832, - "facing_y": 559, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 78, + "poise": 59, "queued_actions": 0, - "stamina": 965, + "stamina": 883, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, - "right_eye": 0, - "swelling": 0 + "right_eye": 23, + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 52, - "y": 155 + "x": 62, + "y": 121 } ], - "phase": "rest", - "phase_ticks_remaining": 236, + "phase": "foul_recovery", + "phase_ticks_remaining": 3, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 73, + "y": 13 + }, "result": null, "round_number": 1, - "tick": 766 + "tick": 427 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 766 + "tick": 427 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "e9fd320a0748c46ed5acb1bb4f2c32848495db7cc3173180d46d6dfb7706404e", + "checksum": "86607fd0bb33af54c163ca75f220df47f56e00e227fb68a1429d6ba4a59d75f3", "events": [], "fighters": [ { @@ -104557,31 +68040,32 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", + "conditioning": 989, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -659, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": false, + "is_foul_recovery_target": true, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 30, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -104594,11 +68078,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 168, - "y": 100 + "x": 178, + "y": -14 }, { "action": null, @@ -104614,67 +68098,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", + "conditioning": 973, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 832, - "facing_y": 558, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 80, + "poise": 59, "queued_actions": 0, - "stamina": 968, + "stamina": 883, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, - "right_eye": 0, - "swelling": 0 + "right_eye": 23, + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 56, - "y": 157 + "x": 62, + "y": 121 } ], - "phase": "rest", - "phase_ticks_remaining": 235, + "phase": "foul_recovery", + "phase_ticks_remaining": 2, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 73, + "y": 13 + }, "result": null, "round_number": 1, - "tick": 767 + "tick": 428 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 767 + "tick": 428 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "a265e45f2ce0fa00b2f9d8764a264127dc0c2faccdd8b6627b333b97fd2ec59d", + "checksum": "9680cad332e4867a1d5faa3d16d9687a0e4acaa14e5f385dffbb5282a3a2cb2c", "events": [], "fighters": [ { @@ -104691,31 +68196,32 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", + "conditioning": 989, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -657, - "get_up_count": 8, + "facing_x": -659, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, - "is_foul_recovery_target": false, + "is_foul_recovery_target": true, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", - "stunned_ticks": 0, + "stunned_ticks": 30, "style": "boxer", "taunt_ticks": 0, "trauma": { @@ -104728,11 +68234,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 164, - "y": 97 + "x": 178, + "y": -14 }, { "action": null, @@ -104748,68 +68254,102 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", + "conditioning": 973, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 830, - "facing_y": 559, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 82, + "poise": 59, "queued_actions": 0, - "stamina": 971, + "stamina": 883, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, - "right_eye": 0, - "swelling": 0 + "right_eye": 23, + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 60, - "y": 160 + "x": 62, + "y": 121 } ], - "phase": "rest", - "phase_ticks_remaining": 234, + "phase": "foul_recovery", + "phase_ticks_remaining": 1, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 73, + "y": 13 + }, "result": null, "round_number": 1, - "tick": 768 + "tick": 429 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 768 + "tick": 429 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "e108efd4d0c9003e96a8a5a3373ae663775cf3b9e21389153c0ebde4d8d68d2a", - "events": [], + "checksum": "877c14e857875783e8d3bcd0e16690c3c7fdb55f7c691828927cbe674460c930", + "events": [ + { + "action_id": null, + "actor_id": null, + "amount": 0, + "blood": 0, + "detail": "foul_recovery_complete", + "direction": 0, + "event_id": 38, + "kind": "resume", + "target_id": null, + "tick": 430 + } + ], "fighters": [ { "action": null, @@ -104825,29 +68365,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", + "conditioning": 989, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -659, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -104862,11 +68403,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 160, - "y": 93 + "x": 178, + "y": -14 }, { "action": null, @@ -104882,67 +68423,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", + "conditioning": 973, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 831, - "facing_y": 558, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 84, + "poise": 59, "queued_actions": 0, - "stamina": 974, + "stamina": 883, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, - "right_eye": 0, - "swelling": 0 + "right_eye": 23, + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 65, - "y": 163 + "x": 62, + "y": 121 } ], - "phase": "rest", - "phase_ticks_remaining": 233, + "phase": "fight", + "phase_ticks_remaining": 999720, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 73, + "y": 13 + }, "result": null, "round_number": 1, - "tick": 769 + "tick": 430 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 769 + "tick": 430 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "f0749c56b83641efef7b21009d070707d2ce96cd2ff0064b1c52e880ff09e296", + "checksum": "bcec723035960682cf93d5f84869391789b17c6ae9f6219db449c4a364adf06d", "events": [], "fighters": [ { @@ -104959,29 +68521,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", + "conditioning": 989, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -655, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 144, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -104996,11 +68559,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 156, - "y": 90 + "x": 178, + "y": -14 }, { "action": null, @@ -105016,67 +68579,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", + "conditioning": 973, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 831, - "facing_y": 559, - "get_up_count": 8, + "facing_x": 655, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 86, + "poise": 59, "queued_actions": 0, - "stamina": 977, + "stamina": 888, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, - "right_eye": 0, - "swelling": 0 + "right_eye": 23, + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 69, - "y": 166 + "x": 62, + "y": 121 } ], - "phase": "rest", - "phase_ticks_remaining": 232, + "phase": "fight", + "phase_ticks_remaining": 999719, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 73, + "y": 13 + }, "result": null, "round_number": 1, - "tick": 770 + "tick": 431 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 770 + "tick": 431 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "bc774cca7795e43ea8c467290421d54a686a13f790a2abadc2f295ac267f3c90", + "checksum": "24e9bb1c937b44f20418932376a2fbde8537336614f8e3a40aae2e29ea1d5c26", "events": [], "fighters": [ { @@ -105093,29 +68677,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", + "conditioning": 989, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -654, + "facing_y": 760, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 145, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -105130,11 +68715,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -5, + "velocity_y": 6, "warnings": 0, - "x": 153, - "y": 87 + "x": 174, + "y": -9 }, { "action": null, @@ -105150,67 +68735,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", + "conditioning": 973, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 831, - "facing_y": 558, - "get_up_count": 8, + "facing_x": 655, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 88, + "poise": 60, "queued_actions": 0, - "stamina": 980, + "stamina": 893, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, - "right_eye": 0, - "swelling": 0 + "right_eye": 23, + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 73, - "y": 169 + "x": 62, + "y": 121 } ], - "phase": "rest", - "phase_ticks_remaining": 231, + "phase": "fight", + "phase_ticks_remaining": 999718, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -2, + "velocity_y": 3, + "x": 71, + "y": 16 + }, "result": null, "round_number": 1, - "tick": 771 + "tick": 432 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 771 + "tick": 432 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "b197e804f75b6ef7b09e6e2904e1112c15c49c7d701f3e5bb60162e5f558e813", + "checksum": "674c1515d8ac1924e58313c16a03f05de34c5229726608b30d529a01bced3b86", "events": [], "fighters": [ { @@ -105227,29 +68833,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", + "conditioning": 989, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -657, - "get_up_count": 8, + "facing_x": -652, + "facing_y": 763, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 146, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -105264,11 +68871,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": 149, - "y": 84 + "x": 167, + "y": -2 }, { "action": null, @@ -105284,67 +68891,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", + "conditioning": 973, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 831, - "facing_y": 558, - "get_up_count": 8, + "facing_x": 654, + "facing_y": -760, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 90, + "poise": 60, "queued_actions": 0, - "stamina": 983, + "stamina": 898, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, - "right_eye": 0, - "swelling": 0 + "right_eye": 23, + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 77, - "y": 171 + "x": 62, + "y": 121 } ], - "phase": "rest", - "phase_ticks_remaining": 230, + "phase": "fight", + "phase_ticks_remaining": 999717, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": 3, + "x": 67, + "y": 19 + }, "result": null, "round_number": 1, - "tick": 772 + "tick": 433 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 772 + "tick": 433 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "8b207349e3fd65b65e8731dfcef19f789f228659683b7edb30f1ad98f1f75196", + "checksum": "11f9b70add5861805d4d81b48153265c9c3acc62bb704355e11abba6a9d5647a", "events": [], "fighters": [ { @@ -105361,29 +68989,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", + "conditioning": 989, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -655, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 147, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -105398,11 +69027,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": 145, - "y": 80 + "x": 161, + "y": 6 }, { "action": null, @@ -105418,67 +69047,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", + "conditioning": 973, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 829, - "facing_y": 559, - "get_up_count": 8, + "facing_x": 652, + "facing_y": -763, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 92, + "poise": 61, "queued_actions": 0, - "stamina": 985, + "stamina": 903, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, - "right_eye": 0, - "swelling": 0 + "right_eye": 23, + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 81, - "y": 174 + "x": 62, + "y": 121 } ], - "phase": "rest", - "phase_ticks_remaining": 229, + "phase": "fight", + "phase_ticks_remaining": 999716, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -3, + "velocity_y": 4, + "x": 64, + "y": 23 + }, "result": null, "round_number": 1, - "tick": 773 + "tick": 434 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 773 + "tick": 434 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "eef6585cc5fea82cc28d979b07a0d3ab708b95778e8209171bd7f7f0d9dead49", + "checksum": "afe2715984d21290da77df78d4ab3db9313d78ad8359eed21b13d6b86a4feb0b", "events": [], "fighters": [ { @@ -105495,29 +69145,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", + "conditioning": 989, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -654, + "facing_y": 760, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 148, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -105532,11 +69183,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -6, + "velocity_y": 8, "warnings": 0, - "x": 141, - "y": 77 + "x": 155, + "y": 13 }, { "action": null, @@ -105552,67 +69203,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", + "conditioning": 973, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 830, - "facing_y": 558, - "get_up_count": 8, + "facing_x": 655, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 94, + "poise": 61, "queued_actions": 0, - "stamina": 985, + "stamina": 908, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, - "right_eye": 0, - "swelling": 0 + "right_eye": 23, + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 85, - "y": 177 + "x": 62, + "y": 121 } ], - "phase": "rest", - "phase_ticks_remaining": 228, + "phase": "fight", + "phase_ticks_remaining": 999715, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -3, + "velocity_y": 4, + "x": 61, + "y": 27 + }, "result": null, "round_number": 1, - "tick": 774 + "tick": 435 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 774 + "tick": 435 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "f0cc6dd26251fba7fa4e75b495f5cf92fd601801cb426ada19d31c8d33176974", + "checksum": "e5979729dff418817b3ae7b3d2203976d6824e39998b14d810978678d6306244", "events": [], "fighters": [ { @@ -105629,29 +69301,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", + "conditioning": 989, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -656, + "facing_y": 763, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 149, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -105666,11 +69339,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -7, + "velocity_y": 7, "warnings": 0, - "x": 138, - "y": 74 + "x": 148, + "y": 21 }, { "action": null, @@ -105686,67 +69359,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", + "conditioning": 973, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 830, - "facing_y": 557, - "get_up_count": 8, + "facing_x": 654, + "facing_y": -760, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 96, + "poise": 62, "queued_actions": 0, - "stamina": 985, + "stamina": 913, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, - "right_eye": 0, - "swelling": 0 + "right_eye": 23, + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 89, - "y": 180 + "x": 62, + "y": 121 } ], - "phase": "rest", - "phase_ticks_remaining": 227, + "phase": "fight", + "phase_ticks_remaining": 999714, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -3, + "velocity_y": 4, + "x": 58, + "y": 31 + }, "result": null, "round_number": 1, - "tick": 775 + "tick": 436 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 775 + "tick": 436 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "4351727b5fb4dbb6d34808977848b4c24048e2985d1b74fea3a02b70d158900a", + "checksum": "0bbddc43c5b55e92a2f60014ef401fe4404bbbc6dc36fe6433a67acefeea9448", "events": [], "fighters": [ { @@ -105763,29 +69457,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", + "conditioning": 989, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -655, + "facing_y": 762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 150, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -105800,11 +69495,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -7, + "velocity_y": 7, "warnings": 0, - "x": 134, - "y": 70 + "x": 142, + "y": 28 }, { "action": null, @@ -105820,67 +69515,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", + "conditioning": 973, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 831, - "facing_y": 557, - "get_up_count": 8, + "facing_x": 656, + "facing_y": -763, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 98, + "poise": 62, "queued_actions": 0, - "stamina": 985, + "stamina": 918, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, - "right_eye": 0, - "swelling": 0 + "right_eye": 23, + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 94, - "y": 183 + "x": 62, + "y": 121 } ], - "phase": "rest", - "phase_ticks_remaining": 226, + "phase": "fight", + "phase_ticks_remaining": 999713, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -3, + "velocity_y": 3, + "x": 55, + "y": 34 + }, "result": null, "round_number": 1, - "tick": 776 + "tick": 437 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 776 + "tick": 437 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "9e61476e190bfbb8933278095a011e5f7b468a510325337d6a1ec456ae46c4cb", + "checksum": "92843e10bed701f059d64d43d336a87ac6b02054b12bbdd5e638236ade1cd400", "events": [], "fighters": [ { @@ -105897,29 +69613,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", + "conditioning": 989, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -651, + "facing_y": 758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 151, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -105934,11 +69651,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -7, + "velocity_y": 7, "warnings": 0, - "x": 130, - "y": 67 + "x": 135, + "y": 36 }, { "action": null, @@ -105954,67 +69671,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", + "conditioning": 973, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 831, - "facing_y": 558, - "get_up_count": 8, + "facing_x": 655, + "facing_y": -762, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 100, + "poise": 63, "queued_actions": 0, - "stamina": 985, + "stamina": 923, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, - "right_eye": 0, - "swelling": 0 + "right_eye": 23, + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 98, - "y": 185 + "x": 62, + "y": 121 } ], - "phase": "rest", - "phase_ticks_remaining": 225, + "phase": "fight", + "phase_ticks_remaining": 999712, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": 4, + "x": 51, + "y": 38 + }, "result": null, "round_number": 1, - "tick": 777 + "tick": 438 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 777 + "tick": 438 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "28114d02de6ba39b2b47dc3018af1289a4686824da7709e311ea651e5fadf779", + "checksum": "77d4a0965145a5e658f8b6468c46165ea3506c224d8bf9b6685a7d96a6ecbd9d", "events": [], "fighters": [ { @@ -106031,29 +69769,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", + "conditioning": 989, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -657, - "get_up_count": 8, + "facing_x": -656, + "facing_y": 754, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 152, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -106068,11 +69807,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -7, + "velocity_y": 7, "warnings": 0, - "x": 126, - "y": 64 + "x": 129, + "y": 44 }, { "action": null, @@ -106088,67 +69827,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", + "conditioning": 973, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 829, - "facing_y": 559, - "get_up_count": 8, + "facing_x": 651, + "facing_y": -758, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 102, + "poise": 63, "queued_actions": 0, - "stamina": 985, + "stamina": 928, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, - "right_eye": 0, - "swelling": 0 + "right_eye": 23, + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 102, - "y": 188 + "x": 62, + "y": 121 } ], - "phase": "rest", - "phase_ticks_remaining": 224, + "phase": "fight", + "phase_ticks_remaining": 999711, + "referee": { + "alive": true, + "facing_x": 766, + "facing_y": 666, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -2, + "velocity_y": 4, + "x": 49, + "y": 42 + }, "result": null, "round_number": 1, - "tick": 778 + "tick": 439 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 778 + "tick": 439 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "2ceca3b7ab300df02680ace0d51fe2e28ca8fc7bea9747db56b222ceb0b7cd08", + "checksum": "7da765b1c63f58336c4ec44f47a708cdce7e9dbb6c9d1b5e151b5f0d7b0655e3", "events": [], "fighters": [ { @@ -106165,29 +69925,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", + "conditioning": 989, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -657, - "get_up_count": 8, + "facing_x": -652, + "facing_y": 760, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 153, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -106202,11 +69963,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -7, + "velocity_y": 7, "warnings": 0, "x": 122, - "y": 61 + "y": 51 }, { "action": null, @@ -106222,68 +69983,102 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", + "conditioning": 973, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 829, - "facing_y": 558, - "get_up_count": 8, + "facing_x": 656, + "facing_y": -754, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 104, + "poise": 64, "queued_actions": 0, - "stamina": 985, + "stamina": 933, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, - "right_eye": 0, - "swelling": 0 + "right_eye": 23, + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 106, - "y": 191 + "x": 62, + "y": 121 } ], - "phase": "rest", - "phase_ticks_remaining": 223, + "phase": "fight", + "phase_ticks_remaining": 999710, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": 4, + "x": 45, + "y": 46 + }, "result": null, "round_number": 1, - "tick": 779 + "tick": 440 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 779 + "tick": 440 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "332c3b2445110c856fffcd720d5fdd40c4ad33d7cecbc0785cdcc480bc858bc8", - "events": [], + "checksum": "e7ceae4fa221f9e6ce17cec62ac88be942cfe8783258281546cf79688d86f4a4", + "events": [ + { + "action_id": null, + "actor_id": "one", + "amount": 0, + "blood": 0, + "detail": "", + "direction": 0, + "event_id": 39, + "kind": "clinch_start", + "target_id": "two", + "tick": 441 + } + ], "fighters": [ { "action": null, @@ -106297,31 +70092,32 @@ "action_start_tick": 0, "action_startup_ticks": 0, "action_target": null, - "clinch_startup_ticks": 0, + "clinch_startup_ticks": 6, "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", + "conditioning": 989, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -752, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -652, + "facing_y": 760, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 154, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 973, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -106336,11 +70132,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -2, + "velocity_y": 2, "warnings": 0, - "x": 119, - "y": 57 + "x": 120, + "y": 53 }, { "action": null, @@ -106356,67 +70152,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", + "conditioning": 973, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 830, - "facing_y": 557, - "get_up_count": 8, + "facing_x": 652, + "facing_y": -760, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 106, + "poise": 64, "queued_actions": 0, - "stamina": 985, + "stamina": 938, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, - "right_eye": 0, - "swelling": 0 + "right_eye": 23, + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 110, - "y": 194 + "x": 62, + "y": 121 } ], - "phase": "rest", - "phase_ticks_remaining": 222, + "phase": "fight", + "phase_ticks_remaining": 999709, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -1, + "velocity_y": 1, + "x": 44, + "y": 47 + }, "result": null, "round_number": 1, - "tick": 780 + "tick": 441 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 780 + "tick": 441 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "c05e54ccb74df903587feed202f152799775e6315a0af93cdbf1e0f05e0492b9", + "checksum": "53085d08c72c0ec4e4e97b4d911738a6b64d05c553a37937e1538bb6e058c93d", "events": [], "fighters": [ { @@ -106431,31 +70248,32 @@ "action_start_tick": 0, "action_startup_ticks": 0, "action_target": null, - "clinch_startup_ticks": 0, + "clinch_startup_ticks": 5, "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", + "conditioning": 989, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -657, - "get_up_count": 8, + "facing_x": -652, + "facing_y": 760, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 154, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 974, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -106470,10 +70288,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 115, + "x": 120, "y": 54 }, { @@ -106490,67 +70308,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", + "conditioning": 973, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 830, - "facing_y": 557, - "get_up_count": 8, + "facing_x": 651, + "facing_y": -764, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 108, + "poise": 65, "queued_actions": 0, - "stamina": 985, + "stamina": 943, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, - "right_eye": 0, - "swelling": 0 + "right_eye": 23, + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 114, - "y": 197 + "x": 62, + "y": 121 } ], - "phase": "rest", - "phase_ticks_remaining": 221, + "phase": "fight", + "phase_ticks_remaining": 999708, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 44, + "y": 47 + }, "result": null, "round_number": 1, - "tick": 781 + "tick": 442 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 781 + "tick": 442 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "d1b28fdfede17d6745676cbd67f68515141d1983864bff5de64b624e0cb85766", + "checksum": "172e3c5c668ea40a1857516daf65f029d651a0f2dc19fbe15ed14ff074efa6e1", "events": [], "fighters": [ { @@ -106565,31 +70404,32 @@ "action_start_tick": 0, "action_startup_ticks": 0, "action_target": null, - "clinch_startup_ticks": 0, + "clinch_startup_ticks": 4, "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", + "conditioning": 989, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -657, - "get_up_count": 8, + "facing_x": -652, + "facing_y": 760, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 154, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 975, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -106604,11 +70444,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 111, - "y": 51 + "x": 120, + "y": 54 }, { "action": null, @@ -106624,67 +70464,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", + "conditioning": 973, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 831, - "facing_y": 556, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 110, + "poise": 65, "queued_actions": 0, - "stamina": 985, + "stamina": 948, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, - "right_eye": 0, - "swelling": 0 + "right_eye": 23, + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 119, - "y": 199 + "x": 62, + "y": 121 } ], - "phase": "rest", - "phase_ticks_remaining": 220, + "phase": "fight", + "phase_ticks_remaining": 999707, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 44, + "y": 47 + }, "result": null, "round_number": 1, - "tick": 782 + "tick": 443 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 782 + "tick": 443 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "cb455012e2fa5b47cfb9df986eeeaff69f943fa62a6e3dbe6a544b0f14c28859", + "checksum": "9d3ad4a4e4e1564f9f1674cfb0fd67a839ede28ba2918041304689556b79a97e", "events": [], "fighters": [ { @@ -106699,31 +70560,32 @@ "action_start_tick": 0, "action_startup_ticks": 0, "action_target": null, - "clinch_startup_ticks": 0, + "clinch_startup_ticks": 3, "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", + "conditioning": 989, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -652, + "facing_y": 760, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 154, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 976, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -106738,11 +70600,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 107, - "y": 47 + "x": 120, + "y": 54 }, { "action": null, @@ -106758,67 +70620,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", + "conditioning": 973, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 831, - "facing_y": 560, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 112, + "poise": 66, "queued_actions": 0, - "stamina": 985, + "stamina": 953, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, - "right_eye": 0, - "swelling": 0 + "right_eye": 23, + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 123, - "y": 202 + "x": 62, + "y": 121 } ], - "phase": "rest", - "phase_ticks_remaining": 219, + "phase": "fight", + "phase_ticks_remaining": 999706, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 44, + "y": 47 + }, "result": null, "round_number": 1, - "tick": 783 + "tick": 444 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 783 + "tick": 444 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "f3070ceb9b371d95d3600e292e5521ae1056c5ef40d7431bedb3182b583537a6", + "checksum": "3e9828a70e8b067a9adc0f6dd2ba09f02f346f393ae9294b1ecae6eb4e971a21", "events": [], "fighters": [ { @@ -106833,31 +70716,32 @@ "action_start_tick": 0, "action_startup_ticks": 0, "action_target": null, - "clinch_startup_ticks": 0, + "clinch_startup_ticks": 2, "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", + "conditioning": 989, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -652, + "facing_y": 760, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 154, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 977, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -106872,11 +70756,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 104, - "y": 44 + "x": 120, + "y": 54 }, { "action": null, @@ -106892,67 +70776,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", + "conditioning": 973, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 831, - "facing_y": 560, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 114, + "poise": 66, "queued_actions": 0, - "stamina": 985, + "stamina": 958, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, - "right_eye": 0, - "swelling": 0 + "right_eye": 23, + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 127, - "y": 205 + "x": 62, + "y": 121 } ], - "phase": "rest", - "phase_ticks_remaining": 218, + "phase": "fight", + "phase_ticks_remaining": 999705, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 44, + "y": 47 + }, "result": null, "round_number": 1, - "tick": 784 + "tick": 445 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 784 + "tick": 445 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "578d6e96afc54698a308e9c46938deb5d03793c61772d2c384c153f6a8b7ab4b", + "checksum": "022adae296967070c0da17c31574c74f756ad335311aac2ad8970a605b258978", "events": [], "fighters": [ { @@ -106967,31 +70872,32 @@ "action_start_tick": 0, "action_startup_ticks": 0, "action_target": null, - "clinch_startup_ticks": 0, + "clinch_startup_ticks": 1, "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", + "conditioning": 989, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -657, - "get_up_count": 8, + "facing_x": -652, + "facing_y": 760, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 154, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 978, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -107006,11 +70912,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 100, - "y": 41 + "x": 120, + "y": 54 }, { "action": null, @@ -107026,68 +70932,102 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", + "conditioning": 973, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 832, - "facing_y": 559, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 116, + "poise": 67, "queued_actions": 0, - "stamina": 985, + "stamina": 963, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, - "right_eye": 0, - "swelling": 0 + "right_eye": 23, + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 131, - "y": 208 + "x": 62, + "y": 121 } ], - "phase": "rest", - "phase_ticks_remaining": 217, + "phase": "fight", + "phase_ticks_remaining": 999704, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 44, + "y": 47 + }, "result": null, "round_number": 1, - "tick": 785 + "tick": 446 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 785 + "tick": 446 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "3c2681d879b797dfcd5ee567fc4665b46052225df34141101078b9b6c9eb2a54", - "events": [], + "checksum": "84e4926f9a8b7bda386feac9ab90c3f284da159071607169602c6c2fa080618d", + "events": [ + { + "action_id": null, + "actor_id": "one", + "amount": 0, + "blood": 0, + "detail": "", + "direction": 0, + "event_id": 40, + "kind": "clinch", + "target_id": "two", + "tick": 447 + } + ], "fighters": [ { "action": null, @@ -107102,30 +71042,31 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", + "clinch_ticks": 24, + "conditioning": 989, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -652, + "facing_y": 760, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 154, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 960, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -107140,11 +71081,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 96, - "y": 38 + "x": 120, + "y": 54 }, { "action": null, @@ -107159,68 +71100,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", + "clinch_ticks": 24, + "conditioning": 973, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 832, - "facing_y": 558, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 118, + "poise": 67, "queued_actions": 0, - "stamina": 985, + "stamina": 945, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, - "right_eye": 0, - "swelling": 0 + "right_eye": 23, + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 135, - "y": 210 + "x": 62, + "y": 121 } ], - "phase": "rest", - "phase_ticks_remaining": 216, + "phase": "fight", + "phase_ticks_remaining": 999703, + "referee": { + "alive": true, + "facing_x": 770, + "facing_y": 655, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 44, + "y": 47 + }, "result": null, "round_number": 1, - "tick": 786 + "tick": 447 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 786 + "tick": 447 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "214cd35cefe25eb022d1c66e325182467bcc1b462a6d9c549f31272f621db3c5", + "checksum": "684ff7a57a37c30992ef784a186f63cc51666377b729cb640888646cefcc2ea4", "events": [], "fighters": [ { @@ -107236,30 +71198,31 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", + "clinch_ticks": 23, + "conditioning": 989, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -659, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 154, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 963, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -107274,11 +71237,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 92, - "y": 34 + "x": 117, + "y": 58 }, { "action": null, @@ -107293,68 +71256,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", + "clinch_ticks": 23, + "conditioning": 973, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 830, - "facing_y": 559, - "get_up_count": 8, + "facing_x": 659, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 120, + "poise": 67, "queued_actions": 0, - "stamina": 985, + "stamina": 948, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, - "right_eye": 0, - "swelling": 0 + "right_eye": 23, + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 139, - "y": 213 + "x": 65, + "y": 117 } ], - "phase": "rest", - "phase_ticks_remaining": 215, + "phase": "fight", + "phase_ticks_remaining": 9, + "referee": { + "alive": true, + "facing_x": 754, + "facing_y": 672, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 1, + "velocity_y": -1, + "x": 45, + "y": 46 + }, "result": null, "round_number": 1, - "tick": 787 + "tick": 448 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 787 + "tick": 448 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "a7c6f9ac12b79106407c677a69368ebd9d9d45623ab4a6177bfacd57546eb151", + "checksum": "5ae8c662f9c2defa4a671bbbbfed1be9fa092087a68979f3c2d00c60d692095e", "events": [], "fighters": [ { @@ -107370,30 +71354,31 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", + "clinch_ticks": 22, + "conditioning": 989, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -666, + "facing_y": 756, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 154, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 966, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -107408,11 +71393,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 89, - "y": 31 + "x": 113, + "y": 62 }, { "action": null, @@ -107427,69 +71412,103 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", + "clinch_ticks": 22, + "conditioning": 973, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 830, - "facing_y": 558, - "get_up_count": 8, + "facing_x": 666, + "facing_y": -756, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 122, + "poise": 67, "queued_actions": 0, - "stamina": 985, + "stamina": 951, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, - "right_eye": 0, - "swelling": 0 + "right_eye": 23, + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 143, - "y": 216 + "x": 69, + "y": 113 } ], - "phase": "rest", - "phase_ticks_remaining": 214, + "phase": "fight", + "phase_ticks_remaining": 8, + "referee": { + "alive": true, + "facing_x": 777, + "facing_y": 650, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -1, + "velocity_y": 1, + "x": 42, + "y": 46 + }, "result": null, "round_number": 1, - "tick": 788 + "tick": 449 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 788 + "tick": 449 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "94ea7272504c5b509de6725d001c3f1b46df36b2e61b6c9f91fdc51dd5e21a3b", - "events": [], + "checksum": "499f0f031a0eb3c08239fe89b44a6e4c5157a60801cbd194c30416bab43b9895", + "events": [ + { + "action_id": null, + "actor_id": "two", + "amount": 0, + "blood": 25, + "detail": "", + "direction": 0, + "event_id": 41, + "kind": "bleed", + "target_id": null, + "tick": 450 + } + ], "fighters": [ { "action": null, @@ -107504,30 +71523,31 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", + "clinch_ticks": 21, + "conditioning": 988, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -657, - "get_up_count": 8, + "facing_x": -656, + "facing_y": 761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 154, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 969, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -107542,11 +71562,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 85, - "y": 28 + "x": 112, + "y": 64 }, { "action": null, @@ -107561,68 +71581,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", + "clinch_ticks": 21, + "conditioning": 972, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 831, - "facing_y": 558, - "get_up_count": 8, + "facing_x": 656, + "facing_y": -761, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 124, + "poise": 67, "queued_actions": 0, - "stamina": 985, + "stamina": 954, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, - "right_eye": 0, - "swelling": 0 + "right_eye": 23, + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 148, - "y": 219 + "x": 70, + "y": 111 } ], - "phase": "rest", - "phase_ticks_remaining": 213, + "phase": "fight", + "phase_ticks_remaining": 7, + "referee": { + "alive": true, + "facing_x": 769, + "facing_y": 661, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 3, + "velocity_y": 0, + "x": 41, + "y": 44 + }, "result": null, "round_number": 1, - "tick": 789 + "tick": 450 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 789 + "tick": 450 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "d1786c83005ff25dd313711d31983efef687a0ef65f66eca27bb0c092439f767", + "checksum": "29a5ad15237afd411638a93b1eee141436d338ca0c4395ab9495d7b338599aa3", "events": [], "fighters": [ { @@ -107638,30 +71679,31 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", + "clinch_ticks": 20, + "conditioning": 988, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -666, + "facing_y": 746, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 154, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 972, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -107676,11 +71718,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 81, - "y": 24 + "x": 112, + "y": 64 }, { "action": null, @@ -107695,68 +71737,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", + "clinch_ticks": 20, + "conditioning": 972, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 831, - "facing_y": 559, - "get_up_count": 8, + "facing_x": 666, + "facing_y": -746, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 126, + "poise": 67, "queued_actions": 0, - "stamina": 985, + "stamina": 957, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, - "right_eye": 0, - "swelling": 0 + "right_eye": 23, + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 152, - "y": 222 + "x": 70, + "y": 111 } ], - "phase": "rest", - "phase_ticks_remaining": 212, + "phase": "fight", + "phase_ticks_remaining": 6, + "referee": { + "alive": true, + "facing_x": 769, + "facing_y": 661, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 4, + "velocity_y": 2, + "x": 41, + "y": 44 + }, "result": null, "round_number": 1, - "tick": 790 + "tick": 451 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 790 + "tick": 451 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "bf4ae660be1f2564f8fd3561115932d8af0b378d65fd50bc80132984f3bc1483", + "checksum": "30d7868a30ad4478484612736a2e2723e80e853ee200b1011dd278bec5394092", "events": [], "fighters": [ { @@ -107772,30 +71835,31 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", + "clinch_ticks": 19, + "conditioning": 988, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -666, + "facing_y": 746, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 154, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 975, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -107810,11 +71874,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 77, - "y": 21 + "x": 112, + "y": 64 }, { "action": null, @@ -107829,68 +71893,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", + "clinch_ticks": 19, + "conditioning": 972, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 832, - "facing_y": 558, - "get_up_count": 8, + "facing_x": 666, + "facing_y": -746, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 128, + "poise": 67, "queued_actions": 0, - "stamina": 985, + "stamina": 960, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, - "right_eye": 0, - "swelling": 0 + "right_eye": 23, + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 156, - "y": 224 + "x": 70, + "y": 111 } ], - "phase": "rest", - "phase_ticks_remaining": 211, + "phase": "fight", + "phase_ticks_remaining": 5, + "referee": { + "alive": true, + "facing_x": 769, + "facing_y": 661, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 4, + "velocity_y": 2, + "x": 41, + "y": 44 + }, "result": null, "round_number": 1, - "tick": 791 + "tick": 452 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 791 + "tick": 452 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "8f9602917c2b26961223c605438a8e625b9b3f2b8808b8c341339b51b416c7e1", + "checksum": "cbf08d3c2746a667903cde3eaeeca82d7e0a5ec715ca0ee5876766446c47ef52", "events": [], "fighters": [ { @@ -107906,30 +71991,31 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", + "clinch_ticks": 18, + "conditioning": 988, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -666, + "facing_y": 746, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 154, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 978, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -107944,11 +72030,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 73, - "y": 18 + "x": 112, + "y": 64 }, { "action": null, @@ -107963,68 +72049,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", + "clinch_ticks": 18, + "conditioning": 972, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 829, - "facing_y": 559, - "get_up_count": 8, + "facing_x": 666, + "facing_y": -746, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 130, + "poise": 67, "queued_actions": 0, - "stamina": 985, + "stamina": 963, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, - "right_eye": 0, - "swelling": 0 + "right_eye": 23, + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 160, - "y": 227 + "x": 70, + "y": 111 } ], - "phase": "rest", - "phase_ticks_remaining": 210, + "phase": "fight", + "phase_ticks_remaining": 4, + "referee": { + "alive": true, + "facing_x": 769, + "facing_y": 661, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 4, + "velocity_y": 2, + "x": 41, + "y": 44 + }, "result": null, "round_number": 1, - "tick": 792 + "tick": 453 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 792 + "tick": 453 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "5d16841738fcf7cb023f7812d8c079f466b0fe51e4cabc4184f10e7aa75e78da", + "checksum": "fa527bd890631d1107d1ea9fc8f8e6e14a9ebf549ccf9f94b3069b3de0af5794", "events": [], "fighters": [ { @@ -108040,30 +72147,31 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", + "clinch_ticks": 17, + "conditioning": 988, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -659, - "get_up_count": 8, + "facing_x": -666, + "facing_y": 746, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 154, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 981, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -108078,11 +72186,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 70, - "y": 15 + "x": 112, + "y": 64 }, { "action": null, @@ -108097,68 +72205,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", + "clinch_ticks": 17, + "conditioning": 972, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 829, - "facing_y": 558, - "get_up_count": 8, + "facing_x": 666, + "facing_y": -746, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 132, + "poise": 67, "queued_actions": 0, - "stamina": 985, + "stamina": 966, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, - "right_eye": 0, - "swelling": 0 + "right_eye": 23, + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 164, - "y": 230 + "x": 70, + "y": 111 } ], - "phase": "rest", - "phase_ticks_remaining": 209, + "phase": "fight", + "phase_ticks_remaining": 3, + "referee": { + "alive": true, + "facing_x": 769, + "facing_y": 661, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 4, + "velocity_y": 2, + "x": 41, + "y": 44 + }, "result": null, "round_number": 1, - "tick": 793 + "tick": 454 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 793 + "tick": 454 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "b59fa59fc58e582f883e92879568cce961e162681d23fff4cdcdb869abc3aece", + "checksum": "597c68823dcccb80639edd38ec622d51ef54d19ad7ca4570233a5d0a5258e13b", "events": [], "fighters": [ { @@ -108174,26 +72303,27 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", + "clinch_ticks": 16, + "conditioning": 988, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -666, + "facing_y": 746, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 154, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, @@ -108212,11 +72342,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 66, - "y": 11 + "x": 112, + "y": 64 }, { "action": null, @@ -108231,68 +72361,89 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", + "clinch_ticks": 16, + "conditioning": 972, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 830, - "facing_y": 557, - "get_up_count": 8, + "facing_x": 666, + "facing_y": -746, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 134, + "poise": 67, "queued_actions": 0, - "stamina": 985, + "stamina": 969, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, - "right_eye": 0, - "swelling": 0 + "right_eye": 23, + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 168, - "y": 233 + "x": 70, + "y": 111 } ], - "phase": "rest", - "phase_ticks_remaining": 208, + "phase": "fight", + "phase_ticks_remaining": 2, + "referee": { + "alive": true, + "facing_x": 769, + "facing_y": 661, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 4, + "velocity_y": 2, + "x": 41, + "y": 44 + }, "result": null, "round_number": 1, - "tick": 794 + "tick": 455 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 794 + "tick": 455 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "e694d947241144889f0646eea0ed86d03fa6c3713c70f8ccbbcc6e75c0261c38", + "checksum": "5ee1fdf2cdbb46e743d5803f407b0ebbcffb2b0643034be9db57697cb8f5a302", "events": [], "fighters": [ { @@ -108308,30 +72459,31 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", + "clinch_ticks": 15, + "conditioning": 988, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -666, + "facing_y": 746, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 154, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 987, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -108346,11 +72498,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 62, - "y": 8 + "x": 112, + "y": 64 }, { "action": null, @@ -108365,69 +72517,115 @@ "action_startup_ticks": 0, "action_target": null, "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", + "clinch_ticks": 15, + "conditioning": 972, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 831, - "facing_y": 556, - "get_up_count": 8, + "facing_x": 666, + "facing_y": -746, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 136, + "poise": 67, "queued_actions": 0, - "stamina": 985, + "stamina": 972, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, - "right_eye": 0, - "swelling": 0 + "right_eye": 23, + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 173, - "y": 236 + "x": 70, + "y": 111 } ], - "phase": "rest", - "phase_ticks_remaining": 207, + "phase": "fight", + "phase_ticks_remaining": 1, + "referee": { + "alive": true, + "facing_x": 769, + "facing_y": 661, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 4, + "velocity_y": 2, + "x": 41, + "y": 44 + }, "result": null, "round_number": 1, - "tick": 795 + "tick": 456 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 795 + "tick": 456 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "1c0f56792469e5fc1ea5515c026594252f6aebd1a9c305639c4f4917a9d00e77", - "events": [], + "checksum": "8e35508f09d0a3e9166ed35f353d6c03beac4813b6054a2be3581f4ef4333223", + "events": [ + { + "action_id": null, + "actor_id": null, + "amount": 0, + "blood": 0, + "detail": "round_end", + "direction": 0, + "event_id": 42, + "kind": "bell", + "target_id": null, + "tick": 457 + }, + { + "action_id": null, + "actor_id": "one", + "amount": 0, + "blood": 0, + "detail": "", + "direction": 0, + "event_id": 43, + "kind": "referee_break", + "target_id": "two", + "tick": 457 + } + ], "fighters": [ { "action": null, @@ -108443,29 +72641,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", + "conditioning": 988, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -659, - "get_up_count": 8, + "facing_x": -666, + "facing_y": 746, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 154, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 990, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -108480,11 +72679,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": 58, - "y": 5 + "x": 141, + "y": 31 }, { "action": null, @@ -108500,67 +72699,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", + "conditioning": 972, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 831, - "facing_y": 558, - "get_up_count": 8, + "facing_x": 666, + "facing_y": -746, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 138, + "poise": 67, "queued_actions": 0, - "stamina": 985, + "stamina": 975, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, - "right_eye": 0, - "swelling": 0 + "right_eye": 23, + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 177, - "y": 238 + "x": 41, + "y": 144 } ], "phase": "rest", - "phase_ticks_remaining": 206, + "phase_ticks_remaining": 240, + "referee": { + "alive": true, + "facing_x": 760, + "facing_y": 661, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": -4, + "x": 37, + "y": 40 + }, "result": null, "round_number": 1, - "tick": 796 + "tick": 457 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 796 + "tick": 457 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "2729ed728329feb14a3baf8d477c911f6a2c2f8bbb477767a3d9317ae9147607", + "checksum": "2ec92b5b8443b4ba33712a435399a7511e672e30eb5eb4f20e36fa46d4ef745b", "events": [], "fighters": [ { @@ -108577,29 +72797,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", + "conditioning": 988, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -659, - "get_up_count": 8, + "facing_x": -788, + "facing_y": -616, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 154, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 993, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -108614,11 +72835,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": 55, - "y": 1 + "x": 134, + "y": 25 }, { "action": null, @@ -108634,68 +72855,114 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", + "conditioning": 972, + "corner_choice": null, "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 831, - "facing_y": 561, - "get_up_count": 8, + "facing_x": 826, + "facing_y": 563, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 140, + "poise": 69, "queued_actions": 0, - "stamina": 985, + "stamina": 978, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, + "head": 192, + "left_cut": 126, + "left_eye": 194, "right_cut": 0, - "right_eye": 0, - "swelling": 0 + "right_eye": 23, + "swelling": 96 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 181, - "y": 241 + "x": 49, + "y": 149 } ], "phase": "rest", - "phase_ticks_remaining": 205, + "phase_ticks_remaining": 239, + "referee": { + "alive": true, + "facing_x": 753, + "facing_y": 662, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": -4, + "x": 33, + "y": 36 + }, "result": null, "round_number": 1, - "tick": 797 + "tick": 458 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 797 + "tick": 458 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "7bf98805df5fc3fd7edace15befc9589ef0da2547f38cc4f44a00df774ff6652", - "events": [], + "checksum": "cbf04d7b08f252e1378024d9ca58b5449d53b3cce3ed15ea502c57fdd05843ec", + "events": [ + { + "action_id": null, + "actor_id": "one", + "amount": 0, + "blood": 0, + "detail": "cut", + "direction": 0, + "event_id": 44, + "kind": "corner", + "target_id": null, + "tick": 459 + }, + { + "action_id": null, + "actor_id": "two", + "amount": 0, + "blood": 0, + "detail": "swelling", + "direction": 0, + "event_id": 45, + "kind": "corner", + "target_id": null, + "tick": 459 + } + ], "fighters": [ { "action": null, @@ -108711,29 +72978,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -657, - "get_up_count": 8, + "facing_x": -788, + "facing_y": -616, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 996, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -108748,11 +73016,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": 51, - "y": -2 + "x": 126, + "y": 19 }, { "action": null, @@ -108768,67 +73036,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 832, - "facing_y": 561, - "get_up_count": 8, + "facing_x": 827, + "facing_y": 565, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 142, + "poise": 71, "queued_actions": 0, - "stamina": 985, + "stamina": 981, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 185, - "y": 244 + "x": 57, + "y": 155 } ], "phase": "rest", - "phase_ticks_remaining": 204, + "phase_ticks_remaining": 238, + "referee": { + "alive": true, + "facing_x": 756, + "facing_y": 670, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": -4, + "x": 29, + "y": 32 + }, "result": null, "round_number": 1, - "tick": 798 + "tick": 459 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 798 + "tick": 459 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "5cf3b81d04915053e00a001d67a2a0bfb05c7fe785f071f72b98167dbe0ef60b", + "checksum": "cd9a0ffa54048bb83a31e6cf59678f32b4d526b53475b7eb2d186adac9351a4a", "events": [], "fighters": [ { @@ -108845,29 +73134,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -657, - "get_up_count": 8, + "facing_x": -788, + "facing_y": -616, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -108882,11 +73172,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": 47, - "y": -5 + "x": 118, + "y": 13 }, { "action": null, @@ -108902,67 +73192,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 833, - "facing_y": 560, - "get_up_count": 8, + "facing_x": 827, + "facing_y": 564, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 144, + "poise": 73, "queued_actions": 0, - "stamina": 985, + "stamina": 984, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 189, - "y": 247 + "x": 65, + "y": 160 } ], "phase": "rest", - "phase_ticks_remaining": 203, + "phase_ticks_remaining": 237, + "referee": { + "alive": true, + "facing_x": 758, + "facing_y": 666, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": -4, + "x": 25, + "y": 28 + }, "result": null, "round_number": 1, - "tick": 799 + "tick": 460 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 799 + "tick": 460 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "50aec01b94cd53ded76b2f0114911dffba8e0f252f723a942e9b19c84cbdc6e4", + "checksum": "19411ac4cea4a02f07fb613fb9d21836914222cf25fcdedb5e449c70facddc15", "events": [], "fighters": [ { @@ -108979,29 +73290,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -787, + "facing_y": -616, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -109016,11 +73328,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": 43, - "y": -8 + "x": 110, + "y": 7 }, { "action": null, @@ -109036,67 +73348,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 834, - "facing_y": 559, - "get_up_count": 8, + "facing_x": 826, + "facing_y": 564, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 146, + "poise": 75, "queued_actions": 0, - "stamina": 985, + "stamina": 987, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 193, - "y": 250 + "x": 74, + "y": 166 } ], "phase": "rest", - "phase_ticks_remaining": 202, + "phase_ticks_remaining": 236, + "referee": { + "alive": true, + "facing_x": 755, + "facing_y": 659, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": -4, + "x": 21, + "y": 24 + }, "result": null, "round_number": 1, - "tick": 800 + "tick": 461 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 800 + "tick": 461 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "e50261a187d7a9f372233450262104b369c9999fadb06528b6b31c142870fad9", + "checksum": "0c86cc78c930abd1bfc6dc67cbcfb685828191c8c04a9ab52929845ee637e7ee", "events": [], "fighters": [ { @@ -109113,29 +73446,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -752, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -787, + "facing_y": -616, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -109150,11 +73484,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": 40, - "y": -12 + "x": 102, + "y": 1 }, { "action": null, @@ -109170,67 +73504,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 834, - "facing_y": 558, - "get_up_count": 8, + "facing_x": 826, + "facing_y": 565, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 148, + "poise": 77, "queued_actions": 0, - "stamina": 985, + "stamina": 990, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 198, - "y": 252 + "x": 82, + "y": 172 } ], "phase": "rest", - "phase_ticks_remaining": 201, + "phase_ticks_remaining": 235, + "referee": { + "alive": true, + "facing_x": 757, + "facing_y": 666, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": -4, + "x": 17, + "y": 20 + }, "result": null, "round_number": 1, - "tick": 801 + "tick": 462 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 801 + "tick": 462 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "0a9811e56eb5a7288e088d22eb15d431c4448f0e82f122014f688dad9a291640", + "checksum": "596b651ab7ea87f09bf8363fefeb78af3836e8f73ee3b91f4801fcd6f44c70df", "events": [], "fighters": [ { @@ -109247,29 +73602,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -657, - "get_up_count": 8, + "facing_x": -787, + "facing_y": -617, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -109284,11 +73640,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": 36, - "y": -15 + "x": 94, + "y": -5 }, { "action": null, @@ -109304,67 +73660,244 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 830, - "facing_y": 562, - "get_up_count": 8, + "facing_x": 827, + "facing_y": 564, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 150, + "poise": 79, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, + "trauma": { + "bleeding": 8, + "body": 0, + "head": 192, + "left_cut": 126, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 8, + "velocity_y": 6, + "warnings": 1, + "x": 90, + "y": 177 + } + ], + "phase": "rest", + "phase_ticks_remaining": 234, + "referee": { + "alive": true, + "facing_x": 750, + "facing_y": 673, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -3, + "velocity_y": -4, + "x": 14, + "y": 16 + }, + "result": null, + "round_number": 1, + "tick": 463 + }, + "type": "snapshot", + "version": 5 + }, + "tick": 463 + }, + { + "attack_one": null, + "attack_two": null, + "snapshot": { + "payload": { + "checksum": "a78e880a8a5b6f20230650b06f29ebd28599440c6b4f71478b5a1e9aee966341", + "events": [], + "fighters": [ + { + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, + "clinch_startup_ticks": 0, + "clinch_ticks": 0, + "conditioning": 988, + "corner_choice": "cut", + "deductions": 0, + "defense": "none", + "facing": -1, + "facing_x": -787, + "facing_y": -617, + "get_up_count": 5, + "get_up_meter": 0, + "get_up_prompt": null, + "get_up_required": 30, + "get_up_window_end_tick": 0, + "get_up_window_start_tick": 0, + "guard": 700, + "guard_broken": false, + "is_downed": false, + "is_foul_recovery_target": false, + "knockdowns": 0, + "last_input_sequence": 155, + "maximum_stamina": 997, + "player_id": "one", + "poise": 600, + "queued_actions": 0, + "stamina": 997, + "stance": "orthodox", + "stunned_ticks": 0, + "style": "boxer", + "taunt_ticks": 0, "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 0, "left_cut": 0, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": -8, + "velocity_y": -6, + "warnings": 0, + "x": 86, + "y": -12 + }, + { + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, + "clinch_startup_ticks": 0, + "clinch_ticks": 0, + "conditioning": 972, + "corner_choice": "swelling", + "deductions": 0, + "defense": "none", + "facing": 1, + "facing_x": 825, + "facing_y": 564, + "get_up_count": 5, + "get_up_meter": 0, + "get_up_prompt": null, + "get_up_required": 0, + "get_up_window_end_tick": 0, + "get_up_window_start_tick": 0, + "guard": 700, + "guard_broken": false, + "is_downed": false, + "is_foul_recovery_target": false, + "knockdowns": 1, + "last_input_sequence": -1, + "maximum_stamina": 992, + "player_id": "two", + "poise": 81, + "queued_actions": 0, + "stamina": 992, + "stance": "orthodox", + "stunned_ticks": 0, + "style": "slugger", + "taunt_ticks": 0, + "trauma": { + "bleeding": 8, + "body": 0, + "head": 192, + "left_cut": 126, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 202, - "y": 255 + "x": 98, + "y": 183 } ], "phase": "rest", - "phase_ticks_remaining": 200, + "phase_ticks_remaining": 233, + "referee": { + "alive": true, + "facing_x": 752, + "facing_y": 669, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": -4, + "x": 10, + "y": 12 + }, "result": null, "round_number": 1, - "tick": 802 + "tick": 464 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 802 + "tick": 464 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "4c64014beaff7b8f80af2e6bdbef885373b02e26cdfb1bc82749f23dd5c0474b", + "checksum": "0bb981794a5eb74f3e84ac2b5bf81e8610dc4e58a5256790767ba91ff1512cba", "events": [], "fighters": [ { @@ -109381,29 +73914,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -657, - "get_up_count": 8, + "facing_x": -788, + "facing_y": -617, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -109418,10 +73952,10 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": 32, + "x": 78, "y": -18 }, { @@ -109438,67 +73972,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 831, - "facing_y": 561, - "get_up_count": 8, + "facing_x": 826, + "facing_y": 563, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 152, + "poise": 83, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 206, - "y": 258 + "x": 107, + "y": 189 } ], "phase": "rest", - "phase_ticks_remaining": 199, + "phase_ticks_remaining": 232, + "referee": { + "alive": true, + "facing_x": 747, + "facing_y": 669, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": -4, + "x": 6, + "y": 8 + }, "result": null, "round_number": 1, - "tick": 803 + "tick": 465 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 803 + "tick": 465 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "ac4332afaa0ea5ffcd01075e06f5731cb860171a4e99fc76f7e1a6e575aef1cc", + "checksum": "fa4b50e69e9f047985d77a64a087f2d3dd7d108331c29a690ad8b0b54fb1d4a5", "events": [], "fighters": [ { @@ -109515,29 +74070,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -788, + "facing_y": -617, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -109552,11 +74108,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": 28, - "y": -22 + "x": 71, + "y": -24 }, { "action": null, @@ -109572,67 +74128,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 832, - "facing_y": 560, - "get_up_count": 8, + "facing_x": 826, + "facing_y": 564, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 154, + "poise": 85, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 210, - "y": 261 + "x": 115, + "y": 194 } ], "phase": "rest", - "phase_ticks_remaining": 198, + "phase_ticks_remaining": 231, + "referee": { + "alive": true, + "facing_x": 743, + "facing_y": 669, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -3, + "velocity_y": -4, + "x": 3, + "y": 4 + }, "result": null, "round_number": 1, - "tick": 804 + "tick": 466 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 804 + "tick": 466 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "d98d2b4977302b1cc51dc85bd219ca62f9c2c1eae9a73d7854f9c59145f0c2dd", + "checksum": "27d325a7708f35b8f7d4003c4ecac2eb9c37c16303969bd0b145d313d5abf752", "events": [], "fighters": [ { @@ -109649,29 +74226,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -788, + "facing_y": -616, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -109686,11 +74264,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": 25, - "y": -25 + "x": 63, + "y": -30 }, { "action": null, @@ -109706,67 +74284,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 833, - "facing_y": 559, - "get_up_count": 8, + "facing_x": 827, + "facing_y": 566, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 156, + "poise": 87, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 214, - "y": 264 + "x": 123, + "y": 200 } ], "phase": "rest", - "phase_ticks_remaining": 197, + "phase_ticks_remaining": 230, + "referee": { + "alive": true, + "facing_x": 761, + "facing_y": 658, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -3, + "velocity_y": -4, + "x": -3, + "y": 2 + }, "result": null, "round_number": 1, - "tick": 805 + "tick": 467 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 805 + "tick": 467 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "d34560cd0a6c06b5eb4ce20634aabb21f348a6708c44c352a467dff14b07d5ea", + "checksum": "be005a7a22e3cd5f9a52e3cdb5eab2fd630bf368b29ecfe2a3d695c3e902c461", "events": [], "fighters": [ { @@ -109783,29 +74382,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -657, - "get_up_count": 8, + "facing_x": -788, + "facing_y": -616, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -109820,11 +74420,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": 21, - "y": -28 + "x": 55, + "y": -36 }, { "action": null, @@ -109840,67 +74440,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 834, - "facing_y": 558, - "get_up_count": 8, + "facing_x": 828, + "facing_y": 565, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 158, + "poise": 89, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 218, - "y": 266 + "x": 131, + "y": 206 } ], "phase": "rest", - "phase_ticks_remaining": 196, + "phase_ticks_remaining": 229, + "referee": { + "alive": true, + "facing_x": 779, + "facing_y": 637, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 3, + "velocity_y": -2, + "x": -6, + "y": 4 + }, "result": null, "round_number": 1, - "tick": 806 + "tick": 468 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 806 + "tick": 468 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "634dffac5ac16b7cf5b49c76e8946527de3d5add113c809e608623991c2bfd95", + "checksum": "358acdebaac7111a68b2516046b4534dd9798aac52235035d8fadf8992736dc8", "events": [], "fighters": [ { @@ -109917,29 +74538,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -787, + "facing_y": -617, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -109954,11 +74576,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": 17, - "y": -31 + "x": 47, + "y": -42 }, { "action": null, @@ -109974,67 +74596,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 830, - "facing_y": 559, - "get_up_count": 8, + "facing_x": 829, + "facing_y": 563, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 160, + "poise": 91, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 222, - "y": 269 + "x": 140, + "y": 211 } ], "phase": "rest", - "phase_ticks_remaining": 195, + "phase_ticks_remaining": 228, + "referee": { + "alive": true, + "facing_x": 793, + "facing_y": 611, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 5, + "velocity_y": -3, + "x": -7, + "y": 7 + }, "result": null, "round_number": 1, - "tick": 807 + "tick": 469 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 807 + "tick": 469 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "d2481627a7f25cfe09e9470d65dd7b8d24a37e15225866b041a622738ec0a11d", + "checksum": "77c5512415f54b3f98a4a0ba7dc39f797fd81e1d6020e6eeb4d2edca91e80823", "events": [], "fighters": [ { @@ -110051,29 +74694,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -787, + "facing_y": -617, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -110088,11 +74732,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": 13, - "y": -35 + "x": 39, + "y": -49 }, { "action": null, @@ -110108,67 +74752,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 831, - "facing_y": 558, - "get_up_count": 8, + "facing_x": 827, + "facing_y": 566, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 162, + "poise": 93, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 227, - "y": 272 + "x": 148, + "y": 217 } ], "phase": "rest", - "phase_ticks_remaining": 194, + "phase_ticks_remaining": 227, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 608, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 4, + "velocity_y": -4, + "x": -7, + "y": 8 + }, "result": null, "round_number": 1, - "tick": 808 + "tick": 470 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 808 + "tick": 470 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "ff312b538fa47e4ff4aed0f15f42f9d70fad6e3ba2b58418bc4d84b3303e6ea7", + "checksum": "655a5c7ef93056143ff4d5cb0944b8a2767ff29953252d03e694500e1ef82ac4", "events": [], "fighters": [ { @@ -110185,29 +74850,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -789, + "facing_y": -617, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -110222,11 +74888,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": 9, - "y": -38 + "x": 31, + "y": -55 }, { "action": null, @@ -110242,67 +74908,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 831, - "facing_y": 560, - "get_up_count": 8, + "facing_x": 828, + "facing_y": 564, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 164, + "poise": 95, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 231, - "y": 275 + "x": 156, + "y": 223 } ], "phase": "rest", - "phase_ticks_remaining": 193, + "phase_ticks_remaining": 226, + "referee": { + "alive": true, + "facing_x": 790, + "facing_y": 612, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 4, + "velocity_y": -4, + "x": -5, + "y": 8 + }, "result": null, "round_number": 1, - "tick": 809 + "tick": 471 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 809 + "tick": 471 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "d1bc8790881515736616d4447ffefec50819ce170a04215f8e6ff71e2074f8d8", + "checksum": "b7b6d5347f2a4537028c583f46e1a7201364479e916b78376a3f195ecb258513", "events": [], "fighters": [ { @@ -110319,29 +75006,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -659, - "get_up_count": 8, + "facing_x": -788, + "facing_y": -617, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -110356,11 +75044,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": 6, - "y": -41 + "x": 23, + "y": -61 }, { "action": null, @@ -110376,67 +75064,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 832, - "facing_y": 559, - "get_up_count": 8, + "facing_x": 829, + "facing_y": 563, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 166, + "poise": 97, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 235, - "y": 278 + "x": 165, + "y": 228 } ], "phase": "rest", - "phase_ticks_remaining": 192, + "phase_ticks_remaining": 225, + "referee": { + "alive": true, + "facing_x": 790, + "facing_y": 612, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 3, + "velocity_y": -5, + "x": -4, + "y": 7 + }, "result": null, "round_number": 1, - "tick": 810 + "tick": 472 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 810 + "tick": 472 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "d767fb6b0fd8a54000d5213a7cdaaf7417bf1df8989de5adbbe455dde0672020", + "checksum": "efc52e937a8a55bf3d575ff60c0ff8bb5f1c96129d49faa27ba079625c85fdbe", "events": [], "fighters": [ { @@ -110453,29 +75162,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -788, + "facing_y": -617, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -110490,11 +75200,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": 2, - "y": -45 + "x": 15, + "y": -67 }, { "action": null, @@ -110510,67 +75220,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 833, - "facing_y": 557, - "get_up_count": 8, + "facing_x": 826, + "facing_y": 566, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 168, + "poise": 99, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 239, - "y": 280 + "x": 173, + "y": 234 } ], "phase": "rest", - "phase_ticks_remaining": 191, + "phase_ticks_remaining": 224, + "referee": { + "alive": true, + "facing_x": 774, + "facing_y": 637, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 3, + "velocity_y": -5, + "x": -2, + "y": 4 + }, "result": null, "round_number": 1, - "tick": 811 + "tick": 473 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 811 + "tick": 473 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "b4439a865c37566154d26551948c500f68db85d2c49b2016ff2a3bc14a2d1993", + "checksum": "0199ffe8766887fd495543c7da61aa0cfdd0a47e5636be9e54db72f6b677340f", "events": [], "fighters": [ { @@ -110587,29 +75318,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -755, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -788, + "facing_y": -618, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -110624,11 +75356,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -2, - "y": -48 + "x": 8, + "y": -73 }, { "action": null, @@ -110644,67 +75376,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 834, - "facing_y": 562, - "get_up_count": 8, + "facing_x": 827, + "facing_y": 564, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 170, + "poise": 101, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 243, - "y": 283 + "x": 181, + "y": 239 } ], "phase": "rest", - "phase_ticks_remaining": 190, + "phase_ticks_remaining": 223, + "referee": { + "alive": true, + "facing_x": 752, + "facing_y": 664, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 2, + "velocity_y": -4, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 812 + "tick": 474 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 812 + "tick": 474 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "4f33165fc493955e06d3acc8bba52a141fa888c5d9063e08c82e063c9e0fd78f", + "checksum": "71682770b585aab8b3b42f67f14bd7640c3dd459cce5e7d99d409c4e02e560c0", "events": [], "fighters": [ { @@ -110721,29 +75474,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -659, - "get_up_count": 8, + "facing_x": -788, + "facing_y": -617, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -110758,11 +75512,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -6, - "y": -51 + "x": 0, + "y": -80 }, { "action": null, @@ -110778,67 +75532,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 835, - "facing_y": 561, - "get_up_count": 8, + "facing_x": 825, + "facing_y": 565, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 172, + "poise": 103, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 247, - "y": 286 + "x": 189, + "y": 245 } ], "phase": "rest", - "phase_ticks_remaining": 189, + "phase_ticks_remaining": 222, + "referee": { + "alive": true, + "facing_x": 758, + "facing_y": 661, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 813 + "tick": 475 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 813 + "tick": 475 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "abe781fb1f468eaabae73e444e5e79c664f56273775ffae7c3f280c51f51e6b1", + "checksum": "155748022a03fb4274d2997db868a182df1eba30714c1e8fd209a138afdf2daa", "events": [], "fighters": [ { @@ -110855,29 +75630,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -659, - "get_up_count": 8, + "facing_x": -788, + "facing_y": -615, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -110892,11 +75668,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -9, - "y": -55 + "x": -8, + "y": -86 }, { "action": null, @@ -110912,67 +75688,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 830, - "facing_y": 556, - "get_up_count": 8, + "facing_x": 826, + "facing_y": 563, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 174, + "poise": 105, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 252, - "y": 289 + "x": 198, + "y": 251 } ], "phase": "rest", - "phase_ticks_remaining": 188, + "phase_ticks_remaining": 221, + "referee": { + "alive": true, + "facing_x": 760, + "facing_y": 656, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 814 + "tick": 476 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 814 + "tick": 476 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "f60a62b94def24d75d09c350017dac6f63167d600d6b3faad16801e321400fcc", + "checksum": "297085c6e2ee3f8edf710f82190c6a780f48cf9c338d0fc12a2d77d121eebee4", "events": [], "fighters": [ { @@ -110989,29 +75786,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -656, - "get_up_count": 8, + "facing_x": -788, + "facing_y": -615, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -111026,11 +75824,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -13, - "y": -58 + "x": -16, + "y": -92 }, { "action": null, @@ -111046,67 +75844,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 830, - "facing_y": 558, - "get_up_count": 8, + "facing_x": 826, + "facing_y": 564, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 176, + "poise": 107, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 256, - "y": 292 + "x": 206, + "y": 256 } ], "phase": "rest", - "phase_ticks_remaining": 187, + "phase_ticks_remaining": 220, + "referee": { + "alive": true, + "facing_x": 760, + "facing_y": 656, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 815 + "tick": 477 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 815 + "tick": 477 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "fe957f8be7f00277c54f403406d4066517d2e573e4d980d4a37b47f9642df282", + "checksum": "a59f88762bfeb8fa670bd5d897ad0113019376aa0bcf1870792d50e8d39af01f", "events": [], "fighters": [ { @@ -111123,29 +75942,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -657, - "get_up_count": 8, + "facing_x": -787, + "facing_y": -616, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -111160,11 +75980,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -17, - "y": -61 + "x": -24, + "y": -98 }, { "action": null, @@ -111180,67 +76000,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 832, - "facing_y": 557, - "get_up_count": 8, + "facing_x": 828, + "facing_y": 567, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 178, + "poise": 109, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 260, - "y": 294 + "x": 214, + "y": 262 } ], "phase": "rest", - "phase_ticks_remaining": 186, + "phase_ticks_remaining": 219, + "referee": { + "alive": true, + "facing_x": 760, + "facing_y": 656, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 816 + "tick": 478 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 816 + "tick": 478 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "f5c5270e3016d8a91fce69814f48be406398b8c8ef1f2aa0e1e185b42b8f1103", + "checksum": "5b796ba4279eb1e9a06a8fa91c8d035879448de66ff7ccbceb9ee8c3fba83d77", "events": [], "fighters": [ { @@ -111257,29 +76098,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -787, + "facing_y": -616, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -111294,11 +76136,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -21, - "y": -64 + "x": -32, + "y": -104 }, { "action": null, @@ -111314,67 +76156,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 833, - "facing_y": 563, - "get_up_count": 8, + "facing_x": 829, + "facing_y": 565, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 180, + "poise": 111, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 8, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 264, - "y": 297 + "x": 222, + "y": 268 } ], "phase": "rest", - "phase_ticks_remaining": 185, + "phase_ticks_remaining": 218, + "referee": { + "alive": true, + "facing_x": 760, + "facing_y": 656, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 817 + "tick": 479 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 817 + "tick": 479 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "f949ad8a35e7b7f63e94162b2ab31be2b0ff30af4f179207121bb5467758dd98", + "checksum": "5afdb3c3978035dac65910590fd7d530e3f34132b9765370c8caa0fa2302309f", "events": [], "fighters": [ { @@ -111391,29 +76254,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -752, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -787, + "facing_y": -617, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -111428,11 +76292,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -24, - "y": -68 + "x": -40, + "y": -110 }, { "action": null, @@ -111448,67 +76312,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 834, - "facing_y": 561, - "get_up_count": 8, + "facing_x": 831, + "facing_y": 563, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 182, + "poise": 113, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 6, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 268, - "y": 300 + "x": 231, + "y": 273 } ], "phase": "rest", - "phase_ticks_remaining": 184, + "phase_ticks_remaining": 217, + "referee": { + "alive": true, + "facing_x": 766, + "facing_y": 653, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 818 + "tick": 480 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 818 + "tick": 480 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "6d5cceea5c888de4325ca2152e696b604f13d69ca3706bbd56aa1c4d083ace87", + "checksum": "33432f1769a7d6ea0c1ca0aae5b09bafd46e1ce08d566aa98573993c954d4c0d", "events": [], "fighters": [ { @@ -111525,29 +76410,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -657, - "get_up_count": 8, + "facing_x": -786, + "facing_y": -617, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -111562,11 +76448,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -28, - "y": -71 + "x": -48, + "y": -116 }, { "action": null, @@ -111582,67 +76468,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 836, - "facing_y": 560, - "get_up_count": 8, + "facing_x": 827, + "facing_y": 567, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 184, + "poise": 115, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 6, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 272, - "y": 303 + "x": 239, + "y": 279 } ], "phase": "rest", - "phase_ticks_remaining": 183, + "phase_ticks_remaining": 216, + "referee": { + "alive": true, + "facing_x": 766, + "facing_y": 653, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 819 + "tick": 481 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 819 + "tick": 481 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "b77c6d7075ca4cf5d24289487f28a11182329e843536cb9f5bd2bbdc6e245709", + "checksum": "403147b753f03f832b2362d6b59c205a87111f6917d88296a9dbb43128459c4e", "events": [], "fighters": [ { @@ -111659,29 +76566,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -657, - "get_up_count": 8, + "facing_x": -786, + "facing_y": -617, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -111696,11 +76604,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -32, - "y": -74 + "x": -55, + "y": -123 }, { "action": null, @@ -111716,67 +76624,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 837, - "facing_y": 558, - "get_up_count": 8, + "facing_x": 828, + "facing_y": 565, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 186, + "poise": 117, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 6, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 277, - "y": 306 + "x": 247, + "y": 285 } ], "phase": "rest", - "phase_ticks_remaining": 182, + "phase_ticks_remaining": 215, + "referee": { + "alive": true, + "facing_x": 768, + "facing_y": 648, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 820 + "tick": 482 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 820 + "tick": 482 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "94894911fef0b959d0d4360edf704016df52f9256f7095bdba4da49956ae84f2", + "checksum": "b63d0034ed89b112c52285ed4336b829d92548949ba0ce12e89063fc2bc7f95b", "events": [], "fighters": [ { @@ -111793,29 +76722,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -788, + "facing_y": -615, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -111830,11 +76760,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -36, - "y": -78 + "x": -63, + "y": -129 }, { "action": null, @@ -111850,67 +76780,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 838, - "facing_y": 561, - "get_up_count": 8, + "facing_x": 830, + "facing_y": 563, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 188, + "poise": 119, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 6, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 281, - "y": 308 + "x": 256, + "y": 290 } ], "phase": "rest", - "phase_ticks_remaining": 181, + "phase_ticks_remaining": 214, + "referee": { + "alive": true, + "facing_x": 774, + "facing_y": 645, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 821 + "tick": 483 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 821 + "tick": 483 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "de97b43fdd15c58f43ef33072a3e6b38254750548e05a5bdd3418456361e9438", + "checksum": "2fc3538eba601ab85de9a2ec6c26cd9568d3ebcfca8c6c26a861cae94ef7ad86", "events": [], "fighters": [ { @@ -111927,29 +76878,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -788, + "facing_y": -616, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -111964,11 +76916,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -40, - "y": -81 + "x": -71, + "y": -135 }, { "action": null, @@ -111984,67 +76936,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 831, - "facing_y": 564, - "get_up_count": 8, + "facing_x": 825, + "facing_y": 568, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 190, + "poise": 121, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 6, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 285, - "y": 311 + "x": 264, + "y": 296 } ], "phase": "rest", - "phase_ticks_remaining": 180, + "phase_ticks_remaining": 213, + "referee": { + "alive": true, + "facing_x": 774, + "facing_y": 645, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 822 + "tick": 484 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 822 + "tick": 484 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "16a1499c84f80b3669c8d266bb51795682b60dcaeb02e1c9950306bd2c149410", + "checksum": "b63843f9ff29077943419da84fa45f9f9171a7cd024e542754b2c028b1cf9494", "events": [], "fighters": [ { @@ -112061,29 +77034,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -788, + "facing_y": -616, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -112098,11 +77072,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -43, - "y": -84 + "x": -79, + "y": -141 }, { "action": null, @@ -112118,67 +77092,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 833, - "facing_y": 562, - "get_up_count": 8, + "facing_x": 827, + "facing_y": 565, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 192, + "poise": 123, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 6, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 289, - "y": 314 + "x": 272, + "y": 302 } ], "phase": "rest", - "phase_ticks_remaining": 179, + "phase_ticks_remaining": 212, + "referee": { + "alive": true, + "facing_x": 774, + "facing_y": 645, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 823 + "tick": 485 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 823 + "tick": 485 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "49f2fafbd28ce13a02f3a7095068d50db62f3d1b06981f1f5426ffa35acbe8fe", + "checksum": "220ceb4a267fac8e539f68a688f29dbb3e210bff3a35f49550f2d96eb7892b75", "events": [], "fighters": [ { @@ -112195,29 +77190,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -787, + "facing_y": -617, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -112232,11 +77228,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -47, - "y": -87 + "x": -87, + "y": -147 }, { "action": null, @@ -112252,67 +77248,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 835, - "facing_y": 560, - "get_up_count": 8, + "facing_x": 830, + "facing_y": 562, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 194, + "poise": 125, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 6, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 293, - "y": 317 + "x": 280, + "y": 307 } ], "phase": "rest", - "phase_ticks_remaining": 178, + "phase_ticks_remaining": 211, + "referee": { + "alive": true, + "facing_x": 774, + "facing_y": 645, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 824 + "tick": 486 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 824 + "tick": 486 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "971d965ee8836fcd49da1fe88ad04e2db979640be57e67a3527dece37a240c99", + "checksum": "5d130bd87d8bb99771ec229c805766e4047e7532dec94452efff2fd6dc93bb15", "events": [], "fighters": [ { @@ -112329,29 +77346,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -787, + "facing_y": -617, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -112366,11 +77384,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -51, - "y": -91 + "x": -95, + "y": -153 }, { "action": null, @@ -112386,67 +77404,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 837, - "facing_y": 558, - "get_up_count": 8, + "facing_x": 833, + "facing_y": 568, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 196, + "poise": 127, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 6, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 297, - "y": 320 + "x": 289, + "y": 313 } ], "phase": "rest", - "phase_ticks_remaining": 177, + "phase_ticks_remaining": 210, + "referee": { + "alive": true, + "facing_x": 776, + "facing_y": 640, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 825 + "tick": 487 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 825 + "tick": 487 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "083b475bbd725810fc13740ff53532efad8d63b416bc5d1fc116976d56c61cd0", + "checksum": "91ab0ae4a96ef2cc2e8aa20384b36ea0640294d0d6421373892128377613fa27", "events": [], "fighters": [ { @@ -112463,163 +77502,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -754, - "facing_y": -658, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 984, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": -4, - "velocity_y": -3, - "warnings": 0, - "x": -55, - "y": -94 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 839, - "facing_y": 555, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 985, - "player_id": "two", - "poise": 198, - "queued_actions": 0, - "stamina": 985, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 4, - "velocity_y": 3, - "warnings": 1, - "x": 302, - "y": 322 - } - ], - "phase": "rest", - "phase_ticks_remaining": 176, - "result": null, - "round_number": 1, - "tick": 826 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 826 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "03c69d8d1adf728f2334342b757f6055c6704373bb5af33fde7d1e99dd04e376", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -659, - "get_up_count": 8, + "facing_x": -787, + "facing_y": -618, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -112634,11 +77540,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -58, - "y": -97 + "x": -103, + "y": -160 }, { "action": null, @@ -112654,67 +77560,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 828, + "facing_x": 826, "facing_y": 565, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 200, + "poise": 129, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 6, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 306, - "y": 325 + "x": 297, + "y": 319 } ], "phase": "rest", - "phase_ticks_remaining": 175, + "phase_ticks_remaining": 209, + "referee": { + "alive": true, + "facing_x": 776, + "facing_y": 632, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 827 + "tick": 488 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 827 + "tick": 488 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "e4afa61546f7d3011271d79a8bc0e75b670659b6b2671e6153139f967e02c0c2", + "checksum": "6b3fc73db624fc38746d004c7171bcc287fc33968970573def8929d758e0134b", "events": [], "fighters": [ { @@ -112731,29 +77658,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -789, + "facing_y": -617, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -112768,11 +77696,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -62, - "y": -101 + "x": -111, + "y": -166 }, { "action": null, @@ -112788,67 +77716,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 830, - "facing_y": 563, - "get_up_count": 8, + "facing_x": 829, + "facing_y": 560, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 202, + "poise": 131, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 6, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 310, - "y": 328 + "x": 305, + "y": 324 } ], "phase": "rest", - "phase_ticks_remaining": 174, + "phase_ticks_remaining": 208, + "referee": { + "alive": true, + "facing_x": 776, + "facing_y": 632, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 828 + "tick": 489 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 828 + "tick": 489 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "3df41929b65c5d7b5a80c2d2c0129513b683408bb618738ecba3a55a50098208", + "checksum": "31f2a4a35ab8ab70cae67f49ef222d0c922d9586a970bdc5a7446659495e9ab7", "events": [], "fighters": [ { @@ -112865,29 +77814,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -755, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -788, + "facing_y": -618, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -112902,11 +77852,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -66, - "y": -104 + "x": -118, + "y": -172 }, { "action": null, @@ -112922,67 +77872,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 833, - "facing_y": 560, - "get_up_count": 8, + "facing_y": 569, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 204, + "poise": 133, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 6, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, "x": 314, - "y": 331 + "y": 330 } ], "phase": "rest", - "phase_ticks_remaining": 173, + "phase_ticks_remaining": 207, + "referee": { + "alive": true, + "facing_x": 784, + "facing_y": 632, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 829 + "tick": 490 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 829 + "tick": 490 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "bea1621028bceb7a3450af911e334f51b8b4e2539475a02d315ed4e14329295a", + "checksum": "204a03be503464fa067b4e91ee23f05d29950417aee60adb18f7f450fe7b1a73", "events": [], "fighters": [ { @@ -112999,29 +77970,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -755, - "facing_y": -659, - "get_up_count": 8, + "facing_x": -789, + "facing_y": -616, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -113036,11 +78008,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -70, - "y": -107 + "x": -126, + "y": -178 }, { "action": null, @@ -113056,67 +78028,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 836, - "facing_y": 557, - "get_up_count": 8, + "facing_y": 573, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 206, + "poise": 135, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 6, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 318, - "y": 334 + "x": 322, + "y": 336 } ], "phase": "rest", - "phase_ticks_remaining": 172, + "phase_ticks_remaining": 206, + "referee": { + "alive": true, + "facing_x": 784, + "facing_y": 632, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 830 + "tick": 491 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 830 + "tick": 491 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "11170ba78e8ec986079147a7e8c8dbf7066d3ef51253039172ace9767b1c2f05", + "checksum": "a07ba12ef87c8312b569a346f7a3dc0d7ae3586b9f6ccad4e55469cb36c148a1", "events": [], "fighters": [ { @@ -113133,29 +78126,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -659, - "get_up_count": 8, + "facing_x": -788, + "facing_y": -617, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -113170,11 +78164,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -73, - "y": -110 + "x": -134, + "y": -184 }, { "action": null, @@ -113190,67 +78184,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 839, - "facing_y": 553, - "get_up_count": 8, + "facing_x": 843, + "facing_y": 568, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 208, + "poise": 137, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 6, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 323, - "y": 336 + "x": 330, + "y": 341 } ], "phase": "rest", - "phase_ticks_remaining": 171, + "phase_ticks_remaining": 205, + "referee": { + "alive": true, + "facing_x": 784, + "facing_y": 624, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 831 + "tick": 492 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 831 + "tick": 492 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "1aafb0cd7dab2ca931ccdec470b26722a178534c182db172b49e77c1852d9192", + "checksum": "82b5365b58a9d48857675c8a940258d770cbeec37d0f1628070903fead9c76b6", "events": [], "fighters": [ { @@ -113267,29 +78282,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -788, + "facing_y": -617, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -113304,11 +78320,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -77, - "y": -114 + "x": -142, + "y": -190 }, { "action": null, @@ -113324,67 +78340,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 823, - "facing_y": 568, - "get_up_count": 8, + "facing_x": 833, + "facing_y": 571, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 210, + "poise": 139, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 6, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 327, - "y": 339 + "x": 339, + "y": 347 } ], "phase": "rest", - "phase_ticks_remaining": 170, + "phase_ticks_remaining": 204, + "referee": { + "alive": true, + "facing_x": 784, + "facing_y": 624, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 832 + "tick": 493 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 832 + "tick": 493 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "05eff6054eb34a5f9aec2e47f03e090e0943a72b0ad5dd811d7b60f1bb70f6fe", + "checksum": "e2ffac86bd7cc0d25041129d888fa95550ac9b4c743070452c5648be73712d76", "events": [], "fighters": [ { @@ -113401,29 +78438,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -657, - "get_up_count": 8, + "facing_x": -787, + "facing_y": -618, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -113438,11 +78476,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -81, - "y": -117 + "x": -150, + "y": -197 }, { "action": null, @@ -113458,67 +78496,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 826, - "facing_y": 565, - "get_up_count": 8, + "facing_x": 838, + "facing_y": 580, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 212, + "poise": 141, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 6, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 331, - "y": 342 + "x": 347, + "y": 353 } ], "phase": "rest", - "phase_ticks_remaining": 169, + "phase_ticks_remaining": 203, + "referee": { + "alive": true, + "facing_x": 784, + "facing_y": 624, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 833 + "tick": 494 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 833 + "tick": 494 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "2cb40799c38d11caf5a2ef6482dfb831495b5367fcff3485cc1ebc154a9724f1", + "checksum": "5fda5b42c3c090140382580e2f9fe31255af9f476c7b83c4ce46dfc25bef5e9f", "events": [], "fighters": [ { @@ -113535,29 +78594,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -657, - "get_up_count": 8, + "facing_x": -790, + "facing_y": -617, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -113572,11 +78632,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -85, - "y": -120 + "x": -158, + "y": -203 }, { "action": null, @@ -113592,67 +78652,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 829, - "facing_y": 560, - "get_up_count": 8, + "facing_x": 857, + "facing_y": 571, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 214, + "poise": 143, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 6, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 9, + "velocity_y": 6, "warnings": 1, - "x": 335, - "y": 345 + "x": 356, + "y": 358 } ], "phase": "rest", - "phase_ticks_remaining": 168, + "phase_ticks_remaining": 202, + "referee": { + "alive": true, + "facing_x": 792, + "facing_y": 616, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 834 + "tick": 495 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 834 + "tick": 495 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "3c53367f63ed22ae6732b8508e0b2687b38424a09197dc51fa81d1e3230d23c1", + "checksum": "39400c492f6051bc6417c46d3a780e73f3784f4b830ce4788183291055810052", "events": [], "fighters": [ { @@ -113669,29 +78750,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -752, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -790, + "facing_y": -618, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -113706,11 +78788,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -89, - "y": -124 + "x": -166, + "y": -209 }, { "action": null, @@ -113726,67 +78808,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 833, - "facing_y": 555, - "get_up_count": 8, + "facing_x": 818, + "facing_y": 636, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 216, + "poise": 145, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 6, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 8, + "velocity_y": 6, "warnings": 1, - "x": 339, - "y": 348 + "x": 364, + "y": 365 } ], "phase": "rest", - "phase_ticks_remaining": 167, + "phase_ticks_remaining": 201, + "referee": { + "alive": true, + "facing_x": 785, + "facing_y": 619, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 835 + "tick": 496 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 835 + "tick": 496 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "5bce7cf2d558ddea532ec5675a64fa1e59f54cf8c630661c3c2d16c5134a043d", + "checksum": "8686cf2ee0533ef98061037a3d13ba3288b3efee1107011ab078710b12d4da46", "events": [], "fighters": [ { @@ -113803,29 +78906,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -789, + "facing_y": -619, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -113840,11 +78944,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -92, - "y": -127 + "x": -174, + "y": -215 }, { "action": null, @@ -113860,67 +78964,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 838, - "facing_y": 548, - "get_up_count": 8, + "facing_x": 827, + "facing_y": 562, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 218, + "poise": 147, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 6, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 343, - "y": 350 + "x": 365, + "y": 365 } ], "phase": "rest", - "phase_ticks_remaining": 166, + "phase_ticks_remaining": 200, + "referee": { + "alive": true, + "facing_x": 785, + "facing_y": 619, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 836 + "tick": 497 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 836 + "tick": 497 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "5419b42d43424809af35323bea61a33cd22cba4e53c925426b52f53add08ba64", + "checksum": "9ff0caef5ffdcc8ed7d6f2d67c15b0b09ae0b54a89524b7b0d8c04b549d58689", "events": [], "fighters": [ { @@ -113937,29 +79062,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -657, - "get_up_count": 8, + "facing_x": -789, + "facing_y": -619, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -113974,11 +79100,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -96, - "y": -130 + "x": -182, + "y": -221 }, { "action": null, @@ -113994,67 +79120,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 846, - "facing_y": 576, - "get_up_count": 8, + "facing_x": 861, + "facing_y": 508, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 220, + "poise": 149, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 6, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 347, - "y": 353 + "x": 365, + "y": 365 } ], "phase": "rest", - "phase_ticks_remaining": 165, + "phase_ticks_remaining": 199, + "referee": { + "alive": true, + "facing_x": 784, + "facing_y": 620, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 837 + "tick": 498 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 837 + "tick": 498 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "8b2558c5aab943b3e851f7ca1b88f430f4063d9d36f51105ccf74f41eecc36fc", + "checksum": "9eaf9604204bc5c858815b0be8a899af0b9bab4784e78bc1425293cadd822b93", "events": [], "fighters": [ { @@ -114071,29 +79218,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -788, + "facing_y": -620, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -114108,11 +79256,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -100, - "y": -133 + "x": -189, + "y": -228 }, { "action": null, @@ -114128,67 +79276,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 857, - "facing_y": 571, - "get_up_count": 8, + "facing_x": 892, + "facing_y": 452, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 222, + "poise": 151, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 6, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 352, - "y": 356 + "x": 365, + "y": 365 } ], "phase": "rest", - "phase_ticks_remaining": 164, + "phase_ticks_remaining": 198, + "referee": { + "alive": true, + "facing_x": 792, + "facing_y": 612, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 838 + "tick": 499 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 838 + "tick": 499 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "3ea50385b747ea77f023bc452f2b47c62145e517b90f3a57a745c44439f6d8d4", + "checksum": "4f4bb7dc35b8ea23bc2bd347c0fa50b9dcaa3726dc85050b89ad0f21ad04aad5", "events": [], "fighters": [ { @@ -114205,29 +79374,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -752, - "facing_y": -659, - "get_up_count": 8, + "facing_x": -789, + "facing_y": -614, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -114242,11 +79412,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -104, - "y": -137 + "x": -197, + "y": -234 }, { "action": null, @@ -114262,67 +79432,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 866, - "facing_y": 600, - "get_up_count": 8, + "facing_x": 919, + "facing_y": 394, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 224, + "poise": 153, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 6, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 356, - "y": 359 + "x": 365, + "y": 365 } ], "phase": "rest", - "phase_ticks_remaining": 163, + "phase_ticks_remaining": 197, + "referee": { + "alive": true, + "facing_x": 792, + "facing_y": 613, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 839 + "tick": 500 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 839 + "tick": 500 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "94209e117bdd6c787fd70111a1906767707e19c28f1cb6c5f6d6bcdc6bc45831", + "checksum": "44d6531a7ba40ffe70be801e2dcb418f56f6e0d55502acd12b347116761aede8", "events": [], "fighters": [ { @@ -114339,29 +79530,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -788, + "facing_y": -615, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -114376,11 +79568,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -107, - "y": -140 + "x": -205, + "y": -240 }, { "action": null, @@ -114396,67 +79588,88 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 900, - "facing_y": 600, - "get_up_count": 8, + "facing_x": 942, + "facing_y": 334, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 226, + "poise": 155, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 6, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": 5, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 361, - "y": 362 + "x": 365, + "y": 365 } ], "phase": "rest", - "phase_ticks_remaining": 162, + "phase_ticks_remaining": 196, + "referee": { + "alive": true, + "facing_x": 792, + "facing_y": 613, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 840 + "tick": 501 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 840 + "tick": 501 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "b771803cc89936ea9e769762dad7972e596847bde93d48ed04e4a23e91d29f8b", + "checksum": "58a52f213035c08969b3800815f735192d4f48eaf26407176d4370d6d48ac5f3", "events": [], "fighters": [ { @@ -114473,29 +79686,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -657, - "get_up_count": 8, + "facing_x": -788, + "facing_y": -615, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -114510,11 +79724,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -111, - "y": -143 + "x": -213, + "y": -246 }, { "action": null, @@ -114530,38 +79744,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 855, - "facing_y": 518, - "get_up_count": 8, + "facing_x": 962, + "facing_y": 273, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 228, + "poise": 157, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 6, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -114575,22 +79790,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 161, + "phase_ticks_remaining": 195, + "referee": { + "alive": true, + "facing_x": 791, + "facing_y": 614, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 841 + "tick": 502 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 841 + "tick": 502 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "195d4678198d54e9f04a179d35066ea1369b3426c4edfbeaffde106bb1e213c5", + "checksum": "ede3550d26b1a11ba5faea96d1dc2c90d1b3e28dfccd634f03c85eb0bb694dcb", "events": [], "fighters": [ { @@ -114607,29 +79842,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -787, + "facing_y": -616, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -114644,11 +79880,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -115, - "y": -147 + "x": -221, + "y": -252 }, { "action": null, @@ -114664,38 +79900,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 877, - "facing_y": 480, - "get_up_count": 8, + "facing_x": 978, + "facing_y": 211, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 230, + "poise": 159, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 6, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -114709,22 +79946,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 160, + "phase_ticks_remaining": 194, + "referee": { + "alive": true, + "facing_x": 791, + "facing_y": 615, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 842 + "tick": 503 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 842 + "tick": 503 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "53a5372f2cdfc8e7f7c914ca347cfe5838680232215fad49229031f036b8db02", + "checksum": "16979a11b16d978dd85573f766f353b02a29d12d3c747f0d6cfc68fb59d20776", "events": [], "fighters": [ { @@ -114741,29 +79998,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -755, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -786, + "facing_y": -617, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -114778,11 +80036,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -119, - "y": -150 + "x": -229, + "y": -258 }, { "action": null, @@ -114798,38 +80056,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 897, - "facing_y": 441, - "get_up_count": 8, + "facing_x": 989, + "facing_y": 148, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 232, + "poise": 161, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 6, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -114843,22 +80102,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 159, + "phase_ticks_remaining": 193, + "referee": { + "alive": true, + "facing_x": 790, + "facing_y": 616, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 843 + "tick": 504 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 843 + "tick": 504 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "76414eeac1eeb13beef43b0fff623576d0f6b31edc456662bf956900c8642187", + "checksum": "545cdf6e259c292ee73d49e83a17ca260b5570b23275e6375154ea5a404c4088", "events": [], "fighters": [ { @@ -114875,29 +80154,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -659, - "get_up_count": 8, + "facing_x": -786, + "facing_y": -618, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -114912,11 +80192,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -122, - "y": -153 + "x": -237, + "y": -265 }, { "action": null, @@ -114932,38 +80212,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 916, - "facing_y": 402, - "get_up_count": 8, + "facing_x": 996, + "facing_y": 84, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 234, + "poise": 163, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 6, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -114977,22 +80258,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 158, + "phase_ticks_remaining": 192, + "referee": { + "alive": true, + "facing_x": 790, + "facing_y": 617, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 844 + "tick": 505 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 844 + "tick": 505 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "8acae6b2fd657f0a74c0752dcb8303acb4b804ebf9594790de3fb615b5724503", + "checksum": "d2dee7bc89fd098677d8db88e21289d6c9f1049e72c20ab44e466fd2a41bb1a8", "events": [], "fighters": [ { @@ -115009,29 +80310,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -790, + "facing_y": -617, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -115046,11 +80348,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -126, - "y": -157 + "x": -245, + "y": -271 }, { "action": null, @@ -115066,38 +80368,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 932, - "facing_y": 362, - "get_up_count": 8, + "facing_x": 1000, + "facing_y": 20, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 236, + "poise": 165, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 6, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -115111,22 +80414,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 157, + "phase_ticks_remaining": 191, + "referee": { + "alive": true, + "facing_x": 789, + "facing_y": 618, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 845 + "tick": 506 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 845 + "tick": 506 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "24fe4d242d5ca91a8429b5666b6172ba770c1a215f78fdeb14430982f4a5271d", + "checksum": "01441ab26d055ead716c060426fa4cf362d5b16d1af4760b0e3ea5d5ab8927ec", "events": [], "fighters": [ { @@ -115143,29 +80466,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -756, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -789, + "facing_y": -618, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -115180,11 +80504,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -130, - "y": -160 + "x": -252, + "y": -277 }, { "action": null, @@ -115200,38 +80524,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 947, - "facing_y": 321, - "get_up_count": 8, + "facing_x": 999, + "facing_y": -44, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 238, + "poise": 167, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 6, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -115245,22 +80570,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 156, + "phase_ticks_remaining": 190, + "referee": { + "alive": true, + "facing_x": 788, + "facing_y": 619, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 846 + "tick": 507 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 846 + "tick": 507 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "c764b03d3814bfca0c81272b3cfb1d3aebcfd83c673a9aea279bd6414ac85d30", + "checksum": "05de49eecb188ea968068b12471fed7950ac8b249484b9288d26af2147c1a682", "events": [], "fighters": [ { @@ -115277,29 +80622,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -755, - "facing_y": -659, - "get_up_count": 8, + "facing_x": -790, + "facing_y": -615, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -115314,11 +80660,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -134, - "y": -163 + "x": -260, + "y": -283 }, { "action": null, @@ -115334,43 +80680,200 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 960, - "facing_y": 279, - "get_up_count": 8, + "facing_x": 994, + "facing_y": -108, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 240, + "poise": 169, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, + "trauma": { + "bleeding": 6, + "body": 0, + "head": 192, + "left_cut": 126, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "warnings": 1, + "x": 365, + "y": 365 + } + ], + "phase": "rest", + "phase_ticks_remaining": 189, + "referee": { + "alive": true, + "facing_x": 787, + "facing_y": 621, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, + "result": null, + "round_number": 1, + "tick": 508 + }, + "type": "snapshot", + "version": 5 + }, + "tick": 508 + }, + { + "attack_one": null, + "attack_two": null, + "snapshot": { + "payload": { + "checksum": "8f46344f8b1d49efba6c0c64bc69e402a41053fe9a63ee18ab6b1ae90ab4d387", + "events": [], + "fighters": [ + { + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, + "clinch_startup_ticks": 0, + "clinch_ticks": 0, + "conditioning": 988, + "corner_choice": "cut", + "deductions": 0, + "defense": "none", + "facing": -1, + "facing_x": -789, + "facing_y": -616, + "get_up_count": 5, + "get_up_meter": 0, + "get_up_prompt": null, + "get_up_required": 30, + "get_up_window_end_tick": 0, + "get_up_window_start_tick": 0, + "guard": 700, + "guard_broken": false, + "is_downed": false, + "is_foul_recovery_target": false, + "knockdowns": 0, + "last_input_sequence": 155, + "maximum_stamina": 997, + "player_id": "one", + "poise": 600, + "queued_actions": 0, + "stamina": 997, + "stance": "orthodox", + "stunned_ticks": 0, + "style": "boxer", + "taunt_ticks": 0, "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 0, "left_cut": 0, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, + "velocity_x": -8, + "velocity_y": -6, + "warnings": 0, + "x": -268, + "y": -289 + }, + { + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, + "clinch_startup_ticks": 0, + "clinch_ticks": 0, + "conditioning": 972, + "corner_choice": "swelling", + "deductions": 0, + "defense": "none", + "facing": 1, + "facing_x": 985, + "facing_y": -171, + "get_up_count": 5, + "get_up_meter": 0, + "get_up_prompt": null, + "get_up_required": 0, + "get_up_window_end_tick": 0, + "get_up_window_start_tick": 0, + "guard": 700, + "guard_broken": false, + "is_downed": false, + "is_foul_recovery_target": false, + "knockdowns": 1, + "last_input_sequence": -1, + "maximum_stamina": 992, + "player_id": "two", + "poise": 171, + "queued_actions": 0, + "stamina": 992, + "stance": "orthodox", + "stunned_ticks": 0, + "style": "slugger", + "taunt_ticks": 0, + "trauma": { + "bleeding": 6, + "body": 0, + "head": 192, + "left_cut": 126, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, "velocity_x": 0, "velocity_y": 0, "warnings": 1, @@ -115379,22 +80882,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 155, + "phase_ticks_remaining": 188, + "referee": { + "alive": true, + "facing_x": 786, + "facing_y": 622, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 847 + "tick": 509 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 847 + "tick": 509 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "d69ef13d8ecadbce55691aeb4df615a9d69ee1dd6de6b5b4e74a8a1aef57ff8a", + "checksum": "042a39a38b26c4c95eb404fdf38a49a754a2062865c689d810c0773196b41744", "events": [], "fighters": [ { @@ -115411,29 +80934,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -660, - "get_up_count": 8, + "facing_x": -788, + "facing_y": -617, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -115448,11 +80972,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -138, - "y": -166 + "x": -276, + "y": -295 }, { "action": null, @@ -115468,38 +80992,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 972, - "facing_y": 237, - "get_up_count": 8, + "facing_y": -234, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 242, + "poise": 173, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 4, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -115513,22 +81038,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 154, + "phase_ticks_remaining": 187, + "referee": { + "alive": true, + "facing_x": 785, + "facing_y": 625, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 848 + "tick": 510 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 848 + "tick": 510 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "09d1f3a43031ffff96c1d9012d65b362ddb738a6e497c086aa29f2e075adcd5a", + "checksum": "e49920d09dd75a72c817a6f8fc4fd2756a7025c1134df4a4785801b55d2a4480", "events": [], "fighters": [ { @@ -115545,29 +81090,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -661, - "get_up_count": 8, + "facing_x": -787, + "facing_y": -619, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -115582,11 +81128,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -141, - "y": -170 + "x": -284, + "y": -302 }, { "action": null, @@ -115602,38 +81148,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 981, - "facing_y": 194, - "get_up_count": 8, + "facing_x": 955, + "facing_y": -296, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 244, + "poise": 175, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 4, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -115647,22 +81194,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 153, + "phase_ticks_remaining": 186, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 620, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 849 + "tick": 511 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 849 + "tick": 511 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "e0ea72e98a063728d57e51e856aac2cfc0ad0f89267d0164e2ed3a062be47ee3", + "checksum": "604b56448d8274e168b3962d98272abf3b09f0e57d882743841101840a439eab", "events": [], "fighters": [ { @@ -115679,29 +81246,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -756, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -794, + "facing_y": -617, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -115716,11 +81284,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -145, - "y": -173 + "x": -292, + "y": -308 }, { "action": null, @@ -115736,38 +81304,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 989, - "facing_y": 151, - "get_up_count": 8, + "facing_x": 934, + "facing_y": -357, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 246, + "poise": 177, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 4, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -115781,22 +81350,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 152, + "phase_ticks_remaining": 185, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 622, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 850 + "tick": 512 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 850 + "tick": 512 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "7a7c01e4b6b6fc87e1bdf0160c42a81a30bbb7a14ed9c5256c75020ebee035ca", + "checksum": "207f425ff72f630ef0838c722b877f9212490ef9195fe7b82d4d0837147eafbb", "events": [], "fighters": [ { @@ -115813,29 +81402,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -657, - "get_up_count": 8, + "facing_x": -793, + "facing_y": -619, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -115850,11 +81440,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -149, - "y": -176 + "x": -300, + "y": -314 }, { "action": null, @@ -115870,38 +81460,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 994, - "facing_y": 108, - "get_up_count": 8, + "facing_x": 909, + "facing_y": -416, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 248, + "poise": 179, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 4, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -115915,22 +81506,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 151, + "phase_ticks_remaining": 184, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 625, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 851 + "tick": 513 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 851 + "tick": 513 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "a394f477117aa2d307dc44296901489b6b4d7791c6d4004f599e93786f999b4e", + "checksum": "e448a7e9e44d845e811ea0ec4a084cc48aeb0d77dc85e1e16d9ac735c80967fe", "events": [], "fighters": [ { @@ -115947,29 +81558,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -752, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -792, + "facing_y": -621, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -115984,11 +81596,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -153, - "y": -180 + "x": -308, + "y": -320 }, { "action": null, @@ -116004,38 +81616,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 998, - "facing_y": 65, - "get_up_count": 8, + "facing_x": 881, + "facing_y": -473, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 250, + "poise": 181, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 4, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -116049,22 +81662,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 150, + "phase_ticks_remaining": 183, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 628, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 852 + "tick": 514 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 852 + "tick": 514 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "33ca9c7d09e2a2700cc291b7575fade4dc241d08be6d42335bd20a15ec559555", + "checksum": "971f8224444b8c51ee71860719fa3ed3427d951e28afd4f531eeca547eee1b10", "events": [], "fighters": [ { @@ -116081,29 +81714,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -791, + "facing_y": -625, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -116118,11 +81752,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -156, - "y": -183 + "x": -316, + "y": -326 }, { "action": null, @@ -116138,38 +81772,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": 21, - "get_up_count": 8, + "facing_x": 849, + "facing_y": -528, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 252, + "poise": 183, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 4, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -116183,22 +81818,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 149, + "phase_ticks_remaining": 182, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 633, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 853 + "tick": 515 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 853 + "tick": 515 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "ef54951dfdf4fe35f5c279ee115172ef491804d61512ea9f5702f814c8da24d4", + "checksum": "4387c90ee757f226e5d85f499fe7643cf210818565cdd3affb0cb970975f5117", "events": [], "fighters": [ { @@ -116215,29 +81870,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -657, - "get_up_count": 8, + "facing_x": -790, + "facing_y": -629, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -116252,11 +81908,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -160, - "y": -186 + "x": -324, + "y": -333 }, { "action": null, @@ -116272,38 +81928,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": -23, - "get_up_count": 8, + "facing_x": 814, + "facing_y": -581, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 254, + "poise": 185, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 4, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -116317,22 +81974,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 148, + "phase_ticks_remaining": 181, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 640, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 854 + "tick": 516 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 854 + "tick": 516 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "0ff572fcbd49d38311f55a6ba37c223031f18dfee3b95e40891eaac3e77cb43f", + "checksum": "b8a5d45c2b0574a8700f1481c01ccc283afddbc34c7644d4e36256a0a2e8645b", "events": [], "fighters": [ { @@ -116349,29 +82026,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -788, + "facing_y": -615, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -116386,11 +82064,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -164, - "y": -189 + "x": -331, + "y": -339 }, { "action": null, @@ -116406,38 +82084,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 998, - "facing_y": -67, - "get_up_count": 8, + "facing_x": 775, + "facing_y": -632, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 256, + "poise": 187, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 4, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -116451,22 +82130,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 147, + "phase_ticks_remaining": 180, + "referee": { + "alive": true, + "facing_x": 809, + "facing_y": 619, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 855 + "tick": 517 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 855 + "tick": 517 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "ae99a77a2c3a27662a510fb9459d2234d8283fe98cfec717947f77f79ee7559e", + "checksum": "3c860f1c38fd67d286f9a59bf729c36bb2913aea7ff6131068945afde86e57fb", "events": [], "fighters": [ { @@ -116483,29 +82182,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -752, - "facing_y": -659, - "get_up_count": 8, + "facing_x": -809, + "facing_y": -619, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -116520,11 +82220,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -168, - "y": -193 + "x": -340, + "y": -345 }, { "action": null, @@ -116540,43 +82240,200 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 994, - "facing_y": -110, - "get_up_count": 8, + "facing_x": 733, + "facing_y": -680, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 258, + "poise": 189, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, + "trauma": { + "bleeding": 4, + "body": 0, + "head": 192, + "left_cut": 126, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "warnings": 1, + "x": 365, + "y": 365 + } + ], + "phase": "rest", + "phase_ticks_remaining": 179, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 666, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, + "result": null, + "round_number": 1, + "tick": 518 + }, + "type": "snapshot", + "version": 5 + }, + "tick": 518 + }, + { + "attack_one": null, + "attack_two": null, + "snapshot": { + "payload": { + "checksum": "b82ebbadd4f5bef53dbfd5716e610ece7700bcd6d740f9cd12246a46541cf9d4", + "events": [], + "fighters": [ + { + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, + "clinch_startup_ticks": 0, + "clinch_ticks": 0, + "conditioning": 988, + "corner_choice": "cut", + "deductions": 0, + "defense": "none", + "facing": -1, + "facing_x": -781, + "facing_y": -625, + "get_up_count": 5, + "get_up_meter": 0, + "get_up_prompt": null, + "get_up_required": 30, + "get_up_window_end_tick": 0, + "get_up_window_start_tick": 0, + "guard": 700, + "guard_broken": false, + "is_downed": false, + "is_foul_recovery_target": false, + "knockdowns": 0, + "last_input_sequence": 155, + "maximum_stamina": 997, + "player_id": "one", + "poise": 600, + "queued_actions": 0, + "stamina": 997, + "stance": "orthodox", + "stunned_ticks": 0, + "style": "boxer", + "taunt_ticks": 0, "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 0, "left_cut": 0, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, + "velocity_x": -8, + "velocity_y": -6, + "warnings": 0, + "x": -347, + "y": -351 + }, + { + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, + "clinch_startup_ticks": 0, + "clinch_ticks": 0, + "conditioning": 972, + "corner_choice": "swelling", + "deductions": 0, + "defense": "none", + "facing": 1, + "facing_x": 688, + "facing_y": -726, + "get_up_count": 5, + "get_up_meter": 0, + "get_up_prompt": null, + "get_up_required": 0, + "get_up_window_end_tick": 0, + "get_up_window_start_tick": 0, + "guard": 700, + "guard_broken": false, + "is_downed": false, + "is_foul_recovery_target": false, + "knockdowns": 1, + "last_input_sequence": -1, + "maximum_stamina": 992, + "player_id": "two", + "poise": 191, + "queued_actions": 0, + "stamina": 992, + "stance": "orthodox", + "stunned_ticks": 0, + "style": "slugger", + "taunt_ticks": 0, + "trauma": { + "bleeding": 4, + "body": 0, + "head": 192, + "left_cut": 126, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, "velocity_x": 0, "velocity_y": 0, "warnings": 1, @@ -116585,22 +82442,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 146, + "phase_ticks_remaining": 178, + "referee": { + "alive": true, + "facing_x": 818, + "facing_y": 636, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 856 + "tick": 519 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 856 + "tick": 519 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "893946b2229fcecf5adf8d2d3a1c6cccac5de263bcebf17ddda46c984180b8b1", + "checksum": "27c467132e135cf08fd5b8127ef4abf5adf190f417af18911c6b921cda718942", "events": [], "fighters": [ { @@ -116617,29 +82494,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -659, - "get_up_count": 8, + "facing_x": -818, + "facing_y": -636, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -116654,11 +82532,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -171, - "y": -196 + "x": -356, + "y": -358 }, { "action": null, @@ -116674,38 +82552,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 988, - "facing_y": -153, - "get_up_count": 8, + "facing_x": 640, + "facing_y": -768, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 260, + "poise": 193, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 4, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -116719,22 +82598,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 145, + "phase_ticks_remaining": 177, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 857 + "tick": 520 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 857 + "tick": 520 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "3fd88b5e3c37f0128d641e096fbf94c1c7177fb01cbc2aa26fa4ee35630eef34", + "checksum": "155aa141efca19af6adeed94ab443911ec9f45ef8fc4afb7b69d9ae288a0998a", "events": [], "fighters": [ { @@ -116751,29 +82650,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -657, - "get_up_count": 8, + "facing_x": -818, + "facing_y": -636, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -116788,11 +82688,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": -8, + "velocity_y": -6, "warnings": 0, - "x": -175, - "y": -199 + "x": -364, + "y": -364 }, { "action": null, @@ -116808,38 +82708,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 981, - "facing_y": -196, - "get_up_count": 8, + "facing_x": 590, + "facing_y": -808, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 262, + "poise": 195, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 4, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -116853,22 +82754,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 144, + "phase_ticks_remaining": 176, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 858 + "tick": 521 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 858 + "tick": 521 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "479fa808c4b3a996be2fb475b6280867a7e9317fbbdfaa6f6c7c50fc8cd867e0", + "checksum": "6146f4107806f81d9edc2b699635068c28ee55458e2c8b08bbfcdd2c4fdf5fd4", "events": [], "fighters": [ { @@ -116885,29 +82806,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -827, + "facing_y": -562, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -116922,11 +82844,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -179, - "y": -203 + "x": -365, + "y": -365 }, { "action": null, @@ -116942,38 +82864,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 971, - "facing_y": -239, - "get_up_count": 8, + "facing_x": 537, + "facing_y": -844, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 264, + "poise": 197, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 4, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -116987,22 +82910,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 143, + "phase_ticks_remaining": 175, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 859 + "tick": 522 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 859 + "tick": 522 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "2bf56f14f9465c3cdfc722ce48054fed7f46a914b0b2dc5823933b03ff0442e8", + "checksum": "296b308b46a0746d5eb831f49b1195c6d5100a59a76aa08fc2db0ca6eb707d28", "events": [], "fighters": [ { @@ -117019,29 +82962,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -756, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -861, + "facing_y": -508, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -117056,11 +83000,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -183, - "y": -206 + "x": -365, + "y": -365 }, { "action": null, @@ -117076,38 +83020,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 960, - "facing_y": -281, - "get_up_count": 8, + "facing_x": 482, + "facing_y": -876, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 266, + "poise": 199, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 4, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -117121,22 +83066,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 142, + "phase_ticks_remaining": 174, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 860 + "tick": 523 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 860 + "tick": 523 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "877fc89b82bd061fd285672fdf223f85a3e4cfd0d072ff0c56afb17b5105942b", + "checksum": "4c5f16218b43b627a0795f1fd823734b5b022b0494047b7a38d4ed6111b265ce", "events": [], "fighters": [ { @@ -117153,29 +83118,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -755, - "facing_y": -659, - "get_up_count": 8, + "facing_x": -892, + "facing_y": -452, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -117190,11 +83156,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -187, - "y": -209 + "x": -365, + "y": -365 }, { "action": null, @@ -117210,38 +83176,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 947, - "facing_y": -323, - "get_up_count": 8, + "facing_x": 425, + "facing_y": -905, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 268, + "poise": 201, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 4, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -117255,22 +83222,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 141, + "phase_ticks_remaining": 173, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 861 + "tick": 524 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 861 + "tick": 524 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "f8d18d6f8f333fcb97b0b06f379d34a8ae72f69b463577cae17dbb8b55479074", + "checksum": "eb54dd356a6e6aa2c71e7aa5c9e0fd258b2e3f2f26d1411391a62794172d82bf", "events": [], "fighters": [ { @@ -117287,29 +83274,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -661, - "get_up_count": 8, + "facing_x": -919, + "facing_y": -394, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -117324,11 +83312,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -190, - "y": -212 + "x": -365, + "y": -365 }, { "action": null, @@ -117344,38 +83332,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 931, - "facing_y": -364, - "get_up_count": 8, + "facing_x": 366, + "facing_y": -930, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 270, + "poise": 203, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 4, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -117389,22 +83378,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 140, + "phase_ticks_remaining": 172, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 862 + "tick": 525 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 862 + "tick": 525 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "9b77489e20062bef8e98ea90f6d3cb2067d8a8bd44dd71c03334ef321fec235f", + "checksum": "5f1de9b1ebd1b970698f03732408884a43fd20b094971a8f6fcf644c5462bf16", "events": [], "fighters": [ { @@ -117421,29 +83430,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -659, - "get_up_count": 8, + "facing_x": -942, + "facing_y": -334, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -117458,11 +83468,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -194, - "y": -216 + "x": -365, + "y": -365 }, { "action": null, @@ -117478,38 +83488,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 915, - "facing_y": -404, - "get_up_count": 8, + "facing_x": 306, + "facing_y": -952, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 272, + "poise": 205, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 4, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -117523,22 +83534,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 139, + "phase_ticks_remaining": 171, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 863 + "tick": 526 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 863 + "tick": 526 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "61bf8711c62454b37d624bf70a06b80399214e7dcd6f1adaf5771382b8315bd3", + "checksum": "b2ae4c0664892cd70a8fb5945e182e465f9abedcafef0edb68c8a63838433339", "events": [], "fighters": [ { @@ -117555,29 +83586,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -756, - "facing_y": -659, - "get_up_count": 8, + "facing_x": -962, + "facing_y": -273, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -117592,11 +83624,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -198, - "y": -219 + "x": -365, + "y": -365 }, { "action": null, @@ -117612,38 +83644,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 896, - "facing_y": -443, - "get_up_count": 8, + "facing_x": 244, + "facing_y": -970, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 274, + "poise": 207, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 4, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -117657,22 +83690,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 138, + "phase_ticks_remaining": 170, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 864 + "tick": 527 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 864 + "tick": 527 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "9686a293d62c075bb0b7b33d5378cf568ba2e951c16669d2d0efc3d8bf0dbd98", + "checksum": "dcbdb64463bec93e4a1879bc3f1c11f6849800e6147fd06497647571e9f85a6c", "events": [], "fighters": [ { @@ -117689,29 +83742,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -755, - "facing_y": -660, - "get_up_count": 8, + "facing_x": -978, + "facing_y": -211, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -117726,11 +83780,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -202, - "y": -222 + "x": -365, + "y": -365 }, { "action": null, @@ -117746,38 +83800,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 876, - "facing_y": -482, - "get_up_count": 8, + "facing_x": 181, + "facing_y": -983, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 276, + "poise": 209, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 4, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -117791,22 +83846,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 137, + "phase_ticks_remaining": 169, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 865 + "tick": 528 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 865 + "tick": 528 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "04ef9e169496e2b34762db4e330fff61cb274778b1a897db09d8a719f49b29c8", + "checksum": "f2a9d1d25e1dfe53c11386ebd4e2acec7791fd5509699a14cb41e2438c1573ad", "events": [], "fighters": [ { @@ -117823,29 +83898,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -662, - "get_up_count": 8, + "facing_x": -989, + "facing_y": -148, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -117860,11 +83936,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -205, - "y": -226 + "x": -365, + "y": -365 }, { "action": null, @@ -117880,38 +83956,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 854, - "facing_y": -520, - "get_up_count": 8, + "facing_x": 118, + "facing_y": -993, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 278, + "poise": 211, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 4, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -117925,22 +84002,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 136, + "phase_ticks_remaining": 168, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 866 + "tick": 529 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 866 + "tick": 529 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "d89c7a5fb915b1967440070e8c158e6cc7bc78a9ff7da97ce2d52ef1a91b5efe", + "checksum": "12967f85af3c17a83ede806b30190c4440dfe97150cfc5d01a3040457b216ac9", "events": [], "fighters": [ { @@ -117957,29 +84054,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -758, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -996, + "facing_y": -84, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -117994,11 +84092,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -209, - "y": -229 + "x": -365, + "y": -365 }, { "action": null, @@ -118014,38 +84112,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 831, - "facing_y": -557, - "get_up_count": 8, + "facing_x": 54, + "facing_y": -999, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 280, + "poise": 213, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 4, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -118059,22 +84158,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 135, + "phase_ticks_remaining": 167, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 867 + "tick": 530 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 867 + "tick": 530 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "d92630b738680d4d13f93af49190e3bcbb692cd348c0b13c58523395dfaa0226", + "checksum": "94badc27ed1b20c240730797d6084739bb69f17d1240933d99eea24c841be87a", "events": [], "fighters": [ { @@ -118091,29 +84210,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -757, - "facing_y": -660, - "get_up_count": 8, + "facing_x": -1000, + "facing_y": -20, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -118128,11 +84248,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -213, - "y": -232 + "x": -365, + "y": -365 }, { "action": null, @@ -118148,38 +84268,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 806, - "facing_y": -592, - "get_up_count": 8, + "facing": -1, + "facing_x": -10, + "facing_y": -1000, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 282, + "poise": 215, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 4, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -118193,22 +84314,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 134, + "phase_ticks_remaining": 166, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 868 + "tick": 531 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 868 + "tick": 531 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "38aa24f80442a102e0e8a243f3dc851b4be6bdcdc997137ba2aaef24cec732ea", + "checksum": "83b4fd8197972475e23d7d1a5b3a364d486cc0f3e056831153f55c522c1038cb", "events": [], "fighters": [ { @@ -118225,29 +84366,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -756, - "facing_y": -661, - "get_up_count": 8, + "facing_x": -999, + "facing_y": 44, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -118262,145 +84404,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, - "warnings": 0, - "x": -217, - "y": -236 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 779, - "facing_y": -627, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 985, - "player_id": "two", - "poise": 284, - "queued_actions": 0, - "stamina": 985, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 365, - "y": 365 - } - ], - "phase": "rest", - "phase_ticks_remaining": 133, - "result": null, - "round_number": 1, - "tick": 869 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 869 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "ec5690cc28cbdb912c64918466551c84224f8b72cd765463c52a976c74d60eb5", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -755, - "facing_y": -658, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 984, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": -4, - "velocity_y": -3, "warnings": 0, - "x": -221, - "y": -239 + "x": -365, + "y": -365 }, { "action": null, @@ -118416,38 +84424,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 751, - "facing_y": -660, - "get_up_count": 8, + "facing": -1, + "facing_x": -74, + "facing_y": -997, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 286, + "poise": 217, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 4, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -118461,22 +84470,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 132, + "phase_ticks_remaining": 165, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 870 + "tick": 532 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 870 + "tick": 532 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "cdf5993e8eff031ba49aec909e32c7741ff4753e8e8eb621c6321c549fadaea1", + "checksum": "929a399463222ea60c0606a1d278c5ebf4c515eebf049039459fcc4adde17f81", "events": [], "fighters": [ { @@ -118493,29 +84522,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -659, - "get_up_count": 8, + "facing_x": -994, + "facing_y": 108, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -118530,11 +84560,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -224, - "y": -242 + "x": -365, + "y": -365 }, { "action": null, @@ -118550,38 +84580,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 722, - "facing_y": -692, - "get_up_count": 8, + "facing": -1, + "facing_x": -138, + "facing_y": -990, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 288, + "poise": 219, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 4, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -118595,22 +84626,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 131, + "phase_ticks_remaining": 164, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 871 + "tick": 533 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 871 + "tick": 533 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "c8fec68787f13d17ab0ca21e688df9c98b8935bedcaca501a4b38d976a016769", + "checksum": "8a521703440532405e93a844c5f71bf5fa9f234a99e7b8de2ccb0a62cc756c27", "events": [], "fighters": [ { @@ -118627,29 +84678,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -657, - "get_up_count": 8, + "facing_x": -985, + "facing_y": 171, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -118664,11 +84716,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -228, - "y": -245 + "x": -365, + "y": -365 }, { "action": null, @@ -118684,38 +84736,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 691, - "facing_y": -723, - "get_up_count": 8, + "facing": -1, + "facing_x": -201, + "facing_y": -980, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 290, + "poise": 221, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 4, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -118729,22 +84782,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 130, + "phase_ticks_remaining": 163, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 872 + "tick": 534 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 872 + "tick": 534 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "ac38417b257dce7b711df4fd27551e89812e2c732f82937494c14ca4c66090fc", + "checksum": "b7bd1509bcbb27a3aa3cf53436657baf44b6925ee88c475d906ecf15b56f9a17", "events": [], "fighters": [ { @@ -118761,29 +84834,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -752, - "facing_y": -659, - "get_up_count": 8, + "facing_x": -972, + "facing_y": 234, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -118798,11 +84872,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -232, - "y": -249 + "x": -365, + "y": -365 }, { "action": null, @@ -118818,38 +84892,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 659, - "facing_y": -752, - "get_up_count": 8, + "facing": -1, + "facing_x": -263, + "facing_y": -965, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 292, + "poise": 223, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 4, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -118863,22 +84938,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 129, + "phase_ticks_remaining": 162, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 873 + "tick": 535 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 873 + "tick": 535 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "17ba281aec09520d750d69aa02ae75886731aec9da79afcff58a20673d134e75", + "checksum": "c61d92e2e04a502f5b4e48f8ff3fbf0e73ce59395f2488a454dac250cf11686a", "events": [], "fighters": [ { @@ -118895,29 +84990,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -755, - "facing_y": -659, - "get_up_count": 8, + "facing_x": -955, + "facing_y": 296, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -118932,11 +85028,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -236, - "y": -252 + "x": -365, + "y": -365 }, { "action": null, @@ -118952,38 +85048,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 626, - "facing_y": -780, - "get_up_count": 8, + "facing": -1, + "facing_x": -324, + "facing_y": -946, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 294, + "poise": 225, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 4, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -118997,22 +85094,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 128, + "phase_ticks_remaining": 161, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 874 + "tick": 536 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 874 + "tick": 536 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "bd4ed3dfaa2e2f0e0a60d77c693c4188d834a1c63bb32bac9c605eaf67165de0", + "checksum": "f61e0fca47645ec7e58e2b9f0ccce5444494b8108292918789d924f0142ae429", "events": [], "fighters": [ { @@ -119029,29 +85146,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -660, - "get_up_count": 8, + "facing_x": -934, + "facing_y": 357, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -119066,11 +85184,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -239, - "y": -255 + "x": -365, + "y": -365 }, { "action": null, @@ -119086,38 +85204,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 591, - "facing_y": -806, - "get_up_count": 8, + "facing": -1, + "facing_x": -384, + "facing_y": -923, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 296, + "poise": 227, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 4, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -119131,22 +85250,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 127, + "phase_ticks_remaining": 160, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 875 + "tick": 537 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 875 + "tick": 537 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "dd095a2d10909f1ab89d7ffcee66f3ca895689af0bbe306a60b15d17769c1eef", + "checksum": "8d52a55d8c8bd0ee279733fedfb86bb6bb8d707dc9bf21737dd24b643a4513dd", "events": [], "fighters": [ { @@ -119163,29 +85302,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -909, + "facing_y": 416, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -119200,11 +85340,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -243, - "y": -259 + "x": -365, + "y": -365 }, { "action": null, @@ -119220,38 +85360,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 556, - "facing_y": -831, - "get_up_count": 8, + "facing": -1, + "facing_x": -442, + "facing_y": -897, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 298, + "poise": 229, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 4, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -119265,22 +85406,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 126, + "phase_ticks_remaining": 159, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 876 + "tick": 538 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 876 + "tick": 538 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "456069dcb998fa90c45fe772d885eeee10d3478ae5128fa12011f09cbae670ce", + "checksum": "d13fd31be830a37ee597259d6a30c41a3ce9ae6938833211a31003954ed9294f", "events": [], "fighters": [ { @@ -119297,29 +85458,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -757, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -881, + "facing_y": 473, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -119334,11 +85496,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -247, - "y": -262 + "x": -365, + "y": -365 }, { "action": null, @@ -119354,38 +85516,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 519, - "facing_y": -855, - "get_up_count": 8, + "facing": -1, + "facing_x": -498, + "facing_y": -867, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 300, + "poise": 231, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 4, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -119399,22 +85562,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 125, + "phase_ticks_remaining": 158, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 877 + "tick": 539 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 877 + "tick": 539 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "e108000c40bcdd73adf5b423ea5371e0bc112dfabebc32eecf0cee84d30c31c0", + "checksum": "215a471747aea44c270400fcf8fa9db8151d5cbb9beb9f419d6a043f5b0fe9f3", "events": [], "fighters": [ { @@ -119431,29 +85614,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -756, - "facing_y": -660, - "get_up_count": 8, + "facing_x": -849, + "facing_y": 528, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -119468,11 +85652,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -251, - "y": -265 + "x": -365, + "y": -365 }, { "action": null, @@ -119488,38 +85672,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 481, - "facing_y": -877, - "get_up_count": 8, + "facing": -1, + "facing_x": -553, + "facing_y": -834, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 302, + "poise": 233, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 2, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -119533,22 +85718,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 124, + "phase_ticks_remaining": 157, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 878 + "tick": 540 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 878 + "tick": 540 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "8a765c1533fa2652e054ff85fa70c6eb86b6519c02414d7274e9d8ab64a9e092", + "checksum": "b67a935635cc53e9e9dd7e8d26308a31ac9b432e6b7026c679f93e236fe3c75a", "events": [], "fighters": [ { @@ -119565,29 +85770,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -662, - "get_up_count": 8, + "facing_x": -814, + "facing_y": 581, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -119602,11 +85808,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -254, - "y": -269 + "x": -365, + "y": -365 }, { "action": null, @@ -119622,38 +85828,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 442, - "facing_y": -897, - "get_up_count": 8, + "facing": -1, + "facing_x": -605, + "facing_y": -796, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 304, + "poise": 235, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 2, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -119667,22 +85874,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 123, + "phase_ticks_remaining": 156, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 879 + "tick": 541 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 879 + "tick": 541 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "07be02978bb676422e0d3aa42805374d22d641b8e6ceb94d3a88b135391b5ba8", + "checksum": "f69d925e25f9f218b565815bbbc5503e2abee87926ed26fbfb7b59bf13551393", "events": [], "fighters": [ { @@ -119699,29 +85926,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -760, - "facing_y": -657, - "get_up_count": 8, + "facing_x": -775, + "facing_y": 632, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -119736,11 +85964,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -258, - "y": -272 + "x": -365, + "y": -365 }, { "action": null, @@ -119756,38 +85984,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 402, - "facing_y": -915, - "get_up_count": 8, + "facing": -1, + "facing_x": -655, + "facing_y": -756, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 306, + "poise": 237, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 2, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -119801,22 +86030,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 122, + "phase_ticks_remaining": 155, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 880 + "tick": 542 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 880 + "tick": 542 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "e892c9a24edafa19d5d3ba29531f1162fc031bff4122cab9c067e0e0973d2ccf", + "checksum": "a846e2809864dcb04e55114c98a4b38deab2b18c5398133ac6d1cc22fb9ad772", "events": [], "fighters": [ { @@ -119833,29 +86082,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -758, - "facing_y": -659, - "get_up_count": 8, + "facing_x": -733, + "facing_y": 680, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -119870,11 +86120,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -262, - "y": -275 + "x": -365, + "y": -365 }, { "action": null, @@ -119890,38 +86140,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 362, - "facing_y": -932, - "get_up_count": 8, + "facing": -1, + "facing_x": -702, + "facing_y": -712, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 308, + "poise": 239, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 2, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -119935,22 +86186,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 121, + "phase_ticks_remaining": 154, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 881 + "tick": 543 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 881 + "tick": 543 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "6cb370ef5652435d604187dd074e8af8a5a41598c53ef42389dcfc545fbacd0f", + "checksum": "f361e8fec9047c259a0f8137615b74350478aadd9f6b783e0e6fe75faf68fdb4", "events": [], "fighters": [ { @@ -119967,29 +86238,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -757, - "facing_y": -661, - "get_up_count": 8, + "facing_x": -688, + "facing_y": 726, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -120004,11 +86276,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -266, - "y": -278 + "x": -365, + "y": -365 }, { "action": null, @@ -120024,38 +86296,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 321, - "facing_y": -947, - "get_up_count": 8, + "facing": -1, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 310, + "poise": 241, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 2, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -120069,22 +86342,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 120, + "phase_ticks_remaining": 153, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 882 + "tick": 544 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 882 + "tick": 544 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "412b0fd440e0ad6c2084cc45fcaf01d200589270881e8fc8a65cc9b85e401f39", + "checksum": "00296fff63e0e6233f6d9783a5ac8e8acb0698c20c18870fdbf4c77daf75fd9c", "events": [], "fighters": [ { @@ -120101,29 +86394,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -755, - "facing_y": -664, - "get_up_count": 8, + "facing_x": -640, + "facing_y": 768, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -120138,11 +86432,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -270, - "y": -282 + "x": -365, + "y": -365 }, { "action": null, @@ -120158,38 +86452,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 279, - "facing_y": -960, - "get_up_count": 8, + "facing": -1, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 312, + "poise": 243, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 2, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -120203,22 +86498,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 119, + "phase_ticks_remaining": 152, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 883 + "tick": 545 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 883 + "tick": 545 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "94d58dfb979fbb89239e4dab320ab2c516e9abc3f01f8499804eaa1440f26ae0", + "checksum": "b190aa52585aa6dd4a0a271ece379f351f74ceb0cea811e91cec1197dca025e9", "events": [], "fighters": [ { @@ -120235,29 +86550,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -658, - "get_up_count": 8, + "facing_x": -590, + "facing_y": 808, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -120272,11 +86588,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -273, - "y": -285 + "x": -365, + "y": -365 }, { "action": null, @@ -120292,38 +86608,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 237, - "facing_y": -972, - "get_up_count": 8, + "facing": -1, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 314, + "poise": 245, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 2, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -120337,22 +86654,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 118, + "phase_ticks_remaining": 151, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 884 + "tick": 546 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 884 + "tick": 546 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "190b60f63966cb5c694c2473181ccc7b0639864769bab7864a28e7621dafd8a8", + "checksum": "01d3a3bf192b5814b3f037c1f3248fd15c3f9cef1a0043088607243775409607", "events": [], "fighters": [ { @@ -120369,29 +86706,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -760, - "facing_y": -661, - "get_up_count": 8, + "facing_x": -537, + "facing_y": 844, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -120406,11 +86744,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -277, - "y": -288 + "x": -365, + "y": -365 }, { "action": null, @@ -120426,38 +86764,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 194, - "facing_y": -981, - "get_up_count": 8, + "facing": -1, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 316, + "poise": 247, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 2, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -120471,22 +86810,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 117, + "phase_ticks_remaining": 150, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 885 + "tick": 547 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 885 + "tick": 547 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "ec976ec45c7da86b91fc2f6d0e71ac741a1a705b2f04a9e231d5c29ed91da18b", + "checksum": "2c2c8220acfbef9129b5f77cb14922dac9c8436bd28a7b48527382a5d82ab9b2", "events": [], "fighters": [ { @@ -120503,29 +86862,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -758, - "facing_y": -663, - "get_up_count": 8, + "facing_x": -482, + "facing_y": 876, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -120540,11 +86900,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -281, - "y": -292 + "x": -365, + "y": -365 }, { "action": null, @@ -120560,38 +86920,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 151, - "facing_y": -989, - "get_up_count": 8, + "facing": -1, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 318, + "poise": 249, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 2, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -120605,22 +86966,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 116, + "phase_ticks_remaining": 149, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 886 + "tick": 548 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 886 + "tick": 548 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "37f21ed6f3e40ca112d8c110aba471ecaf1d6d3480e52123b62e44f4d7a58530", + "checksum": "7b572104b00f08383bc713ddf1a92ea1015d0e67d7e6a110de7d3d0ca7465036", "events": [], "fighters": [ { @@ -120637,29 +87018,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -756, - "facing_y": -657, - "get_up_count": 8, + "facing_x": -425, + "facing_y": 905, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -120674,11 +87056,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -285, - "y": -295 + "x": -365, + "y": -365 }, { "action": null, @@ -120694,38 +87076,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 108, - "facing_y": -994, - "get_up_count": 8, + "facing": -1, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 320, + "poise": 251, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 2, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -120739,22 +87122,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 115, + "phase_ticks_remaining": 148, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 887 + "tick": 549 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 887 + "tick": 549 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "f36e38e4557f7a99f2b8b1a3264f96c052dcdf3889b30d753730921417f6c06c", + "checksum": "2e107a4395445442d15a9341f12ac1079bb5cbfdd5d48bd22f943d82eb5805bd", "events": [], "fighters": [ { @@ -120771,29 +87174,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -754, - "facing_y": -660, - "get_up_count": 8, + "facing_x": -366, + "facing_y": 930, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -120808,11 +87212,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -289, - "y": -298 + "x": -365, + "y": -365 }, { "action": null, @@ -120828,38 +87232,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 65, - "facing_y": -998, - "get_up_count": 8, + "facing": -1, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 322, + "poise": 253, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 2, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -120873,22 +87278,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 114, + "phase_ticks_remaining": 147, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 888 + "tick": 550 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 888 + "tick": 550 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "fed9788c092ebe428a29aad7a0dfe34236d862e3f97cd46622b6975d1af7aaf5", + "checksum": "d7a8bc1a489e73fc477365f5171974193af7cd402149114933fc778f7997af55", "events": [], "fighters": [ { @@ -120905,29 +87330,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -752, - "facing_y": -663, - "get_up_count": 8, + "facing_x": -306, + "facing_y": 952, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -120942,11 +87368,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -292, - "y": -302 + "x": -365, + "y": -365 }, { "action": null, @@ -120962,38 +87388,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", - "facing": 1, - "facing_x": 21, - "facing_y": -1000, - "get_up_count": 8, + "facing": -1, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 324, + "poise": 255, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 2, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -121007,22 +87434,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 113, + "phase_ticks_remaining": 146, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 889 + "tick": 551 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 889 + "tick": 551 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "66f51632bfc1f59989241a9ed14f6cf29c5ec4ece132ae96cc9d76f7f7f11ee5", + "checksum": "6fdf5cc6cde413228cfe7562318e02cade954bdf92f915f9cc2a4f00083a9437", "events": [], "fighters": [ { @@ -121039,29 +87486,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -760, - "facing_y": -656, - "get_up_count": 8, + "facing_x": -244, + "facing_y": 970, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -121076,11 +87524,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -296, - "y": -305 + "x": -365, + "y": -365 }, { "action": null, @@ -121096,38 +87544,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -23, - "facing_y": -1000, - "get_up_count": 8, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 326, + "poise": 257, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 2, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -121141,22 +87590,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 112, + "phase_ticks_remaining": 145, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 890 + "tick": 552 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 890 + "tick": 552 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "31d1a5b3fd1fa93e96e4142d09465d905eb6d58522203c5b769c63673d95b2d5", + "checksum": "2da8853c8d6e33e458bfd3c03b4fce6c1f5e78740d4424d649de87ca1c506985", "events": [], "fighters": [ { @@ -121173,29 +87642,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -758, - "facing_y": -659, - "get_up_count": 8, + "facing_x": -181, + "facing_y": 983, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -121210,11 +87680,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -300, - "y": -308 + "x": -365, + "y": -365 }, { "action": null, @@ -121230,38 +87700,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -67, - "facing_y": -998, - "get_up_count": 8, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 328, + "poise": 259, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 2, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -121275,22 +87746,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 111, + "phase_ticks_remaining": 144, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 891 + "tick": 553 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 891 + "tick": 553 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "b8fcbf4aa69842c2d0178bc28f2691478e2bd5b00ebc0406974d97716cec05fd", + "checksum": "02db4b5f3b5785f5441b1f6c65e7c75d757608f0ec537aa2a114011d6c334d09", "events": [], "fighters": [ { @@ -121307,29 +87798,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -755, - "facing_y": -662, - "get_up_count": 8, + "facing_x": -118, + "facing_y": 993, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -121344,11 +87836,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -304, - "y": -311 + "x": -365, + "y": -365 }, { "action": null, @@ -121364,38 +87856,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -110, - "facing_y": -994, - "get_up_count": 8, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 330, + "poise": 261, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 2, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -121409,22 +87902,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 110, + "phase_ticks_remaining": 143, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 892 + "tick": 554 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 892 + "tick": 554 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "267ddab7a486d86c80e8e2457fb491dccbd1312e814ed8f7438e77ef82d1d0da", + "checksum": "8e43ca85790125bd35e008c09901d589983efbda1fd506fa6dbef8382d961fe0", "events": [], "fighters": [ { @@ -121441,29 +87954,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -753, - "facing_y": -666, - "get_up_count": 8, + "facing_x": -54, + "facing_y": 999, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -121478,11 +87992,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -307, - "y": -315 + "x": -365, + "y": -365 }, { "action": null, @@ -121498,38 +88012,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -153, - "facing_y": -988, - "get_up_count": 8, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 332, + "poise": 263, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 2, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -121543,22 +88058,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 109, + "phase_ticks_remaining": 142, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 893 + "tick": 555 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 893 + "tick": 555 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "0530ee889cfb1378de58a722be9cf0ef348d8b050e34a8bfad9d344e40595442", + "checksum": "5f4e6bc8f00c2c18aa992e11f68560be0a6afc77c760e527352a7eb8b9bc2563", "events": [], "fighters": [ { @@ -121575,29 +88110,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -763, - "facing_y": -657, - "get_up_count": 8, + "facing": 1, + "facing_x": 10, + "facing_y": 1000, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -121612,11 +88148,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -311, - "y": -318 + "x": -365, + "y": -365 }, { "action": null, @@ -121632,38 +88168,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -196, - "facing_y": -981, - "get_up_count": 8, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 334, + "poise": 265, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 2, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -121677,22 +88214,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 108, + "phase_ticks_remaining": 141, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 894 + "tick": 556 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 894 + "tick": 556 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "f0e767f54fe1cd1e1e77f1720d4c9456b160f33410663de6d60ba919ac48d4d3", + "checksum": "e9c7e44696c5640b655718451302b926a79259407a6e15cbf1cc51c00c37b2ce", "events": [], "fighters": [ { @@ -121709,29 +88266,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -760, - "facing_y": -661, - "get_up_count": 8, + "facing": 1, + "facing_x": 74, + "facing_y": 997, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -121746,11 +88304,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -315, - "y": -321 + "x": -365, + "y": -365 }, { "action": null, @@ -121766,38 +88324,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -239, - "facing_y": -971, - "get_up_count": 8, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 336, + "poise": 267, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 2, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -121811,22 +88370,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 107, + "phase_ticks_remaining": 140, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 895 + "tick": 557 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 895 + "tick": 557 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "ffbf312801f51e2f244afbd69b34557b34328c5d59bfa9932270e867d39433ae", + "checksum": "2b7a41db85e5186fe086969555b7f672d8530a4c2f4ff74c432e9c098448a94b", "events": [], "fighters": [ { @@ -121843,29 +88422,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -757, - "facing_y": -666, - "get_up_count": 8, + "facing": 1, + "facing_x": 138, + "facing_y": 990, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -121880,145 +88460,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, - "warnings": 0, - "x": -319, - "y": -325 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -281, - "facing_y": -960, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 985, - "player_id": "two", - "poise": 338, - "queued_actions": 0, - "stamina": 985, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 365, - "y": 365 - } - ], - "phase": "rest", - "phase_ticks_remaining": 106, - "result": null, - "round_number": 1, - "tick": 896 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 896 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "bbb6d335940231fcf2d903746f9ce8e771b6a2236a016a5e6771ce6954793de0", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -766, - "facing_y": -666, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 984, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": -4, - "velocity_y": -3, "warnings": 0, - "x": -323, - "y": -328 + "x": -365, + "y": -365 }, { "action": null, @@ -122034,38 +88480,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -323, - "facing_y": -947, - "get_up_count": 8, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 340, + "poise": 269, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 2, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -122079,22 +88526,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 105, + "phase_ticks_remaining": 139, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 897 + "tick": 558 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 897 + "tick": 558 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "e340cbf011585b6f504f6bd42a04e8ee959aba4aef5387a145f595b3e7ac8978", + "checksum": "c0820f05034a98448837af214dc5d523ceace1e0333d30713a22afd3400238fd", "events": [], "fighters": [ { @@ -122111,29 +88578,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -763, - "facing_y": -672, - "get_up_count": 8, + "facing": 1, + "facing_x": 201, + "facing_y": 980, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -122148,11 +88616,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -326, - "y": -331 + "x": -365, + "y": -365 }, { "action": null, @@ -122168,38 +88636,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -364, - "facing_y": -931, - "get_up_count": 8, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 342, + "poise": 271, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 2, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -122213,22 +88682,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 104, + "phase_ticks_remaining": 138, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 898 + "tick": 559 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 898 + "tick": 559 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "2113039d60f879e496789cccb23729c2b7a182a80af02cea9368a9522bafb655", + "checksum": "81beb2e06a21eb85d7d6b9592021919ebea9ca2044aabf67db8242aa4dd1013e", "events": [], "fighters": [ { @@ -122245,29 +88734,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -764, - "facing_y": -666, - "get_up_count": 8, + "facing": 1, + "facing_x": 263, + "facing_y": 965, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -122282,11 +88772,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -330, - "y": -335 + "x": -365, + "y": -365 }, { "action": null, @@ -122302,38 +88792,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -404, - "facing_y": -915, - "get_up_count": 8, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 344, + "poise": 273, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 2, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -122347,22 +88838,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 103, + "phase_ticks_remaining": 137, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 899 + "tick": 560 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 899 + "tick": 560 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "577a020ba566315bf1c7152fee6b25128fc1349e0f97ce9b30c641b6f15da516", + "checksum": "64ec3c25117f64a2e6abb9a2a4d88b8215458d926afbe58ad79bc2a04e633b6b", "events": [], "fighters": [ { @@ -122379,29 +88890,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -760, - "facing_y": -652, - "get_up_count": 8, + "facing": 1, + "facing_x": 324, + "facing_y": 946, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -122416,11 +88928,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -334, - "y": -338 + "x": -365, + "y": -365 }, { "action": null, @@ -122436,38 +88948,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -443, - "facing_y": -896, - "get_up_count": 8, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 346, + "poise": 275, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 2, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -122481,22 +88994,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 102, + "phase_ticks_remaining": 136, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 900 + "tick": 561 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 900 + "tick": 561 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "cb9585718f9735951793f4de21b21902a5628f66403dfe4c2c763987cd0f3814", + "checksum": "79bc7f2aa17457ed703a3f12b86f4b5c965dbbc3a2eb3e5e9c7c4dbe89560319", "events": [], "fighters": [ { @@ -122513,29 +89046,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -756, - "facing_y": -658, - "get_up_count": 8, + "facing": 1, + "facing_x": 384, + "facing_y": 923, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -122550,11 +89084,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -338, - "y": -341 + "x": -365, + "y": -365 }, { "action": null, @@ -122570,38 +89104,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -482, - "facing_y": -876, - "get_up_count": 8, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 348, + "poise": 277, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 2, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -122615,22 +89150,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 101, + "phase_ticks_remaining": 135, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 901 + "tick": 562 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 901 + "tick": 562 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "ea2a70aae6c3ade4286c854a69142de016a5d2edd1bdfe63fbf0d9ff21fabbce", + "checksum": "4493016e7344a570f31274f88b7875ada4003014c0f9c0c6a4631630b2831f5b", "events": [], "fighters": [ { @@ -122647,29 +89202,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -750, - "facing_y": -666, - "get_up_count": 8, + "facing": 1, + "facing_x": 442, + "facing_y": 897, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -122684,11 +89240,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -342, - "y": -345 + "x": -365, + "y": -365 }, { "action": null, @@ -122704,38 +89260,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -520, - "facing_y": -854, - "get_up_count": 8, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 350, + "poise": 279, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 2, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -122749,22 +89306,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 100, + "phase_ticks_remaining": 134, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 902 + "tick": 563 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 902 + "tick": 563 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "7d0f3a5d731d47ef9c124115cc2981f6033b464b52283e09e18aba47adac2933", + "checksum": "d025a7a7fdc88f1ccf83b4828a2b63b17505aeb4023389909b4abd42b610878f", "events": [], "fighters": [ { @@ -122781,29 +89358,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -766, - "facing_y": -666, - "get_up_count": 8, + "facing": 1, + "facing_x": 498, + "facing_y": 867, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -122818,145 +89396,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, - "warnings": 0, - "x": -345, - "y": -348 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -557, - "facing_y": -831, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 985, - "player_id": "two", - "poise": 352, - "queued_actions": 0, - "stamina": 985, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, "velocity_x": 0, "velocity_y": 0, - "warnings": 1, - "x": 365, - "y": 365 - } - ], - "phase": "rest", - "phase_ticks_remaining": 99, - "result": null, - "round_number": 1, - "tick": 903 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 903 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "5c84dea6e76703142ab8cd7947e6b8d2b378f3814e662a240c057c1cd1ccfbc1", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -769, - "facing_y": -653, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 984, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": -4, - "velocity_y": -3, "warnings": 0, - "x": -349, - "y": -351 + "x": -365, + "y": -365 }, { "action": null, @@ -122972,38 +89416,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -592, - "facing_y": -806, - "get_up_count": 8, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 354, + "poise": 281, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 2, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -123017,22 +89462,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 98, + "phase_ticks_remaining": 133, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 904 + "tick": 564 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 904 + "tick": 564 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "ccf7d60e13eb8fb9a9b7acff17b27a466c62566ef0495bc0599d42ae7c3c8160", + "checksum": "b3b449d18f677b641ecdcfd3e51591b00aeb1ea5e1583074d36970d809eef40b", "events": [], "fighters": [ { @@ -123049,29 +89514,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -761, - "facing_y": -666, - "get_up_count": 8, + "facing": 1, + "facing_x": 553, + "facing_y": 834, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -123086,11 +89552,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -353, - "y": -355 + "x": -365, + "y": -365 }, { "action": null, @@ -123106,38 +89572,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -627, - "facing_y": -779, - "get_up_count": 8, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 356, + "poise": 283, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 2, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -123151,22 +89618,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 97, + "phase_ticks_remaining": 132, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 905 + "tick": 565 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 905 + "tick": 565 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "24dc7468f7a0d3ca138083ad3ac19e765ef84623414fc351196be0564e22a5de", + "checksum": "d1bbc67708c68d716ff69dd4ffe474e264619c3c23ca54f9ce39847c607fa28e", "events": [], "fighters": [ { @@ -123183,29 +89670,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -800, - "facing_y": -666, - "get_up_count": 8, + "facing": 1, + "facing_x": 605, + "facing_y": 796, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -123220,11 +89708,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -357, - "y": -358 + "x": -365, + "y": -365 }, { "action": null, @@ -123240,38 +89728,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -660, - "facing_y": -751, - "get_up_count": 8, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 358, + "poise": 285, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 2, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -123285,22 +89774,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 96, + "phase_ticks_remaining": 131, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 906 + "tick": 566 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 906 + "tick": 566 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "c45123c93c80f22b46684531f5f56581e68006a7db0eb84b2c75323be3feaa9f", + "checksum": "e3cc048704429d55112b5a354ebe6b9f4c02572df4cc0e5c4a61f28714b583c1", "events": [], "fighters": [ { @@ -123317,29 +89826,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -800, - "facing_y": -700, - "get_up_count": 8, + "facing": 1, + "facing_x": 655, + "facing_y": 756, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -123354,11 +89864,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -361, - "y": -361 + "x": -365, + "y": -365 }, { "action": null, @@ -123374,38 +89884,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -692, - "facing_y": -722, - "get_up_count": 8, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 360, + "poise": 287, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 2, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -123419,22 +89930,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 95, + "phase_ticks_remaining": 130, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 907 + "tick": 567 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 907 + "tick": 567 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "71ee290eb4e3baa63735d858a8e05fa09380f2ec739a28fd9e47deec6fb7682d", + "checksum": "90bccfe865b6daa1985ffd74a19b357b3c8bd7e0feeb24fe167798fde0a6fdaf", "events": [], "fighters": [ { @@ -123451,29 +89982,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -781, - "facing_y": -625, - "get_up_count": 8, + "facing": 1, + "facing_x": 702, + "facing_y": 712, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -123508,38 +90040,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 362, + "poise": 289, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 2, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -123553,22 +90086,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 94, + "phase_ticks_remaining": 129, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 908 + "tick": 568 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 908 + "tick": 568 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "27ac25d2b1e090f50641c0ac123f1d38c8c666e5f15415c11d898863059737ca", + "checksum": "afd0bb23771e6230a841101d41ab8308e5ed03650738824e857c6d66df9ffc41", "events": [], "fighters": [ { @@ -123585,29 +90138,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -807, - "facing_y": -590, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -123642,38 +90196,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 364, + "poise": 291, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", "taunt_ticks": 0, "trauma": { - "bleeding": 0, + "bleeding": 2, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -123687,22 +90242,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 93, + "phase_ticks_remaining": 128, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 909 + "tick": 569 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 909 + "tick": 569 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "e510ac8d907386c9a58860ba4b71ed874d2cbb20cdd1280749abc77f272fcf7d", + "checksum": "6697fedba5b08af824bfb55e16d6f053b39843a91984a649ba4260716582c82e", "events": [], "fighters": [ { @@ -123719,29 +90294,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -832, - "facing_y": -554, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -123776,29 +90352,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 366, + "poise": 293, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -123806,8 +90383,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -123821,22 +90398,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 92, + "phase_ticks_remaining": 127, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 910 + "tick": 570 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 910 + "tick": 570 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "e250a62f60ebd74b064a91e3928ac11274a71c22697e42e681a4070f4db7dadd", + "checksum": "60e380eb769be286dd393b108a3d41ca97b91bee4906fdd167bc78edbf4ac433", "events": [], "fighters": [ { @@ -123853,29 +90450,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -856, - "facing_y": -517, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -123910,29 +90508,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 368, + "poise": 295, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -123940,8 +90539,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -123955,22 +90554,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 91, + "phase_ticks_remaining": 126, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 911 + "tick": 571 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 911 + "tick": 571 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "bd87ad1b25e7c30ad74798061914922b5a4c8ada55fc4c71f826603d8713768d", + "checksum": "1b3fa17501f354d7bc47a2a71739a651b157a2521c1fb6329b239bcce134b842", "events": [], "fighters": [ { @@ -123987,29 +90606,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -878, - "facing_y": -479, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -124044,29 +90664,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 370, + "poise": 297, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -124074,8 +90695,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -124089,22 +90710,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 90, + "phase_ticks_remaining": 125, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 912 + "tick": 572 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 912 + "tick": 572 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "7f63a384205404b3f646147574913d4b7e85862ebea1256efc29240304ba8821", + "checksum": "5e612bc65a13ba38cfbbbee5903217bce94a13862586b57f678605cbac29d638", "events": [], "fighters": [ { @@ -124121,29 +90762,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -898, - "facing_y": -440, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -124178,29 +90820,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 372, + "poise": 299, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -124208,8 +90851,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -124223,22 +90866,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 89, + "phase_ticks_remaining": 124, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 913 + "tick": 573 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 913 + "tick": 573 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "a6872be76800a3aa2c2c51ebfa1c362f0b52e98ef4aa281cf2cd769a4f990a59", + "checksum": "3a1e4eec4f6d39b62ffc8206a2a1d95ec161c96f7e07ef3130875e57f9ffcaa9", "events": [], "fighters": [ { @@ -124255,29 +90918,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -916, - "facing_y": -400, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -124312,29 +90976,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 374, + "poise": 301, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -124342,8 +91007,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -124357,22 +91022,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 88, + "phase_ticks_remaining": 123, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 914 + "tick": 574 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 914 + "tick": 574 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "c402be80c15d7f416ac2f866211904d8e4ace241d04d61ba1b8577a24719ba1e", + "checksum": "df98c89c0b71e941442322d3818f63980625dd638db8ff4e1e50ab2cddb59938", "events": [], "fighters": [ { @@ -124389,29 +91074,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -933, - "facing_y": -360, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -124446,29 +91132,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 376, + "poise": 303, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -124476,8 +91163,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -124491,22 +91178,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 87, + "phase_ticks_remaining": 122, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 915 + "tick": 575 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 915 + "tick": 575 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "6c55f9c0f9136b1e7307e892d4e9edd09d6f3d11b26b87f4fbf8fd0ac8005c6e", + "checksum": "13db585ec32eb6c57bf1dfa45524cf99f1f20aa23362a2b7ce055b9c55f68724", "events": [], "fighters": [ { @@ -124523,29 +91230,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -948, - "facing_y": -319, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -124580,29 +91288,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 378, + "poise": 305, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -124610,8 +91319,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -124625,22 +91334,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 86, + "phase_ticks_remaining": 121, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 916 + "tick": 576 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 916 + "tick": 576 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "b31b247c6790f8014fcd00da7df178a0aee85d020447966efd20fa8f58376283", + "checksum": "c7ea4f66edd34c723e4e0e99f7b4630931fee167de13ac180bb836e4c70a7316", "events": [], "fighters": [ { @@ -124657,29 +91386,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -961, - "facing_y": -277, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -124714,29 +91444,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 380, + "poise": 307, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -124744,8 +91475,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -124759,22 +91490,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 85, + "phase_ticks_remaining": 120, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 917 + "tick": 577 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 917 + "tick": 577 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "fc6a9691d6c848aecf7656cd16437a96ca44cfaa779c911b3e72bb10a96deb89", + "checksum": "db6cc62a0466bc837fca52b4dbbec0014bb8c04d81bb26f4758bacdd49162283", "events": [], "fighters": [ { @@ -124791,29 +91542,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -972, - "facing_y": -235, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -124848,29 +91600,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 382, + "poise": 309, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -124878,8 +91631,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -124893,22 +91646,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 84, + "phase_ticks_remaining": 119, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 918 + "tick": 578 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 918 + "tick": 578 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "842169ec03f06a8ed15cf392ee2a0f0d55d5bf9b921df9079324a4332972107d", + "checksum": "cac175a03615d1c9efe47ac80484c18ad273c7cedfcc8e2fda642694d009401e", "events": [], "fighters": [ { @@ -124925,29 +91698,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -981, - "facing_y": -192, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -124982,29 +91756,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 384, + "poise": 311, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -125012,8 +91787,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -125027,22 +91802,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 83, + "phase_ticks_remaining": 118, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 919 + "tick": 579 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 919 + "tick": 579 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "6ecc4647d72f06f992567bf608306657055bc040e2769b5042a7f8836efb618b", + "checksum": "3175d9f1b385ff3b9466d150d956bd328f66a0059368e84d716b1668ca2f9740", "events": [], "fighters": [ { @@ -125059,29 +91854,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -989, - "facing_y": -149, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -125116,29 +91912,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 386, + "poise": 313, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -125146,8 +91943,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -125161,22 +91958,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 82, + "phase_ticks_remaining": 117, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 920 + "tick": 580 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 920 + "tick": 580 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "a41d1f8c1783cabba8f93d27dcb40f0843e558bd4deace7d9f6c11323550dd23", + "checksum": "cef9051861383860e75797dce04739828b9266df1cdeb730db18abefc6f42b46", "events": [], "fighters": [ { @@ -125193,29 +92010,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -994, - "facing_y": -106, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -125250,29 +92068,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 388, + "poise": 315, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -125280,8 +92099,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -125295,22 +92114,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 81, + "phase_ticks_remaining": 116, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 921 + "tick": 581 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 921 + "tick": 581 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "198bd2092aaa90b8ea462b4c5b39824ab5d9781ec0b1da42f53a0e64c46e4942", + "checksum": "9fc6c721cd20f69688f47465758cf0e69e0eb6f3032a3a59e5daa47948389105", "events": [], "fighters": [ { @@ -125327,29 +92166,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -998, - "facing_y": -63, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -125384,29 +92224,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 390, + "poise": 317, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -125414,8 +92255,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -125429,22 +92270,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 80, + "phase_ticks_remaining": 115, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 922 + "tick": 582 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 922 + "tick": 582 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "99d46912b54626f81fc640be58a08b6e3cf25b88e0f3c3c34f2df48be5015ebe", + "checksum": "a8a2f8f730b3eb90ea7c3268f2d80a4e3f0dc620648f952ea3d3571a2d2b0f9b", "events": [], "fighters": [ { @@ -125461,29 +92322,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": -19, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -125518,29 +92380,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 392, + "poise": 319, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -125548,8 +92411,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -125563,22 +92426,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 79, + "phase_ticks_remaining": 114, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 923 + "tick": 583 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 923 + "tick": 583 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "0b2a369605ed0a77af54531567753dad820bda55068771d0a5e28a56cba21943", + "checksum": "7e6347acb2bcb8310e1320b1b7bd1bf477d0b091356cce1bc1b6c2bc498e1558", "events": [], "fighters": [ { @@ -125595,29 +92478,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -1000, - "facing_y": 25, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -125652,29 +92536,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 394, + "poise": 321, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -125682,8 +92567,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -125697,22 +92582,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 78, + "phase_ticks_remaining": 113, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 924 + "tick": 584 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 924 + "tick": 584 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "11d0b7a9f37d9ed797509cefc90e00c075e7c64d6f7de136361d045e0bc63bd7", + "checksum": "2afbcefa7585137266682f992e7e4763430a478b07f343b2d82bea1b9a37d6ae", "events": [], "fighters": [ { @@ -125729,29 +92634,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -998, - "facing_y": 69, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -125786,29 +92692,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 396, + "poise": 323, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -125816,8 +92723,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -125831,22 +92738,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 77, + "phase_ticks_remaining": 112, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 925 + "tick": 585 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 925 + "tick": 585 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "32ef1c094c1c3592aeb11b9c1ba72e761da27a7818e2f078de4de67fc3e89539", + "checksum": "2de38da5e82354a9cdbb07c93e7603f3ce757cb884d94f012bfa4d7c0b5f4a7d", "events": [], "fighters": [ { @@ -125863,29 +92790,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -994, - "facing_y": 112, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -125920,29 +92848,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 398, + "poise": 325, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -125950,8 +92879,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -125965,22 +92894,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 76, + "phase_ticks_remaining": 111, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 926 + "tick": 586 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 926 + "tick": 586 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "f0874f6fece61dd74cc73ea1e60277b1d4853bed216290a6dc59e4915149c1ef", + "checksum": "0bbb142444b2518c981996aaef8d5908c3ad09e9c35c741d51afa6b6c3b8be9b", "events": [], "fighters": [ { @@ -125997,29 +92946,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -988, - "facing_y": 155, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -126054,29 +93004,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 400, + "poise": 327, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -126084,8 +93035,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -126099,22 +93050,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 75, + "phase_ticks_remaining": 110, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 927 + "tick": 587 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 927 + "tick": 587 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "6bc8dc92a3403d23dbdcf95ed021ca04bc9a42746cf733de081f0c8040000961", + "checksum": "48d0eb1e3f79e7952017643428dcd32ce9d1436d300f28e8d8536c8ed60c7009", "events": [], "fighters": [ { @@ -126131,29 +93102,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -980, - "facing_y": 198, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -126188,29 +93160,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 402, + "poise": 329, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -126218,8 +93191,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -126233,22 +93206,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 74, + "phase_ticks_remaining": 109, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 928 + "tick": 588 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 928 + "tick": 588 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "4cfaa9bd60716d43e847a33fafb8b69c8f45900ae3936cb4564f8250ae665bab", + "checksum": "4baabdcfa091235c2ae1c902f1df3d8ba8b2f008baa2f3f6615645bb93931320", "events": [], "fighters": [ { @@ -126265,29 +93258,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -971, - "facing_y": 241, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -126322,29 +93316,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 404, + "poise": 331, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -126352,8 +93347,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -126367,22 +93362,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 73, + "phase_ticks_remaining": 108, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 929 + "tick": 589 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 929 + "tick": 589 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "5f0c64c462a1fe1d7e8204e600835ba4ef55a5112308e6574a060424470b1888", + "checksum": "f7628be12d6d2cfd2a52b64a7d1ec7442f2da434586f2d7d7379eb6e94a972be", "events": [], "fighters": [ { @@ -126399,29 +93414,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -959, - "facing_y": 283, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -126456,29 +93472,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 406, + "poise": 333, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -126486,8 +93503,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -126501,22 +93518,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 72, + "phase_ticks_remaining": 107, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 930 + "tick": 590 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 930 + "tick": 590 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "68dbfe09d21c08e9258c925a8b152cf5ee6c2a20c9d061fbcf2a81154bdfa928", + "checksum": "a524c08571877cba3c9cf11e754d1d9cb1fc7684bfb99a8e876eb599cbfcb641", "events": [], "fighters": [ { @@ -126533,29 +93570,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -946, - "facing_y": 325, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -126590,29 +93628,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 408, + "poise": 335, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -126620,8 +93659,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -126635,22 +93674,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 71, + "phase_ticks_remaining": 106, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 931 + "tick": 591 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 931 + "tick": 591 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "dc0dbe058f42331874992104ff481e7a656740dfe26a1ef1d7bd810697b659d3", + "checksum": "95cbd9a5193fb9e1078b1e81ab8948368a6dfae66bd7dff0c63ea32b48084f83", "events": [], "fighters": [ { @@ -126667,29 +93726,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -931, - "facing_y": 366, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -126724,29 +93784,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 410, + "poise": 337, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -126754,8 +93815,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -126769,22 +93830,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 70, + "phase_ticks_remaining": 105, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 932 + "tick": 592 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 932 + "tick": 592 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "1661e9bb575502ec880d5c27853784f19f7b33570b87e352f11d54153dd5ca2b", + "checksum": "de4dad34d4ab34d877138def1c207dc16001dac75fe95488124d00e351b89302", "events": [], "fighters": [ { @@ -126801,29 +93882,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -914, - "facing_y": 406, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -126858,29 +93940,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 412, + "poise": 339, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -126888,8 +93971,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -126903,22 +93986,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 69, + "phase_ticks_remaining": 104, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 933 + "tick": 593 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 933 + "tick": 593 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "713f4945f63aa21e5a34bd8c43d855a4ca59577f078f1ba641765edca3ff8ce4", + "checksum": "e768dcb2d0445654cc839d2c7eb6b19629e3e1bcc875187cd09f8c90e0c4fe02", "events": [], "fighters": [ { @@ -126935,29 +94038,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -895, - "facing_y": 445, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -126992,29 +94096,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 414, + "poise": 341, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -127022,8 +94127,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -127037,22 +94142,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 68, + "phase_ticks_remaining": 103, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 934 + "tick": 594 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 934 + "tick": 594 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "9dfbf1dc2d101b3b1c97a7847df73fc31c50ba39e4dfd12f2f3f3d96c1d97c01", + "checksum": "baa07c85033bcf9c3948102a0b262cf8a230db6532f5e0caa44b5e07ebca9dad", "events": [], "fighters": [ { @@ -127069,29 +94194,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -875, - "facing_y": 484, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -127126,29 +94252,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 416, + "poise": 343, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -127156,8 +94283,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -127171,22 +94298,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 67, + "phase_ticks_remaining": 102, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 935 + "tick": 595 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 935 + "tick": 595 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "3c06a6d88acd58070bd9578f45906c0e027e17f4e3392170b8b3d58901cbda79", + "checksum": "0694205e7a13325472bf0fc50dbe2e66a777da4fa08efd4328b0046ec37c9001", "events": [], "fighters": [ { @@ -127203,29 +94350,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -853, - "facing_y": 522, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -127260,29 +94408,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 418, + "poise": 345, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -127290,8 +94439,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -127305,22 +94454,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 66, + "phase_ticks_remaining": 101, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 936 + "tick": 596 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 936 + "tick": 596 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "e4f71bfd182143fb6613b36613a7e8cbcf5231499e802b6ef6f3587460f6d005", + "checksum": "fa5fbb1252f9f3f66fa31f1c6180d3901922874d7b6667fe27af8ade32390916", "events": [], "fighters": [ { @@ -127337,29 +94506,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -829, - "facing_y": 559, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -127394,29 +94564,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 420, + "poise": 347, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -127424,8 +94595,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -127439,22 +94610,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 65, + "phase_ticks_remaining": 100, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 937 + "tick": 597 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 937 + "tick": 597 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "2abe4cdb6d45b8247bcc641cf2294936ce512742419e8754a37b9733f246f3b5", + "checksum": "bdecf478f7300ea9d2372a8f5462af8178bdc77c5b661b3ed6b2d5352ccd076b", "events": [], "fighters": [ { @@ -127471,29 +94662,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -804, - "facing_y": 595, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -127528,29 +94720,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 422, + "poise": 349, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -127558,8 +94751,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -127573,22 +94766,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 64, + "phase_ticks_remaining": 99, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 938 + "tick": 598 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 938 + "tick": 598 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "ec468c5854d935ddd6b8ac85a6bb17b661140f7f2e61f37607ff43d03a1f4e83", + "checksum": "8be3bbe05e8895c555959ba6f90abfc5fbcef680670cfdf520c8d340fe98d698", "events": [], "fighters": [ { @@ -127605,29 +94818,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -777, - "facing_y": 629, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -127662,29 +94876,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 424, + "poise": 351, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -127692,8 +94907,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -127707,22 +94922,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 63, + "phase_ticks_remaining": 98, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 939 + "tick": 599 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 939 + "tick": 599 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "35a576ec2702841408a383c1e1cc5f8a4b65349425e87bb06d32bc11dd90b257", + "checksum": "ac4eee95aaf4ac70ac079688e759cbf220638cc9c75b65ebe209de77eebd5d17", "events": [], "fighters": [ { @@ -127739,29 +94974,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -749, - "facing_y": 663, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -127796,29 +95032,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 426, + "poise": 353, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -127826,8 +95063,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -127841,22 +95078,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 62, + "phase_ticks_remaining": 97, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 940 + "tick": 600 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 940 + "tick": 600 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "7aa30f7af2b87188bf2ea2cabfcb2d9e558e133bd508e55dad9e8d2e72411ef4", + "checksum": "f1c125d52225b48387d1402840864a4a51de3d4a0e372b4394aa0f91059916ea", "events": [], "fighters": [ { @@ -127873,29 +95130,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -719, - "facing_y": 695, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -127930,29 +95188,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 428, + "poise": 355, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -127960,8 +95219,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -127975,22 +95234,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 61, + "phase_ticks_remaining": 96, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 941 + "tick": 601 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 941 + "tick": 601 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "1b9c00da438c9e1fa238f8e1c20046bef5109faf5743cbff74545f9c86e3b785", + "checksum": "35ee409037db74cb18c7f76d9f4b95a8348ff54dc8d37257da63efda2ba627af", "events": [], "fighters": [ { @@ -128007,29 +95286,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -688, - "facing_y": 726, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -128064,29 +95344,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 430, + "poise": 357, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -128094,8 +95375,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -128109,22 +95390,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 60, + "phase_ticks_remaining": 95, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 942 + "tick": 602 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 942 + "tick": 602 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "28fa1248ad142eb48e3d206bfa7d86f2c575ed5865458da00c6e9a58ebc9b5f0", + "checksum": "adb602de70c5decc947688cba38d6e27de040f6425ba813530151330fcdeb40b", "events": [], "fighters": [ { @@ -128141,29 +95442,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -656, - "facing_y": 755, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -128198,29 +95500,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 432, + "poise": 359, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -128228,8 +95531,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -128243,22 +95546,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 59, + "phase_ticks_remaining": 94, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 943 + "tick": 603 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 943 + "tick": 603 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "2dbb0663fbdc2c5c0bfa4b78bd9273643aa15398ff440da02164d0f25086ccce", + "checksum": "0531f1883651b6a25c7368a3458129602f60f4ef321b7caa37ad7eb23180eac8", "events": [], "fighters": [ { @@ -128275,29 +95598,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -622, - "facing_y": 783, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -128332,29 +95656,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 434, + "poise": 361, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -128362,8 +95687,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -128377,22 +95702,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 58, + "phase_ticks_remaining": 93, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 944 + "tick": 604 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 944 + "tick": 604 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "6df1e4eae32a4c3649e6fcd3c5e1f472d53919ad8a231c0d6169cbcfa82afbaf", + "checksum": "e9766244b88a11344432a361b7ce04271d1b308bb139db8299caf655225dfafd", "events": [], "fighters": [ { @@ -128409,29 +95754,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -587, - "facing_y": 809, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -128466,29 +95812,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 436, + "poise": 363, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -128496,8 +95843,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -128511,22 +95858,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 57, + "phase_ticks_remaining": 92, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 945 + "tick": 605 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 945 + "tick": 605 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "45f1c86575e3344847dd77a7191e542758ef8f3d5f540f7cc2dd8d1998770dc0", + "checksum": "316e9acf902ca73503fefe368155ade33aa371b630b5194f35d9e707da0837a7", "events": [], "fighters": [ { @@ -128543,29 +95910,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -551, - "facing_y": 834, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -128600,29 +95968,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 438, + "poise": 365, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -128630,8 +95999,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -128645,22 +96014,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 56, + "phase_ticks_remaining": 91, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 946 + "tick": 606 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 946 + "tick": 606 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "f52735d2bcda09aa54549d151c719db019d54ac9021e9d4539a8f3440486151f", + "checksum": "3e79a0ae5521031924f75efbabc7044781c89fad44c99d1b41a909553a7a2565", "events": [], "fighters": [ { @@ -128677,29 +96066,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -514, - "facing_y": 858, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -128734,29 +96124,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 440, + "poise": 367, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -128764,8 +96155,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -128779,22 +96170,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 55, + "phase_ticks_remaining": 90, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 947 + "tick": 607 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 947 + "tick": 607 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "aee6cfcc89812274d2b65c04b6458648d8f823edf11bd6af3c24abf9b70d6811", + "checksum": "f3359cd31e98a8fcf8a1653be322caf912dc4513b891c37da3c06aeed88a3b27", "events": [], "fighters": [ { @@ -128811,29 +96222,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -476, - "facing_y": 879, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -128868,29 +96280,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 442, + "poise": 369, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -128898,8 +96311,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -128913,22 +96326,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 54, + "phase_ticks_remaining": 89, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 948 + "tick": 608 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 948 + "tick": 608 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "50bc6b30c25f9a38ee2600c3a67753ee80ed5e3c5a1218c29998ac6e30c5a014", + "checksum": "eeaeaeeb91dd21c4b22765b397827fb28410a713d1356a4d70fee8d0e0110f87", "events": [], "fighters": [ { @@ -128945,29 +96378,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -437, - "facing_y": 899, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -129002,29 +96436,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 444, + "poise": 371, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -129032,8 +96467,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -129047,22 +96482,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 53, + "phase_ticks_remaining": 88, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 949 + "tick": 609 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 949 + "tick": 609 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "04a80cab5daeb96e95045879bfe2120320722144a6615d9a1c1d956807a1f183", + "checksum": "e5c12b22df6876c5042c3e65347e866c82a3600193113d726718407dad9af05b", "events": [], "fighters": [ { @@ -129079,29 +96534,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -398, - "facing_y": 918, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -129136,29 +96592,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 446, + "poise": 373, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -129166,8 +96623,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -129181,22 +96638,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 52, + "phase_ticks_remaining": 87, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 950 + "tick": 610 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 950 + "tick": 610 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "82378cf2b215ee2193dab5f978f009171caa040434919c633b23104119786b7e", + "checksum": "a7613487ae9343e91a1ef01ad315e302e32a812a7e342514493e1e5f223d6435", "events": [], "fighters": [ { @@ -129213,29 +96690,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -357, - "facing_y": 934, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -129270,29 +96748,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 448, + "poise": 375, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -129300,8 +96779,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -129315,22 +96794,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 51, + "phase_ticks_remaining": 86, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 951 + "tick": 611 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 951 + "tick": 611 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "788799aaded0fe208051a9167d5ffcf11c2c9ec3fb922e5d721c7ac9e59afda0", + "checksum": "6f5d1bb1b2f66faf6d89bd9422cd5b2f16fe4fb07535cb271bf7d8279fdf4860", "events": [], "fighters": [ { @@ -129347,29 +96846,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -316, - "facing_y": 949, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -129404,29 +96904,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 450, + "poise": 377, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -129434,8 +96935,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -129449,22 +96950,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 50, + "phase_ticks_remaining": 85, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 952 + "tick": 612 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 952 + "tick": 612 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "ca26ebc8567ff63c70ca215da2d7e62789f6834c7d23b2456f3d1ea6762359b1", + "checksum": "1e9854479fa58c1051385f7400e68bd20e80c1b630cdf7d7ed8590752df8bb28", "events": [], "fighters": [ { @@ -129481,29 +97002,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -274, - "facing_y": 962, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -129538,29 +97060,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 452, + "poise": 379, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -129568,8 +97091,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -129583,22 +97106,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 49, + "phase_ticks_remaining": 84, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 953 + "tick": 613 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 953 + "tick": 613 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "14ed44f6ea883e246d105c1f32b4db27ffacdd1e27ed179dc29c21584db54950", + "checksum": "334b7629dc5837b29f2487f66a8e51c1748c4da9c808b9dc79e9e19b4c530e2a", "events": [], "fighters": [ { @@ -129615,29 +97158,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -232, - "facing_y": 973, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -129672,29 +97216,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 454, + "poise": 381, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -129702,8 +97247,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -129717,22 +97262,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 48, + "phase_ticks_remaining": 83, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 954 + "tick": 614 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 954 + "tick": 614 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "89b0534594441cba0977e72d8e79d927fecd1df8bd339e3cc6d427ba1e8f3ed3", + "checksum": "1dbb940e3090e2fa119e15ba73c40ea33f313528b8cfe2c77272c0bd62cfec03", "events": [], "fighters": [ { @@ -129749,29 +97314,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -189, - "facing_y": 982, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -129806,29 +97372,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 456, + "poise": 383, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -129836,8 +97403,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -129851,22 +97418,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 47, + "phase_ticks_remaining": 82, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 955 + "tick": 615 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 955 + "tick": 615 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "fae2ec10304844792e84d0790d6a85578de12fe2ce249fca7a798f345344a07b", + "checksum": "6730623356d535517294ba661f175a84b58f5d10b584ad7597b2212cda87242b", "events": [], "fighters": [ { @@ -129883,29 +97470,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -146, - "facing_y": 989, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -129940,29 +97528,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 458, + "poise": 385, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -129970,8 +97559,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -129985,22 +97574,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 46, + "phase_ticks_remaining": 81, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 956 + "tick": 616 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 956 + "tick": 616 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "8b70693ef0272f40b11716bd2aaad46abacfd5c1bd9b4c2e05efc71754d7ec73", + "checksum": "01bbbdcfbf06dc40e839d388aadd5efd14090822e1ae6ff0d42aaaabb5f2b76a", "events": [], "fighters": [ { @@ -130017,29 +97626,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -103, - "facing_y": 995, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -130074,29 +97684,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 460, + "poise": 387, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -130104,8 +97715,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -130119,22 +97730,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 45, + "phase_ticks_remaining": 80, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 957 + "tick": 617 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 957 + "tick": 617 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "2ed5451725b575cb6c47a085ef40a8f71cca3e511090ca7ee9bc6c523cc561d5", + "checksum": "7308cd227c4d3d801b4125b79ca9180d674d31c3c1cf70bb82cfca731a428974", "events": [], "fighters": [ { @@ -130151,29 +97782,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -59, - "facing_y": 998, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -130208,29 +97840,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 462, + "poise": 389, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -130238,8 +97871,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -130253,22 +97886,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 44, + "phase_ticks_remaining": 79, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 958 + "tick": 618 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 958 + "tick": 618 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "f508ca906e21051713cd358f9e1d8ed309f7e3b93fb24ecff516dc0c9b51edf4", + "checksum": "35da01605e2593b8107637ceb98567576585330a62a23c45300aae25a4edad61", "events": [], "fighters": [ { @@ -130285,29 +97938,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", - "facing": -1, - "facing_x": -15, - "facing_y": 1000, - "get_up_count": 8, + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -130342,29 +97996,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 464, + "poise": 391, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -130372,8 +98027,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -130387,22 +98042,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 43, + "phase_ticks_remaining": 78, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 959 + "tick": 619 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 959 + "tick": 619 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "e0cf0bccdc4a7913ec7c75463d583771d3d5f55cde9d6aa1c1b885711bca1196", + "checksum": "af3c9e6330a2e091df3729708af7e470788ce483a7723d27758336739274b87a", "events": [], "fighters": [ { @@ -130419,29 +98094,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 29, - "facing_y": 1000, - "get_up_count": 8, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -130476,29 +98152,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 466, + "poise": 393, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -130506,8 +98183,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -130521,22 +98198,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 42, + "phase_ticks_remaining": 77, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 960 + "tick": 620 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 960 + "tick": 620 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "c5805772a9d226bb4a2daf2f16b35052a687475e1ee70ba182ff93bca53d0d7c", + "checksum": "9dd3b4d55f133bf8eabe063d6315f5ef2fa6fd98bb8325c976bc400cc6b764d4", "events": [], "fighters": [ { @@ -130553,29 +98250,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 73, - "facing_y": 997, - "get_up_count": 8, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -130610,29 +98308,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 468, + "poise": 395, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -130640,8 +98339,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -130655,22 +98354,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 41, + "phase_ticks_remaining": 76, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 961 + "tick": 621 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 961 + "tick": 621 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "c54b65d9d74c88a4ec0124f6bb1a29e37fa4c4abd71f9996ff8e802bd2047358", + "checksum": "531d88b12fad9f03038dd6aaabf401e412093a8d4644f7389b10aafe7c8da549", "events": [], "fighters": [ { @@ -130687,29 +98406,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 116, - "facing_y": 993, - "get_up_count": 8, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -130744,29 +98464,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 470, + "poise": 397, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -130774,8 +98495,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -130789,22 +98510,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 40, + "phase_ticks_remaining": 75, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 962 + "tick": 622 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 962 + "tick": 622 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "bd11ae1a50820a1dd86a1aab3e680c033d35d9b619a39d45d1fbde0ff93174db", + "checksum": "d9b626f518f5e1a1040f55fc70853803b06ef42e15d9e7396d908bac1e1ef35b", "events": [], "fighters": [ { @@ -130821,29 +98562,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 159, - "facing_y": 987, - "get_up_count": 8, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -130878,29 +98620,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 472, + "poise": 399, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -130908,8 +98651,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -130923,22 +98666,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 39, + "phase_ticks_remaining": 74, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 963 + "tick": 623 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 963 + "tick": 623 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "9ceca97eb5db970d74adbedc5e7ecddda7634550036d5ac1c6825f2e0de58b7c", + "checksum": "efe83108f37530d32cbffaf456d55023a9d4651343c69a954838d42444b30e87", "events": [], "fighters": [ { @@ -130955,29 +98718,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 202, - "facing_y": 979, - "get_up_count": 8, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -131012,29 +98776,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 474, + "poise": 401, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -131042,8 +98807,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -131057,22 +98822,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 38, + "phase_ticks_remaining": 73, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 964 + "tick": 624 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 964 + "tick": 624 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "a9efcb0014d0b5bc2afe72ad050e45ccdd6519530e7f26f19a2b9ec38bbeab1c", + "checksum": "61afd59344ed132c184efd999aaf83ec6eb06ff46165a3fd9758b4f5b9244f0e", "events": [], "fighters": [ { @@ -131089,29 +98874,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 245, - "facing_y": 970, - "get_up_count": 8, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -131146,29 +98932,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 476, + "poise": 403, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -131176,8 +98963,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -131191,22 +98978,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 37, + "phase_ticks_remaining": 72, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 965 + "tick": 625 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 965 + "tick": 625 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "13f69b573f8df74574e1f362327bc7b6b5713333ce3c911702b45e2991230c8d", + "checksum": "3f855edd5f7de7f5bbdf21ef29173556739c3b99c9960ee6935da03884c26527", "events": [], "fighters": [ { @@ -131223,29 +99030,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 287, - "facing_y": 958, - "get_up_count": 8, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -131280,29 +99088,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 478, + "poise": 405, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -131310,8 +99119,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -131325,22 +99134,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 36, + "phase_ticks_remaining": 71, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 966 + "tick": 626 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 966 + "tick": 626 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "f8c35361a3325c28f9146f4341d74c461fdb8e3feea7c47879d6962bebeed381", + "checksum": "a46a5657353b7682257bc6f5f551968e71b615c00cccf1c1fc64b0d977f73058", "events": [], "fighters": [ { @@ -131357,29 +99186,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 328, - "facing_y": 945, - "get_up_count": 8, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -131414,29 +99244,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 480, + "poise": 407, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -131444,8 +99275,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -131459,22 +99290,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 35, + "phase_ticks_remaining": 70, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 967 + "tick": 627 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 967 + "tick": 627 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "46740a990dfeb273addbfe5d6addb5625508e20ac21bf19b1f47712350025ea1", + "checksum": "651eda8d98c34753ffaafc4835cece0e65dbc2d67219c663fe47f1b49200980a", "events": [], "fighters": [ { @@ -131491,29 +99342,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 369, - "facing_y": 930, - "get_up_count": 8, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -131548,29 +99400,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 482, + "poise": 409, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -131578,8 +99431,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -131593,22 +99446,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 34, + "phase_ticks_remaining": 69, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 968 + "tick": 628 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 968 + "tick": 628 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "64f1ad1dc9547a502455494277decf63c81afb7cdfc64f80217fd96277e0b553", + "checksum": "8c455fb54091a20db31432b05465205e3731d8d1212841d7fbfddedd4489d056", "events": [], "fighters": [ { @@ -131625,29 +99498,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 409, - "facing_y": 913, - "get_up_count": 8, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -131682,29 +99556,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 484, + "poise": 411, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -131712,8 +99587,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -131727,22 +99602,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 33, + "phase_ticks_remaining": 68, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 969 + "tick": 629 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 969 + "tick": 629 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "97f2143e4f6445ace4520f30a20e7537c1278c5ffcddbcac1fb7a69d4ce97a09", + "checksum": "f41924101b23a4db5fae2f3de169ff05decee577d893d93a81158600927f028f", "events": [], "fighters": [ { @@ -131759,29 +99654,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 448, - "facing_y": 894, - "get_up_count": 8, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -131816,29 +99712,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 486, + "poise": 413, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -131846,8 +99743,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -131861,22 +99758,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 32, + "phase_ticks_remaining": 67, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 970 + "tick": 630 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 970 + "tick": 630 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "7c29e6dc3480dcbd3ac5c0467499e7fd4436ec9f6c9337350449072b7a64147b", + "checksum": "0ca79644661da2743aebaaaf8e0c3af7509bc71c1758f28ab7e9e96a9c0fd967", "events": [], "fighters": [ { @@ -131893,29 +99810,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 487, - "facing_y": 874, - "get_up_count": 8, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -131950,29 +99868,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 488, + "poise": 415, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -131980,8 +99899,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -131995,22 +99914,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 31, + "phase_ticks_remaining": 66, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 971 + "tick": 631 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 971 + "tick": 631 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "7d826fbb8591138fdd7cda34d89dc823b6d33660a452f6588a69e5a780602224", + "checksum": "e9fcb4b722faa6ff3ca89e21e36e6da8111e37d9389809024b2ba2f8448d0e1b", "events": [], "fighters": [ { @@ -132027,29 +99966,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 524, - "facing_y": 851, - "get_up_count": 8, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -132084,29 +100024,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 490, + "poise": 417, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -132114,8 +100055,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -132129,22 +100070,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 30, + "phase_ticks_remaining": 65, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 972 + "tick": 632 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 972 + "tick": 632 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "26334f7481864a50232c23d10447f60409e8e4b7a7a951e59c9b49f1e55565eb", + "checksum": "0e872f3517dc1cf41d89b2c912f85bc6e3c4ad5c220894bd61c7af6e0f93a929", "events": [], "fighters": [ { @@ -132161,29 +100122,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 561, - "facing_y": 828, - "get_up_count": 8, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -132218,29 +100180,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 492, + "poise": 419, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -132248,8 +100211,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -132263,22 +100226,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 29, + "phase_ticks_remaining": 64, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 973 + "tick": 633 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 973 + "tick": 633 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "1eada7986ba65dd3f6555aad9518e8c8b2eedd59556af0e7eed6d9ede1b246cc", + "checksum": "a6e34db846b89edb310b3fbfe47e9177e24cd07d8ea12097cda0be2d077190d5", "events": [], "fighters": [ { @@ -132295,29 +100278,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 596, - "facing_y": 803, - "get_up_count": 8, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -132352,29 +100336,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 494, + "poise": 421, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -132382,8 +100367,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -132397,22 +100382,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 28, + "phase_ticks_remaining": 63, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 974 + "tick": 634 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 974 + "tick": 634 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "c541328811ff46aff3fc8c91ecc79182ac8622893b7c8ca836e7366ed7ba0194", + "checksum": "b87ccc6f37f3f62050e582b4c70436404dda8d3f83f2147343ab4c8254b9040e", "events": [], "fighters": [ { @@ -132429,29 +100434,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 630, - "facing_y": 776, - "get_up_count": 8, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -132486,29 +100492,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 496, + "poise": 423, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -132516,8 +100523,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -132531,22 +100538,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 27, + "phase_ticks_remaining": 62, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 975 + "tick": 635 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 975 + "tick": 635 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "af2527622da5bc445d1b03cab085f21942f63562430610ad99ff526df3efd848", + "checksum": "93c934bf6336957ea3e86b8fec9fef118a76295d6ac9c52f73f09f69ff973012", "events": [], "fighters": [ { @@ -132563,29 +100590,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 664, - "facing_y": 748, - "get_up_count": 8, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -132620,29 +100648,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 498, + "poise": 425, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -132650,8 +100679,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -132665,22 +100694,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 26, + "phase_ticks_remaining": 61, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 976 + "tick": 636 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 976 + "tick": 636 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "e6eb70d8355019f01549a3ba119c61dd0f0f1f1f993a78c380355ec955045b85", + "checksum": "9c9566f980caae44ef3651da5a8d7a7de12786b0e4c458dbebd28dd4f9bbd618", "events": [], "fighters": [ { @@ -132697,29 +100746,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 696, - "facing_y": 718, - "get_up_count": 8, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -132754,29 +100804,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 500, + "poise": 427, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -132784,8 +100835,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -132799,22 +100850,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 25, + "phase_ticks_remaining": 60, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 977 + "tick": 637 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 977 + "tick": 637 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "62bc342e4859f0244abe58fc87f59d9431c90fcf2c1126d712ad0d43209f5cf9", + "checksum": "94667868f5cb3b267aca277a71682f1fcc400e0e3961fd71af8e5409e6c08ab7", "events": [], "fighters": [ { @@ -132831,29 +100902,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -132888,29 +100960,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 502, + "poise": 429, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -132918,7 +100991,105 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 192, + "left_cut": 126, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "warnings": 1, + "x": 365, + "y": 365 + } + ], + "phase": "rest", + "phase_ticks_remaining": 59, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, + "result": null, + "round_number": 1, + "tick": 638 + }, + "type": "snapshot", + "version": 5 + }, + "tick": 638 + }, + { + "attack_one": null, + "attack_two": null, + "snapshot": { + "payload": { + "checksum": "561d17509e907312ddd5bb7375c0d4ada5badd818e0cf55c71f550b1d933d3f5", + "events": [], + "fighters": [ + { + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, + "clinch_startup_ticks": 0, + "clinch_ticks": 0, + "conditioning": 988, + "corner_choice": "cut", + "deductions": 0, + "defense": "none", + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, + "get_up_meter": 0, + "get_up_prompt": null, + "get_up_required": 30, + "get_up_window_end_tick": 0, + "get_up_window_start_tick": 0, + "guard": 700, + "guard_broken": false, + "is_downed": false, + "is_foul_recovery_target": false, + "knockdowns": 0, + "last_input_sequence": 155, + "maximum_stamina": 997, + "player_id": "one", + "poise": 600, + "queued_actions": 0, + "stamina": 997, + "stance": "orthodox", + "stunned_ticks": 0, + "style": "boxer", + "taunt_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -132927,28 +101098,106 @@ }, "velocity_x": 0, "velocity_y": 0, + "warnings": 0, + "x": -365, + "y": -365 + }, + { + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, + "clinch_startup_ticks": 0, + "clinch_ticks": 0, + "conditioning": 972, + "corner_choice": "swelling", + "deductions": 0, + "defense": "none", + "facing": -1, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, + "get_up_meter": 0, + "get_up_prompt": null, + "get_up_required": 0, + "get_up_window_end_tick": 0, + "get_up_window_start_tick": 0, + "guard": 700, + "guard_broken": false, + "is_downed": false, + "is_foul_recovery_target": false, + "knockdowns": 1, + "last_input_sequence": -1, + "maximum_stamina": 992, + "player_id": "two", + "poise": 431, + "queued_actions": 0, + "stamina": 992, + "stance": "orthodox", + "stunned_ticks": 0, + "style": "slugger", + "taunt_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 192, + "left_cut": 126, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, "x": 365, "y": 365 } ], "phase": "rest", - "phase_ticks_remaining": 24, + "phase_ticks_remaining": 58, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 978 + "tick": 639 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 978 + "tick": 639 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "6f1a0c166e6eb8d2b29a3bb8c716ab2c87e4fa953070bd5ea6e7deed28e05789", + "checksum": "beeef8582803dbf8f2b4847ee1a0ecda2801614820ef12470c3e71a74b195095", "events": [], "fighters": [ { @@ -132965,29 +101214,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -133022,29 +101272,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 504, + "poise": 433, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -133052,8 +101303,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -133067,22 +101318,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 23, + "phase_ticks_remaining": 57, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 979 + "tick": 640 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 979 + "tick": 640 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "878a4d99319438ffc35415dbd797fa794cff0f5e4b0b6be8c5a6f293fa0b2942", + "checksum": "7be26a0b11604b41a14dd93e5075e4aac0fc3931f3c3a68a1fa28683c9770d6a", "events": [], "fighters": [ { @@ -133099,29 +101370,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -133156,29 +101428,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 506, + "poise": 435, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -133186,8 +101459,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -133201,22 +101474,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 22, + "phase_ticks_remaining": 56, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 980 + "tick": 641 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 980 + "tick": 641 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "59709aef29b0a8b04c864ca8b00a0d9a08b20aa72306420d7d11e931ea8f7a71", + "checksum": "91ee77ae306c565a001fe69304611b573c312dca293b2340c1aba3cff374f0a3", "events": [], "fighters": [ { @@ -133233,29 +101526,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -133290,29 +101584,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 437, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -133320,8 +101615,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -133335,22 +101630,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 21, + "phase_ticks_remaining": 55, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 981 + "tick": 642 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 981 + "tick": 642 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "311db910dd89a274e1b29116202eeed8b8442926e5147fcc89b4d8ed785cecb5", + "checksum": "4bcc2fd40a431c8483927d315c4a1d367fa7810dc7bdc78208a79a66fa202a51", "events": [], "fighters": [ { @@ -133367,29 +101682,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -133424,29 +101740,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 439, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -133454,8 +101771,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -133469,22 +101786,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 20, + "phase_ticks_remaining": 54, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 982 + "tick": 643 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 982 + "tick": 643 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "5d9c1c7a78207190d959f625156d8ac36ddcc5b94dd250e99f8d065fbef8ecb9", + "checksum": "7136e7e9e724e8f1d5f107182bfc0ff6dbc30fa48c611b1fe6550598950d6786", "events": [], "fighters": [ { @@ -133501,29 +101838,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -133558,29 +101896,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 441, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -133588,8 +101927,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -133603,22 +101942,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 19, + "phase_ticks_remaining": 53, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 983 + "tick": 644 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 983 + "tick": 644 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "9c0b8c560f7e641372b0b03ab22ca7205a58212365258b91a4cfd2bde558b53d", + "checksum": "a35197f6b8df00ba3d917b50e1605c10cf4e2a150f2663aca5dffdb294f5b118", "events": [], "fighters": [ { @@ -133635,29 +101994,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -133692,29 +102052,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 443, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -133722,8 +102083,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -133737,22 +102098,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 18, + "phase_ticks_remaining": 52, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 984 + "tick": 645 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 984 + "tick": 645 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "4161b14e45edc885a7748efc5a6e571b5c7f1eaac1c65722ba0a98dd6daa63ba", + "checksum": "d93c098c29ba2f2f5cb13990e5d2087c48496329bcbdaeae30a5a20236b922e4", "events": [], "fighters": [ { @@ -133769,29 +102150,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -133826,29 +102208,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 445, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -133856,8 +102239,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -133871,22 +102254,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 17, + "phase_ticks_remaining": 51, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 985 + "tick": 646 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 985 + "tick": 646 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "e2261699b7c1b3aaddaa9cbbe9fa9f3d6f1131a9d2b975da9e7e633955417b9d", + "checksum": "a92497cbd6d182f28eae88eb79ea2cfe8bc816c0db87b64f0be995dd2d19027c", "events": [], "fighters": [ { @@ -133903,29 +102306,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -133960,29 +102364,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 447, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -133990,8 +102395,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -134005,22 +102410,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 16, + "phase_ticks_remaining": 50, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 986 + "tick": 647 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 986 + "tick": 647 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "b8b0aeabe8f29354680d83e52ac8c9276fbd6aa98ed20cfd3d503c335e6efd82", + "checksum": "062b5ad64de6157fb41a2556918b9fccf8a3ca477fa186f0be5754e1b28a492e", "events": [], "fighters": [ { @@ -134037,29 +102462,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -134094,29 +102520,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 449, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -134124,8 +102551,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -134139,22 +102566,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 15, + "phase_ticks_remaining": 49, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 987 + "tick": 648 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 987 + "tick": 648 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "8176488cd2bc63d6aca1da184c495e91b1080d6a5bc20283803ba6662e046b16", + "checksum": "34e23a7080e43ea9ab4eafb057c34637b557ec9c053e33e153dbef77feff10ac", "events": [], "fighters": [ { @@ -134171,29 +102618,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -134228,29 +102676,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 451, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -134258,8 +102707,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -134273,22 +102722,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 14, + "phase_ticks_remaining": 48, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 988 + "tick": 649 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 988 + "tick": 649 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "6f56557c73237ccf5a0ae9aea5977db73fee75eecc09c0c1dd4ae8eb69d861d1", + "checksum": "5f511760360fda097e9d6bc375034dc4758879dd28582071444e3207774f42e9", "events": [], "fighters": [ { @@ -134305,29 +102774,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -134362,29 +102832,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 453, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -134392,7 +102863,105 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 192, + "left_cut": 126, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "warnings": 1, + "x": 365, + "y": 365 + } + ], + "phase": "rest", + "phase_ticks_remaining": 47, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, + "result": null, + "round_number": 1, + "tick": 650 + }, + "type": "snapshot", + "version": 5 + }, + "tick": 650 + }, + { + "attack_one": null, + "attack_two": null, + "snapshot": { + "payload": { + "checksum": "e9b5303abdd118211273b0c7105d56a9c1f805520626a04ff5bb149738505675", + "events": [], + "fighters": [ + { + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, + "clinch_startup_ticks": 0, + "clinch_ticks": 0, + "conditioning": 988, + "corner_choice": "cut", + "deductions": 0, + "defense": "none", + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, + "get_up_meter": 0, + "get_up_prompt": null, + "get_up_required": 30, + "get_up_window_end_tick": 0, + "get_up_window_start_tick": 0, + "guard": 700, + "guard_broken": false, + "is_downed": false, + "is_foul_recovery_target": false, + "knockdowns": 0, + "last_input_sequence": 155, + "maximum_stamina": 997, + "player_id": "one", + "poise": 600, + "queued_actions": 0, + "stamina": 997, + "stance": "orthodox", + "stunned_ticks": 0, + "style": "boxer", + "taunt_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -134401,28 +102970,106 @@ }, "velocity_x": 0, "velocity_y": 0, + "warnings": 0, + "x": -365, + "y": -365 + }, + { + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, + "clinch_startup_ticks": 0, + "clinch_ticks": 0, + "conditioning": 972, + "corner_choice": "swelling", + "deductions": 0, + "defense": "none", + "facing": -1, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, + "get_up_meter": 0, + "get_up_prompt": null, + "get_up_required": 0, + "get_up_window_end_tick": 0, + "get_up_window_start_tick": 0, + "guard": 700, + "guard_broken": false, + "is_downed": false, + "is_foul_recovery_target": false, + "knockdowns": 1, + "last_input_sequence": -1, + "maximum_stamina": 992, + "player_id": "two", + "poise": 455, + "queued_actions": 0, + "stamina": 992, + "stance": "orthodox", + "stunned_ticks": 0, + "style": "slugger", + "taunt_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 192, + "left_cut": 126, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, "x": 365, "y": 365 } ], "phase": "rest", - "phase_ticks_remaining": 13, + "phase_ticks_remaining": 46, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 989 + "tick": 651 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 989 + "tick": 651 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "10d597be334b2ec22a5b5979d689dd72bfd053b54f39eda7685491716922d4df", + "checksum": "943284e43ad8793c63ee676975f92e438ea35b0651de98c72556f17328f6aab9", "events": [], "fighters": [ { @@ -134439,29 +103086,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -134496,29 +103144,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 457, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -134526,8 +103175,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -134541,22 +103190,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 12, + "phase_ticks_remaining": 45, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 990 + "tick": 652 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 990 + "tick": 652 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "af3afe7fe848ed958b46cd7ca7075d66f27d20e1291652e5c4bde077a850e0da", + "checksum": "25a2f379c0a1e32ff078ac24a3fa11c5ecbb4d4fc8733f63fba2d0b25bb2279b", "events": [], "fighters": [ { @@ -134573,29 +103242,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -134630,29 +103300,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 459, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -134660,8 +103331,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -134675,22 +103346,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 11, + "phase_ticks_remaining": 44, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 991 + "tick": 653 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 991 + "tick": 653 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "aea56f2e471feb614d23fb6931d22b0667ca11fdd6693aa81f3a2c6f377d6287", + "checksum": "449949e2423da160a7b826327ed7477e6f1380b04549ca651344538598bb3d1c", "events": [], "fighters": [ { @@ -134707,29 +103398,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -134764,29 +103456,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 461, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -134794,8 +103487,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -134809,22 +103502,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 10, + "phase_ticks_remaining": 43, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 992 + "tick": 654 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 992 + "tick": 654 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "32eae404ae6ef3e1dbc008f560ae709d61ac7da9554bbc07ea0bd4d679a50eed", + "checksum": "78463c15b6a0a770dbab13623eb3d0166d938bfec888311b01793abffba84806", "events": [], "fighters": [ { @@ -134841,29 +103554,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -134898,29 +103612,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 463, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -134928,8 +103643,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -134943,22 +103658,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 9, + "phase_ticks_remaining": 42, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 993 + "tick": 655 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 993 + "tick": 655 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "1be6a0f7d53133fc34917c3789d5c0296626af5ba2a9f5708f03d6bd1a59c59e", + "checksum": "c1b4578279de6209529f74d2d6aec657d6600e0dde58f2f6ed4141062fef54c0", "events": [], "fighters": [ { @@ -134975,29 +103710,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -135032,29 +103768,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 465, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -135062,8 +103799,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -135077,22 +103814,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 8, + "phase_ticks_remaining": 41, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 994 + "tick": 656 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 994 + "tick": 656 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "691c9832958f038233082fc5c1ff7b72553d24ebd49ca0e40ae370a0ca360202", + "checksum": "aec66fbc4a048defde2a93bdd3d1551706f8b762e36ad20e57425f1931039ef7", "events": [], "fighters": [ { @@ -135109,29 +103866,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -135166,29 +103924,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 467, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -135196,8 +103955,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -135211,22 +103970,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 7, + "phase_ticks_remaining": 40, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 995 + "tick": 657 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 995 + "tick": 657 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "e87d8323d4fba279f0745b217d36e7e886af1dfaca7c0a3ff879af071547dd17", + "checksum": "defe3b86453e28b56b20cf9f116d202fbcb0fca9ce5a30c0bb470017ba619b59", "events": [], "fighters": [ { @@ -135243,29 +104022,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -135300,29 +104080,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 469, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -135330,8 +104111,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -135345,22 +104126,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 6, + "phase_ticks_remaining": 39, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 996 + "tick": 658 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 996 + "tick": 658 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "b18ed76eb48f3660841df9d49a10fb45dd98dae78ba448a3ba10c95e0b1f4d70", + "checksum": "96033e362ac4537ae5608c505e7c8fa053ba9c1e1333fc9b2903e44537b07a44", "events": [], "fighters": [ { @@ -135377,29 +104178,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -135434,29 +104236,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 471, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -135464,8 +104267,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -135479,22 +104282,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 5, + "phase_ticks_remaining": 38, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 997 + "tick": 659 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 997 + "tick": 659 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "5ed5452cf6a671bada892e9ba2b893ff48ae93bb5ee2d0c23ba2c49ad86b0d03", + "checksum": "01267d0c30adf988fae4b3df799ace7d6680d9388143c90c5141d957ff0c2416", "events": [], "fighters": [ { @@ -135511,29 +104334,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -135568,29 +104392,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 473, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -135598,8 +104423,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -135613,22 +104438,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 4, + "phase_ticks_remaining": 37, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 998 + "tick": 660 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 998 + "tick": 660 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "de55bcec4714934ed14eaf2ec804f2e5158f3d5561b2db8ebc56038e46ff0669", + "checksum": "b401d642a81ac6b73603b09345997ade99508e2c0d4585925e5a513844e1c45b", "events": [], "fighters": [ { @@ -135645,29 +104490,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -135702,29 +104548,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 475, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -135732,7 +104579,105 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 192, + "left_cut": 126, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "warnings": 1, + "x": 365, + "y": 365 + } + ], + "phase": "rest", + "phase_ticks_remaining": 36, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, + "result": null, + "round_number": 1, + "tick": 661 + }, + "type": "snapshot", + "version": 5 + }, + "tick": 661 + }, + { + "attack_one": null, + "attack_two": null, + "snapshot": { + "payload": { + "checksum": "7680aeba308bf2f3dbcc76c05d82690b0327e5ceacaddf01c11d7ad82157029b", + "events": [], + "fighters": [ + { + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, + "clinch_startup_ticks": 0, + "clinch_ticks": 0, + "conditioning": 988, + "corner_choice": "cut", + "deductions": 0, + "defense": "none", + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, + "get_up_meter": 0, + "get_up_prompt": null, + "get_up_required": 30, + "get_up_window_end_tick": 0, + "get_up_window_start_tick": 0, + "guard": 700, + "guard_broken": false, + "is_downed": false, + "is_foul_recovery_target": false, + "knockdowns": 0, + "last_input_sequence": 155, + "maximum_stamina": 997, + "player_id": "one", + "poise": 600, + "queued_actions": 0, + "stamina": 997, + "stance": "orthodox", + "stunned_ticks": 0, + "style": "boxer", + "taunt_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, "left_cut": 0, "left_eye": 0, "right_cut": 0, @@ -135741,28 +104686,106 @@ }, "velocity_x": 0, "velocity_y": 0, + "warnings": 0, + "x": -365, + "y": -365 + }, + { + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, + "clinch_startup_ticks": 0, + "clinch_ticks": 0, + "conditioning": 972, + "corner_choice": "swelling", + "deductions": 0, + "defense": "none", + "facing": -1, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, + "get_up_meter": 0, + "get_up_prompt": null, + "get_up_required": 0, + "get_up_window_end_tick": 0, + "get_up_window_start_tick": 0, + "guard": 700, + "guard_broken": false, + "is_downed": false, + "is_foul_recovery_target": false, + "knockdowns": 1, + "last_input_sequence": -1, + "maximum_stamina": 992, + "player_id": "two", + "poise": 477, + "queued_actions": 0, + "stamina": 992, + "stance": "orthodox", + "stunned_ticks": 0, + "style": "slugger", + "taunt_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 192, + "left_cut": 126, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, "x": 365, "y": 365 } ], "phase": "rest", - "phase_ticks_remaining": 3, + "phase_ticks_remaining": 35, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 999 + "tick": 662 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 999 + "tick": 662 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "49ca3704e6e2d7025805464e4310b3eaf63e757f9dbf5bc218f51eb8afddbde6", + "checksum": "05c1dc9822cf2908f7f0f27717ca319218649b9d81f1958356b0a026a7191cbe", "events": [], "fighters": [ { @@ -135779,29 +104802,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -135836,29 +104860,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 479, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -135866,8 +104891,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -135881,22 +104906,42 @@ } ], "phase": "rest", - "phase_ticks_remaining": 2, + "phase_ticks_remaining": 34, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 1000 + "tick": 663 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1000 + "tick": 663 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "c7117b7daf99a53689fb0128550237c8efb9cfc291cf581249a98d11358b79d6", + "checksum": "072445fe7509d6848121e1430a3e7f1255cd2e2657242ce944875f2ff16c076d", "events": [], "fighters": [ { @@ -135913,29 +104958,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -135970,29 +105016,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 481, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -136000,8 +105047,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -136015,36 +105062,43 @@ } ], "phase": "rest", - "phase_ticks_remaining": 1, + "phase_ticks_remaining": 33, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, "round_number": 1, - "tick": 1001 + "tick": 664 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1001 + "tick": 664 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "65c987a522125353840024bcbba1b37182d98759299f2fe22db6c0044fdd913d", - "events": [ - { - "action_id": null, - "actor_id": null, - "amount": 0, - "blood": 0, - "detail": "round_start", - "direction": 0, - "event_id": 45, - "kind": "bell", - "target_id": null, - "tick": 1002 - } - ], + "checksum": "7efaab6b702c2919b2ca3f4ea2189a2a7d5d5df0373830fbea674a8d2a5892ce", + "events": [], "fighters": [ { "action": null, @@ -136060,29 +105114,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -136117,29 +105172,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 483, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -136147,8 +105203,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -136161,23 +105217,43 @@ "y": 365 } ], - "phase": "fight", - "phase_ticks_remaining": 1000000, + "phase": "rest", + "phase_ticks_remaining": 32, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, - "round_number": 2, - "tick": 1002 + "round_number": 1, + "tick": 665 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1002 + "tick": 665 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "ecfc9f410082f400c689dc4f09fae6ef14f13418cfdd29a7d2fecda0c8ce6717", + "checksum": "2bc29c51a77988327e6dfc17ba483983f223913ae99b5f4866133cfcef6c17c4", "events": [], "fighters": [ { @@ -136194,29 +105270,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 203, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -136251,29 +105328,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 485, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -136281,8 +105359,8 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -136295,157 +105373,43 @@ "y": 365 } ], - "phase": "fight", - "phase_ticks_remaining": 999999, - "result": null, - "round_number": 2, - "tick": 1003 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 1003 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "90706b86e747af3e0e77fb255603e51c19e9afe6e5cef0cadf0af22133849ed5", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 707, - "facing_y": 707, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 204, - "maximum_stamina": 984, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 984, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 2, - "velocity_y": 2, - "warnings": 0, - "x": -363, - "y": -363 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -707, - "facing_y": -707, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 985, - "player_id": "two", - "poise": 508, - "queued_actions": 0, - "stamina": 985, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": -2, - "velocity_y": -2, - "warnings": 1, - "x": 363, - "y": 363 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999998, + "phase": "rest", + "phase_ticks_remaining": 31, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, - "round_number": 2, - "tick": 1004 + "round_number": 1, + "tick": 666 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1004 + "tick": 666 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "0fbd68d415fc6255ebb4a78a58ff6b01f81fb0cc255a2da60d3ec5fbbe1e4285", + "checksum": "d41f29057c5bbf4e2f34f898570e279e03c806766f78932a9a8e7c67cfb7b193", "events": [], "fighters": [ { @@ -136462,29 +105426,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 205, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -136499,11 +105464,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 3, - "velocity_y": 3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -360, - "y": -360 + "x": -365, + "y": -365 }, { "action": null, @@ -136519,29 +105484,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 487, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -136549,37 +105515,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": -3, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 360, - "y": 360 + "x": 365, + "y": 365 } ], - "phase": "fight", - "phase_ticks_remaining": 999997, + "phase": "rest", + "phase_ticks_remaining": 30, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, - "round_number": 2, - "tick": 1005 + "round_number": 1, + "tick": 667 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1005 + "tick": 667 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "1928aa0fd2a8cc901c2ff8165b83943ef9f04dc2773cbc115e53cd24afb7d8ef", + "checksum": "a8d4b32c3fe81a5729e907df83840caaa5f990cc9fb13ea1d613d31fb063aef9", "events": [], "fighters": [ { @@ -136596,29 +105582,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 206, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -136633,11 +105620,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -356, - "y": -356 + "x": -365, + "y": -365 }, { "action": null, @@ -136653,29 +105640,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 489, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -136683,37 +105671,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 357, - "y": 357 + "x": 365, + "y": 365 } ], - "phase": "fight", - "phase_ticks_remaining": 999996, + "phase": "rest", + "phase_ticks_remaining": 29, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, - "round_number": 2, - "tick": 1006 + "round_number": 1, + "tick": 668 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1006 + "tick": 668 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "1ecdc0cdd740216c6154edbd183ecb2234e5a1ca99f9b6cd69df88fda4aa647f", + "checksum": "d2363ea9ab57a3a70652d73dcf375f8f81395c0a4dceaa413c71bbc86d5beb53", "events": [], "fighters": [ { @@ -136730,29 +105738,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 207, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -136767,11 +105776,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -353, - "y": -353 + "x": -365, + "y": -365 }, { "action": null, @@ -136787,29 +105796,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 491, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -136817,37 +105827,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 353, - "y": 353 + "x": 365, + "y": 365 } ], - "phase": "fight", - "phase_ticks_remaining": 999995, + "phase": "rest", + "phase_ticks_remaining": 28, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, - "round_number": 2, - "tick": 1007 + "round_number": 1, + "tick": 669 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1007 + "tick": 669 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "5a4a04ee23d4e84488d098e16ea8c54c5155d20603f0393605a10ad5cfb91739", + "checksum": "c210d09ace625207efeba63c96bf9f9bc673cd7556c01a6249203c5c8899d708", "events": [], "fighters": [ { @@ -136864,29 +105894,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 208, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -136901,11 +105932,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -348, - "y": -348 + "x": -365, + "y": -365 }, { "action": null, @@ -136921,29 +105952,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 493, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -136951,37 +105983,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 349, - "y": 349 + "x": 365, + "y": 365 } ], - "phase": "fight", - "phase_ticks_remaining": 999994, + "phase": "rest", + "phase_ticks_remaining": 27, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, - "round_number": 2, - "tick": 1008 + "round_number": 1, + "tick": 670 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1008 + "tick": 670 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "fa7f6d5bf2a5fa50a32cb61a3d8d7060657273932ecaf6316b43c6dccb58574b", + "checksum": "20af1f5f52b6873b60e91d45e330d7311281504fc97cafcd03ae4124911a9802", "events": [], "fighters": [ { @@ -136998,29 +106050,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 209, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -137035,11 +106088,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -344, - "y": -344 + "x": -365, + "y": -365 }, { "action": null, @@ -137055,29 +106108,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 495, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -137085,37 +106139,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 345, - "y": 345 + "x": 365, + "y": 365 } ], - "phase": "fight", - "phase_ticks_remaining": 999993, + "phase": "rest", + "phase_ticks_remaining": 26, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, - "round_number": 2, - "tick": 1009 + "round_number": 1, + "tick": 671 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1009 + "tick": 671 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "052ef0d5bcbc162a056c63268f438a3dc20ed22b8e2ce35278db97976ee26a5d", + "checksum": "563abf1b57a5f474d458d260fa8a302c9e7defbb9c6adc41de4934e2d0934fed", "events": [], "fighters": [ { @@ -137132,29 +106206,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 210, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -137169,11 +106244,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -340, - "y": -340 + "x": -365, + "y": -365 }, { "action": null, @@ -137189,29 +106264,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 497, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -137219,37 +106295,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 341, - "y": 341 + "x": 365, + "y": 365 } ], - "phase": "fight", - "phase_ticks_remaining": 999992, + "phase": "rest", + "phase_ticks_remaining": 25, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, - "round_number": 2, - "tick": 1010 + "round_number": 1, + "tick": 672 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1010 + "tick": 672 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "9d3f691b6036f3603f172b123eda6fe10c05379b403a7fda50b9b73be7a651e7", + "checksum": "de5bc7164788d7af111648cc0ac27663b28e57b2938e1426d4d7f7d714e3ff54", "events": [], "fighters": [ { @@ -137266,29 +106362,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 211, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -137303,11 +106400,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -336, - "y": -336 + "x": -365, + "y": -365 }, { "action": null, @@ -137323,29 +106420,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 499, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -137353,37 +106451,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 337, - "y": 337 + "x": 365, + "y": 365 } ], - "phase": "fight", - "phase_ticks_remaining": 999991, + "phase": "rest", + "phase_ticks_remaining": 24, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, - "round_number": 2, - "tick": 1011 + "round_number": 1, + "tick": 673 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1011 + "tick": 673 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "a9bfe06cd0db5a684e2a1a4f037b3e894562921006579a267b88da6a76b130e5", + "checksum": "cfea42d6c1db9ce0b7cdf37096186f24e990ed765da2229c3f58da65e968e556", "events": [], "fighters": [ { @@ -137400,29 +106518,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 212, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -137437,11 +106556,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -332, - "y": -332 + "x": -365, + "y": -365 }, { "action": null, @@ -137457,29 +106576,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 501, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -137487,37 +106607,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 333, - "y": 333 + "x": 365, + "y": 365 } ], - "phase": "fight", - "phase_ticks_remaining": 999990, + "phase": "rest", + "phase_ticks_remaining": 23, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, - "round_number": 2, - "tick": 1012 + "round_number": 1, + "tick": 674 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1012 + "tick": 674 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "6e730b6c339b952c8bb055fc85e2d5b91ce5ce3772fc9cfd5f0573878bde084e", + "checksum": "fab6c82af694464ca4b056c15dbdc9943d423d347828bdb8c513dc05ce298a95", "events": [], "fighters": [ { @@ -137534,29 +106674,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 213, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -137571,11 +106712,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -327, - "y": -327 + "x": -365, + "y": -365 }, { "action": null, @@ -137591,29 +106732,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 503, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -137621,37 +106763,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 329, - "y": 329 + "x": 365, + "y": 365 } ], - "phase": "fight", - "phase_ticks_remaining": 999989, + "phase": "rest", + "phase_ticks_remaining": 22, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, - "round_number": 2, - "tick": 1013 + "round_number": 1, + "tick": 675 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1013 + "tick": 675 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "83bba958ff0dea5559a9676835828a7d4fafd5cb69400cc0ccc7f0cbb4ad40e8", + "checksum": "578196127f189a8b4ffcf1ce402e1e106980889c41c7cc1d7163382c93b1747d", "events": [], "fighters": [ { @@ -137668,29 +106830,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 214, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -137705,11 +106868,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -323, - "y": -323 + "x": -365, + "y": -365 }, { "action": null, @@ -137725,29 +106888,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 505, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -137755,37 +106919,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 325, - "y": 325 + "x": 365, + "y": 365 } ], - "phase": "fight", - "phase_ticks_remaining": 999988, + "phase": "rest", + "phase_ticks_remaining": 21, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, - "round_number": 2, - "tick": 1014 + "round_number": 1, + "tick": 676 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1014 + "tick": 676 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "fa0be9255358b01486a5fb9024292ae661afca798d8306b2e326c355d7a7b680", + "checksum": "9b488f35f57c1e4a2593067d6d5e518976b5b181e5022db32984c73498d29d9d", "events": [], "fighters": [ { @@ -137802,29 +106986,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 215, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -137839,11 +107024,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -319, - "y": -319 + "x": -365, + "y": -365 }, { "action": null, @@ -137859,29 +107044,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 507, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -137889,37 +107075,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 321, - "y": 321 + "x": 365, + "y": 365 } ], - "phase": "fight", - "phase_ticks_remaining": 999987, + "phase": "rest", + "phase_ticks_remaining": 20, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, - "round_number": 2, - "tick": 1015 + "round_number": 1, + "tick": 677 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1015 + "tick": 677 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "a67b06ead2b860c187d6a08482f459a3dd119a60dd619b3e50bd0a2d9f3971fe", + "checksum": "30fed5749444c7390cc70bcbbc7d1e976bdc77b5e346dba254c625c57cc1168b", "events": [], "fighters": [ { @@ -137936,29 +107142,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 216, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -137973,11 +107180,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -315, - "y": -315 + "x": -365, + "y": -365 }, { "action": null, @@ -137993,29 +107200,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 509, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -138023,37 +107231,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 317, - "y": 317 + "x": 365, + "y": 365 } ], - "phase": "fight", - "phase_ticks_remaining": 999986, + "phase": "rest", + "phase_ticks_remaining": 19, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, - "round_number": 2, - "tick": 1016 + "round_number": 1, + "tick": 678 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1016 + "tick": 678 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "f7044a950e6fa4635f2950d2927cb198fd242e643cbe57853d95b74396870c5e", + "checksum": "37e9404f3007fb4d6fd2c09a16d29047b8eedde75d250e2abced9df1a7ea1c07", "events": [], "fighters": [ { @@ -138070,29 +107298,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 217, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -138107,11 +107336,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -310, - "y": -310 + "x": -365, + "y": -365 }, { "action": null, @@ -138127,29 +107356,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 511, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -138157,37 +107387,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 313, - "y": 313 + "x": 365, + "y": 365 } ], - "phase": "fight", - "phase_ticks_remaining": 999985, + "phase": "rest", + "phase_ticks_remaining": 18, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, - "round_number": 2, - "tick": 1017 + "round_number": 1, + "tick": 679 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1017 + "tick": 679 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "c49ea003b269852f289cb2d85bdbf6504786e4199e79289b603db87bc30f087c", + "checksum": "9219f7447c68a807092ae96b01fbdf721c777628fc05d172f917a52dbd81c5b8", "events": [], "fighters": [ { @@ -138204,29 +107454,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 218, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -138241,11 +107492,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -306, - "y": -306 + "x": -365, + "y": -365 }, { "action": null, @@ -138261,29 +107512,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 513, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -138291,37 +107543,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 308, - "y": 308 + "x": 365, + "y": 365 } ], - "phase": "fight", - "phase_ticks_remaining": 999984, + "phase": "rest", + "phase_ticks_remaining": 17, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, - "round_number": 2, - "tick": 1018 + "round_number": 1, + "tick": 680 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1018 + "tick": 680 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "0af04fc5816fa875123a8c07052e491ca47c14f627b608dcc8f1b24d4efe6d85", + "checksum": "20ae2b31f34f42714a675ad76b9be4ccde0fe75e395511f6192595592db0e278", "events": [], "fighters": [ { @@ -138338,29 +107610,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 219, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -138375,11 +107648,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -302, - "y": -302 + "x": -365, + "y": -365 }, { "action": null, @@ -138395,29 +107668,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 515, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -138425,37 +107699,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 304, - "y": 304 + "x": 365, + "y": 365 } ], - "phase": "fight", - "phase_ticks_remaining": 999983, + "phase": "rest", + "phase_ticks_remaining": 16, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, - "round_number": 2, - "tick": 1019 + "round_number": 1, + "tick": 681 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1019 + "tick": 681 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "d8559de5b1dfc31c299f4c338ce2083944266a9cb15eecde9ce9dbe8e1fca46b", + "checksum": "25a98f30f5d5fe0e653f124ac6d6bdbec0647ef6184d3dba11034b53b6d52889", "events": [], "fighters": [ { @@ -138472,29 +107766,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 220, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -138509,11 +107804,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -298, - "y": -298 + "x": -365, + "y": -365 }, { "action": null, @@ -138529,29 +107824,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 517, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -138559,37 +107855,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 300, - "y": 300 + "x": 365, + "y": 365 } ], - "phase": "fight", - "phase_ticks_remaining": 999982, + "phase": "rest", + "phase_ticks_remaining": 15, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, - "round_number": 2, - "tick": 1020 + "round_number": 1, + "tick": 682 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1020 + "tick": 682 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "34b8a4a805baa81b32114e3b7c33b53fe85fcb3ba92308405474454a0783cff9", + "checksum": "f476f7e77c05a6f3ec47f0a4a478b68a8d81921e8cc34a004cb6aebf5fb542d0", "events": [], "fighters": [ { @@ -138606,29 +107922,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 221, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -138643,11 +107960,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -293, - "y": -293 + "x": -365, + "y": -365 }, { "action": null, @@ -138663,29 +107980,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 519, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -138693,37 +108011,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 296, - "y": 296 + "x": 365, + "y": 365 } ], - "phase": "fight", - "phase_ticks_remaining": 999981, + "phase": "rest", + "phase_ticks_remaining": 14, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, - "round_number": 2, - "tick": 1021 + "round_number": 1, + "tick": 683 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1021 + "tick": 683 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "dc7a7e73f5e5a2a2cafd6063102b645cc0276950d8ae5365a4453c509e7b23d0", + "checksum": "bce3b3942c88f6cd49fea6d711d19cd69c31e37832e4f77d5388980201cf0a72", "events": [], "fighters": [ { @@ -138740,29 +108078,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 222, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -138777,11 +108116,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -289, - "y": -289 + "x": -365, + "y": -365 }, { "action": null, @@ -138797,29 +108136,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 521, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -138827,37 +108167,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 292, - "y": 292 + "x": 365, + "y": 365 } ], - "phase": "fight", - "phase_ticks_remaining": 999980, + "phase": "rest", + "phase_ticks_remaining": 13, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, - "round_number": 2, - "tick": 1022 + "round_number": 1, + "tick": 684 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1022 + "tick": 684 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "e8f78a0e71247a9d75d0014c62e3db420db3618291f4b19256231a6579fa6982", + "checksum": "14090b26d5b22479c5a377b42802843b6fe44976e6e83f2fda1e42daf6752ad5", "events": [], "fighters": [ { @@ -138874,29 +108234,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 223, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -138911,11 +108272,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -285, - "y": -285 + "x": -365, + "y": -365 }, { "action": null, @@ -138931,29 +108292,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 523, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -138961,37 +108323,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 288, - "y": 288 + "x": 365, + "y": 365 } ], - "phase": "fight", - "phase_ticks_remaining": 999979, + "phase": "rest", + "phase_ticks_remaining": 12, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, - "round_number": 2, - "tick": 1023 + "round_number": 1, + "tick": 685 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1023 + "tick": 685 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "8182c3d06b02eea3d09d21290b87333b8b59637a9d371829ac7490392b2bf5b4", + "checksum": "3ed42284a2307c417631d3b7821e85b4b29be3cd1e38c84daf253422d6949d19", "events": [], "fighters": [ { @@ -139008,29 +108390,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 224, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -139045,11 +108428,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -281, - "y": -281 + "x": -365, + "y": -365 }, { "action": null, @@ -139065,29 +108448,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 525, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -139095,37 +108479,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 284, - "y": 284 + "x": 365, + "y": 365 } ], - "phase": "fight", - "phase_ticks_remaining": 999978, + "phase": "rest", + "phase_ticks_remaining": 11, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, - "round_number": 2, - "tick": 1024 + "round_number": 1, + "tick": 686 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1024 + "tick": 686 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "44477d333498f3e2a2948657634936a6f8692a275a804208ff9946be8bf4b6ed", + "checksum": "54f73ef7bf0c8fb0503635df1898816fa5aaddf5a1d0d374a1ac165e9c9b08bd", "events": [], "fighters": [ { @@ -139142,29 +108546,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 225, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -139179,11 +108584,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -276, - "y": -276 + "x": -365, + "y": -365 }, { "action": null, @@ -139199,29 +108604,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 527, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -139229,37 +108635,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 280, - "y": 280 + "x": 365, + "y": 365 } ], - "phase": "fight", - "phase_ticks_remaining": 999977, + "phase": "rest", + "phase_ticks_remaining": 10, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, - "round_number": 2, - "tick": 1025 + "round_number": 1, + "tick": 687 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1025 + "tick": 687 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "da1b2458efd1e32d3c7515c6b95d78c8f12f619699a7a2f5334bd1db7510da1a", + "checksum": "78d6980d0b1a6a9ad76f71377ab2cec15c81d504f8457ca7e59159ed82a55ab8", "events": [], "fighters": [ { @@ -139276,29 +108702,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 226, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -139313,11 +108740,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -272, - "y": -272 + "x": -365, + "y": -365 }, { "action": null, @@ -139333,29 +108760,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 529, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -139363,37 +108791,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 276, - "y": 276 + "x": 365, + "y": 365 } ], - "phase": "fight", - "phase_ticks_remaining": 999976, + "phase": "rest", + "phase_ticks_remaining": 9, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, - "round_number": 2, - "tick": 1026 + "round_number": 1, + "tick": 688 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1026 + "tick": 688 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "9a504626a0425b172c146ec1a5624004ffab0ac7acd4af8ff2189c0f3380df65", + "checksum": "8ae0c82099611702b1f9760e4444a6cccd0c615ddf01c094165d94babaeb2b59", "events": [], "fighters": [ { @@ -139410,29 +108858,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 708, - "facing_y": 708, - "get_up_count": 8, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 227, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -139447,11 +108896,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -268, - "y": -268 + "x": -365, + "y": -365 }, { "action": null, @@ -139467,29 +108916,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -708, - "facing_y": -708, - "get_up_count": 8, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 531, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -139497,37 +108947,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 272, - "y": 272 + "x": 365, + "y": 365 } ], - "phase": "fight", - "phase_ticks_remaining": 999975, + "phase": "rest", + "phase_ticks_remaining": 8, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, - "round_number": 2, - "tick": 1027 + "round_number": 1, + "tick": 689 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1027 + "tick": 689 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "569fef86630c2d1fb32157e99559e04fdbc02ccc154919dd8228c00fb9cd635f", + "checksum": "cd101351ae704f48d5e1ced0283602162fc01663f4ab8e2246e1fcc1d408be31", "events": [], "fighters": [ { @@ -139544,29 +109014,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 228, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -139581,11 +109052,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -264, - "y": -264 + "x": -365, + "y": -365 }, { "action": null, @@ -139601,29 +109072,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 533, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -139631,37 +109103,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 268, - "y": 268 + "x": 365, + "y": 365 } ], - "phase": "fight", - "phase_ticks_remaining": 999974, + "phase": "rest", + "phase_ticks_remaining": 7, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, - "round_number": 2, - "tick": 1028 + "round_number": 1, + "tick": 690 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1028 + "tick": 690 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "260a5747c837c85f3ddf18a79d252b5118691b47d1ab61351a1a1c5bb0baa6f6", + "checksum": "edbbfc82ef008bf38c400feb25b612b401a3f5aceb2761df2df0c8dd27006b7e", "events": [], "fighters": [ { @@ -139678,29 +109170,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 229, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -139715,11 +109208,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -259, - "y": -259 + "x": -365, + "y": -365 }, { "action": null, @@ -139735,29 +109228,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 535, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -139765,37 +109259,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 264, - "y": 264 + "x": 365, + "y": 365 } ], - "phase": "fight", - "phase_ticks_remaining": 999973, + "phase": "rest", + "phase_ticks_remaining": 6, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, - "round_number": 2, - "tick": 1029 + "round_number": 1, + "tick": 691 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1029 + "tick": 691 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "e89a442ab91ad75ed1fce752fa3657dd03b02bdf645b16f2f1f4ad8bad4526e5", + "checksum": "1dcc73babdb0ea9aff270ec37003b0464bab483129b37b57c34b36671c503a62", "events": [], "fighters": [ { @@ -139812,29 +109326,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 230, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -139849,11 +109364,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -255, - "y": -255 + "x": -365, + "y": -365 }, { "action": null, @@ -139869,29 +109384,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 537, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -139899,37 +109415,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 260, - "y": 260 + "x": 365, + "y": 365 } ], - "phase": "fight", - "phase_ticks_remaining": 999972, + "phase": "rest", + "phase_ticks_remaining": 5, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, - "round_number": 2, - "tick": 1030 + "round_number": 1, + "tick": 692 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1030 + "tick": 692 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "ce6b59aa35624ab99501e534719c8f2129bce20f045b4c4d31907f7cd17ff2c2", + "checksum": "9b09346f1f029c0e94b33f042ae1ff8652ae2562099e9a9774f1273412031cfd", "events": [], "fighters": [ { @@ -139946,29 +109482,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 231, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -139983,11 +109520,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -251, - "y": -251 + "x": -365, + "y": -365 }, { "action": null, @@ -140003,29 +109540,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 539, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -140033,37 +109571,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 256, - "y": 256 + "x": 365, + "y": 365 } ], - "phase": "fight", - "phase_ticks_remaining": 999971, + "phase": "rest", + "phase_ticks_remaining": 4, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, - "round_number": 2, - "tick": 1031 + "round_number": 1, + "tick": 693 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1031 + "tick": 693 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "d3ea6e01ea1e1e681e9c8731e0a7daa4b37f18102839b41eb997711e9b561078", + "checksum": "9284c47b653d07f0f44f441ceef43dbbc983b2ce7b039036d1e393d5cdf97bd7", "events": [], "fighters": [ { @@ -140080,29 +109638,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 232, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -140117,11 +109676,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -247, - "y": -247 + "x": -365, + "y": -365 }, { "action": null, @@ -140137,29 +109696,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 541, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -140167,37 +109727,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 252, - "y": 252 + "x": 365, + "y": 365 } ], - "phase": "fight", - "phase_ticks_remaining": 999970, + "phase": "rest", + "phase_ticks_remaining": 3, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, - "round_number": 2, - "tick": 1032 + "round_number": 1, + "tick": 694 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1032 + "tick": 694 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "7fcce0ca0009aadd7bf8ec54fbaf106566cb8b9912ee30d22cdf020de2fefa30", + "checksum": "97fb68f8cacf45c98c955975e7d80b5df23f7a2b8819e66b00c7317095c674be", "events": [], "fighters": [ { @@ -140214,29 +109794,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 233, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -140251,11 +109832,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -243, - "y": -243 + "x": -365, + "y": -365 }, { "action": null, @@ -140271,29 +109852,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -140301,37 +109883,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 247, - "y": 247 + "x": 365, + "y": 365 } ], - "phase": "fight", - "phase_ticks_remaining": 999969, + "phase": "rest", + "phase_ticks_remaining": 2, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, - "round_number": 2, - "tick": 1033 + "round_number": 1, + "tick": 695 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1033 + "tick": 695 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "22ac69fef5a8c3266056b3e1416b0da8886d6205fb9aed9fa9fe4bde7f660992", + "checksum": "bb57167a6def477f39d01dab4ccfa4004ead1a84ec05e55f9fd4b62f8397bdab", "events": [], "fighters": [ { @@ -140348,29 +109950,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 708, - "facing_y": 708, - "get_up_count": 8, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 234, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -140385,11 +109988,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -238, - "y": -238 + "x": -365, + "y": -365 }, { "action": null, @@ -140405,29 +110008,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -708, - "facing_y": -708, - "get_up_count": 8, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -140435,38 +110039,71 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 243, - "y": 243 + "x": 365, + "y": 365 } ], - "phase": "fight", - "phase_ticks_remaining": 999968, + "phase": "rest", + "phase_ticks_remaining": 1, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": 600, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": 0, + "y": 0 + }, "result": null, - "round_number": 2, - "tick": 1034 + "round_number": 1, + "tick": 696 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1034 + "tick": 696 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "b916f525634d7a94101c426fe4c449d750ff2bd8d637d6fd82190fe0e270801e", - "events": [], + "checksum": "18142b86a563e7e11226483e14038f4d58b71769d87804971d6a25dd613a8a26", + "events": [ + { + "action_id": null, + "actor_id": null, + "amount": 0, + "blood": 0, + "detail": "round_start", + "direction": 0, + "event_id": 46, + "kind": "bell", + "target_id": null, + "tick": 697 + } + ], "fighters": [ { "action": null, @@ -140482,29 +110119,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 235, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -140519,11 +110157,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -234, - "y": -234 + "x": -365, + "y": -365 }, { "action": null, @@ -140539,29 +110177,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -140569,37 +110208,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 239, - "y": 239 + "x": 365, + "y": 365 } ], "phase": "fight", - "phase_ticks_remaining": 999967, + "phase_ticks_remaining": 1000000, + "referee": { + "alive": true, + "facing_x": 800, + "facing_y": -800, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": 4, + "x": -4, + "y": 4 + }, "result": null, "round_number": 2, - "tick": 1035 + "tick": 697 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1035 + "tick": 697 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "73301e5a8a78da19b803328b8f4bfc4a5bb473b007a1dad08fdf0108dcb453ec", + "checksum": "92f4c3fe35ddaf42ac30ca0107e56d1d62201ce2bf134795450b6e5e83186b4f", "events": [], "fighters": [ { @@ -140616,29 +110275,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 708, - "facing_y": 708, - "get_up_count": 8, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 236, - "maximum_stamina": 984, + "last_input_sequence": 155, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -140653,11 +110313,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -230, - "y": -230 + "x": -365, + "y": -365 }, { "action": null, @@ -140673,29 +110333,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -708, - "facing_y": -708, - "get_up_count": 8, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -140703,37 +110364,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, - "x": 235, - "y": 235 + "x": 365, + "y": 365 } ], "phase": "fight", - "phase_ticks_remaining": 999966, + "phase_ticks_remaining": 999999, + "referee": { + "alive": true, + "facing_x": 727, + "facing_y": -727, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": 4, + "x": -8, + "y": 8 + }, "result": null, "round_number": 2, - "tick": 1036 + "tick": 698 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1036 + "tick": 698 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "0497b27cd4519d1cdac513fd0ebc277ada9621562c72272d303e601745e196de", + "checksum": "575b1fc4872cb3b0984499f044829a79b2eab1ba62ece255bb1323bb934a490e", "events": [], "fighters": [ { @@ -140750,29 +110431,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 237, - "maximum_stamina": 984, + "last_input_sequence": 156, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -140787,11 +110469,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 5, + "velocity_y": 5, "warnings": 0, - "x": -226, - "y": -226 + "x": -360, + "y": -360 }, { "action": null, @@ -140807,29 +110489,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -140837,37 +110520,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -5, + "velocity_y": -5, "warnings": 1, - "x": 231, - "y": 231 + "x": 360, + "y": 360 } ], "phase": "fight", - "phase_ticks_remaining": 999965, + "phase_ticks_remaining": 999998, + "referee": { + "alive": true, + "facing_x": 750, + "facing_y": -750, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": 4, + "x": -12, + "y": 12 + }, "result": null, "round_number": 2, - "tick": 1037 + "tick": 699 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1037 + "tick": 699 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "840a6c21b94f82d9e2e84f2c903be315078eedbe293f82fad8abb4462c0720c3", + "checksum": "93e2a334d57ba58fbfddc7a84778a989a61a4cd966cf81e03a4e969fb622f221", "events": [], "fighters": [ { @@ -140884,29 +110587,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 238, - "maximum_stamina": 984, + "last_input_sequence": 157, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -140921,11 +110625,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -221, - "y": -221 + "x": -354, + "y": -354 }, { "action": null, @@ -140941,29 +110645,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -140971,37 +110676,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -6, + "velocity_y": -6, "warnings": 1, - "x": 227, - "y": 227 + "x": 354, + "y": 354 } ], "phase": "fight", - "phase_ticks_remaining": 999964, + "phase_ticks_remaining": 999997, + "referee": { + "alive": true, + "facing_x": 727, + "facing_y": -727, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": 4, + "x": -16, + "y": 16 + }, "result": null, "round_number": 2, - "tick": 1038 + "tick": 700 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1038 + "tick": 700 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "162c7ea3ae2cbd7a0751ef2d80dc5817148fe4f18006cca6552975f262a167dc", + "checksum": "04b4fbfd09a18682843b5eb523743ecface40c25715e7dc98a8554ea9d61dd02", "events": [], "fighters": [ { @@ -141018,29 +110743,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 239, - "maximum_stamina": 984, + "last_input_sequence": 158, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -141055,11 +110781,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -217, - "y": -217 + "x": -347, + "y": -347 }, { "action": null, @@ -141075,29 +110801,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -141105,37 +110832,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 223, - "y": 223 + "x": 347, + "y": 347 } ], "phase": "fight", - "phase_ticks_remaining": 999963, + "phase_ticks_remaining": 999996, + "referee": { + "alive": true, + "facing_x": 714, + "facing_y": -714, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": 4, + "x": -20, + "y": 20 + }, "result": null, "round_number": 2, - "tick": 1039 + "tick": 701 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1039 + "tick": 701 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "66152ef9efb68ceaa40eb0130cbdab2ef7ecfe7f6a1a10fc8488eb6c2ccdc5a6", + "checksum": "e8a2c4134584a7fc293d94195c6e3221d346aabadb8f01c7aead51be98f8c5cf", "events": [], "fighters": [ { @@ -141152,29 +110899,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 240, - "maximum_stamina": 984, + "last_input_sequence": 159, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -141189,11 +110937,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -213, - "y": -213 + "x": -340, + "y": -340 }, { "action": null, @@ -141209,29 +110957,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -141239,37 +110988,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 219, - "y": 219 + "x": 341, + "y": 341 } ], "phase": "fight", - "phase_ticks_remaining": 999962, + "phase_ticks_remaining": 999995, + "referee": { + "alive": true, + "facing_x": 727, + "facing_y": -727, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": 4, + "x": -24, + "y": 24 + }, "result": null, "round_number": 2, - "tick": 1040 + "tick": 702 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1040 + "tick": 702 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "ab488d198c48facde06b92d0f3cadbcb56839379469e38323ff5fb3d9306936d", + "checksum": "5596d51c7f8e11e2bd3391641cb19f408bab24e754026dae2db178cfeb6cef79", "events": [], "fighters": [ { @@ -141286,29 +111055,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 708, - "facing_y": 708, - "get_up_count": 8, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 241, - "maximum_stamina": 984, + "last_input_sequence": 160, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -141323,11 +111093,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -209, - "y": -209 + "x": -333, + "y": -333 }, { "action": null, @@ -141343,29 +111113,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -708, - "facing_y": -708, - "get_up_count": 8, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -141373,37 +111144,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 215, - "y": 215 + "x": 334, + "y": 334 } ], "phase": "fight", - "phase_ticks_remaining": 999961, + "phase_ticks_remaining": 999994, + "referee": { + "alive": true, + "facing_x": 717, + "facing_y": -717, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": 4, + "x": -28, + "y": 28 + }, "result": null, "round_number": 2, - "tick": 1041 + "tick": 703 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1041 + "tick": 703 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "ed0d796b48fce68c084e2fb7f440d93e4cf0a0a6e12d6fcc791e850390d21abd", + "checksum": "3d74bb0eb0bda309ab21335ef68a3be622d35ced1852d148f7c40498885aef55", "events": [], "fighters": [ { @@ -141420,29 +111211,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 242, - "maximum_stamina": 984, + "last_input_sequence": 161, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -141457,11 +111249,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -204, - "y": -204 + "x": -325, + "y": -325 }, { "action": null, @@ -141477,29 +111269,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -141507,37 +111300,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 211, - "y": 211 + "x": 327, + "y": 327 } ], "phase": "fight", - "phase_ticks_remaining": 999960, + "phase_ticks_remaining": 999993, + "referee": { + "alive": true, + "facing_x": 733, + "facing_y": -688, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": 4, + "x": -32, + "y": 32 + }, "result": null, "round_number": 2, - "tick": 1042 + "tick": 704 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1042 + "tick": 704 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "b758dec67089bc28d1b58a99b8740b7a474a28d4255ae134c6fa511d3b98ffdf", + "checksum": "e7110049c9a6f212dfc0e2d0bc976e87f341677249781440e14f758111987bb5", "events": [], "fighters": [ { @@ -141554,29 +111367,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 708, - "facing_y": 708, - "get_up_count": 8, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 243, - "maximum_stamina": 984, + "last_input_sequence": 162, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -141591,11 +111405,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -200, - "y": -200 + "x": -318, + "y": -318 }, { "action": null, @@ -141611,29 +111425,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -708, - "facing_y": -708, - "get_up_count": 8, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -141641,37 +111456,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 207, - "y": 207 + "x": 320, + "y": 320 } ], "phase": "fight", - "phase_ticks_remaining": 999959, + "phase_ticks_remaining": 999992, + "referee": { + "alive": true, + "facing_x": 740, + "facing_y": -700, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -4, + "velocity_y": 4, + "x": -36, + "y": 36 + }, "result": null, "round_number": 2, - "tick": 1043 + "tick": 705 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1043 + "tick": 705 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "686853b28319db4ad25b0b14a6c98712e494ae80f440b7c8637fc0fc17628965", + "checksum": "aaed9b243e66c917cd83ba20273fe5e229cde68b3ebb19e390aaab8d39151320", "events": [], "fighters": [ { @@ -141688,29 +111523,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 244, - "maximum_stamina": 984, + "last_input_sequence": 163, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -141725,11 +111561,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -196, - "y": -196 + "x": -311, + "y": -311 }, { "action": null, @@ -141745,29 +111581,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -141775,37 +111612,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 203, - "y": 203 + "x": 313, + "y": 313 } ], "phase": "fight", - "phase_ticks_remaining": 999958, + "phase_ticks_remaining": 999991, + "referee": { + "alive": true, + "facing_x": 727, + "facing_y": -709, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -3, + "velocity_y": 4, + "x": -39, + "y": 40 + }, "result": null, "round_number": 2, - "tick": 1044 + "tick": 706 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1044 + "tick": 706 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "54a1e557295c3f6148a53a5c552bccc9d06462a2cd8c0caf828eb36b09827415", + "checksum": "b2f78aa391ec0a186c5be96e6cc4881d7fc690e3a63a36901c4756c51eba93a6", "events": [], "fighters": [ { @@ -141822,29 +111679,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 245, - "maximum_stamina": 984, + "last_input_sequence": 164, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -141859,11 +111717,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -192, - "y": -192 + "x": -304, + "y": -304 }, { "action": null, @@ -141879,29 +111737,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -141909,37 +111768,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 199, - "y": 199 + "x": 307, + "y": 307 } ], "phase": "fight", - "phase_ticks_remaining": 999957, + "phase_ticks_remaining": 999990, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -3, + "velocity_y": 4, + "x": -42, + "y": 44 + }, "result": null, "round_number": 2, - "tick": 1045 + "tick": 707 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1045 + "tick": 707 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "412b076e5e422fe1d021585ea198ee60ebcaa1ac841dc63738c83861655336a7", + "checksum": "56ba24692edc93110fd1eeb2290f911b5ed3a1c770778dcf30c9b85f6d663a17", "events": [], "fighters": [ { @@ -141956,29 +111835,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 708, - "facing_y": 708, - "get_up_count": 8, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 246, - "maximum_stamina": 984, + "last_input_sequence": 165, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -141993,11 +111873,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -187, - "y": -187 + "x": -297, + "y": -297 }, { "action": null, @@ -142013,29 +111893,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -708, - "facing_y": -708, - "get_up_count": 8, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -142043,37 +111924,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 195, - "y": 195 + "x": 300, + "y": 300 } ], "phase": "fight", - "phase_ticks_remaining": 999956, + "phase_ticks_remaining": 999989, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -42, + "y": 44 + }, "result": null, "round_number": 2, - "tick": 1046 + "tick": 708 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1046 + "tick": 708 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "6a9a266a68e5120f97cf713277593909edda450cd376b5835003958cbf1af20b", + "checksum": "5be5c8e502d5b5d94d3c3b979e58792d083d161c78108365f48300f7286c7128", "events": [], "fighters": [ { @@ -142090,29 +111991,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 247, - "maximum_stamina": 984, + "last_input_sequence": 166, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -142127,11 +112029,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -183, - "y": -183 + "x": -290, + "y": -290 }, { "action": null, @@ -142147,29 +112049,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -142177,37 +112080,213 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 192, + "left_cut": 126, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -7, + "velocity_y": -7, + "warnings": 1, + "x": 293, + "y": 293 + } + ], + "phase": "fight", + "phase_ticks_remaining": 999988, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -42, + "y": 44 + }, + "result": null, + "round_number": 2, + "tick": 709 + }, + "type": "snapshot", + "version": 5 + }, + "tick": 709 + }, + { + "attack_one": null, + "attack_two": null, + "snapshot": { + "payload": { + "checksum": "9eca007efb1bdf980a30e4de741da5f3816242e942d8dcfc6a95e0a64176a5f1", + "events": [], + "fighters": [ + { + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, + "clinch_startup_ticks": 0, + "clinch_ticks": 0, + "conditioning": 988, + "corner_choice": "cut", + "deductions": 0, + "defense": "none", + "facing": 1, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, + "get_up_meter": 0, + "get_up_prompt": null, + "get_up_required": 30, + "get_up_window_end_tick": 0, + "get_up_window_start_tick": 0, + "guard": 700, + "guard_broken": false, + "is_downed": false, + "is_foul_recovery_target": false, + "knockdowns": 0, + "last_input_sequence": 167, + "maximum_stamina": 997, + "player_id": "one", + "poise": 600, + "queued_actions": 0, + "stamina": 997, + "stance": "orthodox", + "stunned_ticks": 0, + "style": "boxer", + "taunt_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, "left_cut": 0, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 7, + "velocity_y": 7, + "warnings": 0, + "x": -283, + "y": -283 + }, + { + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, + "clinch_startup_ticks": 0, + "clinch_ticks": 0, + "conditioning": 972, + "corner_choice": "swelling", + "deductions": 0, + "defense": "none", + "facing": -1, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, + "get_up_meter": 0, + "get_up_prompt": null, + "get_up_required": 0, + "get_up_window_end_tick": 0, + "get_up_window_start_tick": 0, + "guard": 700, + "guard_broken": false, + "is_downed": false, + "is_foul_recovery_target": false, + "knockdowns": 1, + "last_input_sequence": -1, + "maximum_stamina": 992, + "player_id": "two", + "poise": 543, + "queued_actions": 0, + "stamina": 992, + "stance": "orthodox", + "stunned_ticks": 0, + "style": "slugger", + "taunt_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 192, + "left_cut": 126, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 190, - "y": 190 + "x": 286, + "y": 286 } ], "phase": "fight", - "phase_ticks_remaining": 999955, + "phase_ticks_remaining": 999987, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -42, + "y": 44 + }, "result": null, "round_number": 2, - "tick": 1047 + "tick": 710 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1047 + "tick": 710 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "c47632781bf975cb0027f2b343f1debee61034da7a7261acf0fedc681f68f107", + "checksum": "55575cbb979168386720eac70364cefdce2d3daaa7f3145254b9bf10f2165092", "events": [], "fighters": [ { @@ -142224,29 +112303,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 248, - "maximum_stamina": 984, + "last_input_sequence": 168, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -142261,11 +112341,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -179, - "y": -179 + "x": -276, + "y": -276 }, { "action": null, @@ -142281,29 +112361,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -142311,37 +112392,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 186, - "y": 186 + "x": 280, + "y": 280 } ], "phase": "fight", - "phase_ticks_remaining": 999954, + "phase_ticks_remaining": 999986, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 1, + "velocity_y": 1, + "x": -41, + "y": 45 + }, "result": null, "round_number": 2, - "tick": 1048 + "tick": 711 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1048 + "tick": 711 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "ad96488024bfa00d3a75c4334e5609d8fa86bdffb2cdfa74b537ed9740327ee3", + "checksum": "9d8ba55a1666cef9f093b6fc15f980b150e41a3726065144debf16549697ab8a", "events": [], "fighters": [ { @@ -142358,29 +112459,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 249, - "maximum_stamina": 984, + "last_input_sequence": 169, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -142395,11 +112497,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -175, - "y": -175 + "x": -269, + "y": -269 }, { "action": null, @@ -142415,163 +112517,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 985, - "player_id": "two", - "poise": 508, - "queued_actions": 0, - "stamina": 985, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": -4, - "velocity_y": -4, - "warnings": 1, - "x": 182, - "y": 182 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999953, - "result": null, - "round_number": 2, - "tick": 1049 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 1049 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "2d945211e2e332944e2c51ecbabb170a42b6f09f279baad2016c96f08db1e098", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 708, - "facing_y": 708, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 250, - "maximum_stamina": 984, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 984, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 4, - "velocity_y": 4, - "warnings": 0, - "x": -170, - "y": -170 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -708, - "facing_y": -708, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -142579,37 +112548,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 178, - "y": 178 + "x": 273, + "y": 273 } ], "phase": "fight", - "phase_ticks_remaining": 999952, + "phase_ticks_remaining": 999985, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -41, + "y": 45 + }, "result": null, "round_number": 2, - "tick": 1050 + "tick": 712 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1050 + "tick": 712 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "672e5d4cc5544ec9cc4e6e59666e1eb25f075a48d96fa53c1ab1c8dfcfcdcbd7", + "checksum": "01954addad188fc9e058e4fa13764ff8a8db91e59f8505de5d4a9d02e91b24db", "events": [], "fighters": [ { @@ -142626,29 +112615,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 251, - "maximum_stamina": 984, + "last_input_sequence": 170, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -142663,11 +112653,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -166, - "y": -166 + "x": -262, + "y": -262 }, { "action": null, @@ -142683,29 +112673,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -142713,37 +112704,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 174, - "y": 174 + "x": 266, + "y": 266 } ], "phase": "fight", - "phase_ticks_remaining": 999951, + "phase_ticks_remaining": 999984, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -41, + "y": 45 + }, "result": null, "round_number": 2, - "tick": 1051 + "tick": 713 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1051 + "tick": 713 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "e83e4a50240e89801dbfb89a538994446d9370a21585f21175c463d569618b42", + "checksum": "4876e8b68b7733c832a8dbf06c72bc52ca98b7c864e8f03f25f9371a38ce0223", "events": [], "fighters": [ { @@ -142760,29 +112771,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 708, - "facing_y": 708, - "get_up_count": 8, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 252, - "maximum_stamina": 984, + "last_input_sequence": 171, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -142797,11 +112809,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -162, - "y": -162 + "x": -255, + "y": -255 }, { "action": null, @@ -142817,29 +112829,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -708, - "facing_y": -708, - "get_up_count": 8, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -142847,37 +112860,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 170, - "y": 170 + "x": 259, + "y": 259 } ], "phase": "fight", - "phase_ticks_remaining": 999950, + "phase_ticks_remaining": 999983, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -41, + "y": 45 + }, "result": null, "round_number": 2, - "tick": 1052 + "tick": 714 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1052 + "tick": 714 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "880a2d05608dda2de8d35195da0c4c1dcca3a0d4dc18a38689c02f8ec3ea33b9", + "checksum": "c4c569e9486d44f3d454d27b6cd6f60c029b27847192299d9d418291f9d00f06", "events": [], "fighters": [ { @@ -142894,29 +112927,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 253, - "maximum_stamina": 984, + "last_input_sequence": 172, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -142931,11 +112965,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -158, - "y": -158 + "x": -248, + "y": -248 }, { "action": null, @@ -142951,29 +112985,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -142981,37 +113016,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 166, - "y": 166 + "x": 252, + "y": 252 } ], "phase": "fight", - "phase_ticks_remaining": 999949, + "phase_ticks_remaining": 999982, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -41, + "y": 45 + }, "result": null, "round_number": 2, - "tick": 1053 + "tick": 715 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1053 + "tick": 715 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "5f5bf9430238b5288f0d52b6077cef897aefd7514789bd4be12b8506abd0f3e3", + "checksum": "80b5a7cea7cde6c73526e51e687113ce89724325f07ef37bee0438522c8b3132", "events": [], "fighters": [ { @@ -143028,29 +113083,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 254, - "maximum_stamina": 984, + "last_input_sequence": 173, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -143065,11 +113121,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -153, - "y": -153 + "x": -241, + "y": -241 }, { "action": null, @@ -143085,29 +113141,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -143115,37 +113172,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 162, - "y": 162 + "x": 246, + "y": 246 } ], "phase": "fight", - "phase_ticks_remaining": 999948, + "phase_ticks_remaining": 999981, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -41, + "y": 45 + }, "result": null, "round_number": 2, - "tick": 1054 + "tick": 716 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1054 + "tick": 716 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "a6a300a089f2504c35fdf8599242937a8498c8cb2aad5579c6907fd027ee05f3", + "checksum": "241b1a821442b2378b179df41bab78dad62f3035a0dcdf17088f077d4313e467", "events": [], "fighters": [ { @@ -143162,29 +113239,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 255, - "maximum_stamina": 984, + "last_input_sequence": 174, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -143199,11 +113277,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -149, - "y": -149 + "x": -234, + "y": -234 }, { "action": null, @@ -143219,29 +113297,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -143249,37 +113328,213 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 192, + "left_cut": 126, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -7, + "velocity_y": -7, + "warnings": 1, + "x": 239, + "y": 239 + } + ], + "phase": "fight", + "phase_ticks_remaining": 999980, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -41, + "y": 45 + }, + "result": null, + "round_number": 2, + "tick": 717 + }, + "type": "snapshot", + "version": 5 + }, + "tick": 717 + }, + { + "attack_one": null, + "attack_two": null, + "snapshot": { + "payload": { + "checksum": "7ca4f3ea6b2ad557e864524b802c58280e088b78886af07c6691338978db5876", + "events": [], + "fighters": [ + { + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, + "clinch_startup_ticks": 0, + "clinch_ticks": 0, + "conditioning": 988, + "corner_choice": "cut", + "deductions": 0, + "defense": "none", + "facing": 1, + "facing_x": 708, + "facing_y": 708, + "get_up_count": 5, + "get_up_meter": 0, + "get_up_prompt": null, + "get_up_required": 30, + "get_up_window_end_tick": 0, + "get_up_window_start_tick": 0, + "guard": 700, + "guard_broken": false, + "is_downed": false, + "is_foul_recovery_target": false, + "knockdowns": 0, + "last_input_sequence": 175, + "maximum_stamina": 997, + "player_id": "one", + "poise": 600, + "queued_actions": 0, + "stamina": 997, + "stance": "orthodox", + "stunned_ticks": 0, + "style": "boxer", + "taunt_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, "left_cut": 0, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 7, + "velocity_y": 7, + "warnings": 0, + "x": -226, + "y": -226 + }, + { + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, + "clinch_startup_ticks": 0, + "clinch_ticks": 0, + "conditioning": 972, + "corner_choice": "swelling", + "deductions": 0, + "defense": "none", + "facing": -1, + "facing_x": -708, + "facing_y": -708, + "get_up_count": 5, + "get_up_meter": 0, + "get_up_prompt": null, + "get_up_required": 0, + "get_up_window_end_tick": 0, + "get_up_window_start_tick": 0, + "guard": 700, + "guard_broken": false, + "is_downed": false, + "is_foul_recovery_target": false, + "knockdowns": 1, + "last_input_sequence": -1, + "maximum_stamina": 992, + "player_id": "two", + "poise": 543, + "queued_actions": 0, + "stamina": 992, + "stance": "orthodox", + "stunned_ticks": 0, + "style": "slugger", + "taunt_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 192, + "left_cut": 126, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 158, - "y": 158 + "x": 232, + "y": 232 } ], "phase": "fight", - "phase_ticks_remaining": 999947, + "phase_ticks_remaining": 999979, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 1, + "velocity_y": 1, + "x": -40, + "y": 46 + }, "result": null, "round_number": 2, - "tick": 1055 + "tick": 718 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1055 + "tick": 718 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "fdc7933cfe52462b1355f55f53ce062eb4f6a6f6cd00a1e8344a207ce09cbd4f", + "checksum": "7abae80d94bbdf35f178c7f675b660854d96af09f077192865f0bfee75e57eb4", "events": [], "fighters": [ { @@ -143296,29 +113551,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 256, - "maximum_stamina": 984, + "last_input_sequence": 176, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -143333,11 +113589,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -145, - "y": -145 + "x": -219, + "y": -219 }, { "action": null, @@ -143353,29 +113609,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -143383,37 +113640,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 154, - "y": 154 + "x": 225, + "y": 225 } ], "phase": "fight", - "phase_ticks_remaining": 999946, + "phase_ticks_remaining": 999978, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -40, + "y": 46 + }, "result": null, "round_number": 2, - "tick": 1056 + "tick": 719 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1056 + "tick": 719 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "40f0e18373acefa69c345a0d33eddbf4b6e16a979070dc54d22ea79674858b4c", + "checksum": "f075b6aadd4a33824264d29bd3652d1bec611458e402703b0c1dfa4d7cb35403", "events": [], "fighters": [ { @@ -143430,29 +113707,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 708, "facing_y": 708, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 257, - "maximum_stamina": 984, + "last_input_sequence": 177, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -143467,11 +113745,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -141, - "y": -141 + "x": -212, + "y": -212 }, { "action": null, @@ -143487,29 +113765,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -708, "facing_y": -708, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -143517,37 +113796,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 150, - "y": 150 + "x": 218, + "y": 218 } ], "phase": "fight", - "phase_ticks_remaining": 999945, + "phase_ticks_remaining": 999977, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -40, + "y": 46 + }, "result": null, "round_number": 2, - "tick": 1057 + "tick": 720 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1057 + "tick": 720 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "a4c35bb52d6980cb6f5e483bae4662f6c0eedd59986c18e8ca8e0e0421ead5aa", + "checksum": "ff4b5f42be575d72be38913432c6bc0ed3edae547e77b50bf65f33aa8a7bf9bf", "events": [], "fighters": [ { @@ -143564,29 +113863,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 708, - "facing_y": 708, - "get_up_count": 8, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 258, - "maximum_stamina": 984, + "last_input_sequence": 178, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -143601,11 +113901,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -136, - "y": -136 + "x": -205, + "y": -205 }, { "action": null, @@ -143621,29 +113921,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -708, - "facing_y": -708, - "get_up_count": 8, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -143651,37 +113952,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 146, - "y": 146 + "x": 212, + "y": 212 } ], "phase": "fight", - "phase_ticks_remaining": 999944, + "phase_ticks_remaining": 999976, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -40, + "y": 46 + }, "result": null, "round_number": 2, - "tick": 1058 + "tick": 721 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1058 + "tick": 721 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "45a8a80de5671b3ba650d030523b3b8cd96a452afa17f990ae4b47b3f7f399b3", + "checksum": "f3331bdb829e18d07bd973aab058e915078d25e0f83b1e6c2ab3eba9aafc426e", "events": [], "fighters": [ { @@ -143698,29 +114019,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 708, - "facing_y": 708, - "get_up_count": 8, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 259, - "maximum_stamina": 984, + "last_input_sequence": 179, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -143735,11 +114057,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -132, - "y": -132 + "x": -198, + "y": -198 }, { "action": null, @@ -143755,29 +114077,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -708, - "facing_y": -708, - "get_up_count": 8, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -143785,37 +114108,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 142, - "y": 142 + "x": 205, + "y": 205 } ], "phase": "fight", - "phase_ticks_remaining": 999943, + "phase_ticks_remaining": 999975, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -40, + "y": 46 + }, "result": null, "round_number": 2, - "tick": 1059 + "tick": 722 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1059 + "tick": 722 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "581101eedabff7005e54c66177c2971d88a50a108007a1ee871fa5572d36c082", + "checksum": "a426c15d5e299febf2cbbb095aecfd247ff3f65ade5820914f049535f8879c50", "events": [], "fighters": [ { @@ -143832,29 +114175,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 708, "facing_y": 708, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 260, - "maximum_stamina": 984, + "last_input_sequence": 180, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -143869,11 +114213,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -128, - "y": -128 + "x": -191, + "y": -191 }, { "action": null, @@ -143889,29 +114233,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -708, "facing_y": -708, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -143919,37 +114264,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 138, - "y": 138 + "x": 198, + "y": 198 } ], "phase": "fight", - "phase_ticks_remaining": 999942, + "phase_ticks_remaining": 999974, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -40, + "y": 46 + }, "result": null, "round_number": 2, - "tick": 1060 + "tick": 723 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1060 + "tick": 723 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "edbf44276e27ec5dcd6d4b6c6566951bae720e1813a8cbf2f7c2f0112f4252d7", + "checksum": "dbf94f1810630c0b71aa2eb13cfe5998d393e83f7e95ecd6e126b9ea3fdd6663", "events": [], "fighters": [ { @@ -143966,29 +114331,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 261, - "maximum_stamina": 984, + "last_input_sequence": 181, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -144003,11 +114369,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -124, - "y": -124 + "x": -184, + "y": -184 }, { "action": null, @@ -144023,29 +114389,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -144053,37 +114420,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 133, - "y": 133 + "x": 191, + "y": 191 } ], "phase": "fight", - "phase_ticks_remaining": 999941, + "phase_ticks_remaining": 999973, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -40, + "y": 46 + }, "result": null, "round_number": 2, - "tick": 1061 + "tick": 724 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1061 + "tick": 724 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "8d86b15c155ab48b75e86bcd9724249ec403e6a4cf46f384ea79ecc21b03bff4", + "checksum": "ac0bacc5fee9fa8b6dab3c37de87f0a34de3bc6e7255031cf3c0284869395355", "events": [], "fighters": [ { @@ -144100,29 +114487,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 262, - "maximum_stamina": 984, + "last_input_sequence": 182, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -144137,11 +114525,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -120, - "y": -120 + "x": -177, + "y": -177 }, { "action": null, @@ -144157,29 +114545,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -144187,37 +114576,213 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, + "head": 192, + "left_cut": 126, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -7, + "velocity_y": -7, + "warnings": 1, + "x": 185, + "y": 185 + } + ], + "phase": "fight", + "phase_ticks_remaining": 999972, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 1, + "velocity_y": 1, + "x": -39, + "y": 47 + }, + "result": null, + "round_number": 2, + "tick": 725 + }, + "type": "snapshot", + "version": 5 + }, + "tick": 725 + }, + { + "attack_one": null, + "attack_two": null, + "snapshot": { + "payload": { + "checksum": "234b7aea726a1a9d3b840e73bb76ed186659e27dfc16f1ad825dc0939cd3b01a", + "events": [], + "fighters": [ + { + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, + "clinch_startup_ticks": 0, + "clinch_ticks": 0, + "conditioning": 988, + "corner_choice": "cut", + "deductions": 0, + "defense": "none", + "facing": 1, + "facing_x": 708, + "facing_y": 708, + "get_up_count": 5, + "get_up_meter": 0, + "get_up_prompt": null, + "get_up_required": 30, + "get_up_window_end_tick": 0, + "get_up_window_start_tick": 0, + "guard": 700, + "guard_broken": false, + "is_downed": false, + "is_foul_recovery_target": false, + "knockdowns": 0, + "last_input_sequence": 183, + "maximum_stamina": 997, + "player_id": "one", + "poise": 600, + "queued_actions": 0, + "stamina": 997, + "stance": "orthodox", + "stunned_ticks": 0, + "style": "boxer", + "taunt_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, "left_cut": 0, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": 7, + "velocity_y": 7, + "warnings": 0, + "x": -170, + "y": -170 + }, + { + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, + "clinch_startup_ticks": 0, + "clinch_ticks": 0, + "conditioning": 972, + "corner_choice": "swelling", + "deductions": 0, + "defense": "none", + "facing": -1, + "facing_x": -708, + "facing_y": -708, + "get_up_count": 5, + "get_up_meter": 0, + "get_up_prompt": null, + "get_up_required": 0, + "get_up_window_end_tick": 0, + "get_up_window_start_tick": 0, + "guard": 700, + "guard_broken": false, + "is_downed": false, + "is_foul_recovery_target": false, + "knockdowns": 1, + "last_input_sequence": -1, + "maximum_stamina": 992, + "player_id": "two", + "poise": 543, + "queued_actions": 0, + "stamina": 992, + "stance": "orthodox", + "stunned_ticks": 0, + "style": "slugger", + "taunt_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 192, + "left_cut": 126, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 129, - "y": 129 + "x": 178, + "y": 178 } ], "phase": "fight", - "phase_ticks_remaining": 999940, + "phase_ticks_remaining": 999971, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -39, + "y": 47 + }, "result": null, "round_number": 2, - "tick": 1062 + "tick": 726 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1062 + "tick": 726 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "45d1a2b1265833d6c2f6f898d42e728c859229a80b115451091663289aa41299", + "checksum": "4b372dfc01af49f26b8c1bd5b5d0149c4ba5ea04689381730dc9b42924859ba1", "events": [], "fighters": [ { @@ -144234,29 +114799,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 263, - "maximum_stamina": 984, + "last_input_sequence": 184, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -144271,11 +114837,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -115, - "y": -115 + "x": -163, + "y": -163 }, { "action": null, @@ -144291,29 +114857,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -144321,37 +114888,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 125, - "y": 125 + "x": 171, + "y": 171 } ], "phase": "fight", - "phase_ticks_remaining": 999939, + "phase_ticks_remaining": 999970, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -39, + "y": 47 + }, "result": null, "round_number": 2, - "tick": 1063 + "tick": 727 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1063 + "tick": 727 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "9480ca836de3f3fb354c06c5dee155392d636d1245a905991f2b048dfc4e64fe", + "checksum": "b855ba975234aa5dceb3c23046e081e595929a3b79733d1bafcb5bc2f41620e9", "events": [], "fighters": [ { @@ -144368,29 +114955,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 264, - "maximum_stamina": 984, + "last_input_sequence": 185, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -144405,11 +114993,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -111, - "y": -111 + "x": -156, + "y": -156 }, { "action": null, @@ -144425,29 +115013,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -144455,37 +115044,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 121, - "y": 121 + "x": 164, + "y": 164 } ], "phase": "fight", - "phase_ticks_remaining": 999938, + "phase_ticks_remaining": 999969, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -39, + "y": 47 + }, "result": null, "round_number": 2, - "tick": 1064 + "tick": 728 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1064 + "tick": 728 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "29e842da7ff19699cbb47d03a23baf2b0cbc6d5d8e752cfa38af6790f9ab6f8a", + "checksum": "11f4a02efe85c3b5968c45fd9a3cddc10f75dc68009d85d1da6d8285bed7f7e8", "events": [], "fighters": [ { @@ -144502,29 +115111,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 707, "facing_y": 707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 265, - "maximum_stamina": 984, + "last_input_sequence": 186, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -144539,11 +115149,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -107, - "y": -107 + "x": -149, + "y": -149 }, { "action": null, @@ -144559,29 +115169,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -707, "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -144589,37 +115200,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 117, - "y": 117 + "x": 157, + "y": 157 } ], "phase": "fight", - "phase_ticks_remaining": 999937, + "phase_ticks_remaining": 999968, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -39, + "y": 47 + }, "result": null, "round_number": 2, - "tick": 1065 + "tick": 729 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1065 + "tick": 729 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "4093be5b37862f5a2805f96533664633d1b0d16c11b00a750ccd69d920764555", + "checksum": "16ade0af36504abc27e3d4e3ff64d98dfed56936f258edff31f2f744e111f57c", "events": [], "fighters": [ { @@ -144636,29 +115267,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 708, "facing_y": 708, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 266, - "maximum_stamina": 984, + "last_input_sequence": 187, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -144673,11 +115305,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -103, - "y": -103 + "x": -142, + "y": -142 }, { "action": null, @@ -144693,29 +115325,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -708, "facing_y": -708, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -144723,37 +115356,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 113, - "y": 113 + "x": 151, + "y": 151 } ], "phase": "fight", - "phase_ticks_remaining": 999936, + "phase_ticks_remaining": 999967, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -39, + "y": 47 + }, "result": null, "round_number": 2, - "tick": 1066 + "tick": 730 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1066 + "tick": 730 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "b03dcb70fab6f5bfb0282e240bf2746140da5512c0f0baf6c2ea727a166475fc", + "checksum": "ca385e9f60539843617e21a13c36d3cf8dc4d62d746e840afe99162067a1cfeb", "events": [], "fighters": [ { @@ -144770,29 +115423,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 708, - "facing_y": 708, - "get_up_count": 8, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 267, - "maximum_stamina": 984, + "last_input_sequence": 188, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -144807,11 +115461,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -98, - "y": -98 + "x": -135, + "y": -135 }, { "action": null, @@ -144827,29 +115481,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -708, - "facing_y": -708, - "get_up_count": 8, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -144857,37 +115512,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 109, - "y": 109 + "x": 144, + "y": 144 } ], "phase": "fight", - "phase_ticks_remaining": 999935, + "phase_ticks_remaining": 999966, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -39, + "y": 47 + }, "result": null, "round_number": 2, - "tick": 1067 + "tick": 731 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1067 + "tick": 731 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "71d83a1c8b805be5d501f8576611098e245f39138f9c4dcd945d3fd2b298f95c", + "checksum": "544189ce73e1f42d09d30df040b95579fc8ba859abfe1eba4fbf32daaeaef16c", "events": [], "fighters": [ { @@ -144904,29 +115579,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 708, "facing_y": 708, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 268, - "maximum_stamina": 984, + "last_input_sequence": 189, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -144941,11 +115617,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -94, - "y": -94 + "x": -128, + "y": -128 }, { "action": null, @@ -144961,29 +115637,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -708, "facing_y": -708, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -144991,37 +115668,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 105, - "y": 105 + "x": 137, + "y": 137 } ], "phase": "fight", - "phase_ticks_remaining": 999934, + "phase_ticks_remaining": 999965, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -39, + "y": 47 + }, "result": null, "round_number": 2, - "tick": 1068 + "tick": 732 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1068 + "tick": 732 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "61e57f5e89dc9d009a895cb61a7f1c8e383191f18fb5e26d5cf087349187872c", + "checksum": "cb3367c73cb34c9fb229ebb185e62199cdcf30f0ab0e0a952d34a8711aba7ca7", "events": [], "fighters": [ { @@ -145038,29 +115735,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 708, "facing_y": 708, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 269, - "maximum_stamina": 984, + "last_input_sequence": 190, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -145075,11 +115773,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -90, - "y": -90 + "x": -120, + "y": -120 }, { "action": null, @@ -145095,163 +115793,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -708, "facing_y": -708, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 985, - "player_id": "two", - "poise": 508, - "queued_actions": 0, - "stamina": 985, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 307, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": -4, - "velocity_y": -4, - "warnings": 1, - "x": 101, - "y": 101 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999933, - "result": null, - "round_number": 2, - "tick": 1069 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 1069 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "fbad7bdd4f07b521f52d509cd5c5fa8bbaf7e426be745da4230ef6012756dc4c", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 964, - "corner_choice": "cut", - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 707, - "facing_y": 707, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 270, - "maximum_stamina": 984, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 984, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 4, - "velocity_y": 4, - "warnings": 0, - "x": -86, - "y": -86 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -707, - "facing_y": -707, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -145259,37 +115824,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 97, - "y": 97 + "x": 130, + "y": 130 } ], "phase": "fight", - "phase_ticks_remaining": 999932, + "phase_ticks_remaining": 999964, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 1, + "velocity_y": 1, + "x": -38, + "y": 48 + }, "result": null, "round_number": 2, - "tick": 1070 + "tick": 733 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1070 + "tick": 733 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "34c9cfd1949e00e1c671188850077a898c00bcf79e23bf0655461104c75cac97", + "checksum": "1504bfd83b7f0990955931fba60532f3fbfb78fb27ce769196138a2513f0a01f", "events": [], "fighters": [ { @@ -145306,29 +115891,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 709, - "facing_y": 709, - "get_up_count": 8, + "facing_x": 708, + "facing_y": 708, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 271, - "maximum_stamina": 984, + "last_input_sequence": 191, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -145343,11 +115929,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -81, - "y": -81 + "x": -113, + "y": -113 }, { "action": null, @@ -145363,29 +115949,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -709, - "facing_y": -709, - "get_up_count": 8, + "facing_x": -708, + "facing_y": -708, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -145393,37 +115980,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 93, - "y": 93 + "x": 123, + "y": 123 } ], "phase": "fight", - "phase_ticks_remaining": 999931, + "phase_ticks_remaining": 999963, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -38, + "y": 48 + }, "result": null, "round_number": 2, - "tick": 1071 + "tick": 734 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1071 + "tick": 734 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "f2a40b4f735f6af6053449ee2f64d0e7cfa62c8a915658e9920c4645b8cabd38", + "checksum": "c39e8498695b787ae678a885613163acc44c99ec2ef70530040481fa131eee9a", "events": [], "fighters": [ { @@ -145440,29 +116047,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 707, - "facing_y": 707, - "get_up_count": 8, + "facing_x": 708, + "facing_y": 708, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 272, - "maximum_stamina": 984, + "last_input_sequence": 192, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -145477,11 +116085,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -77, - "y": -77 + "x": -106, + "y": -106 }, { "action": null, @@ -145497,29 +116105,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -707, - "facing_y": -707, - "get_up_count": 8, + "facing_x": -708, + "facing_y": -708, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -145527,37 +116136,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 89, - "y": 89 + "x": 117, + "y": 117 } ], "phase": "fight", - "phase_ticks_remaining": 999930, + "phase_ticks_remaining": 999962, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -38, + "y": 48 + }, "result": null, "round_number": 2, - "tick": 1072 + "tick": 735 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1072 + "tick": 735 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "80d5ebf02fb82e8d9db1a6b84ce9ba64cb7acd8fad1fb384753ae497552db9b9", + "checksum": "b67cce61cf161c420c2c5af49fadabe4816575b1b8838d5de55125182c0ba785", "events": [], "fighters": [ { @@ -145574,29 +116203,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 709, - "facing_y": 709, - "get_up_count": 8, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 273, - "maximum_stamina": 984, + "last_input_sequence": 193, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -145611,11 +116241,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -73, - "y": -73 + "x": -99, + "y": -99 }, { "action": null, @@ -145631,29 +116261,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -709, - "facing_y": -709, - "get_up_count": 8, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -145661,37 +116292,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 85, - "y": 85 + "x": 110, + "y": 110 } ], "phase": "fight", - "phase_ticks_remaining": 999929, + "phase_ticks_remaining": 999961, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -38, + "y": 48 + }, "result": null, "round_number": 2, - "tick": 1073 + "tick": 736 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1073 + "tick": 736 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "5635ebc500c1184b5c07b93fea7e952d93c1e30fcac55a1eacde299d5ef0f7c9", + "checksum": "352c544b6f8ae2058b2ed21b4f7ca52e4d27aa07f58f0e0dea51dcf13375ae8b", "events": [], "fighters": [ { @@ -145708,29 +116359,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 708, "facing_y": 708, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 274, - "maximum_stamina": 984, + "last_input_sequence": 194, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -145745,11 +116397,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -69, - "y": -69 + "x": -92, + "y": -92 }, { "action": null, @@ -145765,29 +116417,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -708, "facing_y": -708, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -145795,37 +116448,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 81, - "y": 81 + "x": 103, + "y": 103 } ], "phase": "fight", - "phase_ticks_remaining": 999928, + "phase_ticks_remaining": 999960, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -38, + "y": 48 + }, "result": null, "round_number": 2, - "tick": 1074 + "tick": 737 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1074 + "tick": 737 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "3b3213250170cd350d6b38834d8a1f8f78c8bb5c90e52287786acac64572d8e3", + "checksum": "2a77e50c24feb2f2a3bf7eec1074712f18169199fb8efdf39104d820cad57fd5", "events": [], "fighters": [ { @@ -145842,29 +116515,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 707, - "facing_y": 707, - "get_up_count": 8, + "facing_x": 709, + "facing_y": 709, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 275, - "maximum_stamina": 984, + "last_input_sequence": 195, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -145879,11 +116553,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -64, - "y": -64 + "x": -85, + "y": -85 }, { "action": null, @@ -145899,29 +116573,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -707, - "facing_y": -707, - "get_up_count": 8, + "facing_x": -709, + "facing_y": -709, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -145929,37 +116604,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 76, - "y": 76 + "x": 96, + "y": 96 } ], "phase": "fight", - "phase_ticks_remaining": 999927, + "phase_ticks_remaining": 999959, + "referee": { + "alive": true, + "facing_x": 709, + "facing_y": -709, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -1, + "velocity_y": 1, + "x": -39, + "y": 49 + }, "result": null, "round_number": 2, - "tick": 1075 + "tick": 738 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1075 + "tick": 738 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "dff1449eda6c00559e5c978d431ab48856d23f8f53e712785688720223e8db0b", + "checksum": "93c84443d39a80d51245f28c586c4a680765bdd7f910c06a5b2db7086c0cbffa", "events": [], "fighters": [ { @@ -145976,29 +116671,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 710, - "facing_y": 710, - "get_up_count": 8, + "facing_x": 709, + "facing_y": 709, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 276, - "maximum_stamina": 984, + "last_input_sequence": 196, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -146013,11 +116709,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -60, - "y": -60 + "x": -78, + "y": -78 }, { "action": null, @@ -146033,29 +116729,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -710, - "facing_y": -710, - "get_up_count": 8, + "facing_x": -709, + "facing_y": -709, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -146063,37 +116760,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 72, - "y": 72 + "x": 90, + "y": 90 } ], "phase": "fight", - "phase_ticks_remaining": 999926, + "phase_ticks_remaining": 999958, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 2, + "velocity_y": 0, + "x": -37, + "y": 49 + }, "result": null, "round_number": 2, - "tick": 1076 + "tick": 739 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1076 + "tick": 739 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "8d025c2179109c8ce8d423efb57b717bec0994cc53ea2f18b76375aae2b75d23", + "checksum": "88656edf736e0fd84387d76a0ef21c118e7d134b4b794e2c7905cb9efbfe4e9d", "events": [], "fighters": [ { @@ -146110,29 +116827,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 709, - "facing_y": 709, - "get_up_count": 8, + "facing_x": 708, + "facing_y": 708, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 277, - "maximum_stamina": 984, + "last_input_sequence": 197, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -146147,11 +116865,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -56, - "y": -56 + "x": -71, + "y": -71 }, { "action": null, @@ -146167,29 +116885,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -709, - "facing_y": -709, - "get_up_count": 8, + "facing_x": -708, + "facing_y": -708, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -146197,37 +116916,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 68, - "y": 68 + "x": 83, + "y": 83 } ], "phase": "fight", - "phase_ticks_remaining": 999925, + "phase_ticks_remaining": 999957, + "referee": { + "alive": true, + "facing_x": 709, + "facing_y": -709, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -1, + "velocity_y": 1, + "x": -38, + "y": 50 + }, "result": null, "round_number": 2, - "tick": 1077 + "tick": 740 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1077 + "tick": 740 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "8ac93c121a4879fe203cc3f8ad26c58305b4247e891939cb354f6e0cada162bf", + "checksum": "0507f3f635307e9a24529df82dc9c801fb2e5c58fa3db87211866b373d72f466", "events": [], "fighters": [ { @@ -146244,29 +116983,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 708, - "facing_y": 708, - "get_up_count": 8, + "facing_x": 709, + "facing_y": 709, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 278, - "maximum_stamina": 984, + "last_input_sequence": 198, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -146281,11 +117021,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -52, - "y": -52 + "x": -64, + "y": -64 }, { "action": null, @@ -146301,29 +117041,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -708, - "facing_y": -708, - "get_up_count": 8, + "facing_x": -709, + "facing_y": -709, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -146331,37 +117072,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 64, - "y": 64 + "x": 76, + "y": 76 } ], "phase": "fight", - "phase_ticks_remaining": 999924, + "phase_ticks_remaining": 999956, + "referee": { + "alive": true, + "facing_x": 709, + "facing_y": -709, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -38, + "y": 50 + }, "result": null, "round_number": 2, - "tick": 1078 + "tick": 741 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1078 + "tick": 741 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "de3ad81c36450930bad7e9ca3d2d43085402c1f1ab43223fc78e6dd517659235", + "checksum": "bd23c5aff20379aa80658c245a6039e30554e936d371a5b9ea33dc47314ec979", "events": [], "fighters": [ { @@ -146378,29 +117139,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 707, - "facing_y": 707, - "get_up_count": 8, + "facing_x": 710, + "facing_y": 710, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 279, - "maximum_stamina": 984, + "last_input_sequence": 199, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -146415,11 +117177,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -47, - "y": -47 + "x": -57, + "y": -57 }, { "action": null, @@ -146435,29 +117197,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -707, - "facing_y": -707, - "get_up_count": 8, + "facing_x": -710, + "facing_y": -710, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -146465,37 +117228,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 60, - "y": 60 + "x": 69, + "y": 69 } ], "phase": "fight", - "phase_ticks_remaining": 999923, + "phase_ticks_remaining": 999955, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 1, + "velocity_y": -1, + "x": -37, + "y": 49 + }, "result": null, "round_number": 2, - "tick": 1079 + "tick": 742 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1079 + "tick": 742 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "1bf746ef81c5d81ad2673b5665538de1678a8449c69d3f81228bfa739d2119be", + "checksum": "072611112db6ebe55b636700051072b138fe8f510f0b4d69409cdd7055c7a66f", "events": [], "fighters": [ { @@ -146512,29 +117295,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 708, - "facing_y": 708, - "get_up_count": 8, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 280, - "maximum_stamina": 984, + "last_input_sequence": 200, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -146549,11 +117333,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -43, - "y": -43 + "x": -50, + "y": -50 }, { "action": null, @@ -146569,29 +117353,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -708, - "facing_y": -708, - "get_up_count": 8, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -146599,37 +117384,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 56, - "y": 56 + "x": 62, + "y": 62 } ], "phase": "fight", - "phase_ticks_remaining": 999922, + "phase_ticks_remaining": 999954, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -37, + "y": 49 + }, "result": null, "round_number": 2, - "tick": 1080 + "tick": 743 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1080 + "tick": 743 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "d20c791e2960556cfdc7831ebdd561383ecab95d316ee794cd20ef30685a84be", + "checksum": "01cddbceff84086466f68fd05da0f0c126986ddace40ad8f1514adbd4afe2305", "events": [], "fighters": [ { @@ -146646,29 +117451,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 707, - "facing_y": 707, - "get_up_count": 8, + "facing_x": 708, + "facing_y": 708, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 281, - "maximum_stamina": 984, + "last_input_sequence": 201, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -146683,11 +117489,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -39, - "y": -39 + "x": -43, + "y": -43 }, { "action": null, @@ -146703,29 +117509,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -707, - "facing_y": -707, - "get_up_count": 8, + "facing_x": -708, + "facing_y": -708, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -146733,37 +117540,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 52, - "y": 52 + "x": 56, + "y": 56 } ], "phase": "fight", - "phase_ticks_remaining": 999921, + "phase_ticks_remaining": 999953, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -37, + "y": 49 + }, "result": null, "round_number": 2, - "tick": 1081 + "tick": 744 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1081 + "tick": 744 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "53f0186aed1f816bfb644e0e2411e77518b9309b29ed0fef93d44fbddcc926cf", + "checksum": "e579bfb53bf363119a8b63b0a42e0db29294aa5cded2178d0c925c51966ef649", "events": [], "fighters": [ { @@ -146780,29 +117607,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 710, - "facing_y": 710, - "get_up_count": 8, + "facing_x": 707, + "facing_y": 707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 282, - "maximum_stamina": 984, + "last_input_sequence": 202, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -146817,11 +117645,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -35, - "y": -35 + "x": -36, + "y": -36 }, { "action": null, @@ -146837,29 +117665,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -710, - "facing_y": -710, - "get_up_count": 8, + "facing_x": -707, + "facing_y": -707, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -146867,37 +117696,57 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 48, - "y": 48 + "x": 49, + "y": 49 } ], "phase": "fight", - "phase_ticks_remaining": 999920, + "phase_ticks_remaining": 999952, + "referee": { + "alive": true, + "facing_x": 716, + "facing_y": -716, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -37, + "y": 49 + }, "result": null, "round_number": 2, - "tick": 1082 + "tick": 745 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1082 + "tick": 745 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "3731905ecacb071dfd5bed182d0b4907280a68e4a578323e238caf30c5233491", + "checksum": "e96ce809f82c9c3a480bf6fb21d5e079a9d2da7c4ccffce70f1134320646ea04", "events": [], "fighters": [ { @@ -146914,29 +117763,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 964, + "conditioning": 988, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 709, - "facing_y": 709, - "get_up_count": 8, + "facing_x": 708, + "facing_y": 708, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 283, - "maximum_stamina": 984, + "last_input_sequence": 203, + "maximum_stamina": 997, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 984, + "stamina": 997, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -146951,11 +117801,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 4, - "velocity_y": 4, + "velocity_x": 7, + "velocity_y": 7, "warnings": 0, - "x": -30, - "y": -30 + "x": -29, + "y": -29 }, { "action": null, @@ -146971,29 +117821,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -709, - "facing_y": -709, - "get_up_count": 8, + "facing_x": -708, + "facing_y": -708, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 985, + "maximum_stamina": 992, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 985, + "stamina": 992, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -147001,100 +117852,121 @@ "trauma": { "bleeding": 0, "body": 0, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -4, - "velocity_y": -4, + "velocity_x": -7, + "velocity_y": -7, "warnings": 1, - "x": 44, - "y": 44 + "x": 42, + "y": 42 } ], "phase": "fight", - "phase_ticks_remaining": 999919, + "phase_ticks_remaining": 999951, + "referee": { + "alive": true, + "facing_x": 709, + "facing_y": -709, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -1, + "velocity_y": 1, + "x": -38, + "y": 50 + }, "result": null, "round_number": 2, - "tick": 1083 + "tick": 746 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1083 + "tick": 746 }, { "attack_one": { - "active": 4, + "active": 3, "age": 0, "class": "hook", "combo_bonus": 0, "hand": "left", "power": "power", - "recovery": 15, + "recovery": 10, "resolved": false, - "startup": 10, + "startup": 9, "target": "body" }, "attack_two": null, "snapshot": { "payload": { - "checksum": "cc5e2eeace4b08675ed6e4177bde5248f1b59b1b68fb7fac3b11be818556c276", + "checksum": "b1f6821e6decf4ffe8ac905f18f5b33546c3c5807251fb67919033213a6b5207", "events": [ { - "action_id": "one@1084", + "action_id": "one@747", "actor_id": "one", "amount": 0, "blood": 0, "detail": "left:hook:body", "direction": 0, - "event_id": 46, + "event_id": 47, "kind": "punch_start", "target_id": null, - "tick": 1084 + "tick": 747 } ], "fighters": [ { "action": "hook", - "action_active_ticks": 4, + "action_active_ticks": 3, "action_contact_tick": null, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 711, - "facing_y": 711, - "get_up_count": 8, + "facing_x": 710, + "facing_y": 710, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 858, + "stamina": 930, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -147112,8 +117984,8 @@ "velocity_x": 2, "velocity_y": 2, "warnings": 0, - "x": -28, - "y": -28 + "x": -27, + "y": -27 }, { "action": null, @@ -147129,29 +118001,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -711, - "facing_y": -711, - "get_up_count": 8, + "facing_x": -710, + "facing_y": -710, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 752, + "maximum_stamina": 817, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 302, + "stamina": 303, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -147159,8 +118032,8 @@ "trauma": { "bleeding": 0, "body": 700, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -147169,222 +118042,98 @@ "velocity_x": -2, "velocity_y": -2, "warnings": 1, - "x": 42, - "y": 42 + "x": 40, + "y": 40 } ], "phase": "fight", - "phase_ticks_remaining": 999918, + "phase_ticks_remaining": 999950, + "referee": { + "alive": true, + "facing_x": 709, + "facing_y": -709, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -38, + "y": 50 + }, "result": null, "round_number": 2, - "tick": 1084 + "tick": 747 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1084 + "tick": 747 }, { "attack_one": { - "active": 4, + "active": 3, "age": 1, "class": "hook", "combo_bonus": 0, "hand": "left", "power": "power", - "recovery": 15, - "resolved": false, - "startup": 10, - "target": "body" - }, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "460076fd3788357ca952dcebd86f71f7ced084abdb022ca52bb76808fa38b480", - "events": [], - "fighters": [ - { - "action": "hook", - "action_active_ticks": 4, - "action_contact_tick": null, - "action_hand": "left", - "action_id": "one@1084", - "action_key": "hook:left:body:power", - "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, - "action_target": "body", - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 954, - "corner_choice": "cut", - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 711, - "facing_y": 711, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 859, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 1, - "velocity_y": 1, - "warnings": 0, - "x": -27, - "y": -27 - }, - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 965, - "corner_choice": "swelling", - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -714, - "facing_y": -714, - "get_up_count": 8, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 1, - "last_input_sequence": -1, - "maximum_stamina": 752, - "player_id": "two", - "poise": 508, - "queued_actions": 0, - "stamina": 304, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 700, - "head": 307, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": -1, - "velocity_y": -1, - "warnings": 1, - "x": 41, - "y": 41 - } - ], - "phase": "fight", - "phase_ticks_remaining": 999917, - "result": null, - "round_number": 2, - "tick": 1085 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 1085 - }, - { - "attack_one": { - "active": 4, - "age": 2, - "class": "hook", - "combo_bonus": 0, - "hand": "left", - "power": "power", - "recovery": 15, + "recovery": 10, "resolved": false, - "startup": 10, + "startup": 9, "target": "body" }, "attack_two": null, "snapshot": { "payload": { - "checksum": "37c190fa78f62adfdf2bd6e1a2ae9213c3d83fd4745961ca9055241906ec3bdf", + "checksum": "66ed2d8be06ea021f7cb427cdd6ab274ae54d323e6be3d1f1a8bb0f97ec4482d", "events": [], "fighters": [ { "action": "hook", - "action_active_ticks": 4, + "action_active_ticks": 3, "action_contact_tick": null, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 711, - "facing_y": 711, - "get_up_count": 8, + "facing_x": 710, + "facing_y": 710, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 860, + "stamina": 931, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -147399,11 +118148,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": 1, - "velocity_y": 1, + "velocity_x": 0, + "velocity_y": 0, "warnings": 0, - "x": -27, - "y": -27 + "x": -26, + "y": -26 }, { "action": null, @@ -147419,27 +118168,28 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -708, - "facing_y": -708, - "get_up_count": 8, + "facing_x": -712, + "facing_y": -712, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 752, + "maximum_stamina": 817, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, "stamina": 306, "stance": "orthodox", @@ -147449,87 +118199,108 @@ "trauma": { "bleeding": 0, "body": 700, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, "swelling": 0 }, - "velocity_x": -1, - "velocity_y": -1, + "velocity_x": 0, + "velocity_y": 0, "warnings": 1, "x": 40, "y": 40 } ], "phase": "fight", - "phase_ticks_remaining": 999916, + "phase_ticks_remaining": 999949, + "referee": { + "alive": true, + "facing_x": 709, + "facing_y": -709, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 1, + "velocity_y": 1, + "x": -37, + "y": 51 + }, "result": null, "round_number": 2, - "tick": 1086 + "tick": 748 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1086 + "tick": 748 }, { "attack_one": { - "active": 4, - "age": 3, + "active": 3, + "age": 2, "class": "hook", "combo_bonus": 0, "hand": "left", "power": "power", - "recovery": 15, + "recovery": 10, "resolved": false, - "startup": 10, + "startup": 9, "target": "body" }, "attack_two": null, "snapshot": { "payload": { - "checksum": "0505915e46d285df038ce4ae45d3373eb3bcb094bca9550db582796ddeb67b60", + "checksum": "a9dd90d21221b1a3fcc9cf509001eee0dcbb57139163aa9104ced16ea3a48b4f", "events": [], "fighters": [ { "action": "hook", - "action_active_ticks": 4, + "action_active_ticks": 3, "action_contact_tick": null, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 711, - "facing_y": 711, - "get_up_count": 8, + "facing_x": 710, + "facing_y": 710, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 861, + "stamina": 932, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -147564,29 +118335,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, - "facing_x": -712, - "facing_y": -712, - "get_up_count": 8, + "facing_x": -709, + "facing_y": -709, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 752, + "maximum_stamina": 817, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 308, + "stamina": 309, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -147594,8 +118366,8 @@ "trauma": { "bleeding": 0, "body": 700, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -147609,72 +118381,93 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999915, + "phase_ticks_remaining": 999948, + "referee": { + "alive": true, + "facing_x": 709, + "facing_y": -709, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -37, + "y": 51 + }, "result": null, "round_number": 2, - "tick": 1087 + "tick": 749 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1087 + "tick": 749 }, { "attack_one": { - "active": 4, - "age": 4, + "active": 3, + "age": 3, "class": "hook", "combo_bonus": 0, "hand": "left", "power": "power", - "recovery": 15, + "recovery": 10, "resolved": false, - "startup": 10, + "startup": 9, "target": "body" }, "attack_two": null, "snapshot": { "payload": { - "checksum": "b37d2fa78d9bf0608eede68347fe913de7d71640e31ac6732786cee9a2b1a808", + "checksum": "f5826cef2c56cbc12a5f60d6951578494ed46989e5e427b195fe429aacd64ae6", "events": [], "fighters": [ { "action": "hook", - "action_active_ticks": 4, + "action_active_ticks": 3, "action_contact_tick": null, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 711, - "facing_y": 711, - "get_up_count": 8, + "facing_x": 710, + "facing_y": 710, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 862, + "stamina": 933, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -147709,29 +118502,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -709, "facing_y": -709, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 752, + "maximum_stamina": 817, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 310, + "stamina": 312, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -147739,8 +118533,8 @@ "trauma": { "bleeding": 0, "body": 700, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -147754,72 +118548,93 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999914, + "phase_ticks_remaining": 999947, + "referee": { + "alive": true, + "facing_x": 709, + "facing_y": -709, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -37, + "y": 51 + }, "result": null, "round_number": 2, - "tick": 1088 + "tick": 750 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1088 + "tick": 750 }, { "attack_one": { - "active": 4, - "age": 5, + "active": 3, + "age": 4, "class": "hook", "combo_bonus": 0, "hand": "left", "power": "power", - "recovery": 15, + "recovery": 10, "resolved": false, - "startup": 10, + "startup": 9, "target": "body" }, "attack_two": null, "snapshot": { "payload": { - "checksum": "8a4c7864f55f70a237ea6d60fdd9a49f9f510b6d1ee3b3b34d1275b9e306e051", + "checksum": "1b10fc6d07b858e823e14fbdb4b90176b134c0fdf9ab7e61d4ea7e4896a198ef", "events": [], "fighters": [ { "action": "hook", - "action_active_ticks": 4, + "action_active_ticks": 3, "action_contact_tick": null, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 711, - "facing_y": 711, - "get_up_count": 8, + "facing_x": 710, + "facing_y": 710, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 863, + "stamina": 934, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -147854,29 +118669,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -709, "facing_y": -709, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 752, + "maximum_stamina": 817, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 312, + "stamina": 315, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -147884,8 +118700,8 @@ "trauma": { "bleeding": 0, "body": 700, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -147899,72 +118715,93 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999913, + "phase_ticks_remaining": 999946, + "referee": { + "alive": true, + "facing_x": 709, + "facing_y": -709, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -37, + "y": 51 + }, "result": null, "round_number": 2, - "tick": 1089 + "tick": 751 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1089 + "tick": 751 }, { "attack_one": { - "active": 4, - "age": 6, + "active": 3, + "age": 5, "class": "hook", "combo_bonus": 0, "hand": "left", "power": "power", - "recovery": 15, + "recovery": 10, "resolved": false, - "startup": 10, + "startup": 9, "target": "body" }, "attack_two": null, "snapshot": { "payload": { - "checksum": "6059859ca5cf213bea40b4de9d0020b6afe352b9d3a1fe0108258610b4b7bf6a", + "checksum": "5228d1f35590c4ebd3456c2d59f1588f2a1fc592b02ca917848d284db9746db4", "events": [], "fighters": [ { "action": "hook", - "action_active_ticks": 4, + "action_active_ticks": 3, "action_contact_tick": null, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 711, - "facing_y": 711, - "get_up_count": 8, + "facing_x": 710, + "facing_y": 710, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 864, + "stamina": 935, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -147999,29 +118836,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -709, "facing_y": -709, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 752, + "maximum_stamina": 817, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 314, + "stamina": 318, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -148029,8 +118867,8 @@ "trauma": { "bleeding": 0, "body": 700, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -148044,72 +118882,93 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999912, + "phase_ticks_remaining": 999945, + "referee": { + "alive": true, + "facing_x": 709, + "facing_y": -709, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -37, + "y": 51 + }, "result": null, "round_number": 2, - "tick": 1090 + "tick": 752 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1090 + "tick": 752 }, { "attack_one": { - "active": 4, - "age": 7, + "active": 3, + "age": 6, "class": "hook", "combo_bonus": 0, "hand": "left", "power": "power", - "recovery": 15, + "recovery": 10, "resolved": false, - "startup": 10, + "startup": 9, "target": "body" }, "attack_two": null, "snapshot": { "payload": { - "checksum": "173240bb33683a3558646d464b55d329ac805b1a62988088f7bcbe3498ed52ca", + "checksum": "f3f1177c44c09647ac8e35d6c4876c15c3b01e61e0291a6292ccec9e3d21374a", "events": [], "fighters": [ { "action": "hook", - "action_active_ticks": 4, + "action_active_ticks": 3, "action_contact_tick": null, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 711, - "facing_y": 711, - "get_up_count": 8, + "facing_x": 710, + "facing_y": 710, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 865, + "stamina": 937, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -148144,29 +119003,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -709, "facing_y": -709, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 752, + "maximum_stamina": 817, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 316, + "stamina": 322, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -148174,8 +119034,8 @@ "trauma": { "bleeding": 0, "body": 700, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -148189,72 +119049,93 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999911, + "phase_ticks_remaining": 999944, + "referee": { + "alive": true, + "facing_x": 709, + "facing_y": -709, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -37, + "y": 51 + }, "result": null, "round_number": 2, - "tick": 1091 + "tick": 753 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1091 + "tick": 753 }, { "attack_one": { - "active": 4, - "age": 8, + "active": 3, + "age": 7, "class": "hook", "combo_bonus": 0, "hand": "left", "power": "power", - "recovery": 15, + "recovery": 10, "resolved": false, - "startup": 10, + "startup": 9, "target": "body" }, "attack_two": null, "snapshot": { "payload": { - "checksum": "f359587a7a35628c483120b5ec68d95295ec20b13954358a396b13ee99059e5d", + "checksum": "7dd96fcb4bf70e4823221348e184a2bec6fda8d2466a93d886092853d33aac07", "events": [], "fighters": [ { "action": "hook", - "action_active_ticks": 4, + "action_active_ticks": 3, "action_contact_tick": null, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 711, - "facing_y": 711, - "get_up_count": 8, + "facing_x": 710, + "facing_y": 710, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 866, + "stamina": 939, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -148289,29 +119170,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -709, "facing_y": -709, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 752, + "maximum_stamina": 817, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 318, + "stamina": 326, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -148319,8 +119201,8 @@ "trauma": { "bleeding": 0, "body": 700, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -148334,72 +119216,93 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999910, + "phase_ticks_remaining": 999943, + "referee": { + "alive": true, + "facing_x": 709, + "facing_y": -709, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -37, + "y": 51 + }, "result": null, "round_number": 2, - "tick": 1092 + "tick": 754 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1092 + "tick": 754 }, { "attack_one": { - "active": 4, - "age": 9, + "active": 3, + "age": 8, "class": "hook", "combo_bonus": 0, "hand": "left", "power": "power", - "recovery": 15, + "recovery": 10, "resolved": false, - "startup": 10, + "startup": 9, "target": "body" }, "attack_two": null, "snapshot": { "payload": { - "checksum": "2663a59601e8f93056e7923b0b558f46b3a8c2d6e8098de8de2bb3b5694d60c1", + "checksum": "97102ae5b7de4574b981281c21b4bc6e5b35d26ccde7c61e3265f6aee96c4aef", "events": [], "fighters": [ { "action": "hook", - "action_active_ticks": 4, + "action_active_ticks": 3, "action_contact_tick": null, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 711, - "facing_y": 711, - "get_up_count": 8, + "facing_x": 710, + "facing_y": 710, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 867, + "stamina": 941, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -148434,29 +119337,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 965, + "conditioning": 972, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -709, "facing_y": -709, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 752, + "maximum_stamina": 817, "player_id": "two", - "poise": 508, + "poise": 543, "queued_actions": 0, - "stamina": 320, + "stamina": 330, "stance": "orthodox", "stunned_ticks": 0, "style": "slugger", @@ -148464,8 +119368,8 @@ "trauma": { "bleeding": 0, "body": 700, - "head": 307, - "left_cut": 0, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -148479,97 +119383,118 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999909, + "phase_ticks_remaining": 999942, + "referee": { + "alive": true, + "facing_x": 709, + "facing_y": -709, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -37, + "y": 51 + }, "result": null, "round_number": 2, - "tick": 1093 + "tick": 755 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1093 + "tick": 755 }, { "attack_one": { - "active": 4, - "age": 10, + "active": 3, + "age": 9, "class": "hook", "combo_bonus": 0, "hand": "left", "power": "power", - "recovery": 15, + "recovery": 10, "resolved": true, - "startup": 10, + "startup": 9, "target": "body" }, "attack_two": null, "snapshot": { "payload": { - "checksum": "108d3c9a0190a2fe6324e54a863e74e1ddabedfa8dc2713f067db9b666e771c7", + "checksum": "3508212e5c127dc9102858ba82eced1dd965e4bd2378041ae719f74df988b6d3", "events": [ { - "action_id": "one@1084", + "action_id": "one@747", "actor_id": "one", - "amount": 84, - "blood": 21, + "amount": 104, + "blood": 34, "detail": "hook:body", "direction": 1, - "event_id": 47, + "event_id": 48, "kind": "hit", "target_id": "two", - "tick": 1094 + "tick": 756 }, { - "action_id": "one@1084", + "action_id": "one@747", "actor_id": "one", "amount": 10, "blood": 0, "detail": "", "direction": 0, - "event_id": 48, + "event_id": 49, "kind": "body_collapse", "target_id": "two", - "tick": 1094 + "tick": 756 } ], "fighters": [ { "action": "hook", - "action_active_ticks": 4, - "action_contact_tick": 1094, + "action_active_ticks": 3, + "action_contact_tick": 756, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 711, - "facing_y": 711, - "get_up_count": 8, + "facing_x": 710, + "facing_y": 710, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 868, + "stamina": 943, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -148604,38 +119529,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -709, "facing_y": -709, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", - "poise": 441, + "poise": 474, "queued_actions": 0, - "stamina": 246, + "stamina": 239, "stance": "orthodox", "stunned_ticks": 10, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -148649,72 +119575,93 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999908, + "phase_ticks_remaining": 999941, + "referee": { + "alive": true, + "facing_x": 709, + "facing_y": -709, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -37, + "y": 51 + }, "result": null, "round_number": 2, - "tick": 1094 + "tick": 756 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1094 + "tick": 756 }, { "attack_one": { - "active": 4, - "age": 11, + "active": 3, + "age": 10, "class": "hook", "combo_bonus": 0, "hand": "left", "power": "power", - "recovery": 15, + "recovery": 10, "resolved": true, - "startup": 10, + "startup": 9, "target": "body" }, "attack_two": null, "snapshot": { "payload": { - "checksum": "0680cd0c3e0f98378989691a735fb71f5dccd9bfb23afce18bf09580cebc2ace", + "checksum": "c47ff12a7153cbfb42032cd217da1466b1fd977134d32edc47d0bca0fababa78", "events": [], "fighters": [ { "action": "hook", - "action_active_ticks": 4, - "action_contact_tick": 1094, + "action_active_ticks": 3, + "action_contact_tick": 756, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 711, - "facing_y": 711, - "get_up_count": 8, + "facing_x": 710, + "facing_y": 710, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 869, + "stamina": 945, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -148749,38 +119696,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -709, "facing_y": -709, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", - "poise": 441, + "poise": 474, "queued_actions": 0, - "stamina": 247, + "stamina": 241, "stance": "orthodox", "stunned_ticks": 9, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -148794,72 +119742,93 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999907, + "phase_ticks_remaining": 999940, + "referee": { + "alive": true, + "facing_x": 709, + "facing_y": -709, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -37, + "y": 51 + }, "result": null, "round_number": 2, - "tick": 1095 + "tick": 757 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1095 + "tick": 757 }, { "attack_one": { - "active": 4, - "age": 12, + "active": 3, + "age": 11, "class": "hook", "combo_bonus": 0, "hand": "left", "power": "power", - "recovery": 15, + "recovery": 10, "resolved": true, - "startup": 10, + "startup": 9, "target": "body" }, "attack_two": null, "snapshot": { "payload": { - "checksum": "d3b9aa7f32a763aa7165c0292b8cdd1a55197c0b3648296b253ede6c4adc27b0", + "checksum": "08ab0f2892691abb8f4d237a8d3a4784302a3371f4671708ad77cba087a010e3", "events": [], "fighters": [ { "action": "hook", - "action_active_ticks": 4, - "action_contact_tick": 1094, + "action_active_ticks": 3, + "action_contact_tick": 756, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 711, - "facing_y": 711, - "get_up_count": 8, + "facing_x": 710, + "facing_y": 710, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 870, + "stamina": 947, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -148894,38 +119863,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -709, "facing_y": -709, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", - "poise": 441, + "poise": 474, "queued_actions": 0, - "stamina": 248, + "stamina": 243, "stance": "orthodox", "stunned_ticks": 8, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -148939,72 +119909,93 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999906, + "phase_ticks_remaining": 999939, + "referee": { + "alive": true, + "facing_x": 709, + "facing_y": -709, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -37, + "y": 51 + }, "result": null, "round_number": 2, - "tick": 1096 + "tick": 758 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1096 + "tick": 758 }, { "attack_one": { - "active": 4, - "age": 13, + "active": 3, + "age": 12, "class": "hook", "combo_bonus": 0, "hand": "left", "power": "power", - "recovery": 15, + "recovery": 10, "resolved": true, - "startup": 10, + "startup": 9, "target": "body" }, "attack_two": null, "snapshot": { "payload": { - "checksum": "1167f8f45562ee7aa680b29ee7d4311b13819c47cfce2d0a31dcc6cd2850b92d", + "checksum": "dc5f7afd738c4447f0f2c39a870ff070ddf5333d876b7512a61208630ff69781", "events": [], "fighters": [ { "action": "hook", - "action_active_ticks": 4, - "action_contact_tick": 1094, + "action_active_ticks": 3, + "action_contact_tick": 756, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 711, - "facing_y": 711, - "get_up_count": 8, + "facing_x": 710, + "facing_y": 710, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 871, + "stamina": 949, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -149039,38 +120030,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -709, "facing_y": -709, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", - "poise": 441, + "poise": 474, "queued_actions": 0, - "stamina": 249, + "stamina": 245, "stance": "orthodox", "stunned_ticks": 7, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -149084,72 +120076,93 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999905, + "phase_ticks_remaining": 999938, + "referee": { + "alive": true, + "facing_x": 709, + "facing_y": -709, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -37, + "y": 51 + }, "result": null, "round_number": 2, - "tick": 1097 + "tick": 759 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1097 + "tick": 759 }, { "attack_one": { - "active": 4, - "age": 14, + "active": 3, + "age": 13, "class": "hook", "combo_bonus": 0, "hand": "left", "power": "power", - "recovery": 15, + "recovery": 10, "resolved": true, - "startup": 10, + "startup": 9, "target": "body" }, "attack_two": null, "snapshot": { "payload": { - "checksum": "6abf06f917480c235cf3cb00768a2d1334aa3a21332ade04686130fd26eb7237", + "checksum": "fa5ecd1265a7313e7cc832ecc3e5d6be310da2413f0108a70021d14aced19063", "events": [], "fighters": [ { "action": "hook", - "action_active_ticks": 4, - "action_contact_tick": 1094, + "action_active_ticks": 3, + "action_contact_tick": 756, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 711, - "facing_y": 711, - "get_up_count": 8, + "facing_x": 709, + "facing_y": 709, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 872, + "stamina": 951, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -149184,38 +120197,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -709, "facing_y": -709, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", - "poise": 441, + "poise": 474, "queued_actions": 0, - "stamina": 250, + "stamina": 247, "stance": "orthodox", "stunned_ticks": 6, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -149229,72 +120243,93 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999904, + "phase_ticks_remaining": 999937, + "referee": { + "alive": true, + "facing_x": 709, + "facing_y": -709, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -37, + "y": 51 + }, "result": null, "round_number": 2, - "tick": 1098 + "tick": 760 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1098 + "tick": 760 }, { "attack_one": { - "active": 4, - "age": 15, + "active": 3, + "age": 14, "class": "hook", "combo_bonus": 0, "hand": "left", "power": "power", - "recovery": 15, + "recovery": 10, "resolved": true, - "startup": 10, + "startup": 9, "target": "body" }, "attack_two": null, "snapshot": { "payload": { - "checksum": "bf42af1ddc9fa547f06f03573c270754aec1fb875670d9154e92de24d567123f", + "checksum": "6bcae8bceb767fc694a3340ea534a92826bfb9b25fdb3b009b70c3ae1a6d2666", "events": [], "fighters": [ { "action": "hook", - "action_active_ticks": 4, - "action_contact_tick": 1094, + "action_active_ticks": 3, + "action_contact_tick": 756, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 709, "facing_y": 709, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 873, + "stamina": 953, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -149329,38 +120364,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -709, "facing_y": -709, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", - "poise": 441, + "poise": 474, "queued_actions": 0, - "stamina": 251, + "stamina": 249, "stance": "orthodox", "stunned_ticks": 5, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -149374,72 +120410,93 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999903, + "phase_ticks_remaining": 999936, + "referee": { + "alive": true, + "facing_x": 709, + "facing_y": -709, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -37, + "y": 51 + }, "result": null, "round_number": 2, - "tick": 1099 + "tick": 761 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1099 + "tick": 761 }, { "attack_one": { - "active": 4, - "age": 16, + "active": 3, + "age": 15, "class": "hook", "combo_bonus": 0, "hand": "left", "power": "power", - "recovery": 15, + "recovery": 10, "resolved": true, - "startup": 10, + "startup": 9, "target": "body" }, "attack_two": null, "snapshot": { "payload": { - "checksum": "99a281317cee61cf55235153874f937dbd455abac41f2502b75dc8b5af435bc0", + "checksum": "a61b8ca1b0cf8c6eee9b0775e689e4029a8ebf057c5ccd9ae5fbba576e624f21", "events": [], "fighters": [ { "action": "hook", - "action_active_ticks": 4, - "action_contact_tick": 1094, + "action_active_ticks": 3, + "action_contact_tick": 756, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 709, "facing_y": 709, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 874, + "stamina": 955, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -149474,38 +120531,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -709, "facing_y": -709, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", - "poise": 441, + "poise": 474, "queued_actions": 0, - "stamina": 252, + "stamina": 251, "stance": "orthodox", "stunned_ticks": 4, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -149519,72 +120577,93 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999902, + "phase_ticks_remaining": 999935, + "referee": { + "alive": true, + "facing_x": 709, + "facing_y": -709, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -37, + "y": 51 + }, "result": null, "round_number": 2, - "tick": 1100 + "tick": 762 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1100 + "tick": 762 }, { "attack_one": { - "active": 4, - "age": 17, + "active": 3, + "age": 16, "class": "hook", "combo_bonus": 0, "hand": "left", "power": "power", - "recovery": 15, + "recovery": 10, "resolved": true, - "startup": 10, + "startup": 9, "target": "body" }, "attack_two": null, "snapshot": { "payload": { - "checksum": "9f0b9bb0d12f57c461957345aece7f3fa4739960a5abab525ba9d429e5fbda57", + "checksum": "b936b3101963d8046c8ac6563ccb1dbcaedcf41f621809b8fa1e79efdb9d228a", "events": [], "fighters": [ { "action": "hook", - "action_active_ticks": 4, - "action_contact_tick": 1094, + "action_active_ticks": 3, + "action_contact_tick": 756, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 709, "facing_y": 709, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 875, + "stamina": 957, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -149619,27 +120698,28 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -709, "facing_y": -709, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", - "poise": 441, + "poise": 474, "queued_actions": 0, "stamina": 253, "stance": "orthodox", @@ -149648,9 +120728,9 @@ "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -149664,72 +120744,93 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999901, + "phase_ticks_remaining": 999934, + "referee": { + "alive": true, + "facing_x": 709, + "facing_y": -709, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -37, + "y": 51 + }, "result": null, "round_number": 2, - "tick": 1101 + "tick": 763 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1101 + "tick": 763 }, { "attack_one": { - "active": 4, - "age": 18, + "active": 3, + "age": 17, "class": "hook", "combo_bonus": 0, "hand": "left", "power": "power", - "recovery": 15, + "recovery": 10, "resolved": true, - "startup": 10, + "startup": 9, "target": "body" }, "attack_two": null, "snapshot": { "payload": { - "checksum": "bc5f45469b0afaaefc8a40fdce59b2d7f76ccf00bd3fa876c9260427d9581381", + "checksum": "80090bb0cb8c1c78e86f090c83e777ffa863e18527c2171e50a317660e30154e", "events": [], "fighters": [ { "action": "hook", - "action_active_ticks": 4, - "action_contact_tick": 1094, + "action_active_ticks": 3, + "action_contact_tick": 756, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 709, "facing_y": 709, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 876, + "stamina": 959, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -149764,38 +120865,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -709, "facing_y": -709, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", - "poise": 441, + "poise": 474, "queued_actions": 0, - "stamina": 254, + "stamina": 255, "stance": "orthodox", "stunned_ticks": 2, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -149809,72 +120911,93 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999900, + "phase_ticks_remaining": 999933, + "referee": { + "alive": true, + "facing_x": 709, + "facing_y": -709, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -37, + "y": 51 + }, "result": null, "round_number": 2, - "tick": 1102 + "tick": 764 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1102 + "tick": 764 }, { "attack_one": { - "active": 4, - "age": 19, + "active": 3, + "age": 18, "class": "hook", "combo_bonus": 0, "hand": "left", "power": "power", - "recovery": 15, + "recovery": 10, "resolved": true, - "startup": 10, + "startup": 9, "target": "body" }, "attack_two": null, "snapshot": { "payload": { - "checksum": "c7b9513c85b8a9ce43a133c98eee1c135391e74723b37700f8fc81ac2a959589", + "checksum": "280d6d18566191bf23caf061ad516fd6df1361c38a653c74414898db74aed70f", "events": [], "fighters": [ { "action": "hook", - "action_active_ticks": 4, - "action_contact_tick": 1094, + "action_active_ticks": 3, + "action_contact_tick": 756, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, "facing_x": 709, "facing_y": 709, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -149909,38 +121032,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -709, "facing_y": -709, - "get_up_count": 8, + "get_up_count": 5, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 1, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", - "poise": 441, + "poise": 474, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -149954,52 +121078,72 @@ } ], "phase": "fight", - "phase_ticks_remaining": 999899, + "phase_ticks_remaining": 999932, + "referee": { + "alive": true, + "facing_x": 709, + "facing_y": -709, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -37, + "y": 51 + }, "result": null, "round_number": 2, - "tick": 1103 + "tick": 765 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1103 + "tick": 765 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "95970bb92a41d9ae0972b9e6a37b6cacc64557fa881e9a8256109f4ae77d35bc", + "checksum": "f19acf2057748fc566d015b66ceb1434e17239c306f1cd081e553deba0eabae1", "events": [ { - "action_id": "one@1084", + "action_id": "one@747", "actor_id": "one", "amount": 2, "blood": 0, "detail": "body", "direction": 0, - "event_id": 49, + "event_id": 50, "kind": "knockdown", "target_id": "two", - "tick": 1104 + "tick": 766 } ], "fighters": [ { "action": "hook", - "action_active_ticks": 4, - "action_contact_tick": 1094, + "action_active_ticks": 3, + "action_contact_tick": 756, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", @@ -150009,19 +121153,20 @@ "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -150056,7 +121201,7 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", @@ -150070,24 +121215,25 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -150101,61 +121247,82 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 300, + "phase_ticks_remaining": 200, + "referee": { + "alive": true, + "facing_x": 1000, + "facing_y": -132, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -6, + "velocity_y": 0, + "x": -43, + "y": 51 + }, "result": null, "round_number": 2, - "tick": 1104 + "tick": 766 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1104 + "tick": 766 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "14ebc3a03c2aad2e4a3ab1dc5d210071728e5149dcde140cc02f84e2e65fd07a", + "checksum": "5db4d72a0c3a4b02b2069d6909c3857154a5ee187880ee2b2acec95e5f69cea4", "events": [], "fighters": [ { "action": "hook", - "action_active_ticks": 4, - "action_contact_tick": 1094, + "action_active_ticks": 3, + "action_contact_tick": 756, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 739, - "facing_y": 673, + "facing_x": 771, + "facing_y": 641, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -150170,11 +121337,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -28, - "y": -22 + "x": -31, + "y": -19 }, { "action": null, @@ -150190,7 +121357,7 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", @@ -150204,24 +121371,25 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -150235,61 +121403,82 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 299, + "phase_ticks_remaining": 199, + "referee": { + "alive": true, + "facing_x": 1000, + "facing_y": -123, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -6, + "velocity_y": 0, + "x": -49, + "y": 51 + }, "result": null, "round_number": 2, - "tick": 1105 + "tick": 767 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1105 + "tick": 767 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "e9047af585b7a79fa1a4fc42e510b36e7ec892a10869a37b8bd873b251967717", + "checksum": "2cbf399d5b2ca99455ebd4299df402355ab1ddf0a3b2c64ad9573c503d967dc8", "events": [], "fighters": [ { "action": "hook", - "action_active_ticks": 4, - "action_contact_tick": 1094, + "action_active_ticks": 3, + "action_contact_tick": 756, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 774, - "facing_y": 634, + "facing_x": 827, + "facing_y": 569, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -150304,11 +121493,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -32, - "y": -19 + "x": -37, + "y": -13 }, { "action": null, @@ -150324,7 +121513,7 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", @@ -150338,24 +121527,25 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -150369,61 +121559,82 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 298, + "phase_ticks_remaining": 198, + "referee": { + "alive": true, + "facing_x": 989, + "facing_y": -193, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -1, + "velocity_y": 0, + "x": -52, + "y": 58 + }, "result": null, "round_number": 2, - "tick": 1106 + "tick": 768 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1106 + "tick": 768 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "917abefa75d47272742dcbcb7e95083250a44200719b00555e3e2443acc9be60", + "checksum": "1e4ddd1b2d59f611ec5ae94f77994b710c404474f9cd872b40bb2d2377bb1eb5", "events": [], "fighters": [ { "action": "hook", - "action_active_ticks": 4, - "action_contact_tick": 1094, + "action_active_ticks": 3, + "action_contact_tick": 756, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 806, - "facing_y": 591, + "facing_x": 882, + "facing_y": 489, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -150438,11 +121649,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -35, - "y": -15 + "x": -43, + "y": -6 }, { "action": null, @@ -150458,7 +121669,7 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", @@ -150472,24 +121683,25 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -150503,61 +121715,82 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 297, + "phase_ticks_remaining": 197, + "referee": { + "alive": true, + "facing_x": 967, + "facing_y": -279, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 3, + "velocity_y": -1, + "x": -50, + "y": 66 + }, "result": null, "round_number": 2, - "tick": 1107 + "tick": 769 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1107 + "tick": 769 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "62a33feba859113ad70d31f3776a7cdcd8ebc782135805de7b546ad85e160539", + "checksum": "8f6e02d4d8a3ed4412dfc258c2e0ccae5b321bbea6025151b364f0846bb4eea2", "events": [], "fighters": [ { "action": "hook", - "action_active_ticks": 4, - "action_contact_tick": 1094, + "action_active_ticks": 3, + "action_contact_tick": 756, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 838, - "facing_y": 548, + "facing_x": 917, + "facing_y": 402, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -150572,11 +121805,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -38, - "y": -11 + "x": -49, + "y": 1 }, { "action": null, @@ -150592,7 +121825,7 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", @@ -150606,24 +121839,25 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -150637,61 +121871,82 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 296, + "phase_ticks_remaining": 196, + "referee": { + "alive": true, + "facing_x": 934, + "facing_y": -358, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 3, + "velocity_y": -1, + "x": -46, + "y": 73 + }, "result": null, "round_number": 2, - "tick": 1108 + "tick": 770 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1108 + "tick": 770 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "2aa8001d251254c10d08f7a1be5451ed717bef6e8f32c0d1626dde8e45d64cef", + "checksum": "95d62ea066eb83894df120a48193218068405c52b34c4c2d785cd4f0e363fc81", "events": [], "fighters": [ { "action": "hook", - "action_active_ticks": 4, - "action_contact_tick": 1094, + "action_active_ticks": 3, + "action_contact_tick": 756, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 872, - "facing_y": 500, + "facing_x": 950, + "facing_y": 320, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -150706,11 +121961,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -42, - "y": -7 + "x": -55, + "y": 8 }, { "action": null, @@ -150726,7 +121981,7 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", @@ -150740,24 +121995,25 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -150771,61 +122027,82 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 295, + "phase_ticks_remaining": 195, + "referee": { + "alive": true, + "facing_x": 901, + "facing_y": -439, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 2, + "velocity_y": -1, + "x": -42, + "y": 80 + }, "result": null, "round_number": 2, - "tick": 1109 + "tick": 771 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1109 + "tick": 771 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "6eb8270e6a11c7721ef4a14869693dc8ea7d06d717b9a7809e372c66dc47aa2b", + "checksum": "4f35bf27412992d1d7f871e605949f26751ad8852723a13865712d902f481d3a", "events": [], "fighters": [ { "action": "hook", - "action_active_ticks": 4, - "action_contact_tick": 1094, + "action_active_ticks": 3, + "action_contact_tick": 756, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 894, - "facing_y": 463, + "facing_x": 971, + "facing_y": 240, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -150840,11 +122117,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -45, - "y": -4 + "x": -61, + "y": 15 }, { "action": null, @@ -150860,7 +122137,7 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", @@ -150874,24 +122151,25 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -150905,61 +122183,82 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 294, + "phase_ticks_remaining": 194, + "referee": { + "alive": true, + "facing_x": 877, + "facing_y": -488, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 1, + "velocity_y": -1, + "x": -39, + "y": 84 + }, "result": null, "round_number": 2, - "tick": 1110 + "tick": 772 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1110 + "tick": 772 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "b3ed07a1a73cb81534d5596793cbdfcb8031bbfc8593398b0d65e75663e20af1", + "checksum": "5e9204de54f68dd2ecc4b2c7c31dbf2827651bca481cd9172d18ed5f235cd9d1", "events": [], "fighters": [ { "action": "hook", - "action_active_ticks": 4, - "action_contact_tick": 1094, + "action_active_ticks": 3, + "action_contact_tick": 756, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 916, - "facing_y": 416, + "facing_x": 990, + "facing_y": 177, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -150974,11 +122273,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -48, - "y": 0 + "x": -66, + "y": 21 }, { "action": null, @@ -150994,7 +122293,7 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", @@ -151008,24 +122307,25 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -151039,61 +122339,82 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 293, + "phase_ticks_remaining": 193, + "referee": { + "alive": true, + "facing_x": 855, + "facing_y": -533, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -37, + "y": 88 + }, "result": null, "round_number": 2, - "tick": 1111 + "tick": 773 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1111 + "tick": 773 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "0dd41850ecb6d35648652ed297ace3bf993cb8fdddbbb1e9c15079621090ed4a", + "checksum": "ed370f39406bd5c2609059a9c75691ec91d805ef4327b3bb58707a1421e82a62", "events": [], "fighters": [ { "action": "hook", - "action_active_ticks": 4, - "action_contact_tick": 1094, + "action_active_ticks": 3, + "action_contact_tick": 756, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 938, - "facing_y": 371, + "facing_x": 1000, + "facing_y": 107, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -151108,11 +122429,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -51, - "y": 4 + "x": -72, + "y": 28 }, { "action": null, @@ -151128,7 +122449,7 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", @@ -151142,24 +122463,25 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -151173,61 +122495,82 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 292, + "phase_ticks_remaining": 192, + "referee": { + "alive": true, + "facing_x": 833, + "facing_y": -566, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -35, + "y": 91 + }, "result": null, "round_number": 2, - "tick": 1112 + "tick": 774 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1112 + "tick": 774 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "ac5da59f7219b05452c164c2a67000b77dd1a7afc9a655933e2ccaf4d6e2f840", + "checksum": "3ff109e780902b5641e91aa0f400b1ad8878538a62ef44563b349a538b37d603", "events": [], "fighters": [ { "action": "hook", - "action_active_ticks": 4, - "action_contact_tick": 1094, + "action_active_ticks": 3, + "action_contact_tick": 756, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 950, - "facing_y": 320, + "facing_x": 1000, + "facing_y": 42, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -151242,11 +122585,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -55, - "y": 8 + "x": -78, + "y": 35 }, { "action": null, @@ -151262,7 +122605,7 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", @@ -151276,24 +122619,25 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -151307,61 +122651,82 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 291, + "phase_ticks_remaining": 191, + "referee": { + "alive": true, + "facing_x": 811, + "facing_y": -588, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -33, + "y": 93 + }, "result": null, "round_number": 2, - "tick": 1113 + "tick": 775 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1113 + "tick": 775 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "0219eb05eca32d7e56d7b1485e6cd4d6d3dbd4af15220ed79b347016a8312e48", + "checksum": "c35f36405fe918b97e188e383f32d7ecd1db1a9ee499dc0a0f6927181373e3ed", "events": [], "fighters": [ { "action": "hook", - "action_active_ticks": 4, - "action_contact_tick": 1094, + "action_active_ticks": 3, + "action_contact_tick": 756, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 970, - "facing_y": 277, + "facing_x": 1000, + "facing_y": -16, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -151376,11 +122741,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -58, - "y": 12 + "x": -84, + "y": 42 }, { "action": null, @@ -151396,7 +122761,7 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", @@ -151410,24 +122775,25 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -151441,61 +122807,82 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 290, + "phase_ticks_remaining": 190, + "referee": { + "alive": true, + "facing_x": 811, + "facing_y": -588, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -33, + "y": 93 + }, "result": null, "round_number": 2, - "tick": 1114 + "tick": 776 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1114 + "tick": 776 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "08c996222ae8282699bed9606349e14143c70e5b0f87bfd4aa9b5774b0d00508", + "checksum": "fb825aa49029849cf56bf2cc4b059fcf6eb82a7952bf5cc784f8cf21dab2ec61", "events": [], "fighters": [ { "action": "hook", - "action_active_ticks": 4, - "action_contact_tick": 1094, + "action_active_ticks": 3, + "action_contact_tick": 756, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 971, - "facing_y": 240, + "facing_x": 1000, + "facing_y": -69, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -151510,11 +122897,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -61, - "y": 15 + "x": -90, + "y": 49 }, { "action": null, @@ -151530,7 +122917,7 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", @@ -151544,24 +122931,25 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -151575,61 +122963,82 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 289, + "phase_ticks_remaining": 189, + "referee": { + "alive": true, + "facing_x": 811, + "facing_y": -588, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -33, + "y": 93 + }, "result": null, "round_number": 2, - "tick": 1115 + "tick": 777 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1115 + "tick": 777 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "822a814790575baffb7e83a0decd67dbc1561fb736567ab8f895a67237185da4", + "checksum": "f9eb3462cd0cfc494f5319146023dd4bd7841546fa2cc18be8c82e35831cb61e", "events": [], "fighters": [ { "action": "hook", - "action_active_ticks": 4, - "action_contact_tick": 1094, + "action_active_ticks": 3, + "action_contact_tick": 756, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 981, - "facing_y": 196, + "facing_x": 1000, + "facing_y": -110, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -151644,11 +123053,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -65, - "y": 19 + "x": -96, + "y": 55 }, { "action": null, @@ -151664,7 +123073,7 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", @@ -151678,24 +123087,25 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -151709,61 +123119,82 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 288, + "phase_ticks_remaining": 188, + "referee": { + "alive": true, + "facing_x": 811, + "facing_y": -588, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -33, + "y": 93 + }, "result": null, "round_number": 2, - "tick": 1116 + "tick": 778 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1116 + "tick": 778 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "f8366ff320d5fa34214d2ce8c56a5fc0ac10cc8d5ffd61a8abcc31fa7f96568a", + "checksum": "fe3a03dbb4843937bed41506356714dfe9efd2764a69fc3f24ae77c3ea40ec15", "events": [], "fighters": [ { "action": "hook", - "action_active_ticks": 4, - "action_contact_tick": 1094, + "action_active_ticks": 3, + "action_contact_tick": 756, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 990, - "facing_y": 155, + "facing_x": 993, + "facing_y": -153, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -151778,11 +123209,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -68, - "y": 23 + "x": -102, + "y": 62 }, { "action": null, @@ -151798,7 +123229,7 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", @@ -151812,24 +123243,25 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -151843,61 +123275,82 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 287, + "phase_ticks_remaining": 187, + "referee": { + "alive": true, + "facing_x": 811, + "facing_y": -588, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -33, + "y": 93 + }, "result": null, "round_number": 2, - "tick": 1117 + "tick": 779 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1117 + "tick": 779 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "4ffeebc7ca88830e91f95f800dc961dd2cfb1e19c37e523243176c7aeaed1d1d", + "checksum": "498ac0919493ed693f8cd52745eb91001a6c7ec08e16fbda88f1dc078c9b2877", "events": [], "fighters": [ { "action": "hook", - "action_active_ticks": 4, - "action_contact_tick": 1094, + "action_active_ticks": 3, + "action_contact_tick": 756, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": 117, + "facing_x": 986, + "facing_y": -193, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -151912,11 +123365,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -71, - "y": 27 + "x": -108, + "y": 69 }, { "action": null, @@ -151932,7 +123385,7 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", @@ -151946,24 +123399,25 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -151977,61 +123431,82 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 286, + "phase_ticks_remaining": 186, + "referee": { + "alive": true, + "facing_x": 811, + "facing_y": -588, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -33, + "y": 93 + }, "result": null, "round_number": 2, - "tick": 1118 + "tick": 780 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1118 + "tick": 780 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "0778fa8830accd295533186b763d84724ba452e0e6d94389821b7572733f953a", + "checksum": "7371c63106e1b6656e370060ce77b88e1e697fe0995beee854c97b55d5015bf5", "events": [], "fighters": [ { "action": "hook", - "action_active_ticks": 4, - "action_contact_tick": 1094, + "action_active_ticks": 3, + "action_contact_tick": 756, "action_hand": "left", - "action_id": "one@1084", + "action_id": "one@747", "action_key": "hook:left:body:power", "action_power": "power", - "action_recovery_ticks": 15, - "action_start_tick": 1084, - "action_startup_ticks": 10, + "action_recovery_ticks": 10, + "action_start_tick": 747, + "action_startup_ticks": 9, "action_target": "body", "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": 87, + "facing_x": 974, + "facing_y": -227, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -152046,11 +123521,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -74, - "y": 30 + "x": -114, + "y": 76 }, { "action": null, @@ -152066,7 +123541,7 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", @@ -152080,24 +123555,25 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -152111,22 +123587,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 285, + "phase_ticks_remaining": 185, + "referee": { + "alive": true, + "facing_x": 811, + "facing_y": -588, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -33, + "y": 93 + }, "result": null, "round_number": 2, - "tick": 1119 + "tick": 781 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1119 + "tick": 781 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "d9948b7bcd502f57cc66e2d275d5391f91d68387e860323e8bf7126def6ccedf", + "checksum": "c7989a8ba347f2a3fe48b1215899e6530a2e6959fe53bdd4fe78ab83747c856c", "events": [], "fighters": [ { @@ -152143,29 +123639,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": 50, + "facing_x": 969, + "facing_y": -260, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -152180,11 +123677,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -78, - "y": 34 + "x": -120, + "y": 83 }, { "action": null, @@ -152200,7 +123697,7 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", @@ -152214,24 +123711,25 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -152245,22 +123743,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 284, + "phase_ticks_remaining": 184, + "referee": { + "alive": true, + "facing_x": 811, + "facing_y": -588, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -33, + "y": 93 + }, "result": null, "round_number": 2, - "tick": 1120 + "tick": 782 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1120 + "tick": 782 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "3c3e3e4d70d4d62927693dac10794837b6c71a885ca25233ba8a4e3a92fe1d40", + "checksum": "8e777a8ff0c0264d78cbb1ee2ea1a429d46027cde1dd692e26af492eb8ef3a3e", "events": [], "fighters": [ { @@ -152277,29 +123795,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": 16, + "facing_x": 959, + "facing_y": -283, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -152314,11 +123833,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -81, - "y": 38 + "x": -126, + "y": 89 }, { "action": null, @@ -152334,7 +123853,7 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", @@ -152348,24 +123867,25 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -152379,22 +123899,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 283, + "phase_ticks_remaining": 183, + "referee": { + "alive": true, + "facing_x": 811, + "facing_y": -588, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -33, + "y": 93 + }, "result": null, "round_number": 2, - "tick": 1121 + "tick": 783 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1121 + "tick": 783 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "47ea6778b32c9c8bcde63cbb5596331efc7348bf2d6d32808a8a264f147d3a73", + "checksum": "64fef7e42f685ae7d57a474f0e8d4f5b0b579ad073fa2632621388e529aa5974", "events": [], "fighters": [ { @@ -152411,29 +123951,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": -16, + "facing_x": 955, + "facing_y": -312, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -152448,11 +123989,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -84, - "y": 42 + "x": -131, + "y": 96 }, { "action": null, @@ -152468,7 +124009,7 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", @@ -152482,24 +124023,25 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -152513,22 +124055,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 282, + "phase_ticks_remaining": 182, + "referee": { + "alive": true, + "facing_x": 811, + "facing_y": -588, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -33, + "y": 93 + }, "result": null, "round_number": 2, - "tick": 1122 + "tick": 784 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1122 + "tick": 784 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "1ecfb1234cadcfe6189ee59481a430e191e5dc2f82c1427d83b35b13155ba953", + "checksum": "53389ad557b609fa86852af7326f6e511af849b8c390d1ac5130ce72d4151d35", "events": [], "fighters": [ { @@ -152545,29 +124107,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": -46, + "facing_x": 946, + "facing_y": -336, "get_up_count": 0, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -152582,11 +124145,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -88, - "y": 46 + "x": -137, + "y": 103 }, { "action": null, @@ -152602,7 +124165,7 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", @@ -152616,24 +124179,25 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -152647,23 +124211,56 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 281, + "phase_ticks_remaining": 181, + "referee": { + "alive": true, + "facing_x": 811, + "facing_y": -588, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -33, + "y": 93 + }, "result": null, "round_number": 2, - "tick": 1123 + "tick": 785 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1123 + "tick": 785 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "7f25e81755e48ec345bb30ad3d980f2f56cb11e0d1f67073e710ac46c4ccc4a5", - "events": [], + "checksum": "afc8a0cd7a2ada0c97435fc5d7f4512061ebae2fc7aa08d07403157ae98fa124", + "events": [ + { + "action_id": null, + "actor_id": null, + "amount": 1, + "blood": 0, + "detail": "", + "direction": 0, + "event_id": 51, + "kind": "count", + "target_id": "two", + "tick": 786 + } + ], "fighters": [ { "action": null, @@ -152679,29 +124276,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": -68, - "get_up_count": 0, + "facing_x": 938, + "facing_y": -358, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -152716,11 +124314,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -91, - "y": 49 + "x": -143, + "y": 110 }, { "action": null, @@ -152736,38 +124334,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -709, "facing_y": -709, - "get_up_count": 0, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -152781,22 +124380,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 280, + "phase_ticks_remaining": 180, + "referee": { + "alive": true, + "facing_x": 811, + "facing_y": -588, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -33, + "y": 93 + }, "result": null, "round_number": 2, - "tick": 1124 + "tick": 786 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1124 + "tick": 786 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "b86c1a42a0c39ef0e4e03b56f38437d88dfeb2bdeb62eea615901d6ab4abe0cc", + "checksum": "c855a292aad8ea7d63c7e46d7673d818211b8f76883a70ea26a567a3e55dbd1d", "events": [], "fighters": [ { @@ -152813,29 +124432,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 1000, - "facing_y": -97, - "get_up_count": 0, + "facing_x": 926, + "facing_y": -377, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -152850,11 +124470,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -94, - "y": 53 + "x": -149, + "y": 117 }, { "action": null, @@ -152870,38 +124490,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -709, "facing_y": -709, - "get_up_count": 0, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -152915,22 +124536,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 279, + "phase_ticks_remaining": 179, + "referee": { + "alive": true, + "facing_x": 811, + "facing_y": -588, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -33, + "y": 93 + }, "result": null, "round_number": 2, - "tick": 1125 + "tick": 787 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1125 + "tick": 787 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "3f4828d0d7631621f3d62a4f63954c646c1e6f8d089c3d11692666ec49c8c06d", + "checksum": "c4bfc935c272edcc561d2db76dc246b6274b34ff33e3d1b0419b012815222065", "events": [], "fighters": [ { @@ -152947,29 +124588,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 992, - "facing_y": -123, - "get_up_count": 0, + "facing_x": 924, + "facing_y": -393, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -152984,11 +124626,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -97, - "y": 57 + "x": -155, + "y": 123 }, { "action": null, @@ -153004,38 +124646,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -709, "facing_y": -709, - "get_up_count": 0, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -153049,22 +124692,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 278, + "phase_ticks_remaining": 178, + "referee": { + "alive": true, + "facing_x": 811, + "facing_y": -588, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -33, + "y": 93 + }, "result": null, "round_number": 2, - "tick": 1126 + "tick": 788 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1126 + "tick": 788 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "ae16e99e2657b99262fd4962419696a179ae1d4d1fd0ba5914b84bc0b6349490", + "checksum": "659269748fd86da266327f95e1ef43fa2d629f23abc6d58a954f2ab9ebef9f3d", "events": [], "fighters": [ { @@ -153081,29 +124744,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 992, - "facing_y": -147, - "get_up_count": 0, + "facing_x": 913, + "facing_y": -409, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -153118,11 +124782,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -101, - "y": 61 + "x": -161, + "y": 130 }, { "action": null, @@ -153138,38 +124802,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -709, "facing_y": -709, - "get_up_count": 0, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -153183,22 +124848,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 277, + "phase_ticks_remaining": 177, + "referee": { + "alive": true, + "facing_x": 811, + "facing_y": -588, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -33, + "y": 93 + }, "result": null, "round_number": 2, - "tick": 1127 + "tick": 789 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1127 + "tick": 789 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "062e6af17185a0bc99b7a24d37f0fd88ead11a997d72305f4a062c33b98a009a", + "checksum": "777671a1b634007dc8ab256d68a44944faf972bdd0647a83aac93cb051d2cd7a", "events": [], "fighters": [ { @@ -153215,29 +124900,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 993, - "facing_y": -165, - "get_up_count": 0, + "facing_x": 907, + "facing_y": -425, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -153252,11 +124938,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -104, - "y": 64 + "x": -167, + "y": 137 }, { "action": null, @@ -153272,38 +124958,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -709, "facing_y": -709, - "get_up_count": 0, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -153317,22 +125004,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 276, + "phase_ticks_remaining": 176, + "referee": { + "alive": true, + "facing_x": 811, + "facing_y": -588, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -33, + "y": 93 + }, "result": null, "round_number": 2, - "tick": 1128 + "tick": 790 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1128 + "tick": 790 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "ffae473ff5d2acb0c00bf11a73381ac1a034e798d5cda38a703943d8b4f49d8f", + "checksum": "f3548603661236d0e636652c47cf5308964a6465f3428b885b078e12f836f0a9", "events": [], "fighters": [ { @@ -153349,29 +125056,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 986, - "facing_y": -187, - "get_up_count": 0, + "facing_x": 898, + "facing_y": -438, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -153386,11 +125094,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -107, - "y": 68 + "x": -173, + "y": 144 }, { "action": null, @@ -153406,38 +125114,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -709, "facing_y": -709, - "get_up_count": 0, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -153451,22 +125160,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 275, + "phase_ticks_remaining": 175, + "referee": { + "alive": true, + "facing_x": 811, + "facing_y": -588, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -33, + "y": 93 + }, "result": null, "round_number": 2, - "tick": 1129 + "tick": 791 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1129 + "tick": 791 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "42fc4c7d1a9c71eb84db03792b4fd42c27be35706d2441d68f4933c55bf8ef54", + "checksum": "ea128f80cbfd245e5fdb37908829bda73f45cd4d5e9eee52f0375649810d078f", "events": [], "fighters": [ { @@ -153483,29 +125212,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 980, - "facing_y": -209, - "get_up_count": 0, + "facing_x": 893, + "facing_y": -453, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -153520,11 +125250,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -110, - "y": 72 + "x": -179, + "y": 151 }, { "action": null, @@ -153540,38 +125270,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -709, "facing_y": -709, - "get_up_count": 0, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -153585,22 +125316,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 274, + "phase_ticks_remaining": 174, + "referee": { + "alive": true, + "facing_x": 811, + "facing_y": -588, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -33, + "y": 93 + }, "result": null, "round_number": 2, - "tick": 1130 + "tick": 792 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1130 + "tick": 792 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "074bfe681de9e6cfa7feff2041231435f167f64e953dd22e3808a884fb6a63f7", + "checksum": "562115a762d4a11ede82a03c1da1501853a598c862c0f2805670c1b5cf1c01c6", "events": [], "fighters": [ { @@ -153617,29 +125368,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 974, - "facing_y": -227, - "get_up_count": 0, + "facing_x": 889, + "facing_y": -462, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -153654,11 +125406,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -114, - "y": 76 + "x": -185, + "y": 157 }, { "action": null, @@ -153674,38 +125426,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -709, "facing_y": -709, - "get_up_count": 0, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -153719,22 +125472,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 273, + "phase_ticks_remaining": 173, + "referee": { + "alive": true, + "facing_x": 811, + "facing_y": -588, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -33, + "y": 93 + }, "result": null, "round_number": 2, - "tick": 1131 + "tick": 793 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1131 + "tick": 793 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "3afa53a53343ac8fa5a1d485e99aad8f54dd5624441bddba27f8ff524da1dbe3", + "checksum": "527db435bcc480cf5405269018408ddaa7864892608d0137a8bc52bc84072b60", "events": [], "fighters": [ { @@ -153751,29 +125524,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 969, - "facing_y": -246, - "get_up_count": 0, + "facing_x": 881, + "facing_y": -473, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -153788,11 +125562,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -117, - "y": 80 + "x": -191, + "y": 164 }, { "action": null, @@ -153808,38 +125582,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -709, "facing_y": -709, - "get_up_count": 0, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -153853,22 +125628,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 272, + "phase_ticks_remaining": 172, + "referee": { + "alive": true, + "facing_x": 811, + "facing_y": -588, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -33, + "y": 93 + }, "result": null, "round_number": 2, - "tick": 1132 + "tick": 794 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1132 + "tick": 794 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "38de922bc12220257bd05bfab4eb510e20a81a6d2ebb1220ab03e56ac405c6e6", + "checksum": "549eb5e1c096a6e9494c44f5c3e776d04c199be200ec2ac410f61f63665d2257", "events": [], "fighters": [ { @@ -153885,29 +125680,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 969, - "facing_y": -260, - "get_up_count": 0, + "facing_x": 877, + "facing_y": -486, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -153922,11 +125718,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -120, - "y": 83 + "x": -196, + "y": 171 }, { "action": null, @@ -153942,38 +125738,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -709, "facing_y": -709, - "get_up_count": 0, + "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -153987,36 +125784,199 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 271, + "phase_ticks_remaining": 171, + "referee": { + "alive": true, + "facing_x": 811, + "facing_y": -588, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -33, + "y": 93 + }, "result": null, "round_number": 2, - "tick": 1133 + "tick": 795 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1133 + "tick": 795 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "603294b838f45059777524848670baf110c8b939c3afb6d9a498e97c04122342", - "events": [ + "checksum": "cc1fc26f86476b8642ed43aa302d88e94af081997701ef3e16071b3986c6c498", + "events": [], + "fighters": [ { + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, "action_id": null, - "actor_id": null, - "amount": 1, - "blood": 0, - "detail": "", - "direction": 0, - "event_id": 50, - "kind": "count", - "target_id": "two", - "tick": 1134 + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, + "clinch_startup_ticks": 0, + "clinch_ticks": 0, + "conditioning": 985, + "corner_choice": "cut", + "deductions": 0, + "defense": "none", + "facing": 1, + "facing_x": 870, + "facing_y": -496, + "get_up_count": 1, + "get_up_meter": 0, + "get_up_prompt": null, + "get_up_required": 30, + "get_up_window_end_tick": 0, + "get_up_window_start_tick": 0, + "guard": 700, + "guard_broken": false, + "is_downed": false, + "is_foul_recovery_target": false, + "knockdowns": 0, + "last_input_sequence": 204, + "maximum_stamina": 996, + "player_id": "one", + "poise": 600, + "queued_actions": 0, + "stamina": 961, + "stance": "orthodox", + "stunned_ticks": 0, + "style": "boxer", + "taunt_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": -6, + "velocity_y": 7, + "warnings": 0, + "x": -202, + "y": 178 + }, + { + "action": null, + "action_active_ticks": 0, + "action_contact_tick": null, + "action_hand": null, + "action_id": null, + "action_key": null, + "action_power": null, + "action_recovery_ticks": 0, + "action_start_tick": 0, + "action_startup_ticks": 0, + "action_target": null, + "clinch_startup_ticks": 0, + "clinch_ticks": 0, + "conditioning": 868, + "corner_choice": "swelling", + "deductions": 0, + "defense": "none", + "facing": -1, + "facing_x": -709, + "facing_y": -709, + "get_up_count": 1, + "get_up_meter": 0, + "get_up_prompt": null, + "get_up_required": 0, + "get_up_window_end_tick": 0, + "get_up_window_start_tick": 0, + "guard": 700, + "guard_broken": false, + "is_downed": true, + "is_foul_recovery_target": false, + "knockdowns": 2, + "last_input_sequence": -1, + "maximum_stamina": 761, + "player_id": "two", + "poise": 0, + "queued_actions": 0, + "stamina": 257, + "stance": "orthodox", + "stunned_ticks": 1, + "style": "slugger", + "taunt_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 804, + "head": 192, + "left_cut": 126, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "warnings": 1, + "x": 40, + "y": 40 } ], + "phase": "knockdown", + "phase_ticks_remaining": 170, + "referee": { + "alive": true, + "facing_x": 811, + "facing_y": -588, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -33, + "y": 93 + }, + "result": null, + "round_number": 2, + "tick": 796 + }, + "type": "snapshot", + "version": 5 + }, + "tick": 796 + }, + { + "attack_one": null, + "attack_two": null, + "snapshot": { + "payload": { + "checksum": "6a33ac92acae037f0b9c340480af2800c395949dccd282a92c278266f7389486", + "events": [], "fighters": [ { "action": null, @@ -154032,29 +125992,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 964, - "facing_y": -276, + "facing_x": 864, + "facing_y": -505, "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -154069,11 +126030,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -124, - "y": 87 + "x": -208, + "y": 185 }, { "action": null, @@ -154089,7 +126050,7 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", @@ -154103,24 +126064,25 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -154134,22 +126096,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 270, + "phase_ticks_remaining": 169, + "referee": { + "alive": true, + "facing_x": 811, + "facing_y": -588, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -33, + "y": 93 + }, "result": null, "round_number": 2, - "tick": 1134 + "tick": 797 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1134 + "tick": 797 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "9ccc2f080bc1871c9220ca8945b10007f306a963d2a0ae8eff8900b831cdee44", + "checksum": "36bcb9678aea7e0f076e0519132d30d900bd6687b108e5f16701177eb98c61ed", "events": [], "fighters": [ { @@ -154166,29 +126148,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 959, - "facing_y": -293, + "facing_x": 861, + "facing_y": -511, "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -154203,11 +126186,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -127, - "y": 91 + "x": -214, + "y": 191 }, { "action": null, @@ -154223,7 +126206,7 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", @@ -154237,24 +126220,25 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -154268,22 +126252,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 269, + "phase_ticks_remaining": 168, + "referee": { + "alive": true, + "facing_x": 811, + "facing_y": -588, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -33, + "y": 93 + }, "result": null, "round_number": 2, - "tick": 1135 + "tick": 798 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1135 + "tick": 798 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "bccdc4e7c967849318708609bf229fcf04ea25b9ee2b046084d48a7cbb3622f5", + "checksum": "8adc3f27b1e81fe506706daec547850f833080b06251975e6448c0bd92c2ac22", "events": [], "fighters": [ { @@ -154300,29 +126304,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 955, - "facing_y": -308, + "facing_x": 855, + "facing_y": -519, "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -154337,11 +126342,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -130, - "y": 95 + "x": -220, + "y": 198 }, { "action": null, @@ -154357,7 +126362,7 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", @@ -154371,24 +126376,25 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -154402,22 +126408,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 268, + "phase_ticks_remaining": 167, + "referee": { + "alive": true, + "facing_x": 811, + "facing_y": -588, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -33, + "y": 93 + }, "result": null, "round_number": 2, - "tick": 1136 + "tick": 799 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1136 + "tick": 799 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "64a87c61a117d21ccf549551b0ebf89ac316dadf5f5fdad6725faf28d3b182a9", + "checksum": "53f93541c3387540c829d911cfe6a019302bbceca4ad414b70589b4dea9386a6", "events": [], "fighters": [ { @@ -154434,29 +126460,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 950, - "facing_y": -318, + "facing_x": 849, + "facing_y": -527, "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -154471,11 +126498,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -133, - "y": 98 + "x": -226, + "y": 205 }, { "action": null, @@ -154491,7 +126518,7 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", @@ -154505,24 +126532,25 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -154536,22 +126564,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 267, + "phase_ticks_remaining": 166, + "referee": { + "alive": true, + "facing_x": 811, + "facing_y": -588, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -33, + "y": 93 + }, "result": null, "round_number": 2, - "tick": 1137 + "tick": 800 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1137 + "tick": 800 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "17c072d33e4d74dc82456cb52e0bbbe8034c6c99ed96fa9889ce3a7fdf8399d3", + "checksum": "240c0c12d92b16f0d2f50652811455c21baecff9b94e96405f2dd8141f24f96a", "events": [], "fighters": [ { @@ -154568,29 +126616,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 946, - "facing_y": -331, + "facing_x": 847, + "facing_y": -535, "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -154605,11 +126654,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -137, - "y": 102 + "x": -232, + "y": 212 }, { "action": null, @@ -154625,7 +126674,7 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", @@ -154639,24 +126688,25 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -154670,22 +126720,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 266, + "phase_ticks_remaining": 165, + "referee": { + "alive": true, + "facing_x": 811, + "facing_y": -588, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -33, + "y": 93 + }, "result": null, "round_number": 2, - "tick": 1138 + "tick": 801 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1138 + "tick": 801 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "205d673eb764cb68eb769430440e8618450d20eb64bfb0e609a259ffcb8205f0", + "checksum": "5eeea14d785d3ac5c5db55f9e22ea65e4d76b3e2a96da545710f2c3454423802", "events": [], "fighters": [ { @@ -154702,29 +126772,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 942, - "facing_y": -345, + "facing_x": 842, + "facing_y": -542, "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -154739,11 +126810,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -140, - "y": 106 + "x": -238, + "y": 219 }, { "action": null, @@ -154759,7 +126830,7 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", @@ -154773,24 +126844,25 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -154804,22 +126876,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 265, + "phase_ticks_remaining": 164, + "referee": { + "alive": true, + "facing_x": 811, + "facing_y": -588, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -33, + "y": 93 + }, "result": null, "round_number": 2, - "tick": 1139 + "tick": 802 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1139 + "tick": 802 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "bdea5de3aa5b8d46cf925aa61b62641f96cade0c22fcb49f580601da9eac2ccf", + "checksum": "083216211e9117f5d638fb7798ec35c4b949a87fa6a0727c77aa55fa3bf425f6", "events": [], "fighters": [ { @@ -154836,29 +126928,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 938, - "facing_y": -358, + "facing_x": 840, + "facing_y": -547, "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -154873,11 +126966,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -143, - "y": 110 + "x": -244, + "y": 225 }, { "action": null, @@ -154893,7 +126986,7 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", @@ -154907,24 +127000,25 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -154938,22 +127032,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 264, + "phase_ticks_remaining": 163, + "referee": { + "alive": true, + "facing_x": 811, + "facing_y": -588, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -33, + "y": 93 + }, "result": null, "round_number": 2, - "tick": 1140 + "tick": 803 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1140 + "tick": 803 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "7be16b84dbdb0ad3df75612289e4d989153ed986dbeea87be2feb80088df2320", + "checksum": "4cc223df547eced349585bc7d457549c4522f2224af0edc3c0be78a9e1b07e41", "events": [], "fighters": [ { @@ -154970,29 +127084,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 930, - "facing_y": -368, + "facing_x": 835, + "facing_y": -553, "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -155007,11 +127122,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -147, - "y": 114 + "x": -250, + "y": 232 }, { "action": null, @@ -155027,7 +127142,7 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", @@ -155041,24 +127156,25 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -155072,22 +127188,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 263, + "phase_ticks_remaining": 162, + "referee": { + "alive": true, + "facing_x": 811, + "facing_y": -588, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -33, + "y": 93 + }, "result": null, "round_number": 2, - "tick": 1141 + "tick": 804 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1141 + "tick": 804 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "d6ec42f8cdf6ed4fd2d920f524f72443d5971615843d8aed47dd7b1f0c95f44f", + "checksum": "4c68728e01a007c07b0dc41cf786d0e162db2ae07da094f29a5113b86d7c3472", "events": [], "fighters": [ { @@ -155104,29 +127240,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 926, - "facing_y": -375, + "facing_x": 831, + "facing_y": -558, "get_up_count": 1, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -155141,11 +127278,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -150, - "y": 117 + "x": -256, + "y": 239 }, { "action": null, @@ -155161,7 +127298,7 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", @@ -155175,24 +127312,25 @@ "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -155206,157 +127344,56 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 262, + "phase_ticks_remaining": 161, + "referee": { + "alive": true, + "facing_x": 811, + "facing_y": -588, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -33, + "y": 93 + }, "result": null, "round_number": 2, - "tick": 1142 + "tick": 805 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1142 + "tick": 805 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "e50340c9d1161f80b1f8fb9e49cc51fcbb94d12bac00444071de7e113cee2fdb", - "events": [], - "fighters": [ - { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, - "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 954, - "corner_choice": "cut", - "deductions": 0, - "defense": "none", - "facing": 1, - "facing_x": 923, - "facing_y": -387, - "get_up_count": 1, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 34, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": false, - "is_foul_recovery_target": false, - "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, - "player_id": "one", - "poise": 600, - "queued_actions": 0, - "stamina": 877, - "stance": "orthodox", - "stunned_ticks": 0, - "style": "boxer", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 0, - "head": 0, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": -3, - "velocity_y": 4, - "warnings": 0, - "x": -153, - "y": 121 - }, + "checksum": "e81c34b0d31b4e452e823e7f601f83926dfbbcc70bc19506d5fd83dd6cbe305b", + "events": [ { - "action": null, - "action_active_ticks": 0, - "action_contact_tick": null, - "action_hand": null, "action_id": null, - "action_key": null, - "action_power": null, - "action_recovery_ticks": 0, - "action_start_tick": 0, - "action_startup_ticks": 0, - "action_target": null, - "clinch_startup_ticks": 0, - "clinch_ticks": 0, - "conditioning": 881, - "corner_choice": "swelling", - "deductions": 0, - "defense": "none", - "facing": -1, - "facing_x": -709, - "facing_y": -709, - "get_up_count": 1, - "get_up_meter": 0, - "get_up_prompt": null, - "get_up_required": 0, - "get_up_window_end_tick": 0, - "get_up_window_start_tick": 0, - "guard": 700, - "is_downed": true, - "is_foul_recovery_target": false, - "knockdowns": 2, - "last_input_sequence": -1, - "maximum_stamina": 686, - "player_id": "two", - "poise": 0, - "queued_actions": 0, - "stamina": 255, - "stance": "orthodox", - "stunned_ticks": 1, - "style": "slugger", - "taunt_ticks": 0, - "trauma": { - "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, - "left_eye": 0, - "right_cut": 0, - "right_eye": 0, - "swelling": 0 - }, - "velocity_x": 0, - "velocity_y": 0, - "warnings": 1, - "x": 40, - "y": 40 + "actor_id": null, + "amount": 2, + "blood": 0, + "detail": "", + "direction": 0, + "event_id": 52, + "kind": "count", + "target_id": "two", + "tick": 806 } ], - "phase": "knockdown", - "phase_ticks_remaining": 261, - "result": null, - "round_number": 2, - "tick": 1143 - }, - "type": "snapshot", - "version": 4 - }, - "tick": 1143 - }, - { - "attack_one": null, - "attack_two": null, - "snapshot": { - "payload": { - "checksum": "0453168b0a3316c2dd173dffd9b26585d96c85ca447047a6f2ca65cb0e36c247", - "events": [], "fighters": [ { "action": null, @@ -155372,29 +127409,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 920, - "facing_y": -399, - "get_up_count": 1, + "facing_x": 826, + "facing_y": -565, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -155409,11 +127447,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -156, - "y": 125 + "x": -261, + "y": 246 }, { "action": null, @@ -155429,38 +127467,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -709, "facing_y": -709, - "get_up_count": 1, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -155474,22 +127513,42 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 260, + "phase_ticks_remaining": 160, + "referee": { + "alive": true, + "facing_x": 811, + "facing_y": -588, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -33, + "y": 93 + }, "result": null, "round_number": 2, - "tick": 1144 + "tick": 806 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1144 + "tick": 806 }, { "attack_one": null, "attack_two": null, "snapshot": { "payload": { - "checksum": "3b25b2f0392cd10db3ae298accf8f9f310bd5ed5c4e3d6dffb36018a3421086d", + "checksum": "3bc445bd2283dd07b3b7dc613f7f429834180cb907ab1e1d58df53adf1d9c5f1", "events": [], "fighters": [ { @@ -155506,29 +127565,30 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 954, + "conditioning": 985, "corner_choice": "cut", "deductions": 0, "defense": "none", "facing": 1, - "facing_x": 917, - "facing_y": -408, - "get_up_count": 1, + "facing_x": 823, + "facing_y": -571, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, - "get_up_required": 34, + "get_up_required": 30, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": false, "is_foul_recovery_target": false, "knockdowns": 0, - "last_input_sequence": 284, - "maximum_stamina": 980, + "last_input_sequence": 204, + "maximum_stamina": 996, "player_id": "one", "poise": 600, "queued_actions": 0, - "stamina": 877, + "stamina": 961, "stance": "orthodox", "stunned_ticks": 0, "style": "boxer", @@ -155543,11 +127603,11 @@ "right_eye": 0, "swelling": 0 }, - "velocity_x": -3, - "velocity_y": 4, + "velocity_x": -6, + "velocity_y": 7, "warnings": 0, - "x": -160, - "y": 129 + "x": -267, + "y": 253 }, { "action": null, @@ -155563,38 +127623,39 @@ "action_target": null, "clinch_startup_ticks": 0, "clinch_ticks": 0, - "conditioning": 881, + "conditioning": 868, "corner_choice": "swelling", "deductions": 0, "defense": "none", "facing": -1, "facing_x": -709, "facing_y": -709, - "get_up_count": 1, + "get_up_count": 2, "get_up_meter": 0, "get_up_prompt": null, "get_up_required": 0, "get_up_window_end_tick": 0, "get_up_window_start_tick": 0, "guard": 700, + "guard_broken": false, "is_downed": true, "is_foul_recovery_target": false, "knockdowns": 2, "last_input_sequence": -1, - "maximum_stamina": 686, + "maximum_stamina": 761, "player_id": "two", "poise": 0, "queued_actions": 0, - "stamina": 255, + "stamina": 257, "stance": "orthodox", "stunned_ticks": 1, "style": "slugger", "taunt_ticks": 0, "trauma": { "bleeding": 0, - "body": 784, - "head": 307, - "left_cut": 0, + "body": 804, + "head": 192, + "left_cut": 126, "left_eye": 0, "right_cut": 0, "right_eye": 0, @@ -155608,15 +127669,35 @@ } ], "phase": "knockdown", - "phase_ticks_remaining": 259, + "phase_ticks_remaining": 159, + "referee": { + "alive": true, + "facing_x": 811, + "facing_y": -588, + "stunned_ticks": 0, + "trauma": { + "bleeding": 0, + "body": 0, + "head": 0, + "left_cut": 0, + "left_eye": 0, + "right_cut": 0, + "right_eye": 0, + "swelling": 0 + }, + "velocity_x": 0, + "velocity_y": 0, + "x": -33, + "y": 93 + }, "result": null, "round_number": 2, - "tick": 1145 + "tick": 807 }, "type": "snapshot", - "version": 4 + "version": 5 }, - "tick": 1145 + "tick": 807 } ] } diff --git a/web/hands/src/app.test.ts b/web/hands/src/app.test.ts index 4fbf5b9e..b8208835 100644 --- a/web/hands/src/app.test.ts +++ b/web/hands/src/app.test.ts @@ -1,6 +1,6 @@ import type { NetworkCallbacks } from "./network"; -import { PROTOCOL_VERSION, type EngineSnapshot, type ServerMessage } from "./types"; -import { fighter } from "./test/fixtures"; +import { PROTOCOL_VERSION, type CombatEvent, type EngineSnapshot, type PunchClass, type ServerMessage } from "./types"; +import { fighter, referee } from "./test/fixtures"; const mocks = vi.hoisted(() => { const sessionDestroy = vi.fn(); @@ -26,9 +26,10 @@ const mocks = vi.hoisted(() => { styleChoices: [] as string[], cpuRequests: [] as string[], cpuAccepted: true, - renderers: [] as Array<{ onAnnouncement?: ((lines: readonly string[]) => void) | null; onCrowdCue?: ((cue: "chant") => void) | null; onRocked?: ((level: number, tick: number) => void) | null }>, + renderers: [] as Array<{ onAnnouncement?: ((lines: readonly string[]) => void) | null; onCrowdCue?: ((cue: "chant") => void) | null; onRocked?: ((level: number, tick: number) => void) | null; onContact?: ((event: CombatEvent, power: boolean) => void) | null; onOwnPunch?: ((punchClass: PunchClass, power: boolean, actionId: string) => void) | null }>, input: null as (() => { moveX: number; moveY: number }) | null, viewForward: null as { x: number; z: number } | null, + heldSends: 0, }; }); vi.mock("./discord", () => ({ @@ -43,6 +44,7 @@ vi.mock("./network", () => ({ start(): void {} setActive(active: boolean): void { mocks.networkSetActive(active); } notifyAction(): void {} + notifyHeld(): void { mocks.heldSends += 1; } sendCornerChoice(kind: string): boolean { mocks.cornerPicks.push(kind); return true; } chooseStyle(style: string, ready: boolean): boolean { mocks.styleChoices.push(`${style}:${ready}`); return true; } requestCpu(level: string): boolean { mocks.cpuRequests.push(level); return mocks.cpuAccepted; } @@ -98,6 +100,7 @@ const makeSnapshot = (tick: number, phase: EngineSnapshot["phase"] = "fight"): E round_number: 1, phase_ticks_remaining: 1_205, fighters: [fighter("one", -100), fighter("two", 100)], + referee: referee(), events: [], result: null, checksum: "a".repeat(64), @@ -150,9 +153,14 @@ describe("browser lifecycle and accessible overlays", () => { send({ version: PROTOCOL_VERSION, type: "welcome", role: "fighter", player_id: "one", seat: 1, rating: 1500, players: [...players], server_tick: 0, next_sequence: 0, reconnect_ticket: "rotated" }); send({ version: PROTOCOL_VERSION, type: "ready", players: [...players] }); send({ version: PROTOCOL_VERSION, type: "snapshot", payload: makeSnapshot(10) }); + const sends = mocks.heldSends; window.dispatchEvent(new KeyboardEvent("keydown", { code: "KeyW", bubbles: true, cancelable: true })); + expect(mocks.heldSends).toBe(sends + 1); expect(mocks.input!()).toMatchObject({ moveX: 0, moveY: 1000 }); + window.dispatchEvent(new KeyboardEvent("keyup", { code: "KeyW", bubbles: true, cancelable: true })); + expect(mocks.heldSends).toBe(sends + 2); mocks.viewForward = { x: 1, z: 0 }; + window.dispatchEvent(new KeyboardEvent("keydown", { code: "KeyW", bubbles: true, cancelable: true })); expect(mocks.input!()).toMatchObject({ moveX: 1000, moveY: 0 }); window.dispatchEvent(new KeyboardEvent("keyup", { code: "KeyW", bubbles: true, cancelable: true })); mocks.viewForward = null; @@ -1060,6 +1068,41 @@ describe("the broadcast", () => { watcher.destroy(); }); + it("hears a power punch's start and contact as a power punch's, and the player's own punch as it starts on screen, once", async () => { + const heard = vi.spyOn(AudioFeedback.prototype, "event"); + const whoosh = vi.spyOn(AudioFeedback.prototype, "whoosh"); + const { app } = await launch(); + send({ version: PROTOCOL_VERSION, type: "ready", players: [...players] }); + const start = (id: string): CombatEvent => ({ event_id: id === "c1" ? 7 : 8, tick: 40, kind: "punch_start", actor_id: id === "c1" ? "one" : "two", target_id: null, amount: 0, detail: "right:straight:head", blood: 0, direction: 0, action_id: id }); + const renderer = mocks.renderers.at(-1)!; + renderer.onOwnPunch!("straight", true, "c1"); + expect(whoosh).toHaveBeenCalledWith("straight", true); + const thrown = makeSnapshot(40); + send({ version: PROTOCOL_VERSION, type: "snapshot", payload: { ...thrown, fighters: [{ ...thrown.fighters[0], action: "straight", action_id: "c1", action_power: "power" }, { ...thrown.fighters[1], action: "straight", action_id: "t1", action_power: "power" }], events: [start("c1"), start("t1")] } }); + const starts = heard.mock.calls.filter(([event]) => event.kind === "punch_start"); + expect(starts.map(([event, power]) => [event.action_id, power])).toEqual([["t1", true]]); + renderer.onContact!({ ...start("t1"), kind: "hit", detail: "straight:head", amount: 120 }, true); + expect(heard).toHaveBeenLastCalledWith(expect.objectContaining({ kind: "hit" }), true); + app.destroy(); + }); + + it("keeps a fighter's controls live through the referee's five seconds, and hears a punch on him and his death once, as shown", async () => { + const heard = vi.spyOn(AudioFeedback.prototype, "event"); + const { app } = await launch(); + send({ version: PROTOCOL_VERSION, type: "ready", players: [...players] }); + const hit: CombatEvent = { event_id: 9, tick: 40, kind: "referee_hit", actor_id: "one", target_id: "referee", amount: 60, detail: "hook:head", blood: 20, direction: 1, action_id: "one@32" }; + const down: CombatEvent = { ...hit, event_id: 10, kind: "referee_down", amount: 0, detail: "", blood: 0 }; + send({ version: PROTOCOL_VERSION, type: "snapshot", payload: { ...makeSnapshot(40, "referee_down"), events: [hit, down] } }); + expect(mocks.networkSetActive).toHaveBeenLastCalledWith(true); + const refereeSounds = (): string[] => heard.mock.calls.filter(([event]) => event.kind.startsWith("referee")).map(([event]) => event.kind); + expect(refereeSounds()).toEqual([]); + const renderer = mocks.renderers.at(-1)!; + renderer.onContact!(hit, false); + renderer.onContact!(down, false); + expect(refereeSounds()).toEqual(["referee_hit", "referee_down"]); + app.destroy(); + }); + it("lets the crowd follow the fight", async () => { const tension = vi.spyOn(AudioFeedback.prototype, "tension"); const chant = vi.spyOn(AudioFeedback.prototype, "chant"); diff --git a/web/hands/src/app.ts b/web/hands/src/app.ts index 3454f1b3..f1daa554 100644 --- a/web/hands/src/app.ts +++ b/web/hands/src/app.ts @@ -19,7 +19,7 @@ import { CAMERA_MODES, SettingsStore, type BloodLevel } from "./settings"; import { initialState, reduceState, type GameState } from "./state"; import type { CpuLevel, EngineSnapshot, PublicPlayer, ServerMessage } from "./types"; -const CONTACT_FEEDBACK_KINDS = new Set(["hit", "counter_hit", "block", "perfect_block", "guard_break", "knockdown", "parry", "body_collapse", "eye_shut"]); +const CONTACT_FEEDBACK_KINDS = new Set(["hit", "counter_hit", "block", "perfect_block", "guard_break", "knockdown", "parry", "body_collapse", "eye_shut", "referee_hit", "referee_down"]); // The room keeps the finished bout for its result hold (ten seconds by default); a rejoin inside // that window only replays the old final, so the rematch waits it out and retries if it still hits it. const REMATCH_HOLD_MS = 11_000; @@ -46,6 +46,8 @@ export class HandsApp { private readonly haptics = new HapticFeedback(() => this.settings.current); private readonly voice = new AnnouncerVoice(() => this.settings.current); private readonly feedbackEvents = new EventDeduplicator(); + /** The player's own punches already heard as they started on screen. */ + private readonly soundedPunches: string[] = []; private renderer: FightRenderer | null = null; private network: NetworkController | null = null; private session: DiscordSession | null = null; @@ -285,6 +287,7 @@ export class HandsApp { this.renderer?.predictAction?.(action); this.network?.notifyAction(); }); + this.input.onHeldChange(() => this.network?.notifyHeld()); const ticket = session.takeTicket(); if (ticket === null) throw new Error("ticket_unavailable"); const network = new NetworkController(ticket, () => this.input.frame(), { @@ -321,10 +324,17 @@ export class HandsApp { const renderer = new FightRenderer(this.canvas, this.session.bootstrap.simulation, () => this.settings.current, { localInput: () => this.input.held(), inputSequenceOf: (actionId) => this.network?.sequenceOf(actionId) ?? null, + powerHeld: () => this.input.powerHeld, }); - renderer.onContact = (event) => { - this.audio.event(event); - this.haptics.event(event); + renderer.onContact = (event, power) => { + this.audio.event(event, power); + this.haptics.event(event, power); + }; + // The player's own punch is heard as it starts on screen; the server's word of it, a round trip later, is not heard again. + renderer.onOwnPunch = (punchClass, power, actionId) => { + this.audio.whoosh(punchClass, power); + this.soundedPunches.push(actionId); + if (this.soundedPunches.length > 8) this.soundedPunches.shift(); }; renderer.onArcadeInjury = (injury) => this.audio.injury(injury); renderer.onAnnouncement = (lines) => this.voice.speak(lines); @@ -393,7 +403,10 @@ export class HandsApp { this.audio.tension(crowdTension(snapshot)); for (const event of this.feedbackEvents.accept(snapshot.events)) { if (CONTACT_FEEDBACK_KINDS.has(event.kind)) continue; - this.audio.event(event); + if (event.kind === "punch_start" && event.action_id !== null && this.soundedPunches.includes(event.action_id)) continue; + // A punch's start says nothing of its power; the snapshot shows the fighter throwing it. + const thrower = event.kind === "punch_start" ? snapshot.fighters.find((fighter) => fighter.player_id === event.actor_id && fighter.action_id === event.action_id) : undefined; + this.audio.event(event, thrower?.action_power === "power"); this.haptics.event(event); } } @@ -423,6 +436,7 @@ export class HandsApp { fight: `Round ${this.state.snapshot?.round_number ?? 1} in progress.`, knockdown: `Knockdown count ${this.state.snapshot?.fighters.find((fighter) => fighter.player_id === this.state.playerId)?.get_up_count ?? 0}.`, foul_recovery: "Foul recovery in progress.", + referee_down: "The referee is down. The bout goes on without him.", rest: "Between-round rest.", paused: `Connection paused. ${Math.ceil(this.state.reconnectMs / 1000)} seconds remain.`, complete: this.cpuBout ? "Bout complete. Scorecards are displayed. Bouts against the computer are unrated." : "Bout complete. Scorecards and rating changes are displayed.", @@ -432,7 +446,7 @@ export class HandsApp { this.setText(this.status, spectating ? `Spectating — ${labels[this.state.stage]}` : labels[this.state.stage]); // The result card says how the bout ended; the button sits in the card's footer. const resulted = this.state.stage === "complete" && this.state.final !== null; - this.status.hidden = resulted || ["select", "countdown", "fight", "knockdown", "foul_recovery", "rest"].includes(this.state.stage); + this.status.hidden = resulted || ["select", "countdown", "fight", "knockdown", "foul_recovery", "referee_down", "rest"].includes(this.state.stage); this.overlay.toggleAttribute("data-raised", this.state.snapshot !== null); this.overlay.toggleAttribute("data-result", resulted); // The engine's last snapshot arrives before the result does; the finish plays without the overlay. @@ -479,7 +493,7 @@ export class HandsApp { if (showHint) this.setText(this.hint, controlHint(coarsePointer(), window.innerWidth)); // Once the pads are up for the countdown, the touch hint moves to the empty stick side so it covers no pad. this.overlay.toggleAttribute("data-touch-hint", showHint && this.state.stage === "countdown" && coarsePointer()); - const active = !spectating && ["countdown", "fight", "knockdown", "foul_recovery"].includes(this.state.stage); + const active = !spectating && ["countdown", "fight", "knockdown", "foul_recovery", "referee_down"].includes(this.state.stage); // Between rounds and through pauses the touch controls stay up, inert, so a thumb already in place counts at the bell. const resting = !spectating && this.state.snapshot !== null && (this.state.stage === "rest" || this.state.stage === "paused"); this.input.setActive(active, active || resting); diff --git a/web/hands/src/audio.ts b/web/hands/src/audio.ts index 573edce5..6574d1f7 100644 --- a/web/hands/src/audio.ts +++ b/web/hands/src/audio.ts @@ -149,15 +149,13 @@ export class AudioFeedback { if (this.master !== null) this.master.gain.value = Math.min(0.8, Math.max(0, this.settings().volume)); } - event(event: CombatEvent): void { + /** An event as the screen shows it; `power` when a power punch made it (its start, or its contact). */ + event(event: CombatEvent, power = false): void { if (!this.unlocked) return; switch (event.kind) { - case "punch_start": { - const punchClass = (event.detail.split(":")[1] ?? "jab") as PunchClass; - const spec = WHOOSH[punchClass] ?? WHOOSH.jab; - this.noise({ duration: spec.duration, frequency: spec.from, sweepTo: spec.to, gain: 0.1, type: "bandpass", q: 1.2 }); + case "punch_start": + this.whoosh((event.detail.split(":")[1] ?? "jab") as PunchClass, power); break; - } case "whiff": this.noise({ duration: 0.11, frequency: 850, sweepTo: 320, gain: 0.07, type: "bandpass", q: 1.1 }); break; @@ -166,15 +164,30 @@ export class AudioFeedback { const body = event.detail.endsWith("body"); const weight = Math.min(1, event.amount / 260); const loud = Math.min(0.36, 0.14 + weight * 0.2) * (event.kind === "counter_hit" ? 1.25 : 1); - this.impact(loud, body, weight); - if (event.kind === "counter_hit" || weight > 0.7) this.crowdSwell(0.35 + weight * 0.4); + this.impact(loud, body, weight, power); + if (event.kind === "counter_hit" || weight > 0.7 || power) this.crowdSwell(0.35 + weight * 0.4); if ((event.kind === "counter_hit" && event.amount >= 50) || event.amount >= 90) this.ooh(Math.min(1, event.amount / 160)); break; } + case "referee_hit": { + // A punch on the referee: the same thud, and a crowd that cannot believe it. + const weight = Math.min(1, event.amount / 260); + this.impact(Math.min(0.36, 0.16 + weight * 0.2), event.detail.endsWith("body"), weight); + this.ooh(0.7 + weight * 0.3); + this.crowdSwell(0.5 + weight * 0.3); + break; + } + case "referee_down": + this.impact(0.36, false, 1); + this.crowdRoar(1); + this.ooh(1); + break; case "block": this.noise({ duration: 0.045, frequency: 1200, sweepTo: 600, gain: 0.14, type: "bandpass", q: 1.1 }); this.noise({ duration: 0.09, frequency: 260, gain: 0.08 }); this.tone({ from: 160, to: 110, duration: 0.06, type: "triangle", gain: 0.05 }); + // A power punch the guard took still lands with weight: a heavy thump under the leather. + if (power) this.tone({ from: 96, to: 44, duration: 0.2, type: "sine", gain: 0.2 }); break; case "perfect_block": this.noise({ duration: 0.05, frequency: 1800, sweepTo: 900, gain: 0.16, type: "bandpass", q: 1.6 }); @@ -375,16 +388,27 @@ export class AudioFeedback { const master = this.master; const buffer = this.injuryBuffers.get(BORROWED_VOICE[injury] ?? injury); const current = this.settings(); - if (!this.unlocked || context === null || master === null || buffer === undefined) return; + if (!this.unlocked || context === null || master === null) return; if (current.blood !== "full" || current.reducedMotion) return; + this.tearing(); + if (buffer === undefined) return; const source = context.createBufferSource(); const gain = context.createGain(); source.buffer = buffer; - gain.gain.value = 0.16; + gain.gain.value = 0.2; source.connect(gain).connect(master); source.start(); } + /** Under a finisher's voice: bone and flesh giving way in a wet crack, then blood spurting onto the canvas with each beat of the heart. */ + private tearing(): void { + this.noise({ duration: 0.09, frequency: 2600, sweepTo: 700, gain: 0.22, type: "bandpass", q: 1.6 }); + this.noise({ duration: 0.4, frequency: 900, sweepTo: 150, gain: 0.28, type: "lowpass", q: 6, offset: 0.35 }); + for (const [beat, delay] of [0.3, 0.9, 1.5].entries()) { + this.noise({ duration: 0.2, frequency: 480 - beat * 60, sweepTo: 170, gain: 0.13 - beat * 0.03, type: "bandpass", q: 4, delay, offset: 0.2 + delay }); + } + } + private async decodeInjuryBuffers(context: AudioContext): Promise> { const decoded = await Promise.all(INJURY_SOUNDS.map(async (sound) => { const encoded = atob(sound.wav); @@ -403,12 +427,35 @@ export class AudioFeedback { return buffers; } - /** Layered punch impact: sub thump, glove thud, and a short leather snap scaled by weight. */ - private impact(loud: number, body: boolean, weight: number): void { - this.tone({ from: body ? 86 : 118, to: body ? 34 : 44, duration: 0.14 + weight * 0.06, type: "sine", gain: loud }); - this.noise({ duration: 0.05 + weight * 0.03, frequency: body ? 240 : 420, sweepTo: body ? 120 : 200, gain: loud * 0.8, type: "bandpass", q: 0.8 }); - this.noise({ duration: 0.028, frequency: body ? 1500 : 2600, sweepTo: body ? 700 : 1400, gain: loud * (body ? 0.35 : 0.6), type: "bandpass", q: 1.3 }); - this.noise({ duration: 0.18 + weight * 0.1, frequency: body ? 150 : 210, gain: loud * 0.45 }); + /** + * A punch cutting the air. A power punch goes lower, longer and louder, with a heavy rush and a low drop under it, so + * it is heard coming apart from any other. + */ + whoosh(punchClass: PunchClass, power: boolean): void { + if (!this.unlocked) return; + const spec = WHOOSH[punchClass] ?? WHOOSH.jab; + if (!power) { + this.noise({ duration: spec.duration, frequency: spec.from, sweepTo: spec.to, gain: 0.1, type: "bandpass", q: 1.2 }); + return; + } + this.noise({ duration: spec.duration * 1.8, frequency: spec.from * 0.55, sweepTo: spec.to * 0.7, gain: 0.18, type: "bandpass", q: 0.9 }); + this.noise({ duration: spec.duration * 1.5, frequency: 150, sweepTo: 340, gain: 0.13, delay: 0.02 }); + this.tone({ from: 92, to: 46, duration: 0.24, type: "sine", gain: 0.12 }); + } + + /** + * Layered punch impact: sub thump, glove thud, and a short leather snap scaled by weight. A power punch lands harder + * still: louder, with a deep boom after it and a sharper crack on top. + */ + private impact(loud: number, body: boolean, weight: number, power = false): void { + const level = loud * (power ? 1.35 : 1); + this.tone({ from: body ? 86 : 118, to: body ? 34 : 44, duration: 0.14 + weight * 0.06, type: "sine", gain: level }); + this.noise({ duration: 0.05 + weight * 0.03, frequency: body ? 240 : 420, sweepTo: body ? 120 : 200, gain: level * 0.8, type: "bandpass", q: 0.8 }); + this.noise({ duration: 0.028, frequency: body ? 1500 : 2600, sweepTo: body ? 700 : 1400, gain: level * (body ? 0.35 : 0.6), type: "bandpass", q: 1.3 }); + this.noise({ duration: 0.18 + weight * 0.1, frequency: body ? 150 : 210, gain: level * 0.45 }); + if (!power) return; + this.tone({ from: body ? 62 : 76, to: 27, duration: 0.42, type: "sine", gain: 0.3, delay: 0.015 }); + this.noise({ duration: 0.04, frequency: 3400, sweepTo: 1800, gain: 0.26, type: "bandpass", q: 1.6 }); } /** Full crowd eruption with a slow decay, used for knockdowns and finishes. */ diff --git a/web/hands/src/corner.ts b/web/hands/src/corner.ts index fd7ac96b..d9f28a01 100644 --- a/web/hands/src/corner.ts +++ b/web/hands/src/corner.ts @@ -24,7 +24,7 @@ const WORKING: Readonly> = { const PENDING_MS = 1500; const MAX_CONDITIONING = 1000; -/** A cut in the words a corner would use; the ringside doctor stops a bout at about 800. */ +/** A cut in the words a corner would use. */ export function cutWord(cut: number): string { return cut < 150 ? "small" : cut < 350 ? "nasty" : cut < 550 ? "deep" : "dangerous"; } diff --git a/web/hands/src/dev-fixtures.ts b/web/hands/src/dev-fixtures.ts index 1b431726..9627de48 100644 --- a/web/hands/src/dev-fixtures.ts +++ b/web/hands/src/dev-fixtures.ts @@ -5,7 +5,7 @@ import { TouchInput, coarsePointer } from "./input/touch"; import { FightRenderer } from "./render/renderer"; import { CAMERA_MODES } from "./settings"; import { FIGHTER_STYLES } from "./protocol"; -import { PROTOCOL_VERSION, type CombatEvent, type EngineSnapshot, type FighterSnapshot, type FighterStyle, type PublicPlayer } from "./types"; +import { PROTOCOL_VERSION, type CombatEvent, type EngineSnapshot, type FighterSnapshot, type FighterStyle, type PublicPlayer, type RefereeSnapshot } from "./types"; type Draft = { -readonly [K in keyof FighterSnapshot]: FighterSnapshot[K] }; @@ -18,7 +18,7 @@ const fixtureStyle = (id: string): FighterStyle => { const base = (id: string): Draft => ({ player_id: id, x: 0, y: 0, facing: id === "fixture-one" ? 1 : -1, facing_x: id === "fixture-one" ? 1000 : -1000, facing_y: 0, velocity_x: 0, velocity_y: 0, stance: id === "fixture-one" ? "orthodox" : "southpaw", style: fixtureStyle(id), defense: "guard_high", - stamina: 760, maximum_stamina: 1000, conditioning: 820, guard: 670, poise: 520, + stamina: 760, maximum_stamina: 1000, conditioning: 820, guard: 670, guard_broken: false, poise: 520, trauma: id === "fixture-two" ? { head: 420, body: 640, left_eye: 430, right_eye: 210, left_cut: 330, right_cut: 170, swelling: 280, bleeding: 380 } : { head: 150, body: 260, left_eye: 120, right_eye: 60, left_cut: 90, right_cut: 20, swelling: 100, bleeding: 70 }, @@ -54,6 +54,7 @@ export function runDevelopmentFixture(root: HTMLElement): () => void { let tick = 0; let eventId = 0; + const refereeBlowsShown = new Set(); let finalSent = false; let bellRung = false; let thrownWindow = -1; @@ -253,10 +254,41 @@ export function runDevelopmentFixture(root: HTMLElement): () => void { } events.length = 0; } + // `referee=down`: the referee wanders into the line between them and takes a hook, reels, then a power uppercut + // puts him down for good and the bout stops for the replay of his fall. + let official: RefereeSnapshot = { x: 0, y: 140, facing_x: 0, facing_y: -1000, velocity_x: 0, velocity_y: 0, stunned_ticks: 0, alive: true, trauma: { head: 0, body: 0, left_eye: 0, right_eye: 0, left_cut: 0, right_cut: 0, swelling: 0, bleeding: 0 } }; + let refereeDownFor = 0; + if (search.get("referee") === "down") { + events.length = 0; + const blows = [{ at: 1.2, punch: "hook" as const, hand: "left" as const, power: "normal" as const, amount: 96, cut: 260 }, { at: 2.8, punch: "uppercut" as const, hand: "right" as const, power: "power" as const, amount: 160, cut: 520 }]; + for (const [fighter, x, sign] of [[one, -130, 1], [two, 150, -1]] as const) { + Object.assign(fighter, { x, y: 0, velocity_x: 0, velocity_y: 0, facing: sign, facing_x: sign * 1000, facing_y: 0, action: null, taunt_ticks: 0, stunned_ticks: 0, clinch_ticks: 0, is_downed: false, defense: "none" }); + } + official = { ...official, x: -55, y: 8, facing_x: 0, facing_y: 1000 }; + for (const [index, blow] of blows.entries()) { + const start = blow.at - 0.2; + if (t >= start && t < blow.at + 0.35) { + Object.assign(one, { action: blow.punch, action_hand: blow.hand, action_target: "head", action_power: blow.power, action_id: `ref-${index}`, action_key: `${blow.punch}:${blow.hand}:head:${blow.power}`, action_start_tick: Math.round(start * 30), action_startup_ticks: 6, action_active_ticks: 2, action_recovery_ticks: 8 }); + } + if (t >= blow.at && !refereeBlowsShown.has(index)) { + refereeBlowsShown.add(index); + eventId += 1; + events.push({ event_id: eventId, tick: Math.round(blow.at * 30), kind: "referee_hit", actor_id: one.player_id, target_id: "referee", amount: blow.amount, detail: `${blow.punch}:head`, blood: 60, direction: 1, action_id: `ref-${index}` }); + eventId += 1; + if (index === blows.length - 1) events.push({ event_id: eventId, tick: Math.round(blow.at * 30), kind: "referee_down", actor_id: one.player_id, target_id: "referee", amount: 0, detail: "", blood: 0, direction: 0, action_id: `ref-${index}` }); + } + if (t >= blow.at) official = { ...official, trauma: { ...official.trauma, head: official.trauma.head + blow.amount, right_eye: official.trauma.right_eye + 200, right_cut: blow.cut, bleeding: blow.cut / 2, swelling: official.trauma.swelling + 150 } }; + } + if (t >= blows[0]!.at && t < blows[0]!.at + 0.8) official = { ...official, stunned_ticks: 10 }; + if (t >= blows[1]!.at) official = { ...official, alive: false }; + refereeDownFor = t >= blows[1]!.at ? Math.max(0, blows[1]!.at + 5 - t) : 0; + } const flashOver = flash && t >= 2.5; const snapshot: EngineSnapshot = { - tick, phase: decided || flashOver ? "complete" : introducing ? "countdown" : forcedRest ? "rest" : "fight", round_number: search.get("intro") === "1" ? 1 : 3, phase_ticks_remaining: decided ? 0 : introducing ? Math.max(0, 90 - tick) : forcedRest ? Math.max(0, 450 - tick) : Math.max(0, 5400 - tick), - fighters: [{ ...one }, { ...two }], events, + tick, phase: decided || flashOver ? "complete" : introducing ? "countdown" : forcedRest ? "rest" : refereeDownFor > 0 ? "referee_down" : "fight", round_number: search.get("intro") === "1" ? 1 : 3, phase_ticks_remaining: decided ? 0 : introducing ? Math.max(0, 90 - tick) : forcedRest ? Math.max(0, 450 - tick) : Math.max(0, 5400 - tick), + fighters: [{ ...one }, { ...two }], + referee: official, + events, result: flashOver ? { match_id: "fixture", activity_instance_id: "fixture", guild_id: "fixture", player_one_id: one.player_id, player_two_id: two.player_id, winner_id: one.player_id, finish_method: "flash_ko", round_number: 3, tick, scorecards: [], player_one_knockdowns: 0, player_two_knockdowns: 0, player_one_damage: 900, player_two_damage: 400, diff --git a/web/hands/src/feedback.test.ts b/web/hands/src/feedback.test.ts index 620afb22..842ced70 100644 --- a/web/hands/src/feedback.test.ts +++ b/web/hands/src/feedback.test.ts @@ -230,6 +230,19 @@ describe("authoritative audio and haptics", () => { feedback.destroy(); }); + it("tears with a wet crack and the spurts of blood that follow it under every finisher's voice", async () => { + const feedback = new AudioFeedback(() => settings); + await feedback.unlock(); + const before = MockAudioContext.playedBuffers.length; + feedback.injury("shoulder_left"); + const played = MockAudioContext.playedBuffers.slice(before) as unknown as Array<{ decodeIndex?: number }>; + // Five bursts of noise, the last three a beat apart, and then the voice. + expect(played).toHaveLength(6); + expect(played.slice(0, 5).every((buffer) => buffer.decodeIndex === undefined)).toBe(true); + expect(played[5]!.decodeIndex).toBe(4); + feedback.destroy(); + }); + it("gives a finisher without a voice of its own the nearest one", async () => { const feedback = new AudioFeedback(() => settings); await feedback.unlock(); @@ -245,18 +258,25 @@ describe("authoritative audio and haptics", () => { MockAudioContext.failDecode = true; const feedback = new AudioFeedback(() => ({ ...settings, blood, reducedMotion })); await expect(feedback.unlock()).resolves.toBeUndefined(); - const started = MockAudioContext.bufferStarts; + const voices = (): number => MockAudioContext.playedBuffers.filter((buffer) => buffer !== null && "decodeIndex" in buffer).length; + const started = voices(); + const sounds = MockAudioContext.bufferStarts; feedback.injury("decapitation"); - expect(MockAudioContext.bufferStarts).toBe(started); + expect(voices()).toBe(started); + // The tearing under the voice still plays without it. + expect(MockAudioContext.bufferStarts).toBeGreaterThan(sounds); feedback.injury("dismember_left"); - expect(MockAudioContext.bufferStarts).toBe(started + 1); + expect(voices()).toBe(started + 1); + const heard = MockAudioContext.bufferStarts; blood = "off"; feedback.injury("dismember_right"); - expect(MockAudioContext.bufferStarts).toBe(started + 1); + blood = "reduced"; + feedback.injury("dismember_right"); blood = "full"; reducedMotion = true; feedback.injury("jaw_dislocation"); - expect(MockAudioContext.bufferStarts).toBe(started + 1); + expect(voices()).toBe(started + 1); + expect(MockAudioContext.bufferStarts).toBe(heard); feedback.destroy(); }); @@ -316,6 +336,54 @@ describe("authoritative audio and haptics", () => { }); }); +describe("a power punch heard", () => { + const event = (kind: string, detail: string, amount = 0): Parameters[0] => ({ event_id: 1, tick: 1, kind, actor_id: "one", target_id: "two", amount, detail, blood: 0, direction: 0, action_id: "p1" }); + const sounded = async (play: (feedback: AudioFeedback) => void): Promise<{ tones: number; noises: number; lowest: number; longest: number }> => { + MockAudioContext.filters = []; + MockAudioContext.oscillatorStarts = 0; + vi.stubGlobal("AudioContext", MockAudioContext); + const feedback = new AudioFeedback(() => settings); + await feedback.unlock(); + const tones = MockAudioContext.oscillatorStarts; + const filters = MockAudioContext.filters.length; + const stops: number[] = []; + const created = MockAudioContext.last!.createBufferSource.bind(MockAudioContext.last!); + MockAudioContext.last!.createBufferSource = () => { + const source = created(); + const stop = source.stop as unknown as ReturnType; + stop.mockImplementation((when: number) => { stops.push(when); }); + return source; + }; + play(feedback); + const frequencies = MockAudioContext.filters.slice(filters).map((filter) => (filter.frequency.setValueAtTime as unknown as ReturnType).mock.calls[0]![0] as number); + feedback.destroy(); + return { tones: MockAudioContext.oscillatorStarts - tones, noises: frequencies.length, lowest: Math.min(...frequencies), longest: Math.max(...stops) }; + }; + + it("whooshes lower and longer than any other punch of its class, with a low drop under it", async () => { + const normal = await sounded((feedback) => feedback.event(event("punch_start", "right:straight:head"))); + const power = await sounded((feedback) => feedback.event(event("punch_start", "right:straight:head"), true)); + expect(normal.tones).toBe(0); + expect(power.tones).toBe(1); + expect(power.noises).toBeGreaterThan(normal.noises); + expect(power.lowest).toBeLessThan(normal.lowest * 0.6); + expect(power.longest).toBeGreaterThan(normal.longest * 1.5); + const own = await sounded((feedback) => feedback.whoosh("straight", true)); + expect(own).toEqual(power); + }); + + it("lands with a deep boom after the thud and a sharp crack on top, and thumps the guard that takes it", async () => { + const normal = await sounded((feedback) => feedback.event(event("hit", "straight:head", 120))); + const power = await sounded((feedback) => feedback.event(event("hit", "straight:head", 120), true)); + expect(power.tones).toBe(normal.tones + 1); + // The crack, and the crowd rising to it. + expect(power.noises).toBe(normal.noises + 2); + const block = await sounded((feedback) => feedback.event(event("block", "", 40))); + const powerBlock = await sounded((feedback) => feedback.event(event("block", "", 40), true)); + expect(powerBlock.tones).toBe(block.tones + 1); + }); +}); + describe("the crowd", () => { const formants = (): number => MockAudioContext.filters.filter((filter) => (filter.Q as unknown as { value: number }).value === 5).length; const crowdEvent = (kind: string, amount = 0, detail = ""): Parameters[0] => ({ event_id: 1, tick: 1, kind, actor_id: "one", target_id: "two", amount, detail, blood: 0, direction: 0, action_id: null }); diff --git a/web/hands/src/haptics.ts b/web/hands/src/haptics.ts index f44fa7d0..376b84c4 100644 --- a/web/hands/src/haptics.ts +++ b/web/hands/src/haptics.ts @@ -16,10 +16,12 @@ const patterns: Readonly> = { export class HapticFeedback { constructor(private readonly settings: () => Settings) {} - event(event: CombatEvent): void { + /** Rumbles for a contact; one a power punch made rumbles longer and harder. */ + event(event: CombatEvent, power = false): void { if (!this.settings().haptics) return; - const pattern = patterns[event.kind]; - if (pattern === undefined) return; + const known = patterns[event.kind]; + if (known === undefined) return; + const pattern = power ? [known[0] * 1.6, known[1] + 0.2, known[2] + 0.15] as const : known; const actuator = this.padActuator(); if (actuator === null) { this.vibrate(pattern[0]); diff --git a/web/hands/src/input/bindings.ts b/web/hands/src/input/bindings.ts index d33f21b3..97871d97 100644 --- a/web/hands/src/input/bindings.ts +++ b/web/hands/src/input/bindings.ts @@ -15,7 +15,7 @@ export const ACTION_KEYS: Readonly> = { export const ACTIVE_CODES = new Set([...Object.keys(PUNCH_KEYS), ...Object.keys(ACTION_KEYS), "KeyW", "KeyA", "KeyS", "KeyD", "KeyQ", "KeyE", "ShiftLeft", "ShiftRight", "AltLeft", "AltRight"]); export const CONTROL_HELP = [ "Move: W up · S down · A left · D right", "High / low guard: Q / E", "Left/right jab: F / J", "Left/right straight: R / U", - "Left/right hook: G / H", "Left/right uppercut: T / Y", "Body: Shift · Power: Alt", + "Left/right hook: G / H", "Left/right uppercut: T / Y", "Body: Shift · Power: hold Alt (Option ⌥ on a Mac) with the punch, slower to throw and far heavier", "Slip: Z / X · Weave: C · Pull: V", "Clinch: B · Stance: N · Taunt: M · Fouls (on purpose): Shift+1 low blow / Shift+2 headbutt", "Get-up rhythm: ← / →", "Camera: K cycles broadcast, close and over the shoulder (behind your fighter, W walks at the opponent and A / D circle him).", "Style pick before the bout: arrow keys choose · Enter settles · 1–5 settle on that card at once.", @@ -31,7 +31,7 @@ export const CONTROL_HELP = [ "Touch: drag the left side to move · tap a punch pad's left or right half for that hand · hold BODY, POWER, GUARD or LOW · tap ◀ SLIP, SLIP ▶, WEAVE, PULL or CLINCH.", ] as const; -const CONTROL_HINT_KEYBOARD = "Move WASD · Jab F/J · Straight R/U · Hook G/H · Uppercut T/Y · Guard Q/E · Body Shift · Power Alt"; +const CONTROL_HINT_KEYBOARD = "Move WASD · Jab F/J · Straight R/U · Hook G/H · Uppercut T/Y · Guard Q/E · Body Shift · Power Alt/Option ⌥"; const CONTROL_HINT_TOUCH = "Drag on the left to move · Tap the pads to punch, L or R hand · Hold BODY, POWER or GUARD · Tap SLIP, WEAVE, PULL or CLINCH"; /** A phone held upright has only a narrow column beside the pads for the hint: the essentials, which the pads' own labels fill in. */ const CONTROL_HINT_TOUCH_SHORT = "Drag left to move · Tap pads to punch · Hold GUARD"; diff --git a/web/hands/src/input/gamepad.test.ts b/web/hands/src/input/gamepad.test.ts index 87cd5441..538d0f44 100644 --- a/web/hands/src/input/gamepad.test.ts +++ b/web/hands/src/input/gamepad.test.ts @@ -65,14 +65,14 @@ describe("gamepad semantic parity", () => { input.destroy(); }); - it("guard start cancels stale intent while a later guarded punch remains responsive", () => { + it("leaves a press made before the guard to go out with it, and still throws a later guarded punch", () => { let current = pad([0]); Object.defineProperty(navigator, "getGamepads", { configurable: true, value: () => [current] }); const input = new GamepadInput(); poll(input); current = pad(); poll(input); current = pad([4]); poll(input); - expect(input.frame()).toMatchObject({ defense: "guard_high", actions: [] }); + expect(input.frame()).toMatchObject({ defense: "guard_high", actions: [{ kind: "punch", hand: "right", class: "jab", target: "head", power: "normal" }] }); current = pad([4, 0]); poll(input); expect(input.frame().actions).toEqual([{ kind: "punch", hand: "right", class: "jab", target: "head", power: "normal" }]); input.destroy(); diff --git a/web/hands/src/input/gamepad.ts b/web/hands/src/input/gamepad.ts index 4dc72a3d..336484cb 100644 --- a/web/hands/src/input/gamepad.ts +++ b/web/hands/src/input/gamepad.ts @@ -27,6 +27,8 @@ export class GamepadInput { private defense: HeldDefense = "none"; private knockdown = false; private enabled = true; + private trigger = false; + private heldListener: (() => void) | null = null; private readonly disconnect = (event: GamepadEvent): void => { if (event.gamepad.id === this.currentId) this.reset(); @@ -37,16 +39,16 @@ export class GamepadInput { this.raf = requestAnimationFrame(() => this.poll()); } + /** Called when the stick or a guard shoulder changes. */ + onHeldChange(listener: (() => void) | null): void { + this.heldListener = listener; + } + private push(action: SemanticAction): void { if (this.sharedActions === undefined) pushActionIntent(this.queue, action, this.maximumQueue); else this.sharedActions.push("gamepad", action); } - private clearActions(): void { - this.queue.length = 0; - this.sharedActions?.clear(); - } - private poll(): void { if (!this.enabled) { this.reset(); @@ -62,13 +64,17 @@ export class GamepadInput { if (this.currentId !== null && this.currentId !== pad.id) this.reset(); this.currentId = pad.id; const move = radialDeadzone(pad.axes[0] ?? 0, pad.axes[1] ?? 0); - this.moveX = Math.round(move.x * 1000); - this.moveY = Math.round(-move.y * 1000); + const moveX = Math.round(move.x * 1000); + const moveY = Math.round(-move.y * 1000); const defense = pressed(pad, 4) ? "guard_high" : pressed(pad, 5) ? "guard_low" : "none"; - if (defense !== "none" && defense !== this.defense) this.clearActions(); + const changed = moveX !== this.moveX || moveY !== this.moveY || defense !== this.defense; + this.moveX = moveX; + this.moveY = moveY; this.defense = defense; + if (changed) this.heldListener?.(); - const gesture = this.gesture.update(pad.axes[2] ?? 0, pad.axes[3] ?? 0, pressed(pad, 6), pressed(pad, 7)); + this.trigger = pressed(pad, 7); + const gesture = this.gesture.update(pad.axes[2] ?? 0, pad.axes[3] ?? 0, pressed(pad, 6), this.trigger); if (gesture !== null) this.push(gesture); const faceEdge = FACE_CLASSES.some((_class, index) => pressed(pad, index) && !this.previous.has(index)); @@ -121,6 +127,11 @@ export class GamepadInput { this.knockdown = value; } + /** The right trigger is held: the next punch is a power punch. */ + get powerHeld(): boolean { + return this.enabled && this.trigger; + } + setEnabled(value: boolean): void { this.enabled = value; if (!value) this.reset(); @@ -135,6 +146,7 @@ export class GamepadInput { this.currentId = null; this.moveX = this.moveY = 0; this.defense = "none"; + this.trigger = false; this.queue.length = 0; this.sharedActions?.clearSource("gamepad"); this.previous.clear(); diff --git a/web/hands/src/input/input.test.ts b/web/hands/src/input/input.test.ts index 4e5c7804..bd8d57cb 100644 --- a/web/hands/src/input/input.test.ts +++ b/web/hands/src/input/input.test.ts @@ -1,5 +1,6 @@ import { SharedActionIntent } from "./action-buffer"; import { InputController, viewRelativeMove } from "./input"; +import type { InputFrame } from "../types"; const button = (pressed = false): GamepadButton => ({ pressed, touched: pressed, value: pressed ? 1 : 0 }); function pad(buttons: number[] = []): Gamepad { @@ -37,7 +38,7 @@ describe("combined input intent", () => { input.destroy(); }); - it("guard on either device clears older cross-device intent but permits a newer punch", () => { + it("a guard on either device leaves the press made before it on the other to go out with it, and permits a newer punch", () => { let current = pad(); Object.defineProperty(navigator, "getGamepads", { configurable: true, value: () => [current] }); const input = new InputController(); @@ -45,7 +46,7 @@ describe("combined input intent", () => { window.dispatchEvent(key("keydown", "KeyF")); window.dispatchEvent(key("keyup", "KeyF")); current = pad([4]); poll(input); - expect(input.frame()).toMatchObject({ defense: "guard_high", actions: [] }); + expect(input.frame()).toMatchObject({ defense: "guard_high", actions: [{ kind: "punch", hand: "left", class: "jab", target: "head", power: "normal" }] }); window.dispatchEvent(key("keydown", "KeyF")); window.dispatchEvent(key("keyup", "KeyF")); @@ -57,7 +58,7 @@ describe("combined input intent", () => { current = pad(); poll(input); current = pad([2]); poll(input); window.dispatchEvent(key("keydown", "KeyQ")); - expect(input.frame()).toMatchObject({ defense: "guard_high", actions: [] }); + expect(input.frame()).toMatchObject({ defense: "guard_high", actions: [{ kind: "punch", hand: "right", class: "hook", target: "head", power: "normal" }] }); input.destroy(); }); }); @@ -133,9 +134,140 @@ describe("controls that turn with the camera", () => { window.dispatchEvent(key("keydown", "KeyW")); expect(input.held()).toMatchObject({ moveX: 1000, moveY: 0 }); expect(input.frame()).toMatchObject({ moveX: 1000, moveY: 0 }); + window.dispatchEvent(key("keyup", "KeyW")); forward.mockReturnValue(null as unknown as { x: number; z: number }); + window.dispatchEvent(key("keydown", "KeyW")); expect(input.held()).toMatchObject({ moveX: 0, moveY: 1000 }); window.dispatchEvent(key("keyup", "KeyW")); input.destroy(); }); + + it("keeps the way a held direction walks across a change of camera until the keys change, and turns with the player's own camera meanwhile", () => { + const input = new InputController(); + let forward: { x: number; z: number } | null = { x: 1, z: 0 }; + input.setViewForward(() => forward); + window.dispatchEvent(key("keydown", "KeyW")); + expect(input.held()).toMatchObject({ moveX: 1000, moveY: 0 }); + forward = { x: 0, z: 1 }; + expect(input.held()).toMatchObject({ moveX: 0, moveY: -1000 }); + // K, or a shot that takes the frame: W goes on walking the way it did. + forward = null; + expect(input.held()).toMatchObject({ moveX: 0, moveY: -1000 }); + window.dispatchEvent(key("keydown", "KeyD")); + expect(input.held()).toMatchObject({ moveX: 707, moveY: 707 }); + // Pressed under the broadcast, the move keeps its meaning when the player's own camera comes back. + forward = { x: 1, z: 0 }; + expect(input.held()).toMatchObject({ moveX: 707, moveY: 707 }); + window.dispatchEvent(key("keyup", "KeyD")); + expect(input.held()).toMatchObject({ moveX: 1000, moveY: 0 }); + window.dispatchEvent(key("keyup", "KeyW")); + input.destroy(); + }); +}); + +describe("the power modifier held", () => { + it("is held while Alt or Option, the right trigger or the POWER pad is, and never while input is off", () => { + let triggers: number[] = []; + Object.defineProperty(navigator, "getGamepads", { configurable: true, value: () => [pad(triggers)] }); + Element.prototype.setPointerCapture = () => undefined; + const input = new InputController(); + const container = document.createElement("div"); + input.attachTouch(container, true); + expect(input.powerHeld).toBe(false); + window.dispatchEvent(key("keydown", "AltLeft")); + expect(input.powerHeld).toBe(true); + // Held through a pause or the rest, it shows again once input is back on, never while it is off. + input.setActive(false, true); + expect(input.powerHeld).toBe(false); + input.setActive(true); + expect(input.powerHeld).toBe(true); + window.dispatchEvent(key("keyup", "AltLeft")); + expect(input.powerHeld).toBe(false); + triggers = [7]; + poll(input); + expect(input.powerHeld).toBe(true); + triggers = []; + poll(input); + expect(input.powerHeld).toBe(false); + const power = container.querySelector("[data-mod='power']")!; + const touch = (type: string): void => { const event = new MouseEvent(type, { bubbles: true, cancelable: true }); Object.defineProperty(event, "pointerId", { value: 4 }); power.dispatchEvent(event); }; + touch("pointerdown"); + expect(input.powerHeld).toBe(true); + input.setActive(false, true); + expect(input.powerHeld).toBe(false); + input.setActive(true); + touch("pointerup"); + expect(input.powerHeld).toBe(false); + input.destroy(); + }); +}); + +describe("telling the server of held input as it changes", () => { + it("speaks up for a new direction, a stop or a guard, not for a key's repeat or a punch", () => { + Object.defineProperty(navigator, "getGamepads", { configurable: true, value: () => [] }); + const input = new InputController(); + const changed = vi.fn(); + input.onHeldChange(changed); + window.dispatchEvent(key("keydown", "KeyD")); + window.dispatchEvent(new KeyboardEvent("keydown", { code: "KeyD", repeat: true, cancelable: true })); + window.dispatchEvent(key("keydown", "KeyF")); + expect(changed).toHaveBeenCalledTimes(1); + window.dispatchEvent(key("keydown", "KeyW")); + window.dispatchEvent(key("keydown", "KeyQ")); + window.dispatchEvent(key("keyup", "KeyW")); + window.dispatchEvent(key("keyup", "KeyD")); + expect(changed).toHaveBeenCalledTimes(5); + input.destroy(); + }); + + it("sends a press still waiting to go out with the guard frame, from the keyboard, a pad or the touch controls", () => { + // A press inside the edge gap or past a send budget waits for the next frame, and the app sends one at once on a held + // change (network.notifyHeld flushes input.frame()). The renderer already plays the press, and the server decides. + let current = pad(); + Object.defineProperty(navigator, "getGamepads", { configurable: true, value: () => [current] }); + Element.prototype.setPointerCapture = () => undefined; + const sentOnGuard = (press: (input: InputController, container: HTMLElement) => void, guard: (input: InputController, container: HTMLElement) => void): InputFrame[] => { + const input = new InputController(); + const container = document.createElement("div"); + input.attachTouch(container, true); + const sent: InputFrame[] = []; + press(input, container); + input.onHeldChange(() => sent.push(input.frame())); + guard(input, container); + input.destroy(); + return sent; + }; + const tap = (target: Element): void => { const event = new MouseEvent("pointerdown", { bubbles: true, cancelable: true }); Object.defineProperty(event, "pointerId", { value: 3 }); target.dispatchEvent(event); }; + const keyboard = sentOnGuard(() => { window.dispatchEvent(key("keydown", "KeyF")); window.dispatchEvent(key("keyup", "KeyF")); }, () => window.dispatchEvent(key("keydown", "KeyQ"))); + window.dispatchEvent(key("keyup", "KeyQ")); + expect(keyboard[0]).toEqual({ moveX: 0, moveY: 0, defense: "guard_high", actions: [{ kind: "punch", hand: "left", class: "jab", target: "head", power: "normal", id: "c1" }] }); + const gamepad = sentOnGuard((input) => { current = pad([0]); poll(input); }, (input) => { current = pad([4]); poll(input); }); + current = pad(); + expect(gamepad[0]).toEqual({ moveX: 0, moveY: 0, defense: "guard_high", actions: [{ kind: "punch", hand: "right", class: "jab", target: "head", power: "normal", id: "c1" }] }); + const touch = sentOnGuard((_input, container) => tap(container.querySelector("[data-move='slip_left']")!), (_input, container) => tap(container.querySelector("[data-guard='guard_high']")!)); + expect(touch[0]).toEqual({ moveX: 0, moveY: 0, defense: "guard_high", actions: [{ kind: "slip_left", id: "c1" }] }); + }); + + it("speaks up for a stick that turns or presses well past where it was, not for every twitch of the thumb", () => { + const axes = [0, 0, 0, 0]; + let held: number[] = []; + Object.defineProperty(navigator, "getGamepads", { configurable: true, value: () => [{ ...pad(held), axes: [...axes] }] }); + const input = new InputController(); + const changed = vi.fn(); + input.onHeldChange(changed); + const at = (x: number, y: number): void => { axes[0] = x; axes[1] = y; poll(input); }; + at(0.9, 0); + expect(changed).toHaveBeenCalledTimes(1); + at(0.92, -0.05); + at(0.9, 0.04); + expect(changed).toHaveBeenCalledTimes(1); + at(0.6, -0.6); + expect(changed).toHaveBeenCalledTimes(2); + held = [4]; + poll(input); + expect(changed).toHaveBeenCalledTimes(3); + at(0, 0); + expect(changed).toHaveBeenCalledTimes(4); + input.destroy(); + }); }); diff --git a/web/hands/src/input/input.ts b/web/hands/src/input/input.ts index 9695a1a6..582d6726 100644 --- a/web/hands/src/input/input.ts +++ b/web/hands/src/input/input.ts @@ -15,26 +15,60 @@ export function viewRelativeMove(moveX: number, moveY: number, forwardX: number, return { moveX: clamp(-forwardZ * moveX + forwardX * moveY), moveY: clamp(-forwardX * moveX - forwardZ * moveY) }; } +/** Angle between two moves, 0 to pi. */ +const turnBetween = (ax: number, ay: number, bx: number, by: number): number => Math.abs(Math.atan2(ax * by - ay * bx, ax * bx + ay * by)); +/** A move keeps the camera it was pressed under until it turns about as far as one key changes it. */ +const RELATCH_TURN = Math.PI / 4 - 0.01; +/** Held input worth sending at once: a new guard, a start or a stop, a turn this far, or this much more or less push on a stick. */ +const SEND_TURN = Math.PI / 8; +const SEND_PUSH = 300; + export class InputController { private readonly actions = new SharedActionIntent(1); readonly keyboard: KeyboardInput; readonly gamepad: GamepadInput; touch: TouchInput | null = null; readonly reset = (): void => { this.keyboard.reset(); this.gamepad.reset(); this.touch?.reset(); this.actions.clear(); this.gamepad.setKnockdown(false); }; - constructor() { this.keyboard = new KeyboardInput(window, 1, this.actions); this.gamepad = new GamepadInput(1, this.actions); window.addEventListener("blur", this.reset); document.addEventListener("visibilitychange", this.visibility); } + private readonly heldChanged = (): void => { + const held = this.held(); const sent = this.sentHeld; + const moving = held.moveX !== 0 || held.moveY !== 0; const wasMoving = sent.moveX !== 0 || sent.moveY !== 0; + const differs = held.defense !== sent.defense || moving !== wasMoving + || (moving && (turnBetween(held.moveX, held.moveY, sent.moveX, sent.moveY) > SEND_TURN || Math.abs(Math.hypot(held.moveX, held.moveY) - Math.hypot(sent.moveX, sent.moveY)) > SEND_PUSH)); + if (!differs) return; + this.sentHeld = held; + this.heldListener?.(); + }; + constructor() { this.keyboard = new KeyboardInput(window, 1, this.actions); this.gamepad = new GamepadInput(1, this.actions); this.keyboard.onHeldChange(this.heldChanged); this.gamepad.onHeldChange(this.heldChanged); window.addEventListener("blur", this.reset); document.addEventListener("visibilitychange", this.visibility); } private readonly visibility = (): void => { if (document.hidden) this.reset(); }; - attachTouch(container: HTMLElement, force = coarsePointer()): void { if (this.touch !== null || !force) return; this.touch = new TouchInput(container, this.actions); } + attachTouch(container: HTMLElement, force = coarsePointer()): void { if (this.touch !== null || !force) return; this.touch = new TouchInput(container, this.actions); this.touch.onHeldChange(this.heldChanged); } /** `touchShown` keeps the touch controls on screen, inert, while input is off (the rest, a pause). */ setActive(active: boolean, touchShown = active): void { this.keyboard.setEnabled(active); this.gamepad.setEnabled(active); this.touch?.setEnabled(active, touchShown); } setKnockdown(value: boolean): void { this.gamepad.setKnockdown(value); this.touch?.setKnockdown(value); } onAction(listener: ((action: SemanticAction) => void) | null): void { this.actions.setListener(listener); } + /** A power modifier is held on any device (Alt or Option, the POWER pad, the right trigger): the next punch is a power punch. */ + get powerHeld(): boolean { return this.keyboard.powerHeld || this.gamepad.powerHeld || this.touch?.powerHeld === true; } + /** Called when the held movement or guard changes enough to be worth sending before the next periodic frame. */ + onHeldChange(listener: (() => void) | null): void { this.heldListener = listener; } + private heldListener: (() => void) | null = null; + private sentHeld: HeldInput = { moveX: 0, moveY: 0, defense: "none" }; /** While the camera turns with the player's fighter, up on the stick or W walks the way it faces. */ setViewForward(provider: (() => { readonly x: number; readonly z: number } | null) | null): void { this.viewForward = provider; } private viewForward: (() => { readonly x: number; readonly z: number } | null) | null = null; + /** + * The move held and the camera it was pressed under: the forward of the player's own camera, followed while that camera + * is in use, or null for the broadcast's. A change of camera (K, or a shot taking the frame) leaves it until the move + * itself changes, so the fighter does not swerve under a key held through the cut. + */ + private latched: { moveX: number; moveY: number; forward: { x: number; z: number } | null } | null = null; held(): HeldInput { const keyboard = this.keyboard.frame(0); const gamepad = this.gamepad.frame(0); const touch = this.touch?.frame() ?? null; const moveX = gamepad.moveX !== 0 ? gamepad.moveX : touch !== null && touch.moveX !== 0 ? touch.moveX : keyboard.moveX; const moveY = gamepad.moveY !== 0 ? gamepad.moveY : touch !== null && touch.moveY !== 0 ? touch.moveY : keyboard.moveY; const defense = gamepad.defense !== "none" ? gamepad.defense : touch !== null && touch.defense !== "none" ? touch.defense : keyboard.defense; - const forward = (moveX !== 0 || moveY !== 0) ? this.viewForward?.() ?? null : null; + if (moveX === 0 && moveY === 0) { this.latched = null; return { moveX, moveY, defense }; } + const live = this.viewForward?.() ?? null; + const latched = this.latched; + if (latched === null || turnBetween(moveX, moveY, latched.moveX, latched.moveY) > RELATCH_TURN) this.latched = { moveX, moveY, forward: live === null ? null : { x: live.x, z: live.z } }; + else if (latched.forward !== null && live !== null) { latched.forward.x = live.x; latched.forward.z = live.z; } + const forward = this.latched!.forward; if (forward === null) return { moveX, moveY, defense }; const turned = viewRelativeMove(moveX, moveY, forward.x, forward.z); return { moveX: turned.moveX, moveY: turned.moveY, defense }; diff --git a/web/hands/src/input/keyboard.test.ts b/web/hands/src/input/keyboard.test.ts index 819dc1cf..99949385 100644 --- a/web/hands/src/input/keyboard.test.ts +++ b/web/hands/src/input/keyboard.test.ts @@ -9,5 +9,15 @@ describe("semantic keyboard parity", () => { it("retains only the newest changed intent", () => { const input = new KeyboardInput(window, 1); for (const code of ["KeyF", "KeyJ", "KeyG"]) { window.dispatchEvent(key("keydown", code)); window.dispatchEvent(key("keyup", code)); } expect(input.frame(20).actions).toEqual([{ kind: "punch", hand: "left", class: "hook", target: "head", power: "normal" }]); input.destroy(); }); it("keeps tracking keys while input is off, so keys held through the bell count from the first frame without a press", () => { const input = new KeyboardInput(); input.setEnabled(false); window.dispatchEvent(key("keydown", "KeyW")); window.dispatchEvent(key("keydown", "KeyQ")); window.dispatchEvent(key("keydown", "KeyF")); expect(input.frame()).toEqual({ moveX: 0, moveY: 0, defense: "none", actions: [] }); input.setEnabled(true); expect(input.frame()).toEqual({ moveX: 0, moveY: 1000, defense: "guard_high", actions: [] }); window.dispatchEvent(key("keydown", "KeyF", true)); expect(input.frame().actions).toEqual([]); window.dispatchEvent(key("keyup", "KeyQ")); expect(input.frame().defense).toBe("none"); input.destroy(); }); it("takes the hold of a key pressed before the page had focus from its auto-repeat, never a press", () => { const input = new KeyboardInput(); window.dispatchEvent(key("keydown", "KeyD", true)); window.dispatchEvent(key("keydown", "KeyJ", true)); expect(input.frame()).toEqual({ moveX: 1000, moveY: 0, defense: "none", actions: [] }); input.destroy(); }); - it("cancels stale intent when guard starts but allows a new punch from guard", () => { const input = new KeyboardInput(); window.dispatchEvent(key("keydown", "KeyF")); window.dispatchEvent(key("keyup", "KeyF")); window.dispatchEvent(key("keydown", "KeyQ")); expect(input.frame()).toEqual({ moveX: 0, moveY: 0, defense: "guard_high", actions: [] }); window.dispatchEvent(key("keydown", "KeyF")); expect(input.frame().actions).toEqual([{ kind: "punch", hand: "left", class: "jab", target: "head", power: "normal" }]); input.destroy(); }); + it("leaves a press made before the guard to go out with it, for the server to throw or drop, and allows a new punch from guard", () => { const input = new KeyboardInput(); window.dispatchEvent(key("keydown", "KeyF")); window.dispatchEvent(key("keyup", "KeyF")); window.dispatchEvent(key("keydown", "KeyQ")); expect(input.frame()).toEqual({ moveX: 0, moveY: 0, defense: "guard_high", actions: [{ kind: "punch", hand: "left", class: "jab", target: "head", power: "normal" }] }); window.dispatchEvent(key("keydown", "KeyF")); expect(input.frame().actions).toEqual([{ kind: "punch", hand: "left", class: "jab", target: "head", power: "normal" }]); input.destroy(); }); +}); +describe("keys that fight each other or go stale", () => { + const meta = (type: "keydown" | "keyup"): KeyboardEvent => new KeyboardEvent(type, { code: "MetaLeft", key: "Meta", metaKey: type === "keydown", cancelable: true }); + it("moves the way of the newest of two opposite keys, and back when it is let go, so a roll from A to D never stops the fighter", () => { const input = new KeyboardInput(); window.dispatchEvent(key("keydown", "KeyA")); expect(input.frame().moveX).toBe(-1000); window.dispatchEvent(key("keydown", "KeyD")); expect(input.frame().moveX).toBe(1000); window.dispatchEvent(key("keyup", "KeyD")); expect(input.frame().moveX).toBe(-1000); window.dispatchEvent(key("keydown", "KeyD")); window.dispatchEvent(key("keyup", "KeyA")); expect(input.frame().moveX).toBe(1000); window.dispatchEvent(key("keydown", "KeyW")); window.dispatchEvent(key("keydown", "KeyS")); expect(input.frame()).toMatchObject({ moveX: 707, moveY: -707 }); window.dispatchEvent(key("keydown", "KeyW", true)); expect(input.frame()).toMatchObject({ moveX: 707, moveY: -707 }); input.destroy(); }); + it("turns to a key pressed afresh whose release was lost, so the newer key it was held behind cannot keep the fighter from going that way", () => { const input = new KeyboardInput(); window.dispatchEvent(key("keydown", "KeyD")); window.dispatchEvent(key("keydown", "KeyA")); expect(input.frame().moveX).toBe(-1000); window.dispatchEvent(key("keydown", "KeyD")); expect(input.frame().moveX).toBe(1000); window.dispatchEvent(key("keydown", "KeyA", true)); expect(input.frame().moveX).toBe(1000); input.destroy(); }); + it("raises the guard of the newer of Q and E", () => { const input = new KeyboardInput(); window.dispatchEvent(key("keydown", "KeyQ")); window.dispatchEvent(key("keydown", "KeyE")); expect(input.frame().defense).toBe("guard_low"); window.dispatchEvent(key("keyup", "KeyE")); expect(input.frame().defense).toBe("guard_high"); input.destroy(); }); + it("lets go of keys released behind Command, whose keyup macOS never delivers, when Command comes up", () => { const input = new KeyboardInput(); window.dispatchEvent(key("keydown", "ShiftLeft")); window.dispatchEvent(key("keydown", "KeyA")); window.dispatchEvent(meta("keydown")); window.dispatchEvent(key("keydown", "KeyW")); expect(input.frame()).toMatchObject({ moveX: -707, moveY: 707 }); window.dispatchEvent(meta("keyup")); expect(input.frame()).toMatchObject({ moveX: 0, moveY: 0 }); window.dispatchEvent(key("keydown", "KeyD")); expect(input.frame().moveX).toBe(1000); window.dispatchEvent(key("keydown", "KeyF")); expect(input.frame().actions).toEqual([{ kind: "punch", hand: "left", class: "jab", target: "body", power: "normal" }]); input.destroy(); }); + it("takes Option and Shift from the key's own flags, so Option+U, a dead key on a Mac, throws the power straight even when the Option press itself was missed", () => { const input = new KeyboardInput(window, 4); window.dispatchEvent(new KeyboardEvent("keydown", { code: "KeyU", key: "Dead", altKey: true, cancelable: true })); window.dispatchEvent(new KeyboardEvent("keyup", { code: "KeyU", key: "Dead", altKey: true, cancelable: true })); window.dispatchEvent(new KeyboardEvent("keydown", { code: "KeyG", key: "G", shiftKey: true, cancelable: true })); expect(input.frame(4).actions).toEqual([{ kind: "punch", hand: "right", class: "straight", target: "head", power: "power" }, { kind: "punch", hand: "left", class: "hook", target: "body", power: "normal" }]); input.destroy(); }); + it("shows the power armed as the next punch will be thrown, from the Option flag any key carries even when the Option press itself was missed, until a key or a blur says it is up", () => { const input = new KeyboardInput(window, 4); const option = (type: "keydown" | "keyup", code: string, altKey: boolean): KeyboardEvent => new KeyboardEvent(type, { code, altKey, cancelable: true }); window.dispatchEvent(option("keydown", "KeyU", true)); expect(input.powerHeld).toBe(true); expect(input.frame(4).actions).toMatchObject([{ class: "straight", power: "power" }]); window.dispatchEvent(option("keyup", "KeyU", true)); expect(input.powerHeld).toBe(true); window.dispatchEvent(option("keyup", "AltLeft", false)); expect(input.powerHeld).toBe(false); window.dispatchEvent(option("keydown", "KeyU", false)); expect(input.frame(4).actions).toMatchObject([{ class: "straight", power: "normal" }]); window.dispatchEvent(option("keyup", "KeyU", false)); window.dispatchEvent(option("keydown", "KeyP", true)); expect(input.powerHeld).toBe(true); window.dispatchEvent(new Event("blur")); expect(input.powerHeld).toBe(false); input.destroy(); }); + it("says when the held movement or guard changes, and only then", () => { const input = new KeyboardInput(); const changed = vi.fn(); input.onHeldChange(changed); window.dispatchEvent(key("keydown", "KeyD")); window.dispatchEvent(key("keydown", "KeyD", true)); window.dispatchEvent(key("keydown", "KeyF")); window.dispatchEvent(key("keydown", "ShiftLeft")); expect(changed).toHaveBeenCalledTimes(1); window.dispatchEvent(key("keydown", "KeyQ")); window.dispatchEvent(key("keyup", "KeyD")); window.dispatchEvent(key("keyup", "KeyF")); expect(changed).toHaveBeenCalledTimes(3); window.dispatchEvent(meta("keyup")); expect(changed).toHaveBeenCalledTimes(4); window.dispatchEvent(meta("keyup")); expect(changed).toHaveBeenCalledTimes(4); input.destroy(); }); }); diff --git a/web/hands/src/input/keyboard.ts b/web/hands/src/input/keyboard.ts index e5b62738..abd7dbdc 100644 --- a/web/hands/src/input/keyboard.ts +++ b/web/hands/src/input/keyboard.ts @@ -2,41 +2,76 @@ import { SharedActionIntent, pushActionIntent } from "./action-buffer"; import { ACTION_KEYS, ACTIVE_CODES, PUNCH_KEYS } from "./bindings"; import type { HeldDefense, InputFrame, SemanticAction } from "../types"; +/** The keys whose hold every input frame carries: footwork and guard. */ +const HELD_CODES = new Set(["KeyW", "KeyA", "KeyS", "KeyD", "KeyQ", "KeyE"]); +const MODIFIER_CODES = new Set(["ShiftLeft", "ShiftRight", "AltLeft", "AltRight"]); + export class KeyboardInput { private readonly held = new Set(); private readonly queue: SemanticAction[] = []; private enabled = true; + /** Option as the newest key event says it is, which knows of one pressed before the page had focus. */ + private altFlag = false; + private heldListener: (() => void) | null = null; private readonly keydown = (event: KeyboardEvent): void => { + this.altFlag = event.altKey; if (!ACTIVE_CODES.has(event.code)) return; // Keys stay tracked while input is off (the rest, a pause), so one held through the bell counts from the first frame. - if (!this.enabled) { this.held.add(event.code); return; } + if (!this.enabled) { this.hold(event.code, event.repeat); return; } // A repeat takes the hold of a key pressed before the page had focus, never the press. - event.preventDefault(); if (event.repeat) { this.held.add(event.code); return; } this.held.add(event.code); - if (event.code === "KeyQ" || event.code === "KeyE") this.clearActions(); + event.preventDefault(); this.hold(event.code, event.repeat); if (event.repeat) return; const punch = PUNCH_KEYS[event.code]; - if (punch !== undefined) this.push({ kind: "punch", hand: punch[0], class: punch[1], target: this.hasShift() ? "body" : "head", power: this.hasAlt() ? "power" : "normal" }); + if (punch !== undefined) this.push({ kind: "punch", hand: punch[0], class: punch[1], target: this.hasShift(event) ? "body" : "head", power: this.alt ? "power" : "normal" }); // A foul needs Shift held, so a number pressed for the corner as the bell goes cannot become one. - else { const action = ACTION_KEYS[event.code]; if (action !== undefined && (action.kind !== "foul" || this.hasShift())) this.push(action); } + else { const action = ACTION_KEYS[event.code]; if (action !== undefined && (action.kind !== "foul" || this.hasShift(event))) this.push(action); } + }; + private readonly keyup = (event: KeyboardEvent): void => { + this.altFlag = event.altKey; + // macOS delivers no keyup for a key let go while Command is held (Chrome since 149 makes one up; Discord's Electron does + // not), so once Command is up only the modifiers, whose releases always arrive, can be trusted to still be down. + if (event.code === "MetaLeft" || event.code === "MetaRight") { this.letGo((code) => !MODIFIER_CODES.has(code)); return; } + if (ACTIVE_CODES.has(event.code)) { if (this.enabled) event.preventDefault(); this.letGo((code) => code === event.code); } }; - private readonly keyup = (event: KeyboardEvent): void => { if (ACTIVE_CODES.has(event.code)) { if (this.enabled) event.preventDefault(); this.held.delete(event.code); } }; private readonly visibility = (): void => { if (document.hidden) this.reset(); }; private readonly blur = (): void => this.reset(); constructor(private readonly target: Window = window, private readonly maximumQueue = 1, private readonly sharedActions?: SharedActionIntent) { target.addEventListener("keydown", this.keydown); target.addEventListener("keyup", this.keyup); target.addEventListener("blur", this.blur); document.addEventListener("visibilitychange", this.visibility); } - private hasShift(): boolean { return this.held.has("ShiftLeft") || this.held.has("ShiftRight"); } - private hasAlt(): boolean { return this.held.has("AltLeft") || this.held.has("AltRight"); } + /** Called whenever the held footwork or guard keys change. */ + onHeldChange(listener: (() => void) | null): void { this.heldListener = listener; } + /** A fresh press goes to the back of the order, so of two opposite keys held together the newer one counts. */ + private hold(code: string, repeat: boolean): void { + if (repeat && this.held.has(code)) return; + this.held.delete(code); this.held.add(code); + if (HELD_CODES.has(code)) this.heldListener?.(); + } + private letGo(released: (code: string) => boolean): void { + let changed = false; + for (const code of this.held) if (released(code)) { this.held.delete(code); changed ||= HELD_CODES.has(code); } + if (changed) this.heldListener?.(); + } + /** 1 or -1 for whichever of the two keys was pressed last and is still held, 0 for neither. */ + private axis(positive: string, negative: string): number { + let value = 0; + for (const code of this.held) if (code === positive) value = 1; else if (code === negative) value = -1; + return value; + } + // The key's own flags count too: a modifier pressed before the page had focus is held all the same. + private hasShift(event: KeyboardEvent): boolean { return event.shiftKey || this.held.has("ShiftLeft") || this.held.has("ShiftRight"); } + private get alt(): boolean { return this.altFlag || this.held.has("AltLeft") || this.held.has("AltRight"); } + /** Alt (Option on a Mac) is held: the next punch is a power punch. */ + get powerHeld(): boolean { return this.enabled && this.alt; } private push(action: SemanticAction): void { if (this.sharedActions === undefined) pushActionIntent(this.queue, action, this.maximumQueue); else this.sharedActions.push("keyboard", action); } - private clearActions(): void { this.queue.length = 0; this.sharedActions?.clear(); } /** Off drops queued presses but keeps the held keys; the frame stays neutral until input is on again. */ setEnabled(enabled: boolean): void { this.enabled = enabled; if (!enabled) { this.queue.length = 0; this.sharedActions?.clearSource("keyboard"); } } frame(maxActions = 4): InputFrame { if (!this.enabled) return { moveX: 0, moveY: 0, defense: "none", actions: [] }; - let x = (this.held.has("KeyD") ? 1000 : 0) - (this.held.has("KeyA") ? 1000 : 0); - let y = (this.held.has("KeyW") ? 1000 : 0) - (this.held.has("KeyS") ? 1000 : 0); + let x = this.axis("KeyD", "KeyA") * 1000; + let y = this.axis("KeyW", "KeyS") * 1000; if (x !== 0 && y !== 0) { x = Math.sign(x) * 707; y = Math.sign(y) * 707; } - const defense: HeldDefense = this.held.has("KeyQ") ? "guard_high" : this.held.has("KeyE") ? "guard_low" : "none"; + const guard = this.axis("KeyQ", "KeyE"); + const defense: HeldDefense = guard > 0 ? "guard_high" : guard < 0 ? "guard_low" : "none"; return { moveX: x, moveY: y, defense, actions: this.sharedActions === undefined ? this.queue.splice(0, maxActions) : [] }; } - reset(): void { this.held.clear(); this.queue.length = 0; this.sharedActions?.clearSource("keyboard"); } + reset(): void { this.letGo(() => true); this.altFlag = false; this.queue.length = 0; this.sharedActions?.clearSource("keyboard"); } destroy(): void { this.reset(); this.target.removeEventListener("keydown", this.keydown); this.target.removeEventListener("keyup", this.keyup); this.target.removeEventListener("blur", this.blur); document.removeEventListener("visibilitychange", this.visibility); } } diff --git a/web/hands/src/input/touch.test.ts b/web/hands/src/input/touch.test.ts index eb17e0a9..bacc62ac 100644 --- a/web/hands/src/input/touch.test.ts +++ b/web/hands/src/input/touch.test.ts @@ -151,4 +151,26 @@ describe("touch controls", () => { expect(touch.frame()).toMatchObject({ moveX: 0, moveY: 0, defense: "none" }); touch.destroy(); }); + + it("says when the stick moves or a guard is held or let go, so the server hears of it before the next periodic frame", () => { + const container = document.createElement("div"); + document.body.append(container); + const touch = new TouchInput(container, new SharedActionIntent(4)); + const changed = vi.fn(); + touch.onHeldChange(changed); + const zone = container.querySelector("[data-stick]")!; + zone.getBoundingClientRect = () => ({ left: 0, top: 0, width: 400, height: 400, right: 400, bottom: 400, x: 0, y: 0, toJSON: () => undefined }); + pointer("pointerdown", zone, { pointerId: 5, clientX: 100, clientY: 200 }); + pointer("pointermove", zone, { pointerId: 5, clientX: 156, clientY: 200 }); + pointer("pointerup", zone, { pointerId: 5 }); + expect(changed).toHaveBeenCalledTimes(3); + const guard = container.querySelector("[data-guard='guard_high']")!; + const power = container.querySelector("[data-mod='power']")!; + pointer("pointerdown", guard, { pointerId: 6 }); + pointer("pointerdown", power, { pointerId: 7 }); + pointer("pointerup", power, { pointerId: 7 }); + pointer("pointerup", guard, { pointerId: 6 }); + expect(changed).toHaveBeenCalledTimes(5); + touch.destroy(); + }); }); diff --git a/web/hands/src/input/touch.ts b/web/hands/src/input/touch.ts index 21430746..8b239570 100644 --- a/web/hands/src/input/touch.ts +++ b/web/hands/src/input/touch.ts @@ -51,6 +51,7 @@ export class TouchInput { private knockdown = false; private enabled = true; private readonly heldPointers = new Map(); + private heldListener: (() => void) | null = null; constructor(container: HTMLElement, private readonly sharedActions: SharedActionIntent) { this.root = document.createElement("div"); @@ -103,6 +104,7 @@ export class TouchInput { this.moveY = 0; this.stickKnob.style.transform = "translate(-50%, -50%)"; this.stickBase.classList.remove("active"); + this.heldListener?.(); }; zone.addEventListener("pointerup", release); zone.addEventListener("pointercancel", release); @@ -139,7 +141,6 @@ export class TouchInput { event.preventDefault(); mod.setPointerCapture(event.pointerId); this.heldPointers.set(event.pointerId, key); - if (key === "guard_high" || key === "guard_low") this.sharedActions.clear(); this.syncHeld(); mod.classList.add("pressed"); }; @@ -159,7 +160,20 @@ export class TouchInput { const keys = [...this.heldPointers.values()]; this.body = keys.includes("body"); this.power = keys.includes("power"); - this.guard = keys.findLast((key): key is HeldDefense => key === "guard_high" || key === "guard_low") ?? "none"; + const guard = keys.findLast((key): key is HeldDefense => key === "guard_high" || key === "guard_low") ?? "none"; + const changed = guard !== this.guard; + this.guard = guard; + if (changed) this.heldListener?.(); + } + + /** The POWER pad is held: the next punch is a power punch. */ + get powerHeld(): boolean { + return this.enabled && this.power; + } + + /** Called when the stick moves or a guard is held or let go. */ + onHeldChange(listener: (() => void) | null): void { + this.heldListener = listener; } private updateStick(clientX: number, clientY: number): void { @@ -178,6 +192,7 @@ export class TouchInput { const unitY = length > 0 ? dy / Math.max(length, 1e-6) : 0; this.moveX = Math.round(unitX * scaled * 1000) || 0; this.moveY = Math.round(-unitY * scaled * 1000) || 0; + this.heldListener?.(); } setKnockdown(value: boolean): void { diff --git a/web/hands/src/interpolation.test.ts b/web/hands/src/interpolation.test.ts index 47747e39..c7389700 100644 --- a/web/hands/src/interpolation.test.ts +++ b/web/hands/src/interpolation.test.ts @@ -29,6 +29,7 @@ function simulateLink(endMs: number, latencyMs: (sentMs: number, tick: number) = describe("authoritative interpolation", () => { it("orders ticks, interpolates presentation geometry, and rejects stale state", () => { const buffer = new SnapshotBuffer(); const a = snapshot(10), b = { ...snapshot(12), fighters: [{ ...snapshot(12).fighters[0], x: 100, facing_x: 0, facing_y: 1000 }, snapshot(12).fighters[1]] as const }; expect(buffer.push(a)).toBe(true); expect(buffer.push(a)).toBe(false); expect(buffer.push(b)).toBe(true); const mid = buffer.sample(11)!; expect(mid.fighters[0].x).toBe(0); expect(mid.fighters[0].facing_x).toBe(500); expect(mid.fighters[0].facing_y).toBe(500); expect(buffer.sample(11.5)!.fighters[0].x).toBe(50); }); + it("moves the referee smoothly between snapshots, like the fighters", () => { const buffer = new SnapshotBuffer(); const a = { ...snapshot(10), referee: { ...snapshot(10).referee, x: 0, y: 60, stunned_ticks: 4 } }; const b = { ...snapshot(12), referee: { ...snapshot(12).referee, x: 40, y: 20, stunned_ticks: 2 } }; buffer.push(a); buffer.push(b); const mid = buffer.sample(11)!; expect([mid.referee.x, mid.referee.y]).toEqual([20, 40]); expect(mid.referee.stunned_ticks).toBe(2); }); it("snaps across phase and knockdown discontinuities", () => { const buffer = new SnapshotBuffer(); buffer.push(snapshot(10)); const b = { ...snapshot(12), phase: "knockdown" as const }; buffer.push(b); expect(buffer.sample(11)).toBe(b); }); it("advances a continuous render clock behind the estimated server tick", () => { const buffer = new SnapshotBuffer(8, 30, 2); diff --git a/web/hands/src/interpolation.ts b/web/hands/src/interpolation.ts index 6872d2d1..23d5245d 100644 --- a/web/hands/src/interpolation.ts +++ b/web/hands/src/interpolation.ts @@ -1,4 +1,4 @@ -import type { CombatEvent, EngineSnapshot, FighterSnapshot } from "./types"; +import type { CombatEvent, EngineSnapshot, FighterSnapshot, RefereeSnapshot } from "./types"; const mix = (a: number, b: number, t: number): number => a + (b - a) * t; const presentationFighter = (a: FighterSnapshot, b: FighterSnapshot, t: number): FighterSnapshot => ({ @@ -9,6 +9,11 @@ const presentationFighter = (a: FighterSnapshot, b: FighterSnapshot, t: number): stamina: mix(a.stamina, b.stamina, t), maximum_stamina: mix(a.maximum_stamina, b.maximum_stamina, t), conditioning: mix(a.conditioning, b.conditioning, t), guard: mix(a.guard, b.guard, t), poise: mix(a.poise, b.poise, t), }); +const presentationReferee = (a: RefereeSnapshot, b: RefereeSnapshot, t: number): RefereeSnapshot => ({ + ...b, + x: mix(a.x, b.x, t), y: mix(a.y, b.y, t), facing_x: mix(a.facing_x, b.facing_x, t), facing_y: mix(a.facing_y, b.facing_y, t), + velocity_x: mix(a.velocity_x, b.velocity_x, t), velocity_y: mix(a.velocity_y, b.velocity_y, t), +}); const MIN_DELAY_TICKS = 1.5; const MAX_DELAY_TICKS = 6; @@ -116,7 +121,7 @@ export class SnapshotBuffer { const a = this.snapshots[nextIndex - 1]!, b = this.snapshots[nextIndex]!; if (a.phase !== b.phase || a.fighters.some((fighter, index) => fighter.knockdowns !== b.fighters[index]?.knockdowns)) return b; const t = Math.max(0, Math.min(1, (tick - a.tick) / Math.max(1, b.tick - a.tick))); - return { ...b, fighters: [presentationFighter(a.fighters[0], b.fighters[0], t), presentationFighter(a.fighters[1], b.fighters[1], t)] }; + return { ...b, fighters: [presentationFighter(a.fighters[0], b.fighters[0], t), presentationFighter(a.fighters[1], b.fighters[1], t)], referee: presentationReferee(a.referee, b.referee, t) }; } clear(): void { this.snapshots.length = 0; this.offsetTicks = null; } } diff --git a/web/hands/src/lab/model-lab.ts b/web/hands/src/lab/model-lab.ts index ececa7fa..532820da 100644 --- a/web/hands/src/lab/model-lab.ts +++ b/web/hands/src/lab/model-lab.ts @@ -33,7 +33,7 @@ type Draft = { -readonly [K in keyof FighterSnapshot]: FighterSnapshot[K] }; const base = (): Draft => ({ player_id: "lab", x: 0, y: 0, facing: 1, facing_x: 0, facing_y: -1000, velocity_x: 0, velocity_y: 0, - stance: "orthodox", style: "balanced", defense: "none", stamina: 1000, maximum_stamina: 1000, conditioning: 1000, guard: 700, poise: 600, + stance: "orthodox", style: "balanced", defense: "none", stamina: 1000, maximum_stamina: 1000, conditioning: 1000, guard: 700, guard_broken: false, poise: 600, trauma: { head: 0, body: 0, left_eye: 0, right_eye: 0, left_cut: 0, right_cut: 0, swelling: 0, bleeding: 0 }, knockdowns: 0, warnings: 0, deductions: 0, stunned_ticks: 0, is_downed: false, action: null, action_hand: null, action_target: null, action_power: null, action_id: null, action_key: null, diff --git a/web/hands/src/manifest.ts b/web/hands/src/manifest.ts index 762ae00f..78286f2a 100644 --- a/web/hands/src/manifest.ts +++ b/web/hands/src/manifest.ts @@ -49,6 +49,18 @@ export const FIGHTER_RADIUS = manifestJson.ring.fighter_radius; export const EYE_SHUT_TRAUMA = manifestJson.blind_side.eye_threshold; /** A guard worn below this stops nothing: a block that takes it under breaks it, until it recovers past it. */ export const GUARD_BLOCK_MINIMUM = manifestJson.guard.block_minimum; +/** A broken guard stops nothing until it has come back this far. */ +export const GUARD_REARM = manifestJson.guard.rearm; +/** A fresh fighter's walking speed in engine units a tick. */ +export const MAX_SPEED = manifestJson.movement.max_speed; +/** The share of the way from his velocity to the one his input asks for that a fighter covers in a tick. */ +export const MOVE_BLEND_PERCENT = manifestJson.movement.blend_percent; +/** His footspeed while a punch recovers, as a share of his speed. */ +export const RECOVERY_SPEED_PERCENT = manifestJson.movement.recovery_speed_percent; +/** Ticks a slip, weave or pull lasts on the server, before a style's own. */ +export const EVASION_TICKS = manifestJson.evasion.ticks; +/** Stamina the server asks of a slip, weave or pull before it starts one. */ +export const EVASION_STAMINA = manifestJson.evasion.stamina; export const CORNER_TREATMENTS = manifestJson.corner; export const RING_CORNER_REACH = manifestJson.corners.reach; /** Percent of a punch's recovery that must pass before a chained follow-up may cut the rest of it short. */ @@ -95,6 +107,8 @@ export function comboWindow(punchClass: PunchClass): number { export const ROCKED_BASE_TICKS = manifestJson.stun.rocked_base_ticks; export const ROCKED_MAX_TICKS = manifestJson.stun.rocked_max_ticks; const knockdownRules = manifestJson.knockdown; +/** Ticks between the numbers of the referee's count. */ +export const COUNT_TICKS = knockdownRules.count_ticks; /** The engine caps head trauma here and stops a bout at the third knockdown. */ const HEAD_TRAUMA_LIMIT = 1400; const KNOCKDOWN_LIMIT = 3; @@ -106,9 +120,6 @@ export const STUNNED_SPEED_PERCENT = manifestJson.stun.moving_speed_percent; /** A punch the fighter cannot pay for in full is thrown tired: this much slower to land and to recover. */ export const TIRED_STARTUP_TICKS = manifestJson.tired.startup_ticks; export const TIRED_RECOVERY_TICKS = manifestJson.tired.recovery_ticks; -/** The cut and the swelling at which the ringside doctor stops a bout (the engine's default). */ -export const DOCTOR_CUT = manifestJson.doctor.cut; -export const DOCTOR_SWELLING = manifestJson.doctor.swelling; export function punchTiming(punchClass: PunchClass, target: Target, power: Power): PunchTiming { const base = punches[punchClass]; diff --git a/web/hands/src/network.test.ts b/web/hands/src/network.test.ts index e5742e9d..ddfaf18e 100644 --- a/web/hands/src/network.test.ts +++ b/web/hands/src/network.test.ts @@ -734,6 +734,222 @@ describe("edge-triggered action sends", () => { }); }); +describe("held input sent as it changes", () => { + const start = (getInput: () => { moveX: number; moveY: number; defense: "none" | "guard_high"; actions: { kind: "punch"; hand: "left"; class: "jab"; target: "head"; power: "normal"; id: string }[] }, clock: { now: number }) => { + const socket = new FakeSocket(); + const controller = new NetworkController("ticket", getInput, callbacks(), () => socket, () => clock.now); + controller.start(); + socket.open(); + socket.message(welcome()); + socket.message(ready); + controller.setActive(true); + return { socket, controller }; + }; + + it("sends a new direction or guard at once, without holding up a press that follows it, and one right behind another send once the gap is up", () => { + vi.useFakeTimers(); + const clock = { now: 1000 }; + let held = { moveX: 0, moveY: 0, defense: "none" as "none" | "guard_high" }; + const queued: string[] = []; + const { socket, controller } = start(() => ({ ...held, actions: queued.splice(0, 4).map((id) => ({ kind: "punch" as const, hand: "left" as const, class: "jab" as const, target: "head" as const, power: "normal" as const, id })) }), clock); + const sent = (): { move: { x: number }; defense: string; actions: { id: string }[] }[] => socket.sent.slice(1).map((frame) => JSON.parse(frame)); + held = { ...held, moveX: 1000 }; + controller.notifyHeld(); + expect(sent()).toHaveLength(1); + expect(sent()[0]!.move.x).toBe(1000); + clock.now += 2; + queued.push("p1"); + controller.notifyAction(); + expect(sent()).toHaveLength(2); + expect(sent()[1]!.actions.map((action) => action.id)).toEqual(["p1"]); + clock.now += 2; + held = { ...held, defense: "guard_high" }; + controller.notifyHeld(); + controller.notifyHeld(); + expect(sent()).toHaveLength(2); + clock.now += 6; + vi.advanceTimersByTime(6); + expect(sent()).toHaveLength(3); + expect(sent()[2]!.defense).toBe("guard_high"); + controller.dispose(); + vi.useRealTimers(); + }); + + it("keeps to a budget of its own that leaves the presses their room under the server's limit", () => { + vi.useFakeTimers(); + const clock = { now: 1000 }; + const queued: string[] = []; + const { socket, controller } = start(() => ({ moveX: clock.now % 2 === 0 ? 1000 : -1000, moveY: 0, defense: "none" as const, actions: queued.splice(0, 4).map((id) => ({ kind: "punch" as const, hand: "left" as const, class: "jab" as const, target: "head" as const, power: "normal" as const, id })) }), clock); + const times: number[] = []; + const carried = (id: string): boolean => socket.sent.some((frame) => (JSON.parse(frame).actions ?? []).some((action: { id?: string }) => action.id === id)); + for (let millisecond = 0; millisecond < 3000; millisecond += 1) { + clock.now += 1; + const before = socket.sent.length; + vi.advanceTimersByTime(1); + controller.notifyHeld(); + for (let index = before; index < socket.sent.length; index += 1) times.push(clock.now); + if (millisecond % 250 === 0) { + queued.push(`p${millisecond}`); + const sending = socket.sent.length; + controller.notifyAction(); + expect(socket.sent.length, `press at ${millisecond} ms`).toBe(sending + 1); + expect(carried(`p${millisecond}`)).toBe(true); + } + } + for (const at of times) expect(times.filter((time) => time >= at && time < at + 1000).length).toBeLessThanOrEqual(50); + expect(times.filter((time) => time >= 3000 && time < 4000).length).toBeLessThanOrEqual(30 + 10 + 4); + controller.dispose(); + vi.useRealTimers(); + }); + + it("keeps the presses their room under a mash as fast as the edge budget allows while the direction changes as fast as its own", () => { + vi.useFakeTimers(); + const clock = { now: 1000 }; + const queued: string[] = []; + const { socket, controller } = start(() => ({ moveX: clock.now % 2 === 0 ? 1000 : -1000, moveY: 0, defense: "none" as const, actions: queued.splice(0, 4).map((id) => ({ kind: "punch" as const, hand: "left" as const, class: "jab" as const, target: "head" as const, power: "normal" as const, id })) }), clock); + const times: number[] = []; + for (let millisecond = 0; millisecond < 4000; millisecond += 1) { + clock.now += 1; + const before = socket.sent.length; + vi.advanceTimersByTime(1); + controller.notifyHeld(); + if (millisecond % 50 === 0) { + queued.push(`p${millisecond}`); + const sending = socket.sent.length; + controller.notifyAction(); + // Once the window holds a full second of sends, the held changes have left every press its room. + if (millisecond >= 1000) expect(socket.sent.length, `press at ${millisecond} ms`).toBe(sending + 1); + } + for (let index = before; index < socket.sent.length; index += 1) times.push(clock.now); + } + for (const at of times) expect(times.filter((time) => time >= at && time < at + 1000).length).toBeLessThanOrEqual(50); + controller.dispose(); + vi.useRealTimers(); + }); + + /** Input stays off until the bell, as it does through the countdown, so the bout's first second starts with no sends in it. */ + const fromTheBell = (getInput: Parameters[0], clock: { now: number }) => { + const started = start(getInput, clock); + started.controller.setActive(false); + clock.now += 3000; + vi.advanceTimersByTime(3000); + started.controller.setActive(true); + return started; + }; + const jabs = (ids: string[]) => ids.splice(0, 4).map((id) => ({ kind: "punch" as const, hand: "left" as const, class: "jab" as const, target: "head" as const, power: "normal" as const, id })); + + it("leaves every press its room from the bell while the direction changes and the presses come as fast as their budgets allow", () => { + vi.useFakeTimers(); + const clock = { now: 1000 }; + const queued: string[] = []; + let moveX = 1000; + const { socket, controller } = fromTheBell(() => ({ moveX, moveY: 0, defense: "none" as const, actions: jabs(queued) }), clock); + const pressedAt = new Map(); + const waits: number[] = []; + const times: number[] = []; + let seen = socket.sent.length; + const collect = (): void => { + for (; seen < socket.sent.length; seen += 1) { + times.push(clock.now); + for (const action of JSON.parse(socket.sent[seen]!).actions ?? []) if (pressedAt.has(action.id)) waits.push(clock.now - pressedAt.get(action.id)!); + } + }; + for (let millisecond = 0; millisecond < 3000; millisecond += 1) { + clock.now += 1; + vi.advanceTimersByTime(1); + collect(); + if (millisecond % 100 === 0) { + moveX = -moveX; + controller.notifyHeld(); + collect(); + } + if (millisecond % 50 === 0) { + pressedAt.set(`p${millisecond}`, clock.now); + queued.push(`p${millisecond}`); + controller.notifyAction(); + collect(); + } + } + expect(waits).toHaveLength(60); + expect(Math.max(...waits)).toBeLessThanOrEqual(33); + // Never over 50 in a second, so the server's budget of 60 a second holds none back and its flood limit is far off. + for (const at of times) expect(times.filter((time) => time >= at && time < at + 1000).length).toBeLessThanOrEqual(50); + controller.dispose(); + vi.useRealTimers(); + }); + + it("never leaves a tick to the presses while a press waits for it, held back by the gap or by the edge budget", () => { + for (const heldBackBy of ["gap", "budget"] as const) { + vi.useFakeTimers(); + const clock = { now: 1000 }; + const queued: string[] = []; + let moveX = 1000; + const { socket, controller } = fromTheBell(() => ({ moveX, moveY: 0, defense: "none" as const, actions: jabs(queued) }), clock); + const times: number[] = []; + let carriedAt: number | null = null; + let seen = socket.sent.length; + const collect = (): void => { + for (; seen < socket.sent.length; seen += 1) { + times.push(clock.now); + if ((JSON.parse(socket.sent[seen]!).actions ?? []).some((action: { id?: string }) => action.id === "waiting")) carriedAt ??= clock.now; + } + }; + const step = (): void => { + clock.now += 1; + vi.advanceTimersByTime(1); + collect(); + }; + const press = (id: string): boolean => { + const before = socket.sent.length; + queued.push(id); + controller.notifyAction(); + collect(); + return socket.sent.length > before; + }; + // The flush ticks every 33 ms from the first tick after the bell. + while (times.length === 0) step(); + const tick = clock.now; + // Direction changes and presses take the last second's sends past the room kept for presses; the last press goes + // just after a tick, so the next tick follows it within the flush period. + const last = tick + 33 * 25 + 1; + const presses = heldBackBy === "budget" ? 20 : 10; + for (let index = 0; index < presses; index += 1) { + while (clock.now < last - 40 * (presses - 1 - index)) { + step(); + if (clock.now < tick + 500 && (clock.now - tick) % 100 === 1) { + moveX = -moveX; + controller.notifyHeld(); + collect(); + } + } + expect(press(`p${index}`), `${heldBackBy}: press ${index}`).toBe(true); + } + while (clock.now < last + (heldBackBy === "gap" ? 2 : 10)) step(); + expect(press("waiting"), heldBackBy).toBe(false); + while (carriedAt === null && clock.now < last + 100) step(); + // The next tick carries it, though the last press went within the flush period and the reserve is in use. + expect(carriedAt, heldBackBy).toBe(last + 32); + expect(times.filter((time) => time > last + 32 - 1000 && time < last + 32).length, heldBackBy).toBeGreaterThanOrEqual(40); + controller.dispose(); + vi.useRealTimers(); + } + }); + + it("sends nothing after it is disposed, even a change that was waiting out the gap", () => { + vi.useFakeTimers(); + const clock = { now: 1000 }; + const { socket, controller } = start(() => ({ moveX: 1000, moveY: 0, defense: "none" as const, actions: [] }), clock); + controller.notifyHeld(); + const count = socket.sent.length; + clock.now += 2; + controller.notifyHeld(); + controller.dispose(); + vi.advanceTimersByTime(50); + expect(socket.sent.length).toBe(count); + vi.useRealTimers(); + }); +}); + describe("corner instructions between rounds", () => { it("sends the instruction on its own only during the rest, on the input sequence", () => { vi.useFakeTimers(); @@ -761,6 +977,21 @@ describe("corner instructions between rounds", () => { controller.dispose(); }); + it("keeps sending held input through the referee's five seconds, as it does through a count", () => { + vi.useFakeTimers(); + const socket = new FakeSocket(); + const controller = new NetworkController("ticket", () => ({ moveX: 1000, moveY: 0, defense: "none" as const, actions: [] }), callbacks(), () => socket); + controller.start(); + socket.open(); + socket.message(welcome()); + socket.message(ready); + socket.message({ version: PROTOCOL_VERSION, type: "snapshot", payload: { ...snapshot(11), phase: "referee_down", phase_ticks_remaining: 150 } }); + const before = socket.sent.length; + vi.advanceTimersByTime(200); + expect(socket.sent.length).toBeGreaterThan(before); + controller.dispose(); + }); + it("never sends a corner instruction for a spectator", () => { const socket = new FakeSocket(); const controller = new NetworkController("ticket", () => ({ moveX: 0, moveY: 0, defense: "none" as const, actions: [] }), callbacks(), () => socket); diff --git a/web/hands/src/network.ts b/web/hands/src/network.ts index 260cf017..9e06fa8a 100644 --- a/web/hands/src/network.ts +++ b/web/hands/src/network.ts @@ -40,6 +40,12 @@ const MIN_EDGE_SEND_GAP_MS = 8; const MAX_SENDS_PER_SECOND = 50; /** Edge sends have a budget of their own on top of the 30 a second flush, together under MAX_SENDS_PER_SECOND. */ const MAX_EDGE_SENDS_PER_SECOND = 20; +/** + * Changes of held movement or guard go out at once too, on a smaller budget of their own, and only while the last + * second's sends leave the presses this much of MAX_SENDS_PER_SECOND. + */ +const MAX_HELD_SENDS_PER_SECOND = 10; +const SENDS_KEPT_FOR_PRESSES = 10; /** Bytes still waiting in the socket above which the connection is stalled; frames queued behind it would all land at once. */ const BACKLOG_BYTES = 2048; @@ -90,6 +96,10 @@ export class NetworkController { private lastInputSentAt = -Infinity; private readonly sendTimes: number[] = []; private readonly edgeSendTimes: number[] = []; + private readonly heldSendTimes: number[] = []; + private heldTimer: number | null = null; + /** A press has been made that no frame has carried yet. */ + private pressWaiting = false; constructor( ticket: string, @@ -105,7 +115,7 @@ export class NetworkController { if (this.disposed || this.listenersBound) return; this.bindInputListeners(); this.connect(); - if (!this.disposed && !this.terminal) this.inputTimer = window.setInterval(() => this.flushInput(), INPUT_FLUSH_MS); + if (!this.disposed && !this.terminal) this.inputTimer = window.setInterval(() => this.periodicFlush(), INPUT_FLUSH_MS); } private bindInputListeners(): void { @@ -134,6 +144,7 @@ export class NetworkController { /** Sends the pending input frame on the action edge instead of waiting for the periodic flush. */ notifyAction(): void { + this.pressWaiting = true; // The gap merges presses that land together. It counts edge sends only: measured from the // periodic flush too, a press in the 8 ms after each flush waited a whole flush period. if (this.now() - (this.edgeSendTimes.at(-1) ?? -Infinity) < MIN_EDGE_SEND_GAP_MS) return; @@ -142,6 +153,31 @@ export class NetworkController { if (this.flushInput()) this.edgeSendTimes.push(this.lastInputSentAt); } + /** Sends a change of held movement or guard at once instead of waiting for the periodic flush. */ + notifyHeld(): void { + // A change right behind another edge send waits out the same gap, then goes, rather than waiting for the flush. + const wait = MIN_EDGE_SEND_GAP_MS - (this.now() - Math.max(this.edgeSendTimes.at(-1) ?? -Infinity, this.heldSendTimes.at(-1) ?? -Infinity)); + if (wait > 0) { + this.heldTimer ??= window.setTimeout(() => { + this.heldTimer = null; + this.notifyHeld(); + }, wait); + return; + } + if (this.withinLastSecond(this.heldSendTimes) >= MAX_HELD_SENDS_PER_SECOND || this.sendsInLastSecond() >= MAX_SENDS_PER_SECOND - SENDS_KEPT_FOR_PRESSES) return; + if (this.flushInput()) this.heldSendTimes.push(this.lastInputSentAt); + } + + /** + * The 30 a second flush. While the room kept for presses is in use, a tick right behind an edge or held send, whose + * input the server already has, is left to the presses, unless one is waiting for it. + */ + private periodicFlush(): void { + const recent = this.now() - Math.max(this.edgeSendTimes.at(-1) ?? -Infinity, this.heldSendTimes.at(-1) ?? -Infinity) < INPUT_FLUSH_MS; + if (recent && !this.pressWaiting && this.sendsInLastSecond() >= MAX_SENDS_PER_SECOND - SENDS_KEPT_FOR_PRESSES) return; + this.flushInput(); + } + private sendsInLastSecond(): number { return this.withinLastSecond(this.sendTimes); } @@ -266,7 +302,7 @@ export class NetworkController { else this.stopInputLifecycle(); if (seated) { if (!this.listenersBound) this.bindInputListeners(); - this.inputTimer ??= window.setInterval(() => this.flushInput(), INPUT_FLUSH_MS); + this.inputTimer ??= window.setInterval(() => this.periodicFlush(), INPUT_FLUSH_MS); } this.attempts = 0; this.clearTransportReconnect(true); @@ -274,7 +310,7 @@ export class NetworkController { this.reconnectTicket = message.reconnect_ticket; } else if (message.type === "snapshot") { this.serverTick = Math.max(this.serverTick, message.payload.tick); - this.setInputActive(["countdown", "fight", "knockdown", "foul_recovery"].includes(message.payload.phase)); + this.setInputActive(["countdown", "fight", "knockdown", "foul_recovery", "referee_down"].includes(message.payload.phase)); this.resting = message.payload.phase === "rest"; this.observeAcknowledgement(message.payload); } else if (message.type === "paused") { @@ -431,7 +467,9 @@ export class NetworkController { // While the connection is stalled the input stays here, current, instead of joining a queue // of stale frames; presses wait in the input buffer and leave with the next frame that goes. if ((this.socket?.bufferedAmount ?? 0) > BACKLOG_BYTES) return false; - return this.sendInput(this.getInput()); + if (!this.sendInput(this.getInput())) return false; + this.pressWaiting = false; + return true; } private startOpponentPause(graceMs: number): void { @@ -488,6 +526,10 @@ export class NetworkController { clearInterval(this.inputTimer); this.inputTimer = null; } + if (this.heldTimer !== null) { + clearTimeout(this.heldTimer); + this.heldTimer = null; + } if (this.listenersBound) { window.removeEventListener("blur", this.onInputLoss); window.removeEventListener("focus", this.onInputRegain); diff --git a/web/hands/src/prediction.test.ts b/web/hands/src/prediction.test.ts index 99a99b4d..9a1e1f0c 100644 --- a/web/hands/src/prediction.test.ts +++ b/web/hands/src/prediction.test.ts @@ -1,8 +1,8 @@ -import { cancelsRecovery, punchStaminaCost, punchTiming, recoveryCancelAge, styledStaminaCost, styleTiming } from "./manifest"; +import { cancelsRecovery, MAX_SPEED, punchStaminaCost, punchTiming, RECOVERY_SPEED_PERCENT, recoveryCancelAge, styledStaminaCost, styleTiming } from "./manifest"; import { readFileSync } from "node:fs"; import { resolve } from "node:path"; import { SnapshotBuffer } from "./interpolation"; -import { attackTicksRemaining, constrainPrediction, EVASION_STAMINA, EVASION_TICKS, EvasionPrediction, fatigueFactor, MINIMUM_SEPARATION, MovementPrediction, movementLocked, parryRootedUntil, predictedDefense, predictMovement, predictedPunchTiming, type FootworkHolds, type HeldInput } from "./prediction"; +import { attackTicksRemaining, constrainPrediction, EVASION_STAMINA, EVASION_TICKS, EvasionPrediction, evasionStartedAt, fatigueFactor, MINIMUM_SEPARATION, MovementPrediction, movementLocked, parryRootedUntil, predictedDefense, predictMovement, predictedPunchTiming, type FootworkHolds, type HeldInput } from "./prediction"; import { decodeServerFrame, ProtocolError } from "./protocol"; import { fighter, snapshot } from "./test/fixtures"; import movementTraces from "./test/movement-traces.json"; @@ -13,19 +13,20 @@ import { PROTOCOL_VERSION, type EngineSnapshot, type FighterSnapshot, type Fight describe("local movement prediction", () => { it("mirrors the authoritative fatigue factor", () => { expect(fatigueFactor(1000, 0)).toBe(100); - expect(fatigueFactor(0, 0)).toBe(48); - expect(fatigueFactor(820, 350)).toBe(100 - 10 - 10); + expect(fatigueFactor(0, 0)).toBe(67); + expect(fatigueFactor(820, 350)).toBe(100 - 6 - 7); }); it("accelerates toward the held direction and never exceeds the speed cap", () => { const still = { ...fighter("one"), conditioning: 1000 }; const one = predictMovement(still, { moveX: 1000, moveY: 0, defense: "none" }, 1); const four = predictMovement(still, { moveX: 1000, moveY: 0, defense: "none" }, 4); - expect(one.dx).toBeCloseTo(3.5, 5); + // Three quarters of the way to the walking speed on the first tick. + expect(one.dx).toBeCloseTo(MAX_SPEED * 0.75, 5); expect(one.dy).toBe(0); expect(four.dx).toBeGreaterThan(one.dx); - expect(four.dx).toBeLessThanOrEqual(7 * 4); + expect(four.dx).toBeLessThanOrEqual(MAX_SPEED * 4); const diagonal = predictMovement(still, { moveX: 1000, moveY: 1000, defense: "none" }, 4); - expect(Math.hypot(diagonal.dx, diagonal.dy)).toBeLessThanOrEqual(7 * 4 + 1e-9); + expect(Math.hypot(diagonal.dx, diagonal.dy)).toBeLessThanOrEqual(MAX_SPEED * 4 + 1e-9); expect(diagonal.dx).toBeCloseTo(diagonal.dy, 9); }); it("slows while guarding and stops entirely while punching, slipping, or down", () => { @@ -59,7 +60,7 @@ describe("local movement prediction", () => { const guardDropped = predictMovement(stunned, { ...held, defense: "guard_high" }, 6); expect(guardDropped.dx).toBeCloseTo(stumbling.dx, 9); }); - it("frees the fighter when the punch ends even though the snapshot still presents it", () => { + it("holds the fighter through a punch's active ticks, walks him slower while it recovers, and frees him when it ends though the snapshot still presents it", () => { const still = { ...fighter("one"), conditioning: 1000 }; const hook = { ...still, action: "hook" as const, action_start_tick: 100, action_startup_ticks: 7, action_active_ticks: 3, action_recovery_ticks: 12 }; const held = { moveX: 1000, moveY: 0, defense: "none" as const }; @@ -68,12 +69,16 @@ describe("local movement prediction", () => { expect(attackTicksRemaining(hook, 130)).toBe(0); expect(movementLocked(hook, 110)).toBe(true); expect(movementLocked(hook, 122)).toBe(false); - expect(predictMovement(hook, held, 4, 110)).toEqual({ dx: 0, dy: 0 }); + // Recovery starts on tick 110: the four ticks after 105 are all startup and active. + expect(predictMovement(hook, held, 4, 105)).toEqual({ dx: 0, dy: 0 }); + const recovering = predictMovement(hook, held, 4, 110); + expect(recovering.dx).toBeGreaterThan(0); + expect(recovering.dx).toBeLessThan(predictMovement(still, held, 4).dx * 0.7); expect(predictMovement(hook, held, 4, 130)).toEqual(predictMovement(still, held, 4)); - // The engine frees him on the tick the punch ends, 122: three of the four ticks after 120. + // The engine frees him on the tick the punch ends, 122: three of the four ticks after 120 at full speed. const leaving = predictMovement(hook, held, 4, 120); - expect(leaving.dx).toBeGreaterThan(0); - expect(leaving.dx).toBeCloseTo(predictMovement(still, held, 3).dx); + expect(leaving.dx).toBeGreaterThan(recovering.dx); + expect(leaving.dx).toBeLessThan(predictMovement(still, held, 4).dx); const stumbling = predictMovement({ ...hook, stunned_ticks: 5 }, held, 4, 130); expect(stumbling.dx).toBeGreaterThan(0); expect(stumbling.dx).toBeLessThan(predictMovement(still, held, 4).dx); @@ -81,6 +86,38 @@ describe("local movement prediction", () => { expect(movementLocked({ ...still, queued_actions: 1 }, 130)).toBe(true); }); + it("walks the player's fighter out of his own punch's recovery at its share from the input history, a share the server's copy of the punch does not take again", () => { + const still = { ...fighter("one"), conditioning: 1000 }; + const held = { moveX: 1000, moveY: 0, defense: "none" as const }; + const recovering = { ...still, action: "hook" as const, action_start_tick: 90, action_startup_ticks: 7, action_active_ticks: 3, action_recovery_ticks: 30 }; + const walk = (fighterShown: FighterSnapshot, footwork: number): number => { + const prediction = new MovementPrediction(); + for (let at = 0; at <= 1000; at += 100) prediction.update(fighterShown, held, footwork, at, 4, 100, 1, 30); + return prediction.update(fighterShown, held, footwork, 1100, 4, 100, 1, 30).dx; + }; + const share = predictMovement(recovering, held, 4, 100).dx; + expect(share).toBeLessThan(predictMovement(still, held, 4).dx * 0.7); + expect(walk(still, RECOVERY_SPEED_PERCENT / 100)).toBeCloseTo(share, 6); + expect(walk(recovering, RECOVERY_SPEED_PERCENT / 100)).toBeCloseTo(share, 6); + expect(walk(still, 1)).toBeCloseTo(predictMovement(still, held, 4).dx, 6); + // Held by his own punch or evasion, the input sent meanwhile does not walk him. + expect(walk(still, 0)).toBeCloseTo(0, 9); + }); + + it("frees the feet the tick his slip, weave or pull runs out once it knows when it started, and holds them throughout until it does", () => { + const held = { moveX: 1000, moveY: 0, defense: "none" as const }; + const slipping = { ...fighter("one"), conditioning: 1000, defense: "slip_left" as const }; + const free = predictMovement({ ...slipping, defense: "none" }, held, 2); + // Started on 95, it holds the feet through 101: of the four ticks after 99, the last two are his. + expect(predictMovement(slipping, held, 4, 99, { evasionFrom: 95 })).toEqual(free); + expect(predictMovement(slipping, held, 4, 99)).toEqual({ dx: 0, dy: 0 }); + expect(predictMovement({ ...slipping, style: "swarmer" }, held, 4, 99, { evasionFrom: 95 }).dx).toBeLessThan(free.dx); + const start = { event_id: 3, tick: 95, kind: "defense", actor_id: "one", target_id: null, amount: 0, detail: "slip_left", blood: 0, direction: 0, action_id: null }; + expect(evasionStartedAt(start, "one", undefined)).toBe(95); + expect(evasionStartedAt(start, "two", undefined)).toBeUndefined(); + expect(evasionStartedAt({ ...start, detail: "guard_high" }, "one", 80)).toBe(80); + }); + it("lets a stunned fighter stumble though the punch the stun cut short is still presented", () => { const held = { moveX: -1000, moveY: 0, defense: "none" as const }; const still = { ...fighter("one"), conditioning: 1000, stunned_ticks: 20 }; @@ -89,13 +126,14 @@ describe("local movement prediction", () => { expect(stumble.dx).toBeLessThan(-10); expect(predictMovement(hook, held, 4, 200)).toEqual(stumble); // Once the stun is over, the punch it cut no longer holds him, for a player who saw him stunned in it. + // (The four ticks after 203 are the cut punch's startup and active ticks as the snapshot presents it.) const after = { ...hook, stunned_ticks: 0 }; - expect(predictMovement(after, held, 4, 205)).toEqual({ dx: 0, dy: 0 }); - expect(predictMovement(after, held, 4, 205, { cutActionId: "c1" })).toEqual(predictMovement({ ...after, action: null, action_id: null }, held, 4, 205)); + expect(predictMovement(after, held, 4, 203)).toEqual({ dx: 0, dy: 0 }); + expect(predictMovement(after, held, 4, 203, { cutActionId: "c1" })).toEqual(predictMovement({ ...after, action: null, action_id: null }, held, 4, 203)); const prediction = new MovementPrediction(); - prediction.update(hook, held, false, 0, 4, 200, 1, 30); - expect(prediction.update(after, held, false, 1000, 4, 205, 1, 30).dx).toBeLessThan(-10); - expect(new MovementPrediction().update(after, held, false, 1000, 4, 205, 1, 30)).toEqual({ dx: 0, dy: 0 }); + prediction.update(hook, held, 1, 0, 4, 200, 1, 30); + expect(prediction.update(after, held, 1, 1000, 4, 203, 1, 30).dx).toBeLessThan(-10); + expect(new MovementPrediction().update(after, held, 1, 1000, 4, 203, 1, 30)).toEqual({ dx: 0, dy: 0 }); }); it("holds the player's own fighter still for a parry's stagger once it hears of the parry, then walks him off", () => { @@ -104,44 +142,44 @@ describe("local movement prediction", () => { const parry = { event_id: 1, tick: 98, kind: "parry", actor_id: "two", target_id: "one", amount: 20, detail: "", blood: 0, direction: 0, action_id: "c4" }; const prediction = new MovementPrediction(); prediction.observe({ ...parry, target_id: "two" }, "one"); - expect(prediction.update(parried, held, false, 0, 4, 100, 1, 30).dx).toBeLessThan(-5); + expect(prediction.update(parried, held, 1, 0, 4, 100, 1, 30).dx).toBeLessThan(-5); const rooted = new MovementPrediction(); rooted.observe(parry, "one"); - expect(rooted.update(parried, held, false, 0, 4, 100, 1, 30)).toEqual({ dx: 0, dy: 0 }); + expect(rooted.update(parried, held, 1, 0, 4, 100, 1, 30)).toEqual({ dx: 0, dy: 0 }); // With two ticks of the stagger left the engine roots him for one more: three of the four ticks ahead are his. - const leaving = rooted.update({ ...parried, stunned_ticks: 2 }, held, false, 1000, 4, 116, 1, 30); + const leaving = rooted.update({ ...parried, stunned_ticks: 2 }, held, 1, 1000, 4, 116, 1, 30); expect(leaving.dx).toBeCloseTo(predictMovement({ ...parried, stunned_ticks: 0 }, held, 3).dx, 5); }); it("predicts the timing and cost the engine will use", () => { const fresh = { ...fighter("one"), conditioning: 1000, stance: "orthodox" as const }; const jab = { class: "jab" as const, hand: "left" as const, target: "head" as const, power: "normal" as const }; - expect(predictedPunchTiming(fresh, jab)).toMatchObject({ startup: 3, active: 2, recovery: 7 }); - expect(predictedPunchTiming(fresh, { ...jab, hand: "right" })).toMatchObject({ startup: 4, recovery: 7 }); - expect(predictedPunchTiming({ ...fresh, stance: "southpaw" }, { ...jab, hand: "right" })).toMatchObject({ startup: 3 }); - const tired = { ...fresh, conditioning: 640 }; - expect(fatigueFactor(tired.conditioning, 0)).toBe(80); - expect(predictedPunchTiming(tired, jab)).toMatchObject({ startup: 4, recovery: 8 }); - expect(predictedPunchTiming(tired, { ...jab, class: "hook", power: "power" })).toMatchObject({ startup: 11, active: 4, recovery: 18 }); - expect(punchStaminaCost("jab", "head", "normal")).toBe(42); - expect(punchStaminaCost("jab", "body", "normal")).toBe(46); - expect(punchStaminaCost("jab", "head", "power")).toBe(65); - expect(punchStaminaCost("jab", "body", "power")).toBe(71); + expect(predictedPunchTiming(fresh, jab)).toMatchObject({ startup: 2, active: 2, recovery: 4 }); + expect(predictedPunchTiming(fresh, { ...jab, hand: "right" })).toMatchObject({ startup: 3, recovery: 4 }); + expect(predictedPunchTiming({ ...fresh, stance: "southpaw" }, { ...jab, hand: "right" })).toMatchObject({ startup: 2 }); + const tired = { ...fresh, conditioning: 0 }; + expect(fatigueFactor(tired.conditioning, 0)).toBe(67); + expect(predictedPunchTiming(tired, jab)).toMatchObject({ startup: 3, recovery: 5 }); + expect(predictedPunchTiming(tired, { ...jab, class: "hook", power: "power" })).toMatchObject({ startup: 11, active: 3, recovery: 14 }); + expect(punchStaminaCost("jab", "head", "normal")).toBe(25); + expect(punchStaminaCost("jab", "body", "normal")).toBe(27); + expect(punchStaminaCost("jab", "head", "power")).toBe(35); + expect(punchStaminaCost("jab", "body", "power")).toBe(37); }); it("predicts the slow arm punch the engine throws for a fighter who cannot pay in full", () => { const fresh = { ...fighter("one"), conditioning: 1000, stance: "orthodox" as const }; const jab = { class: "jab" as const, hand: "left" as const, target: "head" as const, power: "normal" as const }; - expect(predictedPunchTiming({ ...fresh, stamina: 42 }, jab)).toMatchObject({ startup: 3, recovery: 7 }); - expect(predictedPunchTiming({ ...fresh, stamina: 10 }, jab)).toMatchObject({ startup: 6, recovery: 12 }); - expect(predictedPunchTiming({ ...fresh, conditioning: 640, stamina: 41 }, jab)).toMatchObject({ startup: 7, recovery: 13 }); - expect(predictedPunchTiming({ ...fresh, conditioning: 640, stamina: 119 }, { ...jab, class: "hook", power: "power" })).toMatchObject({ startup: 14, recovery: 23 }); - expect(predictedPunchTiming({ ...fresh, conditioning: 820, stamina: 0, trauma: { ...fresh.trauma, body: 350 } }, { class: "uppercut", hand: "right", target: "body", power: "normal" })).toMatchObject({ startup: 14, recovery: 21 }); + expect(predictedPunchTiming({ ...fresh, stamina: 25 }, jab)).toMatchObject({ startup: 2, recovery: 4 }); + expect(predictedPunchTiming({ ...fresh, stamina: 10 }, jab)).toMatchObject({ startup: 3, recovery: 6 }); + expect(predictedPunchTiming({ ...fresh, conditioning: 0, stamina: 24 }, jab)).toMatchObject({ startup: 4, recovery: 7 }); + expect(predictedPunchTiming({ ...fresh, conditioning: 0, stamina: 64 }, { ...jab, class: "hook", power: "power" })).toMatchObject({ startup: 12, recovery: 16 }); + expect(predictedPunchTiming({ ...fresh, conditioning: 820, stamina: 0, trauma: { ...fresh.trauma, body: 350 } }, { class: "uppercut", hand: "right", target: "body", power: "normal" })).toMatchObject({ startup: 7, recovery: 11 }); // No combination discount for a tired punch, inside the window or out of it. const afterJab = { ...fresh, conditioning: 108, stamina: 50, action: "jab" as const, action_start_tick: 100, action_startup_ticks: 3, action_active_ticks: 2, action_recovery_ticks: 7 }; const straight = { class: "straight" as const, hand: "right" as const, target: "head" as const, power: "power" as const }; - expect(predictedPunchTiming(afterJab, straight, 110)).toMatchObject({ startup: 18, recovery: 30 }); - expect(predictedPunchTiming(afterJab, straight, 125)).toMatchObject({ startup: 18, recovery: 30 }); + expect(predictedPunchTiming(afterJab, straight, 110)).toMatchObject({ startup: 10, recovery: 14 }); + expect(predictedPunchTiming(afterJab, straight, 125)).toMatchObject({ startup: 10, recovery: 14 }); }); it("predicts the startup and recovery the engine gives every punch, its own cost taken off the conditioning first", () => { @@ -184,11 +222,12 @@ describe("local movement prediction", () => { }); it("charges a punch thrown inside the combination window at the engine's discount", () => { - const afterJab = { ...fighter("one"), stance: "orthodox" as const, conditioning: 108, action: "jab" as const, action_start_tick: 100, action_startup_ticks: 3, action_active_ticks: 2, action_recovery_ticks: 7 }; - const straight = { class: "straight" as const, hand: "right" as const, target: "head" as const, power: "power" as const }; - expect(predictedPunchTiming(afterJab, straight, 110)).toMatchObject({ startup: 15, recovery: 25 }); - expect(predictedPunchTiming(afterJab, straight, 125)).toMatchObject({ startup: 16, recovery: 26 }); - expect(predictedPunchTiming(afterJab, { ...straight, class: "uppercut" }, 110)).toEqual(predictedPunchTiming(afterJab, { ...straight, class: "uppercut" }, 125)); + // The discount spares a point of conditioning, which on the edge of a fatigue step is a tick of startup. + const afterJab = { ...fighter("one"), stance: "orthodox" as const, conditioning: 163, action: "jab" as const, action_start_tick: 100, action_startup_ticks: 3, action_active_ticks: 2, action_recovery_ticks: 7 }; + const hook = { class: "hook" as const, hand: "left" as const, target: "head" as const, power: "power" as const }; + expect(predictedPunchTiming(afterJab, hook, 110)).toMatchObject({ startup: 10, recovery: 13 }); + expect(predictedPunchTiming(afterJab, hook, 125)).toMatchObject({ startup: 11, recovery: 13 }); + expect(predictedPunchTiming(afterJab, { ...hook, class: "uppercut", hand: "right" }, 110)).toEqual(predictedPunchTiming(afterJab, { ...hook, class: "uppercut", hand: "right" }, 125)); }); it("keeps the predicted fighter inside the ropes and corner pads and clear of the opponent", () => { @@ -213,7 +252,8 @@ describe("local movement prediction", () => { it("carries existing velocity forward when the stick is released", () => { const moving = { ...fighter("one"), conditioning: 1000, velocity_x: 6 }; const coast = predictMovement(moving, { moveX: 0, moveY: 0, defense: "none" }, 3); - expect(coast.dx).toBeCloseTo(3 + 1.5 + 0.75, 5); + // A quarter of the velocity is kept each tick. + expect(coast.dx).toBeCloseTo(1.5 + 0.375 + 0.09375, 5); }); it("takes a velocity past the walking speed clamped to it rather than ending the bout, and seeds the step from that", () => { @@ -223,17 +263,17 @@ describe("local movement prediction", () => { if (message.type !== "snapshot") throw new Error(message.type); return message.payload.fighters[0]; }; - // A fresh swarmer pushed back onto a corner pad keeps 7.7 units a tick along it. - const swarmer = decode({ ...base.fighters[0], style: "swarmer", conditioning: 1000, velocity_x: 8, velocity_y: -9 }); - expect([swarmer.velocity_x, swarmer.velocity_y]).toEqual([7, -7]); + // A fresh swarmer pushed back onto a corner pad keeps 10.3 units a tick along it. + const swarmer = decode({ ...base.fighters[0], style: "swarmer", conditioning: 1000, velocity_x: 11, velocity_y: -12 }); + expect([swarmer.velocity_x, swarmer.velocity_y]).toEqual([MAX_SPEED, -MAX_SPEED]); const coast = predictMovement(swarmer, { moveX: 0, moveY: 0, defense: "none" }, 1); - expect(Math.hypot(coast.dx, coast.dy)).toBeLessThanOrEqual(7 * 1.1); + expect(Math.hypot(coast.dx, coast.dy)).toBeLessThanOrEqual(MAX_SPEED * 1.1); expect(() => decode({ ...base.fighters[0], velocity_x: 7.5 })).toThrow(ProtocolError); }); it("mirrors the engine's recovery cancel: a landed, chained, affordable follow-up on a defender who is not stunned", () => { - expect(recoveryCancelAge(punchTiming("straight", "head", "normal"))).toBe(6 + 2 + 5); - expect(recoveryCancelAge(punchTiming("hook", "head", "normal"))).toBe(7 + 3 + 6); + expect(recoveryCancelAge(punchTiming("straight", "head", "normal"))).toBe(4 + 2 + 3); + expect(recoveryCancelAge(punchTiming("hook", "head", "normal"))).toBe(5 + 2 + 3); expect(recoveryCancelAge({ startup: 4, active: 2, recovery: 9 })).toBe(4 + 2 + 4); const hook = { class: "hook" as const, target: "head" as const, power: "normal" as const }; expect(cancelsRecovery("straight", true, hook, 900, false)).toBe(true); @@ -254,19 +294,24 @@ describe("footwork predicted against what the engine did", () => { interface TraceRecord { readonly tick: number; readonly fighter: unknown; readonly events: unknown[]; readonly held: HeldInput } const LOOKAHEAD = 4; - /** Each tick's snapshot as the client decodes it, with what it has learnt so far of parries and cut punches. */ - function replay(records: readonly TraceRecord[]): { fighter: FighterSnapshot; holds: FootworkHolds; held: HeldInput; struck: boolean }[] { + /** Each tick's snapshot as the client decodes it, with what it has learnt so far of parries, evasions and cut punches. */ + function replay(records: readonly TraceRecord[]): { fighter: FighterSnapshot; holds: FootworkHolds; held: HeldInput; struck: boolean; evaded: boolean }[] { let rootedUntil = 0; let cutActionId: string | null = null; + let evasionFrom: number | undefined; return records.map((record) => { const payload = { ...snapshot(record.tick), fighters: [record.fighter, fighter("two", 400)], events: record.events }; const message = decodeServerFrame(JSON.stringify({ version: PROTOCOL_VERSION, type: "snapshot", payload })); if (message.type !== "snapshot") throw new Error(message.type); const one = message.payload.fighters[0]; - for (const event of message.payload.events) rootedUntil = parryRootedUntil(event, "one", rootedUntil); + for (const event of message.payload.events) { + rootedUntil = parryRootedUntil(event, "one", rootedUntil); + evasionFrom = evasionStartedAt(event, "one", evasionFrom); + } if (one.stunned_ticks > 0 && one.action_id !== null) cutActionId = one.action_id; const struck = message.payload.events.some((event) => event.target_id === "one" && ["hit", "counter_hit", "parry"].includes(event.kind)); - return { fighter: one, holds: { rootedUntil, cutActionId }, held: record.held, struck }; + const evaded = message.payload.events.some((event) => event.kind === "defense" && event.actor_id === "one"); + return { fighter: one, holds: { rootedUntil, cutActionId, evasionFrom }, held: record.held, struck, evaded }; }); } @@ -274,9 +319,10 @@ describe("footwork predicted against what the engine did", () => { it(`${name}: every tick's ${LOOKAHEAD}-tick step is the engine's to within 2 units`, () => { const decoded = replay(records); const misses: string[] = []; - // A punch landing on him inside the look-ahead is news no snapshot before it carries. + // A punch landing on him inside the look-ahead is news no snapshot before it carries; a slip he presses then is + // a press, which the client's input history knows of and a held direction does not. for (let index = 0; index + LOOKAHEAD < decoded.length; index += 1) { - if (decoded.slice(index + 1, index + 1 + LOOKAHEAD).some((later) => later.struck)) continue; + if (decoded.slice(index + 1, index + 1 + LOOKAHEAD).some((later) => later.struck || later.evaded)) continue; const { fighter: now, holds, held } = decoded[index]!; const later = decoded[index + LOOKAHEAD]!.fighter; const step = predictMovement(now, held, LOOKAHEAD, records[index]!.tick, holds); @@ -350,7 +396,7 @@ describe("walking behind a round trip", () => { const shown = buffer.sample(buffer.renderTick(t))!; const self = shown.fighters[0]; const lead = ((latency ?? rtt) / 1000) * 30 + buffer.interpolationDelayTicks; - const offset = constrainPrediction(self, prediction.update(self, heldAt(t), false, t, lead, shown.tick, 1 / 60, 30), shown.fighters[1]); + const offset = constrainPrediction(self, prediction.update(self, heldAt(t), 1, t, lead, shown.tick, 1 / 60, 30), shown.fighters[1]); drawn.push({ t, drawn: self.x + offset.dx, server: x }); } return drawn; @@ -361,13 +407,13 @@ describe("walking behind a round trip", () => { it(`sets off on the press and stops on the release at ${rtt} ms round trip (flush ${phase} ms off the tick)`, () => { const frames = walk(rtt, phase); const at = (ms: number): number => frames.find((frame) => frame.t >= ms)!.drawn; - // Walking speed is 7 units a tick, 210 a second. + // Walking speed is MAX_SPEED units a tick, thirty times that a second. expect(at(PRESS_MS + 150) - at(PRESS_MS)).toBeGreaterThan(20); const stallEnd = PRESS_MS + rtt + 100; - expect(((at(stallEnd) - at(PRESS_MS + 150)) / (stallEnd - PRESS_MS - 150)) * 1000).toBeGreaterThan(0.75 * 210); + expect(((at(stallEnd) - at(PRESS_MS + 150)) / (stallEnd - PRESS_MS - 150)) * 1000).toBeGreaterThan(0.75 * MAX_SPEED * 30); const afterRelease = frames.filter((frame) => frame.t >= RELEASE_MS).map((frame) => frame.drawn); expect(Math.max(...afterRelease) - at(RELEASE_MS)).toBeLessThan(8); - for (let index = 1; index < frames.length; index += 1) expect(frames[index - 1]!.drawn - frames[index]!.drawn).toBeLessThan(2.5); + for (let index = 1; index < frames.length; index += 1) expect(frames[index - 1]!.drawn - frames[index]!.drawn).toBeLessThan(MAX_SPEED * 0.36); expect(Math.abs(frames.at(-1)!.drawn - frames.at(-1)!.server)).toBeLessThan(0.5); }); } @@ -385,23 +431,46 @@ describe("the player's own defence", () => { expect(predictedDefense({ ...open, stunned_ticks: 12 }, guarding, "weave")).toBe("none"); expect(predictedDefense({ ...open, taunt_ticks: 30 }, guarding, null)).toBe("none"); expect(predictedDefense({ ...open, clinch_ticks: 30, defense: "guard_low" }, guarding, null)).toBe("guard_low"); - // An evasion the server is playing stands; one just pressed shows at once. + // An evasion the server is playing stands, unless it is the player's own one already played; one just pressed shows at once. expect(predictedDefense({ ...open, defense: "slip_left" }, guarding, null)).toBe("slip_left"); + expect(predictedDefense({ ...open, defense: "slip_left" }, guarding, null, true)).toBe("guard_high"); expect(predictedDefense(open, guarding, "weave")).toBe("weave"); }); - it("plays a slip from the press until the server's copy has played on screen, and keeps the feet still while the server does", () => { + it("plays a slip from the press for as long as the server plays it, holding the feet as long, and does not play the server's copy again a lead later", () => { const evasion = new EvasionPrediction(); const tick = 1000 / 30; evasion.press("slip_left", "c7", 1000, 6, 30); expect(evasion.pose(1000)).toBe("slip_left"); - expect(evasion.holdsFeet(1000 + (EVASION_TICKS - 1) * tick, 30)).toBe(true); - expect(evasion.holdsFeet(1000 + EVASION_TICKS * tick, 30)).toBe(false); + for (const at of [1000, 1000 + (EVASION_TICKS - 1) * tick]) { + expect(evasion.pose(at)).toBe("slip_left"); + expect(evasion.holdsFeet(at)).toBe(true); + } + expect(evasion.pose(1000 + EVASION_TICKS * tick)).toBeNull(); + expect(evasion.holdsFeet(1000 + EVASION_TICKS * tick)).toBe(false); // The server starts it and plays it out; the frame that carried it is long acknowledged by then. evasion.acknowledge({ ...open, defense: "slip_left", last_input_sequence: 30 }, true, (id) => (id === "c7" ? 30 : null)); evasion.acknowledge({ ...open, last_input_sequence: 34 }, true, (id) => (id === "c7" ? 30 : null)); - expect(evasion.pose(1000 + (6 + EVASION_TICKS - 1) * tick)).toBe("slip_left"); - expect(evasion.pose(1000 + (6 + EVASION_TICKS) * tick)).toBeNull(); + expect(evasion.hidesServerEvasion(1000 + (6 + EVASION_TICKS - 1) * tick)).toBe(true); + expect(evasion.hidesServerEvasion(1000 + (6 + EVASION_TICKS) * tick)).toBe(false); + }); + + it("starts a slip pressed behind the player's own punch once the punch has landed or missed, and drops one a punch press replaces before then", () => { + const tick = 1000 / 30; + const behind = new EvasionPrediction(); + behind.press("slip_right", "c4", 0, 6, 30, EVASION_TICKS, 3 * tick); + expect(behind.pose(2 * tick)).toBeNull(); + expect(behind.holdsFeet(2 * tick)).toBe(false); + expect(behind.pose(3 * tick)).toBe("slip_right"); + expect(behind.holdsFeet((3 + EVASION_TICKS - 1) * tick)).toBe(true); + expect(behind.holdsFeet((3 + EVASION_TICKS) * tick)).toBe(false); + expect(behind.drop(4 * tick)).toBe(false); + expect(behind.pose(5 * tick)).toBe("slip_right"); + const replaced = new EvasionPrediction(); + replaced.press("slip_right", "c5", 0, 6, 30, EVASION_TICKS, 3 * tick); + expect(replaced.drop(2 * tick)).toBe(true); + expect(replaced.pose(4 * tick)).toBeNull(); + expect(replaced.hidesServerEvasion(4 * tick)).toBe(false); }); it("holds a style's longer evasion as long as the engine plays it", () => { @@ -411,30 +480,31 @@ describe("the player's own defence", () => { expect(styleTiming("balanced").evasionTicks).toBe(0); const evasion = new EvasionPrediction(); evasion.press("weave", "c3", 0, 6, 30, ticks); - expect(evasion.holdsFeet((ticks - 1) * tick, 30)).toBe(true); - expect(evasion.holdsFeet(ticks * tick, 30)).toBe(false); - expect(evasion.pose((6 + ticks - 1) * tick)).toBe("weave"); - expect(evasion.pose((6 + ticks) * tick)).toBeNull(); + expect(evasion.holdsFeet((ticks - 1) * tick)).toBe(true); + expect(evasion.holdsFeet(ticks * tick)).toBe(false); + expect(evasion.pose((ticks - 1) * tick)).toBe("weave"); + expect(evasion.pose(ticks * tick)).toBeNull(); + expect(evasion.hidesServerEvasion((6 + ticks - 1) * tick)).toBe(true); }); - it("drops a slip the server turned down or a stun cut short", () => { + it("drops a slip the server turned down or a stun cut short, and tells when the server turned it down unstarted", () => { const sequenceOf = (id: string): number | null => (id === "c8" ? 41 : null); const refused = new EvasionPrediction(); refused.press("pull", "c8", 0, 4, 30); // Snapshots before the frame went out say nothing about it. - refused.acknowledge({ ...open, last_input_sequence: 40 }, true, sequenceOf); + expect(refused.acknowledge({ ...open, last_input_sequence: 40 }, true, sequenceOf)).toBe(false); expect(refused.pose(10)).toBe("pull"); // Not enough stamina there, or a punch pressed in the same tick took its place. - refused.acknowledge({ ...open, last_input_sequence: 41 }, true, sequenceOf); + expect(refused.acknowledge({ ...open, last_input_sequence: 41 }, true, sequenceOf)).toBe(true); expect(refused.pose(20)).toBeNull(); const waiting = new EvasionPrediction(); waiting.press("pull", "c8", 0, 4, 30); - waiting.acknowledge({ ...open, last_input_sequence: 41, queued_actions: 1 }, true, sequenceOf); + expect(waiting.acknowledge({ ...open, last_input_sequence: 41, queued_actions: 1 }, true, sequenceOf)).toBe(false); expect(waiting.pose(20)).toBe("pull"); const stunned = new EvasionPrediction(); stunned.press("weave", "c9", 0, 4, 30); stunned.acknowledge({ ...open, defense: "weave" }, true, null); - stunned.acknowledge({ ...open, stunned_ticks: 20 }, true, null); + expect(stunned.acknowledge({ ...open, stunned_ticks: 20 }, true, null)).toBe(false); expect(stunned.pose(20)).toBeNull(); const bell = new EvasionPrediction(); bell.press("weave", "c9", 0, 4, 30); @@ -442,11 +512,14 @@ describe("the player's own defence", () => { expect(bell.pose(20)).toBeNull(); }); - it("matches the engine's evasion length and stamina gate", () => { + it("matches the engine's evasion length and stamina gate, both read from the manifest they share", () => { // Tests run from the client's package root, two levels below the repository's. const engine = readFileSync(resolve(process.cwd(), "../../src/intelstream/hands/engine.py"), "utf8"); - expect(engine).toContain(`EVASION_TICKS: Final = ${EVASION_TICKS}`); - expect(engine).toContain(`if fighter.stamina < ${EVASION_STAMINA}:`); + const rules = readFileSync(resolve(process.cwd(), "../../src/intelstream/hands/rules.py"), "utf8"); + expect(rules).toContain('EVASION_TICKS: int = _MANIFEST["evasion"]["ticks"]'); + expect(rules).toContain('EVASION_STAMINA: int = _MANIFEST["evasion"]["stamina"]'); + expect(engine).toContain("if fighter.stamina < EVASION_STAMINA:"); expect(engine).toContain("fighter.evasion_ticks = EVASION_TICKS + fighter.style_rule.evasion_ticks"); + expect([EVASION_TICKS, EVASION_STAMINA]).toEqual([7, 15]); }); }); diff --git a/web/hands/src/prediction.ts b/web/hands/src/prediction.ts index 6d778acb..17adddb2 100644 --- a/web/hands/src/prediction.ts +++ b/web/hands/src/prediction.ts @@ -1,4 +1,4 @@ -import { comboChain, comboWindow, FIGHTER_RADIUS, punchTiming, RING_CORNER_REACH, RING_HALF_HEIGHT, RING_HALF_WIDTH, STUNNED_SPEED_PERCENT, styledStaminaCost, styleTiming, TIRED_RECOVERY_TICKS, TIRED_STARTUP_TICKS, type PunchTiming } from "./manifest"; +import { comboChain, comboWindow, EVASION_STAMINA, EVASION_TICKS, FIGHTER_RADIUS, MAX_SPEED, MOVE_BLEND_PERCENT, punchTiming, RECOVERY_SPEED_PERCENT, RING_CORNER_REACH, RING_HALF_HEIGHT, RING_HALF_WIDTH, STUNNED_SPEED_PERCENT, styledStaminaCost, styleTiming, TIRED_RECOVERY_TICKS, TIRED_STARTUP_TICKS, type PunchTiming } from "./manifest"; import type { CombatEvent, DefensivePose, FighterSnapshot, Hand, HeldDefense, MovementKind, Power, PunchClass, Target } from "./types"; export interface HeldInput { @@ -12,13 +12,12 @@ export interface PredictedOffset { readonly dy: number; } -const MAX_SPEED = 7; const GUARD_SPEED_PERCENT = 70; const MAX_CONDITIONING = 1000; export const MINIMUM_SEPARATION = FIGHTER_RADIUS * 2; export function fatigueFactor(conditioning: number, bodyTrauma: number): number { - return Math.max(48, 100 - Math.floor((MAX_CONDITIONING - conditioning) / 18) - Math.floor(bodyTrauma / 35)); + return Math.max(65, 100 - Math.floor((MAX_CONDITIONING - conditioning) / 30) - Math.floor(bodyTrauma / 50)); } export interface PunchIntent { @@ -51,14 +50,14 @@ export function predictedPunchTiming(fighter: FighterSnapshot, punch: PunchInten const fullCost = styledStaminaCost(fighter.style, punch.class, punch.target, punch.power); const tired = fighter.stamina < fullCost; const cost = tired ? fighter.stamina : tick !== undefined && inComboWindow(fighter, punch, tick) ? Math.max(1, Math.floor((fullCost * 90) / 100)) : fullCost; - const conditioning = Math.max(0, fighter.conditioning - Math.floor((Math.max(1, Math.floor(cost / 12)) * style.conditioningLossPercent) / 100)); + const conditioning = Math.max(0, fighter.conditioning - Math.floor((Math.max(1, Math.floor(cost / 20)) * style.conditioningLossPercent) / 100)); const speed = fatigueFactor(conditioning, fighter.trauma.body); const lead = fighter.stance === "orthodox" ? "left" : "right"; const quick = punch.class === "jab" && punch.hand === lead ? 1 : 0; return { ...base, startup: Math.max(2, Math.floor((base.startup * 100) / speed) - quick + (style.startupTicks[punch.class] ?? 0)) + (tired ? TIRED_STARTUP_TICKS : 0), - recovery: Math.max(4, Math.floor((base.recovery * 100) / speed) + (style.recoveryTicks[punch.class] ?? 0)) + (tired ? TIRED_RECOVERY_TICKS : 0), + recovery: Math.max(3, Math.floor((base.recovery * 100) / speed) + (style.recoveryTicks[punch.class] ?? 0)) + (tired ? TIRED_RECOVERY_TICKS : 0), }; } @@ -75,25 +74,27 @@ export function attackTicksRemaining(fighter: FighterSnapshot, tick: number): nu export function movementLocked(fighter: FighterSnapshot, tick?: number): boolean { return (tick === undefined ? fighter.action !== null : attackTicksRemaining(fighter, tick) > 0) - || stateLocked(fighter); + || fighter.queued_actions > 0 + || heldInPlace(fighter) + || isEvasion(fighter.defense); } -function stateLocked(fighter: FighterSnapshot): boolean { - // A queued punch starts the tick the current one ends, so the fighter is never free in between. - return fighter.queued_actions > 0 - || fighter.is_downed +/** What holds a fighter's feet for as long as a snapshot shows it: down, a clinch, a taunt or a foul's recovery. */ +function heldInPlace(fighter: FighterSnapshot): boolean { + return fighter.is_downed || fighter.clinch_ticks > 0 || fighter.clinch_startup_ticks > 0 || fighter.taunt_ticks > 0 - || fighter.is_foul_recovery_target - || ["slip_left", "slip_right", "weave", "pull"].includes(fighter.defense); + || fighter.is_foul_recovery_target; } -/** What the engine walks toward for a held input: the velocity it blends halfway to each tick, and its speed cap. */ +/** What the engine walks toward for a held input: the velocity it blends toward each tick, and its speed cap. */ export interface MovementIntent { readonly x: number; readonly y: number; readonly speed: number; + /** The share of it the player's own punch, recovering when the input reaches the server, allows (1 when none). */ + readonly share?: number; } /** @@ -127,41 +128,101 @@ export function parryRootedUntil(event: CombatEvent, playerId: string | null, cu return event.kind === "parry" && event.target_id === playerId ? Math.max(current, event.tick + event.amount) : current; } +/** The tick the newest slip, weave or pull of `playerId` started on, given an event from the engine and the tick known so far. */ +export function evasionStartedAt(event: CombatEvent, playerId: string | null, current: number | undefined): number | undefined { + return event.kind === "defense" && event.actor_id === playerId && isEvasion(event.detail as DefensivePose) ? Math.max(current ?? event.tick, event.tick) : current; +} + /** What holds a fighter's feet that a snapshot does not show: `MovementPrediction` keeps track of it. */ export interface FootworkHolds { /** The tick a parry roots him until (`parryRootedUntil`). */ readonly rootedUntil?: number; /** A punch he was seen stunned in: the stun cut it short, though snapshots go on presenting it. */ readonly cutActionId?: string | null; + /** The tick his newest slip, weave or pull started on (`evasionStartedAt`). */ + readonly evasionFrom?: number | undefined; +} + +/** + * Whether the punch the snapshot presents was cut short, though snapshots go on presenting it with its own timing: by a + * stun, or by a slip, weave or pull that started once it had landed or missed. It holds nothing then, nor slows him. + */ +function punchCut(fighter: FighterSnapshot, holds: FootworkHolds): boolean { + if (fighter.stunned_ticks > 0 || (fighter.action_id !== null && fighter.action_id === holds.cutActionId)) return true; + const from = holds.evasionFrom; + if (from === undefined || fighter.action === null) return false; + const recovery = fighter.action_start_tick + fighter.action_startup_ticks + fighter.action_active_ticks; + return from >= recovery && from < recovery + fighter.action_recovery_ticks; +} + +/** Whether the fighter's punch is in its recovery on engine tick `at`, when the engine lets him walk at a share of his speed. */ +function recovering(fighter: FighterSnapshot, at: number): boolean { + if (fighter.action === null) return false; + const recovery = fighter.action_start_tick + fighter.action_startup_ticks + fighter.action_active_ticks; + return at >= recovery && at < recovery + fighter.action_recovery_ticks; } /** * Steps of the replay from snapshot `tick` that the engine holds the fighter's feet still. A punch - * holds them through its last tick, and the engine frees him on the tick it ends. A stun cuts a - * punch short on the tick it lands, though snapshots go on presenting the punch with its own timing + * holds them through its last active tick; recovering, he walks at a share of his speed. A stun cuts + * a punch short on the tick it lands, though snapshots go on presenting the punch with its own timing * for a while, so a stunned fighter is not held by one, nor afterwards by the punch a stun was seen * to cut. A parry roots him while its stagger lasts. */ function heldSteps(fighter: FighterSnapshot, tick: number, holds: FootworkHolds): number { - const cut = fighter.stunned_ticks > 0 || (fighter.action_id !== null && fighter.action_id === holds.cutActionId); - const punch = cut ? 0 : Math.max(0, attackTicksRemaining(fighter, tick) - 1); + const cut = punchCut(fighter, holds); + const punch = cut || fighter.action === null ? 0 : Math.max(0, fighter.action_start_tick + fighter.action_startup_ticks + fighter.action_active_ticks - tick - 1); const rooted = fighter.stunned_ticks > 0 ? Math.min((holds.rootedUntil ?? 0) - tick, fighter.stunned_ticks) - 1 : 0; return Math.max(punch, rooted); } /** - * Mirrors the authoritative movement integrator (velocity blends halfway to + * Steps of the replay from snapshot `tick` that the slip, weave or pull the snapshot shows holds the fighter's feet: + * the engine frees them on the tick its evasion ticks run out. Null while its start is not known, when it holds them + * for the whole replay. + */ +function evasionSteps(fighter: FighterSnapshot, tick: number | undefined, holds: FootworkHolds): number | null { + if (!isEvasion(fighter.defense)) return 0; + const from = holds.evasionFrom; + if (tick === undefined || from === undefined || from > tick) return null; + return Math.max(0, from + EVASION_TICKS + styleTiming(fighter.style).evasionTicks - tick - 1); +} + +/** + * Steps of the replay from snapshot `tick` before a press the server holds starts and holds the feet again: it waits for + * the punch the snapshot presents to end, or for a stun to wear off (it fires the tick after), and starts at once + * otherwise. Infinity with nothing held. A combination cutting a landed punch's recovery short starts sooner, which the + * input history knows of for the player's own presses. + */ +function queuedSteps(fighter: FighterSnapshot, tick: number | undefined, holds: FootworkHolds): number { + if (fighter.queued_actions === 0) return Infinity; + if (tick === undefined) return 0; + if (fighter.action !== null && !punchCut(fighter, holds)) { + const ending = fighter.action_start_tick + fighter.action_startup_ticks + fighter.action_active_ticks + fighter.action_recovery_ticks - tick - 1; + if (ending > 0) return ending; + } + return Math.max(0, fighter.stunned_ticks); +} + +/** + * Mirrors the authoritative movement integrator (velocity blends toward * the held direction each tick, capped at the fatigue-scaled speed) so the * viewer's own fighter can be shown `ticks` ahead of the delayed snapshot, * walking toward `intent(step)` on each tick. With the snapshot `tick`, a - * punch or a parry's stagger only holds the fighter for the ticks it has - * left (see `heldSteps`), so stepping out of it is predicted as soon as it - * ends. + * punch, an evasion or a parry's stagger only holds the fighter for the + * ticks it has left (see `heldSteps`), so stepping out of it is predicted as + * soon as it ends, at the punch's share of his speed while it recovers, until + * a press the server holds starts (see `queuedSteps`). */ export function replayMovement(fighter: FighterSnapshot, intent: (step: number) => MovementIntent, ticks: number, tick?: number, holds: FootworkHolds = {}): PredictedOffset { - if (ticks <= 0 || stateLocked(fighter)) return { dx: 0, dy: 0 }; - const committed = tick === undefined ? (fighter.action !== null ? Infinity : 0) : heldSteps(fighter, tick, holds); - if (committed >= ticks) return { dx: 0, dy: 0 }; + const evading = evasionSteps(fighter, tick, holds); + if (ticks <= 0 || heldInPlace(fighter) || evading === null) return { dx: 0, dy: 0 }; + const committed = Math.max(evading, tick === undefined ? (fighter.action !== null ? Infinity : 0) : heldSteps(fighter, tick, holds)); + // Held from the first step, he still carries what is left of his velocity for a tick or two, as the engine blends it away. + const queued = queuedSteps(fighter, tick, holds); + const cut = punchCut(fighter, holds); + // The snapshot's own punch and the one the input history knows of are the same punch: their shares do not multiply. + const share = (step: number, want: MovementIntent): number => Math.min(want.share ?? 1, tick !== undefined && !cut && recovering(fighter, tick + 1 + step) ? RECOVERY_SPEED_PERCENT / 100 : 1); let vx = fighter.velocity_x; let vy = fighter.velocity_y; let dx = 0; @@ -169,27 +230,32 @@ export function replayMovement(fighter: FighterSnapshot, intent: (step: number) const whole = Math.floor(ticks); const fraction = ticks - whole; for (let step = 0; step < whole; step += 1) { - const free = step >= committed; + const free = step >= committed && step < queued; const want = intent(step); - vx = (vx + (free ? want.x : 0)) / 2; - vy = (vy + (free ? want.y : 0)) / 2; + const slowed = share(step, want); + vx = blend(vx, free ? want.x * slowed : 0); + vy = blend(vy, free ? want.y * slowed : 0); const length = Math.hypot(vx, vy); - if (length > want.speed) { - vx = (vx / length) * want.speed; - vy = (vy / length) * want.speed; + if (length > want.speed * slowed) { + vx = (vx / length) * want.speed * slowed; + vy = (vy / length) * want.speed * slowed; } dx += vx; dy += vy; } if (fraction > 0) { - const free = whole >= committed; + const free = whole >= committed && whole < queued; const want = intent(whole); - dx += ((vx + (free ? want.x : 0)) / 2) * fraction; - dy += ((vy + (free ? want.y : 0)) / 2) * fraction; + const slowed = share(whole, want); + dx += blend(vx, free ? want.x * slowed : 0) * fraction; + dy += blend(vy, free ? want.y * slowed : 0) * fraction; } return { dx, dy }; } +/** The engine's `_blend_velocity`: the share of the way to the wanted velocity covered in a tick. */ +const blend = (current: number, wanted: number): number => (current * (100 - MOVE_BLEND_PERCENT) + wanted * MOVE_BLEND_PERCENT) / 100; + /** `replayMovement` with the same input held on every tick. */ export function predictMovement(fighter: FighterSnapshot, held: HeldInput, ticks: number, tick?: number, holds: FootworkHolds = {}): PredictedOffset { const intent = { x: 0, y: 0, speed: 0 }; @@ -211,25 +277,27 @@ const HORIZON_EASE_RATE = 4; * press and stops on the release instead of stepping, stalling and overshooting. */ export class MovementPrediction { - private readonly history: { readonly at: number; readonly held: HeldInput }[] = []; + private readonly history: { readonly at: number; readonly held: HeldInput; readonly share: number }[] = []; private readonly offset = { dx: 0, dy: 0 }; - private readonly mean = { x: 0, y: 0, speed: 0 }; + private readonly mean = { x: 0, y: 0, speed: 0, share: 1 }; private readonly sample = { x: 0, y: 0, speed: 0 }; private horizon: number | null = null; - private readonly holds: { rootedUntil: number; cutActionId: string | null } = { rootedUntil: 0, cutActionId: null }; + private readonly holds: { rootedUntil: number; cutActionId: string | null; evasionFrom: number | undefined } = { rootedUntil: 0, cutActionId: null, evasionFrom: undefined }; - /** Takes note of an event from the engine for the fighter `playerId` (see `parryRootedUntil`). */ + /** Takes note of an event from the engine for the fighter `playerId` (see `parryRootedUntil` and `evasionStartedAt`). */ observe(event: CombatEvent, playerId: string | null): void { this.holds.rootedUntil = parryRootedUntil(event, playerId, this.holds.rootedUntil); + this.holds.evasionFrom = evasionStartedAt(event, playerId, this.holds.evasionFrom); } /** - * The offset to draw `fighter`, as shown, by this frame. `held` is the input held now; with - * `holdFeet` (the viewer's own punch playing) the server will not walk him for it. `fighter` is - * null outside the fight, where the offset eases away. + * The offset to draw `fighter`, as shown, by this frame. `held` is the input held now and `footwork` + * the share of it the server will walk him for when it arrives: 0 while the viewer's own punch or + * evasion holds his feet there, the recovery's share while his own punch recovers, 1 otherwise. + * `fighter` is null outside the fight, where the offset eases away. */ - update(fighter: FighterSnapshot | null, held: HeldInput, holdFeet: boolean, nowMs: number, horizonTicks: number, tick: number, dt: number, tickRate: number): PredictedOffset { - this.history.push({ at: nowMs, held: holdFeet ? { ...held, moveX: 0, moveY: 0 } : held }); + update(fighter: FighterSnapshot | null, held: HeldInput, footwork: number, nowMs: number, horizonTicks: number, tick: number, dt: number, tickRate: number): PredictedOffset { + this.history.push({ at: nowMs, held: footwork <= 0 ? { ...held, moveX: 0, moveY: 0 } : held, share: footwork <= 0 ? 1 : footwork }); while (this.history.length > 2 && this.history[1]!.at < nowMs - HELD_HISTORY_MS) this.history.shift(); this.horizon = this.horizon === null ? horizonTicks : this.horizon + (horizonTicks - this.horizon) * (1 - Math.exp(-HORIZON_EASE_RATE * dt)); let target: PredictedOffset = { dx: 0, dy: 0 }; @@ -261,6 +329,7 @@ export class MovementPrediction { mean.x = 0; mean.y = 0; mean.speed = 0; + mean.share = 0; for (let index = 0; index < this.history.length; index += 1) { const start = index === 0 ? from : Math.max(from, this.history[index]!.at); const end = Math.min(to, this.history[index + 1]?.at ?? Infinity); @@ -270,6 +339,7 @@ export class MovementPrediction { mean.x += intent.x * weight; mean.y += intent.y * weight; mean.speed += intent.speed * weight; + mean.share += this.history[index]!.share * weight; } return mean; } @@ -320,10 +390,7 @@ export function constrainPrediction(fighter: { readonly x: number; readonly y: n return { dx: inside.x - fighter.x, dy: inside.y - fighter.y }; } -/** Ticks a slip, weave or pull lasts on the server (the engine's EVASION_TICKS), before a style's own. */ -export const EVASION_TICKS = 10; -/** Stamina the server asks of a slip, weave or pull before it starts one. */ -export const EVASION_STAMINA = 25; +export { EVASION_STAMINA, EVASION_TICKS }; export type EvasionKind = "slip_left" | "slip_right" | "weave" | "pull"; @@ -335,59 +402,84 @@ export function isEvasion(kind: MovementKind | "punch" | "foul" | DefensivePose) * The defence the viewer's own fighter is shown in during the fight: the guard held now, ahead of the * snapshot like his feet, or the slip, weave or pull just pressed. The server's own defence stands * while it overrides the held guard: none while stunned or taunting, unchanged in a clinch, and an - * evasion it is playing. + * evasion it is playing, unless it is one the viewer pressed and has already seen through + * (`hideServerEvasion`): the delayed snapshot shows it a round trip after his own did. */ -export function predictedDefense(server: FighterSnapshot, held: HeldInput, evasion: EvasionKind | null): DefensivePose { +export function predictedDefense(server: FighterSnapshot, held: HeldInput, evasion: EvasionKind | null, hideServerEvasion = false): DefensivePose { if (server.stunned_ticks > 0 || server.taunt_ticks > 0 || server.clinch_ticks > 0) return server.defense; if (evasion !== null) return evasion; - if (isEvasion(server.defense)) return server.defense; + if (isEvasion(server.defense) && !hideServerEvasion) return server.defense; return held.defense; } /** - * A slip, weave or pull the viewer pressed, shown on the press the way his punches are. It lasts the - * lead plus its own ticks, so it ends as the server's copy does on screen, unless the server turns it - * down: once a snapshot has the frame that carried it, the fighter is evading or never will for it, and - * a stun, a clinch or the end of the fight phase clears it. + * A slip, weave or pull the viewer pressed, shown on the press the way his punches are: for as long as + * the server plays it, from when the server starts it on the press's own time (at once, or once the + * punch it cuts short has landed or missed). The server's copy of it reaches the screen a lead later + * and is not played again. The server can turn it down: once a snapshot has the frame that carried it, + * the fighter is evading or never will for it, and a stun, a clinch or the end of the fight phase + * clears it. */ export class EvasionPrediction { private kind: EvasionKind | null = null; private id = ""; - private pressedAt = 0; + private startsAt = 0; + private endsAt = 0; private until = 0; - private ticks = EVASION_TICKS; private sequence: number | null = null; private started = false; - /** `evasionTicks` is how long the server plays it: EVASION_TICKS plus the fighter's style's own. */ - press(kind: EvasionKind, id: string, nowMs: number, leadTicks: number, tickRate: number, evasionTicks = EVASION_TICKS): void { + /** + * `evasionTicks` is how long the server plays it: EVASION_TICKS plus the fighter's style's own. `startMs` is when it + * starts on the press's time, later than the press behind a punch still to land or miss. + */ + press(kind: EvasionKind, id: string, nowMs: number, leadTicks: number, tickRate: number, evasionTicks = EVASION_TICKS, startMs = nowMs): void { this.kind = kind; this.id = id; - this.pressedAt = nowMs; - this.ticks = evasionTicks; - this.until = nowMs + ((Math.max(0, leadTicks) + evasionTicks) * 1000) / tickRate; + this.startsAt = startMs; + this.endsAt = startMs + (evasionTicks * 1000) / tickRate; + this.until = this.endsAt + (Math.max(0, leadTicks) * 1000) / tickRate; this.sequence = null; this.started = false; } - /** Squares the pressed evasion with the newest snapshot; `sequenceOf` gives the frame that carried a press once it has gone out. */ - acknowledge(server: FighterSnapshot, fighting: boolean, sequenceOf: ((actionId: string) => number | null) | null): void { - if (this.kind === null) return; + /** + * Squares the pressed evasion with the newest snapshot; `sequenceOf` gives the frame that carried a press once it has gone + * out. True when the server turned it down without starting it. + */ + acknowledge(server: FighterSnapshot, fighting: boolean, sequenceOf: ((actionId: string) => number | null) | null): boolean { + if (this.kind === null) return false; this.sequence ??= sequenceOf?.(this.id) ?? null; if (server.defense === this.kind) this.started = true; const cutOff = !fighting || server.stunned_ticks > 0 || server.clinch_ticks > 0; const refused = !this.started && this.sequence !== null && server.last_input_sequence >= this.sequence && server.queued_actions === 0; if (cutOff || refused) this.kind = null; + return refused; } /** The evasion to show at `nowMs`, or null. */ pose(nowMs: number): EvasionKind | null { if (this.kind !== null && nowMs >= this.until) this.kind = null; - return this.kind; + return this.kind !== null && nowMs >= this.startsAt && nowMs < this.endsAt ? this.kind : null; + } + + /** True while the evasion the delayed snapshot shows is this one, already played here. */ + hidesServerEvasion(nowMs: number): boolean { + return this.kind !== null && nowMs >= this.startsAt && nowMs < this.until; } /** True while the server, evading, keeps the fighter's feet still for inputs sent now. */ - holdsFeet(nowMs: number, tickRate: number): boolean { - return this.kind !== null && nowMs < this.pressedAt + (this.ticks * 1000) / tickRate; + holdsFeet(nowMs: number): boolean { + return this.kind !== null && nowMs >= this.startsAt && nowMs < this.endsAt; + } + + /** + * A newer press takes its place in the server's buffer, unless it has started there by now (on the press's time); true + * when one is dropped before it started. + */ + drop(nowMs: number): boolean { + if (this.kind === null || nowMs >= this.startsAt) return false; + this.kind = null; + return true; } } diff --git a/web/hands/src/protocol.test.ts b/web/hands/src/protocol.test.ts index 0db85a57..ff43c24a 100644 --- a/web/hands/src/protocol.test.ts +++ b/web/hands/src/protocol.test.ts @@ -106,7 +106,6 @@ describe(`strict protocol v${PROTOCOL_VERSION}`, () => { it("allows the most get-up presses the engine can ask for: three knockdowns on a head beaten to the cap", () => { expect(GET_UP_REQUIRED_MIN).toBe(manifestJson.knockdown.get_up_base); expect(GET_UP_REQUIRED_MAX).toBe(manifestJson.knockdown.get_up_base + 3 * manifestJson.knockdown.get_up_per_knockdown + Math.floor(1400 / manifestJson.knockdown.get_up_trauma_divisor)); - expect(GET_UP_REQUIRED_MAX).toBeGreaterThanOrEqual(171); }); it("accepts exact fighter-domain boundaries and the private get-up sentinel", () => { const base = snapshot(); @@ -132,6 +131,12 @@ describe(`strict protocol v${PROTOCOL_VERSION}`, () => { const exhausted = { ...base.fighters[0], maximum_stamina: 330, stamina: 331 }; expect(() => decodeServerFrame(JSON.stringify({ version: PROTOCOL_VERSION, type: "snapshot", payload: { ...base, fighters: [exhausted, base.fighters[1]] } }))).toThrow(ProtocolError); }); + it("decodes a broken guard, and nothing but true or false for it", () => { + const base = snapshot(); + const broken = { ...base.fighters[0], guard: 0, guard_broken: true }; + expect(decodeServerFrame(JSON.stringify({ version: PROTOCOL_VERSION, type: "snapshot", payload: { ...base, fighters: [broken, base.fighters[1]] } }))).toMatchObject({ payload: { fighters: [{ guard_broken: true }, { guard_broken: false }] } }); + expect(() => decodeServerFrame(JSON.stringify({ version: PROTOCOL_VERSION, type: "snapshot", payload: { ...base, fighters: [{ ...broken, guard_broken: 1 }, base.fighters[1]] } }))).toThrow(ProtocolError); + }); it("rejects out-of-authority event and fighter bounds", () => { const base = snapshot(); const badEvent = { version: PROTOCOL_VERSION, type: "snapshot", payload: { ...base, events: [{ event_id: 1, tick: 1, kind: "x".repeat(33), actor_id: null, target_id: null, amount: 10_001, detail: "", blood: 101, direction: 2 }] } }; diff --git a/web/hands/src/protocol.ts b/web/hands/src/protocol.ts index bdc08974..13cbe76a 100644 --- a/web/hands/src/protocol.ts +++ b/web/hands/src/protocol.ts @@ -4,9 +4,9 @@ import { type FighterRecord, type FighterSnapshot, type FighterStyle, type FinalMessage, type FinishMethod, type Foul, type Hand, type HeldDefense, type JudgeCard, type MatchPhase, type MatchResult, type MovementKind, type Power, type PublicPlayer, type PunchClass, type PunchTotals, type SemanticAction, type ServerMessage, - type Stance, type Target, type TokenResponse, type TraumaSnapshot, + type RefereeSnapshot, type Stance, type Target, type TokenResponse, type TraumaSnapshot, } from "./types"; -import { GET_UP_REQUIRED_MAX, GET_UP_REQUIRED_MIN } from "./manifest"; +import { GET_UP_REQUIRED_MAX, GET_UP_REQUIRED_MIN, MAX_SPEED } from "./manifest"; export class ProtocolError extends Error { override name = "ProtocolError" } const MAX_INT = 2_147_483_647; @@ -92,8 +92,8 @@ const heldDefenses = ["none", "guard_high", "guard_low"] as const; const movementKinds = ["slip_left", "slip_right", "weave", "pull", "clinch", "switch_stance", "get_up_left", "get_up_right", "taunt", "corner_cut", "corner_swelling", "corner_breath"] as const; const cornerChoices = ["cut", "swelling", "breath", "balanced"] as const; const fouls = ["low_blow", "headbutt"] as const; -const phases = ["countdown", "fight", "knockdown", "foul_recovery", "rest", "complete"] as const; -const methods = ["ko", "flash_ko", "tko", "doctor_stoppage", "disqualification", "decision", "draw", "forfeit"] as const; +const phases = ["countdown", "fight", "knockdown", "foul_recovery", "referee_down", "rest", "complete"] as const; +const methods = ["ko", "flash_ko", "tko", "disqualification", "decision", "draw", "forfeit"] as const; function fighterRecord(value: unknown): FighterRecord { const o = object(value, "record"); exact(o, ["wins", "losses", "draws", "knockouts"]); @@ -123,7 +123,7 @@ function trauma(value: unknown): TraumaSnapshot { }; } /** The engine reports a fighter's velocity within his walking speed. */ -const MAX_REPORTED_SPEED = 7; +const MAX_REPORTED_SPEED = MAX_SPEED; /** The velocity only seeds the movement prediction, so one past the walking speed is clamped rather than ending the bout for everyone in the room. */ function velocity(value: unknown, name: string): number { return Math.max(-MAX_REPORTED_SPEED, Math.min(MAX_REPORTED_SPEED, integer(value, name, -MAX_INT, MAX_INT))); @@ -132,7 +132,7 @@ function fighter(value: unknown): FighterSnapshot { const o = object(value, "fighter"); exact(o, [ "player_id", "x", "y", "facing", "facing_x", "facing_y", "velocity_x", "velocity_y", "stance", "style", "defense", - "stamina", "maximum_stamina", "conditioning", "guard", "poise", "trauma", "knockdowns", + "stamina", "maximum_stamina", "conditioning", "guard", "guard_broken", "poise", "trauma", "knockdowns", "warnings", "deductions", "stunned_ticks", "is_downed", "action", "action_hand", "action_target", "action_power", "action_id", "action_key", "action_start_tick", "action_startup_ticks", "action_active_ticks", "action_recovery_ticks", "action_contact_tick", @@ -164,7 +164,7 @@ function fighter(value: unknown): FighterSnapshot { facing, facing_x: facingX, facing_y: facingY, velocity_x: velocity(o.velocity_x, "velocity_x"), velocity_y: velocity(o.velocity_y, "velocity_y"), stance: oneOf(o.stance, stances, "stance"), style: oneOf(o.style, FIGHTER_STYLES, "style"), defense: oneOf(o.defense, defenses, "defense"), stamina, maximum_stamina: maximumStamina, - conditioning: integer(o.conditioning, "conditioning", 0, 1000), guard: integer(o.guard, "guard", 0, 700), poise: integer(o.poise, "poise", 0, 600), + conditioning: integer(o.conditioning, "conditioning", 0, 1000), guard: integer(o.guard, "guard", 0, 700), guard_broken: bool(o.guard_broken, "guard_broken"), poise: integer(o.poise, "poise", 0, 600), trauma: trauma(o.trauma), knockdowns: integer(o.knockdowns, "knockdowns", 0, 3), warnings: integer(o.warnings, "warnings", 0, 3), deductions: integer(o.deductions, "deductions", 0, 1), stunned_ticks: integer(o.stunned_ticks, "stunned_ticks", 0, 90), is_downed: bool(o.is_downed, "is_downed"), action, action_hand: actionHand, action_target: actionTarget, action_power: actionPower, @@ -208,11 +208,21 @@ function result(value: unknown): MatchResult { const method = oneOf(o.finish_method, methods, "finish method"); coherentFinish(winner, method); return { match_id: string(o.match_id, "match_id"), activity_instance_id: string(o.activity_instance_id, "activity_instance_id"), guild_id: string(o.guild_id, "guild_id"), player_one_id: p1, player_two_id: p2, winner_id: winner, finish_method: method, round_number: integer(o.round_number, "round", 1, 15), tick: integer(o.tick, "tick"), scorecards: scorecards(o.scorecards), player_one_knockdowns: integer(o.player_one_knockdowns, "knockdowns", 0, 3), player_two_knockdowns: integer(o.player_two_knockdowns, "knockdowns", 0, 3), player_one_damage: integer(o.player_one_damage, "damage"), player_two_damage: integer(o.player_two_damage, "damage") }; } +function referee(value: unknown): RefereeSnapshot { + const o = object(value, "referee"); exact(o, ["x", "y", "facing_x", "facing_y", "velocity_x", "velocity_y", "stunned_ticks", "alive", "trauma"]); + return { + x: integer(o.x, "referee.x", -462, 462), y: integer(o.y, "referee.y", -462, 462), + facing_x: integer(o.facing_x, "referee.facing_x", -1000, 1000), facing_y: integer(o.facing_y, "referee.facing_y", -1000, 1000), + velocity_x: velocity(o.velocity_x, "referee.velocity_x"), velocity_y: velocity(o.velocity_y, "referee.velocity_y"), + stunned_ticks: integer(o.stunned_ticks, "referee.stunned_ticks", 0, 90), alive: bool(o.alive, "referee.alive"), trauma: trauma(o.trauma), + }; +} + function snapshot(value: unknown): EngineSnapshot { - const o = object(value, "snapshot"); exact(o, ["tick", "phase", "round_number", "phase_ticks_remaining", "fighters", "events", "result", "checksum"]); + const o = object(value, "snapshot"); exact(o, ["tick", "phase", "round_number", "phase_ticks_remaining", "fighters", "referee", "events", "result", "checksum"]); const fs = array(o.fighters, "fighters", 2).map(fighter); if (fs.length !== 2 || fs[0]?.player_id === fs[1]?.player_id) throw new ProtocolError("snapshot requires two distinct fighters"); const checksum = string(o.checksum, "checksum", 64); if (!/^[a-f0-9]{64}$/u.test(checksum)) throw new ProtocolError("invalid checksum"); - return { tick: integer(o.tick, "tick"), phase: oneOf(o.phase, phases, "phase"), round_number: integer(o.round_number, "round", 1, 15), phase_ticks_remaining: integer(o.phase_ticks_remaining, "phase ticks"), fighters: [fs[0]!, fs[1]!], events: array(o.events, "events", 256).map(event), result: o.result === null ? null : result(o.result), checksum }; + return { tick: integer(o.tick, "tick"), phase: oneOf(o.phase, phases, "phase"), round_number: integer(o.round_number, "round", 1, 15), phase_ticks_remaining: integer(o.phase_ticks_remaining, "phase ticks"), fighters: [fs[0]!, fs[1]!], referee: referee(o.referee), events: array(o.events, "events", 256).map(event), result: o.result === null ? null : result(o.result), checksum }; } export function decodeServerFrame(frame: string | ArrayBuffer | Uint8Array): ServerMessage { diff --git a/web/hands/src/render/burst.test.ts b/web/hands/src/render/burst.test.ts index b034ac19..a6f2ff96 100644 --- a/web/hands/src/render/burst.test.ts +++ b/web/hands/src/render/burst.test.ts @@ -6,7 +6,7 @@ import { Effects3D } from "./effects"; import { BIG_SHOT, HARD_SHOT, closeCut } from "./gore"; import { SkinnedBoxer, loadBoxerGlb } from "./graph"; import { BURST_CUT_HEIGHT, HEAD_SITES, InjuryShading, NECK_CUT_HEIGHT, BODY_SITES, BODY_SWELL_CORE, applyBodyTrauma } from "./injury"; -import { aboveBurstCut, arcadeInjuryFor, measureBurstStump, replayReattaches, caveInRibs } from "./renderer"; +import { aboveBurstCut, arcadeInjuryFor, measureBurstStump, caveInRibs } from "./renderer"; import { CANVAS_TOP } from "./world"; const gltf = await loadBoxerGlb(); @@ -19,21 +19,23 @@ describe("the finisher a knockout punch earns", () => { // [punch and target, kind, damage, the puncher's hand] and the finisher, by punch, place and weight alone. const table: readonly (readonly [string, string, number, "left" | "right", string])[] = [ ["jab:head", "hit", 34, "left", "jaw_dislocation"], - ["jab:head", "hit", HARD_SHOT + 30, "left", "jaw_dislocation"], - ["straight:head", "hit", 79, "right", "jaw_dislocation"], - ["straight:head", "hit", 80, "right", "decapitation"], - ["uppercut:head", "hit", HARD_SHOT - 1, "right", "jaw_dislocation"], - ["uppercut:head", "hit", HARD_SHOT, "right", "decapitation"], - ["hook:head", "hit", HARD_SHOT - 1, "left", "jaw_dislocation"], - ["hook:head", "hit", HARD_SHOT, "left", "eye_right"], + ["jab:head", "hit", 40, "left", "eye_right"], + ["jab:head", "hit", HARD_SHOT + 30, "right", "eye_left"], + ["straight:head", "hit", 49, "right", "jaw_dislocation"], + ["straight:head", "hit", 50, "right", "decapitation"], + ["uppercut:head", "hit", 39, "right", "jaw_dislocation"], + ["uppercut:head", "hit", 40, "right", "decapitation"], + ["hook:head", "hit", 39, "left", "jaw_dislocation"], + ["hook:head", "hit", 40, "left", "eye_right"], ["hook:head", "hit", HARD_SHOT + 40, "right", "eye_left"], ["straight:head", "hit", 140, "right", "decapitation"], - ["straight:head", "counter_hit", BIG_SHOT, "right", "head_burst"], + ["hook:head", "counter_hit", HARD_SHOT - 1, "left", "eye_right"], + ["straight:head", "counter_hit", HARD_SHOT, "right", "head_burst"], ["jab:body", "hit", 50, "left", "ribs_right"], ["straight:body", "hit", 140, "right", "ribs_left"], ["uppercut:body", "counter_hit", 120, "left", "ribs_right"], - ["hook:body", "hit", HARD_SHOT - 1, "left", "ribs_right"], - ["hook:body", "hit", HARD_SHOT, "left", "shoulder_right"], + ["hook:body", "hit", 49, "left", "shoulder_right"], + ["hook:body", "hit", 50, "left", "dismember_right"], ["hook:body", "hit", BIG_SHOT, "right", "dismember_left"], ]; @@ -45,9 +47,12 @@ describe("the finisher a knockout punch earns", () => { } }); - it("never takes a man's head off with a jab, nor a hand with a punch up the middle of his body", () => { - for (let amount = 1; amount <= 160; amount += 1) { - expect(arcadeInjuryFor(hit("hit", amount, "jab:head", amount), downed, ending("ko"), puncher("left"))).toBe("jaw_dislocation"); + it("takes the head off with any straight or uppercut that ends it, the eye with a jab, and never a hand with a punch up the middle of his body", () => { + // A tired fighter's punches land at two fifths of their weight: a straight of 52 for 20. + for (let amount = 20; amount <= 160; amount += 1) { + expect(arcadeInjuryFor(hit("hit", amount, "jab:head", amount), downed, ending("ko"), puncher("left"))).toBe(amount >= 40 ? "eye_right" : "jaw_dislocation"); + expect(arcadeInjuryFor(hit("hit", amount, "uppercut:head", amount), downed, ending("ko"), puncher("left"))).toBe(amount >= 40 ? "decapitation" : "jaw_dislocation"); + expect(arcadeInjuryFor(hit("hit", amount, "straight:head", amount), downed, ending("ko"), puncher("left"))).toBe(amount >= 50 ? "decapitation" : "jaw_dislocation"); for (const detail of ["jab:body", "straight:body", "uppercut:body"]) expect(arcadeInjuryFor(hit("counter_hit", amount, detail, amount), downed, ending("tko"), puncher("right"))).toBe("ribs_left"); } }); @@ -83,18 +88,16 @@ describe("ribs caved in by a body shot", () => { caveInRibs(shading, side); expect(shading.impactDepth).toBeGreaterThan(5); } - expect(replayReattaches("ribs_left")).toBe(true); }); }); describe("a head that bursts", () => { - it("is what a flash knockout or a big counter to the head earns; other finishers stay as they were", () => { - expect(arcadeInjuryFor(hit("counter_hit", BIG_SHOT), downed, ending("ko"))).toBe("head_burst"); + it("is what a flash knockout or a hard counter to the head earns; other finishers stay as they were", () => { + expect(arcadeInjuryFor(hit("counter_hit", HARD_SHOT), downed, ending("ko"))).toBe("head_burst"); expect(arcadeInjuryFor(hit("hit", 60, "hook:head"), fighter("two"), ending("flash_ko"))).toBe("head_burst"); - expect(arcadeInjuryFor(hit("counter_hit", BIG_SHOT - 1, "uppercut:head", 2), downed, ending("ko"))).toBe("decapitation"); + expect(arcadeInjuryFor(hit("counter_hit", HARD_SHOT - 1, "uppercut:head", 2), downed, ending("ko"))).toBe("decapitation"); expect(arcadeInjuryFor(hit("hit", 140, "uppercut:head", 3), downed, ending("tko"))).toBe("decapitation"); expect(arcadeInjuryFor(hit("counter_hit", 140, "hook:body", 2), downed, ending("ko"))).not.toBe("head_burst"); - expect(replayReattaches("head_burst")).toBe(true); }); it("takes everything above the mouth and leaves the chin, the jaw and the collar", () => { @@ -166,12 +169,15 @@ describe("a head that bursts", () => { const full = burst("full"); expect(full.headBurst(1)).toBe(true); expect(full.headBurst(0)).toBe(false); - expect(full.debrisCount("shard")).toBe(18); - expect(full.debrisCount("brain")).toBe(14); - expect(full.debrisCount("tooth")).toBe(5); - expect(full.liveBloodParticles).toBeGreaterThan(150); + expect(full.debrisCount("shard")).toBe(36); + expect(full.debrisCount("brain")).toBe(40); + expect(full.debrisCount("tooth")).toBe(16); + expect(full.debrisCount("eye")).toBe(2); + expect(full.liveBloodParticles).toBeGreaterThan(1100); + // At once it shakes the camera as hard as the hardest punch can. + expect(full.shakeAmount).toBeGreaterThanOrEqual(0.14); full.burstHead(1, new THREE.Vector3(0.4, 1.6, 0), -1, 21); - expect(full.debrisCount("shard")).toBe(18); + expect(full.debrisCount("shard")).toBe(36); full.restoreFighter(1); expect(full.headBurst(1)).toBe(false); full.dispose(); @@ -181,23 +187,26 @@ describe("a head that bursts", () => { reduced.dispose(); }); - it("leaves skull, brain, teeth and flesh lying where they land for the rest of the bout", () => { + it("leaves skull, brain, teeth, eyeballs and flesh lying where they land for the rest of the bout", () => { const scene = new THREE.Scene(); const effects = new Effects3D(scene, 256); effects.burstHead(0, new THREE.Vector3(0, 1.6, 0), 1, 5); effects.decapitate(1, new THREE.Vector3(1, 1.6, 0), new THREE.Quaternion(), -1, 6); // Half a minute on, through the replay and the result card, all of it is still there. for (let frame = 0; frame < 60 * 30; frame += 1) effects.update(1 / 60); - expect(effects.debrisCount("shard")).toBe(18); - expect(effects.debrisCount("brain")).toBe(14); - expect(effects.debrisCount("tooth")).toBe(5); - expect(effects.debrisCount("flesh")).toBe(24); + expect(effects.debrisCount("shard")).toBe(36); + expect(effects.debrisCount("brain")).toBe(40); + expect(effects.debrisCount("tooth")).toBe(16); + expect(effects.debrisCount("eye")).toBe(2); + expect(effects.debrisCount("flesh")).toBe(60); const matrix = new THREE.Matrix4(); const at = new THREE.Vector3(); + const eyeballs = (effects as unknown as { eyeballMesh: THREE.InstancedMesh }).eyeballMesh; for (const mesh of scene.children.filter((child): child is THREE.InstancedMesh => child instanceof THREE.InstancedMesh && child !== effects.dropletMesh)) { for (let index = 0; index < mesh.count; index += 1) { mesh.getMatrixAt(index, matrix); - if (at.setFromMatrixPosition(matrix).y > -10) expect(at.y).toBeCloseTo(CANVAS_TOP + 0.015, 6); + // An eyeball rests on its own radius, drawn bigger than the eye it was. + if (at.setFromMatrixPosition(matrix).y > -10) expect(at.y).toBeCloseTo(CANVAS_TOP + (mesh === eyeballs ? 0.012 * 1.8 : 0.015), 6); } // Lying still, it is not sent to the graphics card again. const version = mesh.instanceMatrix.version; @@ -208,7 +217,8 @@ describe("a head that bursts", () => { effects.restoreFighter(0); expect(effects.debrisCount("shard")).toBe(0); expect(effects.debrisCount("brain")).toBe(0); - expect(effects.debrisCount("flesh")).toBe(24); + expect(effects.debrisCount("eye")).toBe(0); + expect(effects.debrisCount("flesh")).toBe(60); effects.clearDynamic(); expect(effects.debrisCount("flesh")).toBe(0); effects.dispose(); @@ -248,6 +258,21 @@ describe("a head that bursts", () => { effects.dispose(); }); + it("stains the canvas where flesh lands, but not where an eyeball or a tooth bounces", () => { + const landed = (kind: string): number => { + const effects = new Effects3D(new THREE.Scene(), 256); + let seed = 1; + (effects as unknown as { spawnGib(x: number, y: number, z: number, vx: number, vy: number, vz: number, rand: () => number, kind: string): void }).spawnGib(0, 0.1, 0, 0, -1, 0, () => ((seed = (seed * 16_807) % 2_147_483_647) / 2_147_483_647), kind); + for (let frame = 0; frame < 120; frame += 1) effects.update(1 / 60); + const stains = effects.canvasStains; + effects.dispose(); + return stains; + }; + expect(landed("flesh")).toBe(1); + expect(landed("eye")).toBe(0); + expect(landed("tooth")).toBe(0); + }); + it("draws teeth white and brain grey, not in the colour of flesh", () => { const effects = new Effects3D(new THREE.Scene(), 256); effects.spawnTeeth(new THREE.Vector3(0, 1.5, 0), 1, 1, 3); @@ -261,6 +286,47 @@ describe("a head that bursts", () => { }); }); +describe("a fighter torn open by a finisher", () => { + it("bursts blood, flesh and teeth out of the wound and along the punch, splashes the canvas, and leaves it pouring", () => { + const effects = new Effects3D(new THREE.Scene(), 256); + const wound = new THREE.Vector3(0.4, 1.45, 0.1); + effects.tearOpen(1, wound, new THREE.Vector3(0, -0.3, 1), { x: 1, z: 0 }, 40, 8); + expect(effects.liveBloodParticles).toBeGreaterThan(250); + expect(effects.debrisCount("flesh")).toBeGreaterThanOrEqual(12); + expect(effects.debrisCount("tooth")).toBe(8); + expect(effects.liveMist).toBeGreaterThan(10); + expect(effects.canvasStains).toBeGreaterThan(15); + expect(effects.gushing(1)).toBe(true); + // The blood leaves out of the wound and along the punch, toward +z and +x. + for (let frame = 0; frame < 15; frame += 1) effects.update(1 / 60); + const positions = effects.dropletBuffers.position; + let x = 0; + let z = 0; + let count = 0; + for (let index = 0; index < positions.count; index += 1) { + if (positions.getY(index) < -10) continue; + x += positions.getX(index) - wound.x; + z += positions.getZ(index) - wound.z; + count += 1; + } + expect(z / count).toBeGreaterThan(0.15); + expect(x / count).toBeGreaterThan(0.1); + // A replay that puts him back together takes up what it threw and stops the pouring. + effects.restoreFighter(1); + expect(effects.debrisCount("flesh")).toBe(0); + expect(effects.debrisCount("tooth")).toBe(0); + expect(effects.gushing(1)).toBe(false); + effects.dispose(); + const reduced = new Effects3D(new THREE.Scene(), 256); + reduced.setBloodLevel("reduced"); + reduced.tearOpen(0, wound, new THREE.Vector3(0, 0, 1), 1, 41, 8); + expect(reduced.liveBloodParticles).toBe(0); + expect(reduced.liveGibs).toBe(0); + expect(reduced.gushing(0)).toBe(false); + reduced.dispose(); + }); +}); + describe("flesh over a cut that has a front", () => { it("turns its texture with the body when told which way is across", () => { const rim = new Float32Array([0.05, 0, 0, 0, 0, 0.05, 0, 0, 0.05, -0.05, 0, 0, -0.05, 0, 0, 0, 0, -0.05, 0, 0, -0.05, 0.05, 0, 0]); diff --git a/web/hands/src/render/canvas-blood.test.ts b/web/hands/src/render/canvas-blood.test.ts index 0efdfdbd..c0477590 100644 --- a/web/hands/src/render/canvas-blood.test.ts +++ b/web/hands/src/render/canvas-blood.test.ts @@ -6,7 +6,7 @@ import { CANVAS_BLOOD_UPLOAD_INTERVAL, CanvasBlood, splatRecipe } from "./canvas import { Effects3D } from "./effects"; import { teethFor } from "./gore"; import { mouthpieceFlies } from "./mouthpiece"; -import { poolRadius } from "./renderer"; +import { POOL_RATE, poolRadius } from "./renderer"; import { CANVAS_TOP, RING_FIGHT_HALF, worldMapping } from "./world"; interface Shape { x: number; y: number; rx: number; ry: number; turn: number } @@ -152,9 +152,9 @@ function playBout(): { stains: PaintedStain[]; roundEnds: number[]; pools: THREE spills[index] = 0; effects.drip(head.set(self.x, 1.56, self.z), self.severity, false, index); } else if (self.severity > 0.2 && self.down) { - // Two spills a second from under his head, which lies away from the man who put him down. + // Spills from under his head, which lies away from the man who put him down. effects.stopDrip(index); - pooled[index]! += 2 / 60; + pooled[index]! += POOL_RATE / 60; const other = fighter(tick, 1 - index); const apart = Math.hypot(self.x - other.x, self.z - other.z) || 1; while (pooled[index]! >= 1) { @@ -287,6 +287,25 @@ describe("blood on the canvas", () => { blood.dispose(); }); + it("paints each stain in one draw, from stamps tinted once for each colour", () => { + // The test canvas hands every canvas the same recording context. + const shared = document.createElement("canvas").getContext("2d") as unknown as { drawImage: ReturnType; fillRect: ReturnType }; + const blood = new CanvasBlood(new THREE.Scene(), 256); + const draws = (): number => shared.drawImage.mock.calls.length; + const fills = (): number => shared.fillRect.mock.calls.length; + blood.stain(0, 0, 0.2, 0.2, 0, 0.8, 0x6e0d13); + const [drawn, filled] = [draws(), fills()]; + blood.stain(0.2, 0, 0.2, 0.2, 0, 0.8, 0x6e0d13, 1); + blood.stain(0.4, 0, 0.2, 0.2, 0, 0.8, 0x6e0d13, 2); + expect(draws() - drawn).toBe(2); + expect(fills() - filled).toBe(0); + // A new colour tints its four stamps once. + blood.stain(0, 0.2, 0.2, 0.2, 0, 0.8, 0x4c070b); + expect(draws() - drawn).toBe(2 + 4 + 1); + expect(fills() - filled).toBe(4); + blood.dispose(); + }); + it("keeps every stain for the bout, where the old decals recycled after 48", () => { const blood = new CanvasBlood(new THREE.Scene()); for (let index = 0; index < 500; index += 1) blood.stain((index % 50) * 0.1 - 2.5, 0.3, 0.1, 0.08, index, 0.6, 0x6e0d13); @@ -419,6 +438,21 @@ describe("blood on the canvas", () => { expect(scene.children).toHaveLength(0); }); + it("soaks a splash in darker at full blood than reduced blood paints it", () => { + const opacity = (level: "full" | "reduced"): number => { + const stain = vi.spyOn(CanvasBlood.prototype, "stain"); + const effects = new Effects3D(new THREE.Scene(), 256); + effects.setBloodLevel(level); + effects.splatter(0, 0, 1, () => 0.5, 4, 0.5); + const painted = stain.mock.calls[0]![5]; + stain.mockRestore(); + effects.dispose(); + return painted; + }; + expect(opacity("full")).toBeCloseTo(0.8, 6); + expect(opacity("reduced")).toBeCloseTo(0.3, 6); + }); + it("pools under a fighter on the canvas, smaller with reduced blood and never with blood off", () => { const pooled = (level: "full" | "reduced" | "off"): number => { const effects = new Effects3D(new THREE.Scene(), 256); @@ -431,9 +465,22 @@ describe("blood on the canvas", () => { expect(pooled("full")).toBe(1); expect(pooled("reduced")).toBe(1); expect(pooled("off")).toBe(0); + // Reduced blood pools a fifth as wide. + const radius = (level: "full" | "reduced"): number => { + const spill = vi.spyOn(CanvasBlood.prototype, "pool"); + const effects = new Effects3D(new THREE.Scene(), 256); + effects.setBloodLevel(level); + effects.pool(0.5, 0.5, 0.3, 1); + const spread = spill.mock.calls[0]![2]; + spill.mockRestore(); + effects.dispose(); + return spread; + }; + expect(radius("full")).toBeCloseTo(0.3, 9); + expect(radius("reduced")).toBeCloseTo(0.06, 9); }); - it("gets bloodier round by round through a real bout, where it once painted the ring solid in the first", () => { + it("is soaked through a real bout, bloodier round by round, where it once painted the ring solid in the first", () => { const { made: blood, painted } = paintedCanvases(() => new CanvasBlood(new THREE.Scene(), 256)); const stamps = (blood as unknown as { stamps: HTMLCanvasElement[] }).stamps.map((stamp) => painted.get(stamp)!.alpha); blood.dispose(); @@ -458,22 +505,27 @@ describe("blood on the canvas", () => { expect(darkest).toBeGreaterThan(0.9); } const [one, two, three] = after as [{ stained: number; soaked: number }, { stained: number; soaked: number }, { stained: number; soaked: number }]; - // A cut opens 21 s into round 1: by the bell a couple of square metres of the 37 show blood, and - // little but the knockdown's pool is soaked through, where the old pacing painted 4,176 stains. - expect(roundEnds[0]).toBeLessThan(1500); - expect(one.stained).toBeLessThan(4); - expect(one.soaked).toBeLessThan(0.5); + // Grotesque on purpose: every solid punch splashes a clean face's blood and the cut that opens 21 s into + // round 1 throws far more, so by the bell about 15 m² of the 37 show blood and 9 m² are soaked through, + // and the bout ends with three quarters of the canvas bloody and more than half soaked. The ceilings + // catch a runaway that would paint the ring solid in a round; the floors keep it from going tame. + expect(roundEnds[0]).toBeLessThan(10_000); + expect(one.stained).toBeGreaterThan(10); + expect(one.stained).toBeLessThan(20); + expect(one.soaked).toBeGreaterThan(5); + expect(one.soaked).toBeLessThan(13); // Every round leaves more, the worst of the cut in round 2 most of all. - expect(two.stained).toBeGreaterThan(one.stained * 2); - expect(three.stained).toBeGreaterThan(one.stained * 3); - expect(three.soaked).toBeGreaterThan(one.soaked * 3); + expect(two.stained).toBeGreaterThan(one.stained * 1.5); + expect(three.stained).toBeGreaterThan(two.stained); + expect(three.soaked).toBeGreaterThan(one.soaked * 2); + expect(three.stained).toBeLessThan(33); }, 60_000); - it("spreads fast at first and then slower, wider the worse the fighter bleeds, to under half a metre", () => { - expect(poolRadius(0, 1)).toBeCloseTo(0.05, 5); + it("spreads fast at first and then slower, wider the worse the fighter bleeds, to 1.1 m", () => { + expect(poolRadius(0, 1)).toBeCloseTo(0.06, 5); expect(poolRadius(4, 1) - poolRadius(0, 1)).toBeGreaterThan(poolRadius(16, 1) - poolRadius(12, 1)); expect(poolRadius(16, 1.4)).toBeGreaterThan(poolRadius(16, 0.5)); - expect(poolRadius(20, 1)).toBeGreaterThan(0.2); - expect(poolRadius(10_000, 10)).toBe(0.42); + expect(poolRadius(20, 1)).toBeGreaterThan(0.4); + expect(poolRadius(10_000, 10)).toBe(1.1); }); }); diff --git a/web/hands/src/render/canvas-blood.ts b/web/hands/src/render/canvas-blood.ts index d75eceea..e1ef4df8 100644 --- a/web/hands/src/render/canvas-blood.ts +++ b/web/hands/src/render/canvas-blood.ts @@ -115,8 +115,12 @@ export class CanvasBlood { private readonly material: THREE.MeshStandardMaterial; private readonly geometry: THREE.PlaneGeometry; private readonly stamps: HTMLCanvasElement[] = []; - private readonly scratch: HTMLCanvasElement; - private readonly scratchContext: CanvasRenderingContext2D | null; + /** + * The stamps already tinted in each colour blood is painted in, made the first time a colour is used, so a + * stain is one draw: tinting a scratch copy for every stain flushed it to the graphics card each time, which + * at thousands of stains a second cost more than the rest of the gore. + */ + private readonly tinted = new Map(); private readonly pixelsPerMetre: number; private dirty = false; private sinceUpload = 0; @@ -129,10 +133,6 @@ export class CanvasBlood { this.canvas.height = size; this.context = this.canvas.getContext("2d"); this.context?.clearRect(0, 0, size, size); - this.scratch = document.createElement("canvas"); - this.scratch.width = STAMP_SIZE; - this.scratch.height = STAMP_SIZE; - this.scratchContext = this.scratch.getContext("2d"); for (let index = 0; index < STAMP_COUNT; index += 1) this.stamps.push(splatStamp(0x3a1f_00d1 + index * 977)); this.pixelsPerMetre = size / (RING_FIGHT_HALF * 2); this.texture = new THREE.CanvasTexture(this.canvas); @@ -190,17 +190,11 @@ export class CanvasBlood { stain(x: number, z: number, width: number, depth: number, rotation: number, opacity: number, color: number, stamp = this.painted): void { if (!Number.isFinite(x) || !Number.isFinite(z) || Math.abs(x) > RING_FIGHT_HALF || Math.abs(z) > RING_FIGHT_HALF) return; const ctx = this.context; - const tint = this.scratchContext; this.painted += 1; this.dirty = true; this.mesh.visible = true; - if (ctx === null || tint === null) return; - tint.globalCompositeOperation = "copy"; - tint.drawImage(this.stamps[Math.abs(Math.trunc(stamp)) % STAMP_COUNT]!, 0, 0); - tint.globalCompositeOperation = "source-in"; - tint.fillStyle = css(color); - tint.fillRect(0, 0, STAMP_SIZE, STAMP_SIZE); - tint.globalCompositeOperation = "source-over"; + if (ctx === null) return; + const image = this.tintedStamp(color, stamp); const at = this.pixel(x, z); const w = Math.max(1, width * this.pixelsPerMetre); const h = Math.max(1, depth * this.pixelsPerMetre); @@ -209,10 +203,31 @@ export class CanvasBlood { ctx.globalAlpha = THREE.MathUtils.clamp(opacity, 0, 1); ctx.translate(at.x, at.y); ctx.rotate(Number.isFinite(rotation) ? rotation : 0); - ctx.drawImage(this.scratch, -w / 2, -h / 2, w, h); + ctx.drawImage(image, -w / 2, -h / 2, w, h); ctx.restore(); } + private tintedStamp(color: number, stamp: number): HTMLCanvasElement { + let stamps = this.tinted.get(color); + if (stamps === undefined) { + stamps = this.stamps.map((source) => { + const canvas = document.createElement("canvas"); + canvas.width = STAMP_SIZE; + canvas.height = STAMP_SIZE; + const tint = canvas.getContext("2d"); + if (tint !== null) { + tint.drawImage(source, 0, 0); + tint.globalCompositeOperation = "source-in"; + tint.fillStyle = css(color); + tint.fillRect(0, 0, STAMP_SIZE, STAMP_SIZE); + } + return canvas; + }); + this.tinted.set(color, stamps); + } + return stamps[Math.abs(Math.trunc(stamp)) % STAMP_COUNT]!; + } + /** A pool spreading from under a fighter: a ragged edge round a dark, thick middle, `radius` metres across. */ pool(x: number, z: number, radius: number, opacity: number, stamp: number): void { this.stain(x, z, radius * 2.3, radius * 2.0, stamp * 1.7, opacity * 0.8, 0x4a070b, stamp); diff --git a/web/hands/src/render/commentary.test.ts b/web/hands/src/render/commentary.test.ts index 7bac0180..b73998fe 100644 --- a/web/hands/src/render/commentary.test.ts +++ b/web/hands/src/render/commentary.test.ts @@ -1,12 +1,13 @@ import manifest from "../../../../src/intelstream/hands/combat-manifest.json"; import { ROCKED_BASE_TICKS, ROCKED_MAX_TICKS } from "../manifest"; import { FIGHTER_STYLES } from "../protocol"; -import { fighter } from "../test/fixtures"; +import { fighter, referee } from "../test/fixtures"; import { PROTOCOL_VERSION, type CombatEvent, type EngineSnapshot, type FighterSnapshot, type FinalMessage, type MatchPhase, type PublicPlayer } from "../types"; import { CommentaryDirector, crowdTension, fillLine, holdFor, introductionScript, punchName, recordSpoken, spokenNumber, spokenSeconds, type CommentaryHooks } from "./commentary"; /** The opening countdown the room gives the introductions, in ticks. */ -const OPENING_TICKS = manifest.countdown.opening_ticks; +// A countdown with time to introduce both corners. The engine's own opening is too short for any of it, and the cards carry the introductions. +const OPENING_TICKS = 240; const players: Record = { one: { id: "one", name: "Azure Vector", avatar: null, rating: 1512, connected: true }, @@ -23,6 +24,7 @@ const state = (tick: number, phase: MatchPhase = "fight", edits: [Partial { // The computer is introduced from its own corner, from the first snapshot of the countdown a player sees. const contender = { name: "Marcus 'Hammer' Reed", record: { wins: 19, losses: 5, draws: 1, knockouts: 12 }, style: "swarmer" } as const; expect(introductionScript([{ name: "Azure Vector", record: records[1], style: "boxer" }, contender], (OPENING_TICKS - 1) / 30)).toEqual(["In the blue corner, Azure Vector!", "And in the red corner, Marcus 'Hammer' Reed!"]); - // A late arrival with too little countdown left hears nothing rather than half a name. + // A late arrival with too little countdown left hears nothing rather than half a name, and so does everyone in the + // engine's quick opening countdown. expect(introductionScript([{ name: "Azure Vector", record: undefined, style: undefined }, { name: "Crimson Geometry", record: undefined, style: undefined }], 3)).toEqual([]); + expect(introductionScript([{ name: "Azure Vector", record: undefined, style: undefined }, { name: "Crimson Geometry", record: undefined, style: undefined }], manifest.countdown.opening_ticks / 30)).toEqual([]); }); it("estimates the announcer's voice on the slow side", () => { @@ -286,6 +290,41 @@ describe("the ring announcer", () => { expect(director.current(1.9)?.line.card).toMatchObject({ kicker: "AFTER THREE ROUNDS", title: "MAJORITY DRAW", corner: null }); }); + it("announces a stoppage after the referee died without him stopping it", () => { + const speak = vi.fn(); + const director = new CommentaryDirector({ speak }); + const dead = { referee: { ...referee(), alive: false } }; + feed(director, state(1, "countdown", [{}, {}], { phase_ticks_remaining: 90, ...dead }), [], 0); + feed(director, state(91, "fight", [{}, {}], { phase_ticks_remaining: 3599, ...dead }), [], 3); + feed(director, state(1350, "fight", [{}, {}], { phase_ticks_remaining: 2340, ...dead }), [], 45); + feed(director, state(1351, "knockdown", [{}, { is_downed: true }], { phase_ticks_remaining: 300, ...dead }), [event("knockdown", 1351, { actor_id: "one", target_id: "two", amount: 1 })], 46); + feed(director, state(1651, "complete", [{}, { is_downed: true }], { phase_ticks_remaining: 0, ...dead }), [event("result", 1651, { actor_id: "one", detail: "ko" })], 56); + director.finish({ version: PROTOCOL_VERSION, type: "final", match_id: "m", winner_id: "one", method: "ko", round: 1, scorecards: [], ratings: {} }, players, false, 56.2); + director.resultShown(70); + expect(speak.mock.calls.at(-1)![0]).toEqual(["With the referee dead on the canvas, it is over at 0:42 of round one. Your winner, by knockout... Azure Vector!"]); + }); + + it("never has a dead referee step in, warn, take a point, wave them on or wave it off", () => { + const dead = { referee: { ...referee(), alive: false } }; + const calls: [string, Partial, [Partial, Partial]][] = [ + ["foul", { actor_id: "one", target_id: "two", detail: "low_blow" }, [{ warnings: 1 }, {}]], + ["foul", { actor_id: "one", target_id: "two", detail: "headbutt" }, [{ warnings: 1 }, {}]], + ["deduction", { actor_id: "one", target_id: "two" }, [{ deductions: 1 }, {}]], + ["box", { target_id: "two" }, [{}, {}]], + ["result", { actor_id: "one", detail: "tko" }, [{}, {}]], + ]; + const heard: string[] = []; + for (const [kind, fields, edits] of calls) { + for (let seed = 0; seed < 8; seed += 1) { + const director = new CommentaryDirector(); + feed(director, state(200, "fight", edits, dead), [event(kind, 200, { ...fields, event_id: 1000 + seed })], 10); + heard.push(...watch(director, 10, 18)); + } + } + expect(heard.length).toBeGreaterThan(20); + expect(heard.filter((text) => /referee/iu.test(text))).toEqual([]); + }); + it("announces a stoppage with the time it came in the round", () => { const speak = vi.fn(); const director = new CommentaryDirector({ speak }); @@ -452,34 +491,25 @@ describe("reading the fight", () => { expect(cue).toHaveBeenCalledWith("chant"); }); - it("notices a cut opening and getting worse on the doctor's scale", async () => { - const { DOCTOR_CUT } = await import("../manifest"); + it("notices a cut opening, getting worse and gushing", () => { const director = new CommentaryDirector(); const cut = (left_cut: number): Partial => ({ trauma: { ...fighter("two").trauma, left_cut } }); const worse = (text: string): boolean => /worse|pouring|badly/u.test(text); feed(director, state(100, "fight", [{}, cut(30)]), [], 0); feed(director, state(130, "fight", [{}, cut(70)]), [], 1); expect(watch(director, 1, 5).some((text) => /Crimson Geometry/u.test(text) && /left eye/u.test(text))).toBe(true); - // Worse at 60% of the cut the doctor stops a bout on: the old 420 mark, 60% of a 700 doctor, never moved with him. - feed(director, state(900, "fight", [{}, cut(Math.round(DOCTOR_CUT * 0.6) - 1)]), [], 20); + feed(director, state(900, "fight", [{}, cut(479)]), [], 20); expect(watch(director, 20, 25).some(worse)).toBe(false); - feed(director, state(930, "fight", [{}, cut(Math.round(DOCTOR_CUT * 0.6))]), [], 30); + feed(director, state(930, "fight", [{}, cut(480)]), [], 30); expect(watch(director, 30, 35).some(worse)).toBe(true); - feed(director, state(960, "fight", [{}, cut(Math.round(DOCTOR_CUT * 0.8))]), [], 40); - expect(watch(director, 40, 45).some((text) => /doctor/u.test(text))).toBe(true); + feed(director, state(960, "fight", [{}, cut(640)]), [], 40); + expect(watch(director, 40, 45).some((text) => /gushing|crimson mask/u.test(text))).toBe(true); }); - it("has the doctor look at a cut or a swelling near his stoppage at the bell", async () => { - const { DOCTOR_CUT, DOCTOR_SWELLING } = await import("../manifest"); - const doctorLooks = (trauma: Partial): boolean => { - const director = new CommentaryDirector(); - feed(director, state(3600, "rest", [{}, { trauma: { ...fighter("two").trauma, ...trauma } }]), [event("bell", 3600, { detail: "round_end" })], 0); - return watch(director, 0, 20).some((text) => /doctor/u.test(text) && /Crimson Geometry/u.test(text)); - }; - expect(doctorLooks({ left_cut: Math.round(DOCTOR_CUT * 0.7) })).toBe(true); - expect(doctorLooks({ left_cut: Math.round(DOCTOR_CUT * 0.7) - 1 })).toBe(false); - expect(doctorLooks({ swelling: Math.round(DOCTOR_SWELLING * 0.75) })).toBe(true); - expect(doctorLooks({ swelling: Math.round(DOCTOR_SWELLING * 0.75) - 1 })).toBe(false); + it("never brings a doctor to a cut or a swelling at the bell", () => { + const director = new CommentaryDirector(); + feed(director, state(3600, "rest", [{}, { trauma: { ...fighter("two").trauma, left_cut: 1000, swelling: 1000 } }]), [event("bell", 3600, { detail: "round_end" })], 0); + expect(watch(director, 0, 20).some((text) => /doctor/u.test(text))).toBe(false); }); it("does not call a big shot that the guard took", () => { diff --git a/web/hands/src/render/commentary.ts b/web/hands/src/render/commentary.ts index 0c08dad0..231fde54 100644 --- a/web/hands/src/render/commentary.ts +++ b/web/hands/src/render/commentary.ts @@ -1,4 +1,4 @@ -import { DOCTOR_CUT, DOCTOR_SWELLING, ROCKED_MAX_TICKS } from "../manifest"; +import { ROCKED_MAX_TICKS } from "../manifest"; import { isDebut, recordCard } from "../record"; import { styleTag, styleTitle } from "../styles"; import type { CombatEvent, EngineSnapshot, FighterRecord, FighterSnapshot, FighterStyle, FinalMessage, MatchPhase, PublicPlayer } from "../types"; @@ -60,10 +60,8 @@ const COMBO_GAP_TICKS = 42; const JAB_WINDOW_SECONDS = 8; const TAKEOVER_WINDOW_SECONDS = 15; const EVASION_WINDOW_SECONDS = 10; -/** A cut is called as it opens, worse at 60% of the cut the doctor stops a bout on, and near his limit at 80%. */ -const CUT_MARKS = [60, Math.round(DOCTOR_CUT * 0.6), Math.round(DOCTOR_CUT * 0.8)] as const; -/** At the bell the doctor looks at a cut or a swelling this near his stoppage. */ -const DOCTOR_LOOK = { cut: Math.round(DOCTOR_CUT * 0.7), swelling: Math.round(DOCTOR_SWELLING * 0.75) } as const; +/** A cut is called as it opens, again as it gets worse, and once more when it is gushing. */ +const CUT_MARKS = [60, 480, 640] as const; /** Below the engine's shut eye (manifest blind_side.eye_threshold, 700), so the swelling is noticed first. */ const EYE_SWELLING = 500; const TIRED_RATIO = 0.2; @@ -85,7 +83,7 @@ const LINES = { bigShot: ["Big {punch} from {a}!", "{a} lands a thudding {punch}!", "That {punch} landed flush!", "Huge {punch}! {b} felt that one."], cut: ["{b} is cut over the {side} eye.", "There's blood now. A cut over {b}'s {side} eye.", "That's opened a cut over the {side} eye of {b}."], cutWorse: ["That cut over {b}'s {side} eye is getting worse.", "The blood is pouring from that {side} eye now.", "{b} is bleeding badly from the {side} eye."], - cutDoctor: ["The doctor will be watching that cut very closely.", "If that cut gets any worse, the doctor could stop this."], + cutGushing: ["That cut is gushing now! {b} is covered in it.", "{b}'s face is a crimson mask, and nobody is stopping this!"], eyeSwelling: ["{b}'s {side} eye is swelling badly.", "{b} is having trouble seeing out of that {side} eye."], eyeShut: ["{b}'s {side} eye has closed completely!", "That {side} eye is shut! {b} can't see them coming from that side.", "{b} is fighting with one eye now."], blindSide: ["{a} is working the blind side.", "{b} never saw that one. Nothing is getting through that {side} eye.", "Smart from {a}, punching where {b} can't see."], @@ -105,6 +103,10 @@ const LINES = { clinch: ["{a} ties {b} up.", "{a} grabs hold.", "They're tied up in the clinch."], holdingOn: ["{a} is hurt and holding on!", "{a} grabs on for dear life!", "Smart from {a}, holding on to clear the head."], refBreak: ["The referee breaks them.", "The referee steps in to separate them.", "Break! The referee pulls them apart."], + refHit: ["{a} just tagged the referee!", "Oh no, {a} has caught the referee!", "That one landed on the referee!"], + refDown: ["The referee is down! {a} has killed the referee!", "Oh my goodness, the referee isn't moving! I think he's dead!", "{a} has flattened the official for good! Absolute chaos!"], + refBledOut: ["The referee has collapsed! He's bled out right there in the ring!", "The referee goes down! He's lost too much blood!"], + noRef: ["Nobody left to break them up!", "No referee to part them, so they just let go."], taunt: ["{a} drops the hands and invites {b} in!", "Showboating from {a}! The crowd loves it.", "{a} is taunting {b} now!", "{a} sticks the chin out. Come and get it!"], lowBlow: ["Low blow from {a}! The referee steps in.", "That's below the belt! {b} is doubled over.", "{a} goes low, and the referee calls time."], headbutt: ["Headbutt from {a}! The referee calls time.", "{a} leads with the head! That's a foul."], @@ -126,11 +128,9 @@ const LINES = { roundBig: ["The knockdown makes that a big round for {a}.", "{a} wins that round big with the knockdown."], roundClose: ["Close round. That one could go either way.", "Tough round to score.", "Nothing between them in that round."], pullingAway: ["{a} is pulling away on the cards.", "{b} needs something big. {a} is building a lead."], - doctor: ["The ringside doctor is taking a close look at {b}.", "The doctor is in {b}'s corner checking that cut."], ko: ["It's all over! {a} wins by knockout!", "{b} can't beat the count! {a} wins it!", "That's it! {a} has knocked out {b}!"], flashKo: ["Lights out! {b} is out cold!", "One punch, and it's over! {a} wins!", "Good night! {a} ends it with one shot!"], tko: ["Three knockdowns, and it's over! {a} wins!", "The referee waves it off! {a} wins by stoppage!"], - doctorStop: ["The doctor has seen enough! It's stopped on the cut!", "The doctor stops it! {b} can't continue!"], disqualified: ["{b} is disqualified!", "That's it! {b} has been thrown out!"], forfeit: ["{b} has left the ring. {a} wins by forfeit."], replay: ["Here it is again.", "Let's see that one more time.", "Watch {a} set it up..."], @@ -138,7 +138,7 @@ const LINES = { type LineKey = keyof typeof LINES; -const RESULT_LINES: Readonly>> = { ko: "ko", flash_ko: "flashKo", tko: "tko", doctor_stoppage: "doctorStop", disqualification: "disqualified", forfeit: "forfeit" }; +const RESULT_LINES: Readonly>> = { ko: "ko", flash_ko: "flashKo", tko: "tko", disqualification: "disqualified", forfeit: "forfeit" }; /** Lines about a moment that ends with its phase: "can he beat the count?" means nothing once he is up. */ const PHASES: Readonly>>> = { struggle: new Set(["knockdown"]) }; @@ -148,23 +148,26 @@ const COUNTDOWN_ONLY: ReadonlySet = new Set(["countdown" /** The bell is called as it rings, or straight after the line on screen, or not at all: seconds late reads as a mistake. */ const BELL_FRESH_SECONDS = 3.2; -const URGENT: ReadonlySet = new Set(["knockdown", "knockdownAgain", "knockdownCounter", "knockdownBody", "bodyCollapse", "upLate", "upEarly", "hurt", "hurtBadly", "lowBlow", "headbutt", "deduction", "ko", "flashKo", "tko", "doctorStop", "disqualified", "forfeit", "replay", "savedByBell", "finalBell", "roundEnd", "roundStart"]); +const URGENT: ReadonlySet = new Set(["knockdown", "knockdownAgain", "knockdownCounter", "knockdownBody", "bodyCollapse", "upLate", "upEarly", "hurt", "hurtBadly", "lowBlow", "headbutt", "deduction", "ko", "flashKo", "tko", "disqualified", "forfeit", "replay", "refDown", "refBledOut", "savedByBell", "finalBell", "roundEnd", "roundStart"]); + +/** Calls that have the referee act, which a dead one cannot: each also has a phrasing without him. */ +const REFEREE_ACTS: ReadonlySet = new Set(["lowBlow", "headbutt", "warning", "deduction", "box", "tko"]); /** Knockdowns over hurt fighters over big counters over cuts over combinations over colour. */ const PRIORITY: Readonly> = { - ko: 98, flashKo: 98, tko: 98, doctorStop: 98, disqualified: 98, forfeit: 98, + ko: 98, flashKo: 98, tko: 98, disqualified: 98, forfeit: 98, refDown: 97, refBledOut: 97, refHit: 72, knockdown: 95, knockdownAgain: 95, knockdownCounter: 95, knockdownBody: 95, bodyCollapse: 86, upLate: 90, upEarly: 90, replay: 88, deduction: 84, lowBlow: 82, headbutt: 82, hurt: 80, box: 78, hurtBadly: 80, holdingOn: 76, savedByBell: 74, finalBell: 72, struggle: 70, - guardBreak: 65, eyeShut: 62, counter: 60, parried: 58, bigShot: 55, roundEnd: 52, cut: 50, cutWorse: 50, summary: 50, cutDoctor: 48, doctor: 48, eyeSwelling: 48, + guardBreak: 65, eyeShut: 62, counter: 60, parried: 58, bigShot: 55, roundEnd: 52, cut: 50, cutWorse: 50, summary: 50, cutGushing: 48, eyeSwelling: 48, cornerCut: 47, cornerSwelling: 47, cornerBreath: 47, blindSide: 42, roundFor: 46, roundBig: 46, roundClose: 46, pullingAway: 46, unanswered: 45, finishCall: 44, warning: 42, combo: 40, payoff: 40, takeover: 38, body: 35, jab: 30, tiring: 30, roundStart: 28, taunt: 25, parry: 22, evade: 20, clinch: 20, - whiff: 18, refBreak: 12, southpaw: 10, orthodox: 10, resume: 10, + whiff: 18, refBreak: 12, noRef: 12, southpaw: 10, orthodox: 10, resume: 10, }; const SPEAKER: Readonly>> = { finishCall: "colour", payoff: "colour", tiring: "colour", takeover: "colour", holdingOn: "colour", taunt: "colour", parry: "colour", evade: "colour", - warning: "colour", blindSide: "colour", cornerCut: "colour", cornerSwelling: "colour", cornerBreath: "colour", roundFor: "colour", roundBig: "colour", roundClose: "colour", pullingAway: "colour", doctor: "colour", cutDoctor: "colour", jab: "colour", + warning: "colour", blindSide: "colour", cornerCut: "colour", cornerSwelling: "colour", cornerBreath: "colour", roundFor: "colour", roundBig: "colour", roundClose: "colour", pullingAway: "colour", cutGushing: "colour", noRef: "colour", jab: "colour", }; /** Seconds before the same kind of line about the same fighter may come again. */ @@ -359,6 +362,7 @@ export class CommentaryDirector { private fightRemaining = 0; private struggleCalled = -1; private lastKnockdown: { actor: string | null; target: string | null; tick: number } | null = null; + private refereeDead = false; private final: FinalMessage | null = null; private verdictGiven = false; private resultCalled = false; @@ -370,6 +374,7 @@ export class CommentaryDirector { observe(snapshot: EngineSnapshot, events: readonly CombatEvent[], players: Readonly>, tickRate: number, now: number): void { this.players = players; this.fighters = snapshot.fighters; + this.refereeDead = snapshot.referee?.alive === false; this.tickRate = tickRate; this.trackClock(snapshot); if (!this.introduced) { @@ -436,19 +441,20 @@ export class CommentaryDirector { this.verdictGiven = true; if (final.winner_id === null) return; const name = this.nameOf(final.winner_id); - const how = ({ ko: "knockout", flash_ko: "knockout", tko: "technical knockout", doctor_stoppage: "doctor stoppage", disqualification: "disqualification", forfeit: "forfeit" } as Partial>)[final.method] ?? final.method.replaceAll("_", " "); + const how = ({ ko: "knockout", flash_ko: "knockout", tko: "technical knockout", disqualification: "disqualification", forfeit: "forfeit" } as Partial>)[final.method] ?? final.method.replaceAll("_", " "); const clock = this.stoppageClock(final.round); - const stopped = final.method === "ko" || final.method === "flash_ko" || final.method === "tko" || final.method === "doctor_stoppage"; + const stopped = final.method === "ko" || final.method === "flash_ko" || final.method === "tko"; const kicker = stopped && clock !== null ? `STOPPED AT ${clock} OF ROUND ${final.round}` : `ROUND ${final.round}`; const text = stopped && clock !== null ? `${name} wins by ${how} at ${clock} of round ${final.round}.` : `${name} wins by ${how} in round ${final.round}.`; this.enqueue(this.announcement(text, { kicker, title: name.toUpperCase(), detail: `WINS BY ${how.toUpperCase()}`, corner: this.seatOf(final.winner_id) }, ANNOUNCER_HOLD_SECONDS, 100), now, "verdict", 30); - const opening = stopped && clock !== null ? `The referee stops the contest at ${clock} of round ${numberWord(final.round)}. ` : ""; + const stoppedBy = this.refereeDead ? "With the referee dead on the canvas, it is over" : "The referee stops the contest"; + const opening = stopped && clock !== null ? `${stoppedBy} at ${clock} of round ${numberWord(final.round)}. ` : ""; this.hooks.speak?.([`${opening}Your winner, by ${how}... ${name}!`]); } - /** The knockout replay has started. */ - replay(now: number): void { - const knockdown = this.lastKnockdown; + /** A replay has started: of the referee's fall, whose punch it was; of a knockout, the knockdown's. */ + replay(now: number, impact: Pick | null = null): void { + const knockdown = impact?.kind === "referee_down" ? { actor: impact.actor_id, target: null, tick: impact.tick } : this.lastKnockdown; this.say("replay", knockdown?.tick ?? 0, now, { a: this.nameOf(knockdown?.actor ?? null), b: this.nameOf(knockdown?.target ?? null) }, "replay", 0.6, 6); } @@ -622,6 +628,16 @@ export class CommentaryDirector { case "referee_break": this.say("refBreak", event.event_id, now, names, null, REACTION_SECONDS, undefined, "referee"); return; + case "referee_hit": + this.say("refHit", event.event_id, now, names, moment, REACTION_SECONDS, undefined, actor); + return; + case "referee_down": + // No punch put him down when he bleeds to death. + this.say(event.action_id === null ? "refBledOut" : "refDown", event.event_id, now, names, moment); + return; + case "clinch_break": + this.say("noRef", event.event_id, now, names, null, REACTION_SECONDS); + return; case "taunt": this.say("taunt", event.event_id, now, { a: names.a, b: this.nameOf(this.otherId(actor)) }, moment, REACTION_SECONDS, undefined, actor); return; @@ -728,8 +744,6 @@ export class CommentaryDirector { const margin = winner === null || loser === null ? 0 : this.notesFor(winner.id).rounds - this.notesFor(loser.id).rounds; const opinion: LineKey = winner === null ? "roundClose" : one.tally.knockdowns !== two.tally.knockdowns ? "roundBig" : round >= 2 && margin >= 2 ? "pullingAway" : "roundFor"; this.sayAt(opinion, event.event_id, now + 6.4, { a: this.nameOf(winner?.id ?? null), b: this.nameOf(loser?.id ?? null) }, 5); - const cut = snapshot.fighters.find((fighter) => Math.max(fighter.trauma.left_cut, fighter.trauma.right_cut) >= DOCTOR_LOOK.cut || fighter.trauma.swelling >= DOCTOR_LOOK.swelling); - if (cut !== undefined) this.sayAt("doctor", event.event_id, now + 10, { b: this.nameOf(cut.player_id) }, 4); } private resulted(event: CombatEvent, now: number): void { @@ -751,7 +765,7 @@ export class CommentaryDirector { const mark = notes.cutMarks[eye]; if (mark < CUT_MARKS.length && cut >= CUT_MARKS[mark]!) { notes.cutMarks[eye] = CUT_MARKS.filter((threshold) => cut >= threshold).length; - this.say(mark === 0 ? "cut" : mark === 1 ? "cutWorse" : "cutDoctor", snapshot.tick + eye, now, { ...name, side }, null); + this.say(mark === 0 ? "cut" : mark === 1 ? "cutWorse" : "cutGushing", snapshot.tick + eye, now, { ...name, side }, null); } const swelling = eye === 0 ? fighter.trauma.left_eye : fighter.trauma.right_eye; if (!notes.eyeSwelling[eye] && !notes.eyeShut[eye] && swelling >= EYE_SWELLING) { @@ -800,7 +814,8 @@ export class CommentaryDirector { /** A different phrasing each time, chosen from the event so every viewer hears the same call. */ private choose(key: LineKey, seed: number): string { - const options: readonly string[] = LINES[key]; + const lines: readonly string[] = LINES[key]; + const options = this.refereeDead && REFEREE_ACTS.has(key) ? lines.filter((line) => !/referee/iu.test(line)) : lines; let index = mix(seed, key.length * 31 + key.charCodeAt(0)) % options.length; if (options.length > 1 && this.lastChoice.get(key) === index) index = (index + 1) % options.length; this.lastChoice.set(key, index); diff --git a/web/hands/src/render/effects.ts b/web/hands/src/render/effects.ts index 16335a7a..19bdbfed 100644 --- a/web/hands/src/render/effects.ts +++ b/web/hands/src/render/effects.ts @@ -3,23 +3,45 @@ import type { BloodLevel } from "../settings"; import type { CombatEvent, Hand } from "../types"; import { CanvasBlood, type RegionUploader } from "./canvas-blood"; import { wearCornerColour } from "./gear"; -import { BIG_SHOT, HARD_SHOT, ROCKING_COUNTER, bloodDropsFor, bloodShade, buildChunkGeometry, buildDropletGeometry, buildShardGeometry, buildWoundGeometry, closeCut, dropletShape, eyeTexture, jawWoundTexture, woundTexture, wristWoundTexture } from "./gore"; +import { HARD_SHOT, MISTING_SHOT, ROCKING_COUNTER, TEARING_SHOT, bloodDropsFor, bloodShade, buildChunkGeometry, buildDropletGeometry, buildShardGeometry, buildWoundGeometry, closeCut, dropletShape, eyeTexture, jawWoundTexture, woundTexture, wristWoundTexture } from "./gore"; import { EYE_LIDS, HEAD_SITES, HEAD_SWELL_CORE, InjuryShading } from "./injury"; +import { LensBlood } from "./lens-blood"; import { LookShading, SCANNED_LOOK, lookShape, type FighterLook } from "./looks"; import { SHIELD_RADIUS, buildMouthpieceGeometry, idleShield, stepShield, type ShieldState } from "./mouthpiece"; import { CANVAS_TOP, RING_FIGHT_HALF, ROPE_LINE } from "./world"; -const MAX_DROPLETS = 900; -const MAX_MIST = 90; -const MAX_GIBS = 96; -const MAX_SHARDS = 24; -const SHARDS_PER_BURST = 18; -const BRAIN_PER_BURST = 14; -const TEETH_PER_BURST = 5; +/** + * How much gore a device keeps in flight at once: drops of blood, sweat and spit, puffs of mist, flesh, + * teeth and brain, pieces of skull and loose eyeballs. A phone keeps half of what a desktop does and throws + * half the blood. + */ +export interface GoreBudget { + readonly droplets: number; + readonly mist: number; + readonly gibs: number; + readonly shards: number; + readonly eyeballs: number; +} +export const DESKTOP_GORE: GoreBudget = { droplets: 4096, mist: 320, gibs: 320, shards: 72, eyeballs: 8 }; +export const PHONE_GORE: GoreBudget = { droplets: 2048, mist: 160, gibs: 160, shards: 36, eyeballs: 4 }; +const SHARDS_PER_BURST = 36; +const BRAIN_PER_BURST = 40; +const TEETH_PER_BURST = 16; +/** A loose eyeball is drawn this much bigger than the eye it came from, so it reads bouncing across the canvas. */ +const EYEBALL_SCALE = 1.8; +/** Drops a second a severed head or glove trails from its cut while it flies. */ +const SEVERED_TRAIL_RATE = 180; const MAX_HEADS = 2; +/** The referee's gush, kept after the two fighters'. */ +export const REFEREE_GUSH = MAX_HEADS; const MAX_HANDS = 4; -const GIBS_PER_DECAPITATION = 24; -const GIBS_PER_HAND = 16; +const GIBS_PER_DECAPITATION = 60; +const GIBS_PER_HAND = 40; +/** Drops of blood each finisher throws as it lands, on a desktop. */ +const DROPS_PER_DECAPITATION = 900; +const DROPS_PER_BURST = 1200; +const DROPS_PER_HAND = 600; +const DROPS_PER_EYE = 400; const HEAD_RADIUS = 0.12; const HEAD_SETTLE_SECONDS = 0.35; const SEVERED_PART_MARGIN = 0.04; @@ -40,15 +62,27 @@ const DROP_STAIN = 0.7; const SPLASH_STAIN = 0.45; const KNOCKDOWN_STAIN = 0.6; const FINISHER_STAIN = 0.9; -/** A cut's share of a punch's blood (the engine's bleeding over eight) once it is open: bleeding of about 60. */ +/** At full blood every stain soaks in this much darker and larger, so the canvas is soaked through. */ +const SOAK = 1.6; +/** A cut's share of a punch's blood (the engine's bleeding over five) once it is open: bleeding of about 40. */ const OPEN_WOUND = 8; -/** A drop the size of a gob of blood (this radius, in metres) always stains where it lands; fine spray does one time in four. */ +/** A drop the size of a gob of blood (this radius, in metres) always stains where it lands at full blood, and fine spray eight times in ten. */ const GOB = 0.015; +const FINE_SPRAY_STAINS = 0.8; +/** Drops of blood are drawn this much bigger at full blood: arcade splatter, gobs you can see from the cheap seats. */ +const CARTOON_DROPS = 1.35; +/** A man going down throws this many drops of blood over what his punch's blood throws. */ +const KNOCKDOWN_DROPS = 250; /** The neck is close to round where it is cut. */ export const NECK_WOUND_RADIUS = 0.068; const HAND_RADIUS = 0.085; const MAX_STEP = 0.05; const SIMULATION_STEP = 1 / 60; +/** A full pool finds this many of its oldest drops at once to give up for new ones. */ +const STEAL_BATCH = 64; +/** Blood reaches the camera's lens from a blow in the picture this far away or nearer, in metres, and soaks it from this near. */ +const LENS_REACH = 12; +const LENS_NEAR = 3.5; interface Droplet { alive: boolean; @@ -110,8 +144,8 @@ interface Gib { * Flesh, teeth, brain and skull lie where they land for the rest of the bout, as the blood under them * does. Once a pool is all but full the oldest piece on the canvas shrinks away to make room. */ -type DebrisKind = "flesh" | "tooth" | "brain" | "shard"; -const DEBRIS_BOUNCES: Readonly> = { flesh: 1, tooth: 3, brain: 1, shard: 2 }; +type DebrisKind = "flesh" | "tooth" | "brain" | "shard" | "eye"; +const DEBRIS_BOUNCES: Readonly> = { flesh: 1, tooth: 3, brain: 1, shard: 2, eye: 4 }; const DEBRIS_FADE_SECONDS = 0.3; interface SeveredHead { @@ -145,6 +179,8 @@ interface SeveredHead { /** How far the part reaches to either side of its pivot, along its own side-to-side axis. */ sideLow: number; sideHigh: number; + /** Drops of blood owed to the trail it leaves from its cut while it flies. */ + trail: number; } interface Stump { @@ -162,20 +198,31 @@ interface Stump { * How long the artery of each stump pumps: a severed neck, the neck a burst head leaves and a wrist. Over the * last FOUNTAIN_FADE_SECONDS the pressure falls away. */ -export const NECK_FOUNTAIN_SECONDS = 6.5; -const BURST_FOUNTAIN_SECONDS = 7.5; -const WRIST_FOUNTAIN_SECONDS = 5; -const FOUNTAIN_FADE_SECONDS = 4; +export const NECK_FOUNTAIN_SECONDS = 14; +const BURST_FOUNTAIN_SECONDS = 16; +const WRIST_FOUNTAIN_SECONDS = 12; +const FOUNTAIN_FADE_SECONDS = 6; /** Beats a second of a heart going flat out, and how much of each beat (a share of it) the spurt lasts. */ const HEART_RATE = 1.7; const SPURT_WIDTH = 0.14; /** Drops a second at the top of a beat at full pressure, and the share of that still running between beats. */ -const FOUNTAIN_PEAK_RATE = 110; +const FOUNTAIN_PEAK_RATE = 340; const FOUNTAIN_BETWEEN_BEATS = 0.12; -/** Arterial blood leaves at 4 to 6 m/s at the top of a beat, within this angle (radians) of the wound's axis. */ -const FOUNTAIN_SPEED_LOW = 4; -const FOUNTAIN_SPEED_HIGH = 6; -const FOUNTAIN_CONE = 0.35; +/** The blood leaves at 5.5 to 8.5 m/s at the top of a beat, within this angle (radians) of the wound's axis: a cartoon geyser three metres high. */ +const FOUNTAIN_SPEED_LOW = 5.5; +const FOUNTAIN_SPEED_HIGH = 8.5; +const FOUNTAIN_CONE = 0.45; +/** A wound a finisher tears open throws this much as it opens, and then pours this long, this many drops a second at first. */ +const TORN_DROPS = 700; +const TORN_CHUNKS = 24; +const TORN_GUSH_SECONDS = 10; +const TORN_GUSH_RATE = 360; +/** A wound that gushes rather than spurts: a softer beat, more of it between beats, slower and wider than an artery. */ +const GUSH_PULSE_WIDTH = 0.22; +const GUSH_BETWEEN_BEATS = 0.3; +const GUSH_SPEED_LOW = 1.2; +const GUSH_SPEED_HIGH = 3.2; +const GUSH_CONE = 0.55; const fountainAxis = new THREE.Vector3(); const fountainSide = new THREE.Vector3(); const fountainUp = new THREE.Vector3(); @@ -216,6 +263,21 @@ interface DripEmitter { accumulator: number; } +/** Blood pouring from a wound a fighter carries: his nose and mouth as he goes down, or a finisher's open wound. */ +interface Gush { + active: boolean; + eventId: number | null; + /** Seconds left, out of `seconds`: it pours hardest at first and eases off to nothing. */ + life: number; + seconds: number; + /** Drops a second at the top of a beat at first. */ + rate: number; + accumulator: number; + readonly position: THREE.Vector3; + /** The way the wound faces, which the blood pours out along. */ + readonly axis: THREE.Vector3; +} + const seeded = (seed: number): (() => number) => () => { seed = Math.imul(seed ^ (seed >>> 15), 1 | seed); seed ^= seed + Math.imul(seed ^ (seed >>> 7), 61 | seed); @@ -228,6 +290,9 @@ const SHIELD_WHITE = new THREE.Color(0xf4f7fb); const EYE_RADIUS = 0.012; /** How far an eye forced out hangs below its socket on the nerve. */ export const EYE_NERVE_LENGTH = 0.055; +/** The empty socket pours this many drops a second, for this long. */ +const EYE_BLEEDING_RATE = 90; +const EYE_BLEEDING_SECONDS = 10; const EYE_DAMPING = 0.985; /** Half the width and height of the head about the middle of the skull, plus the eye, for a hanging eye. */ const SKULL_RADII = new THREE.Vector2(0.085 + EYE_RADIUS, 0.12 + EYE_RADIUS); @@ -365,9 +430,10 @@ export class Effects3D { private readonly dropletScale = new THREE.Vector3(); private readonly dropletVelocity = new THREE.Vector3(); private readonly dropletColor = new THREE.Color(); - private dropletIndex = 0; /** Live droplets fill the front of the pool, and only they are drawn and uploaded. */ private liveDroplets = 0; + /** Slots of the live drops that have flown longest, oldest first, for a full pool to give up in turn. */ + private readonly oldest: number[] = []; readonly mistPoints: THREE.Points; private readonly mists: Mist[] = []; @@ -388,6 +454,9 @@ export class Effects3D { private readonly shardMesh: THREE.InstancedMesh; private readonly shards: Gib[] = []; private shardIndex = 0; + private readonly eyeballMesh: THREE.InstancedMesh; + private readonly eyeballs: Gib[] = []; + private eyeballIndex = 0; private readonly gibColor = new THREE.Color(); private readonly gibs: Gib[] = []; private gibIndex = 0; @@ -418,6 +487,8 @@ export class Effects3D { private readonly settleUp = new THREE.Vector3(); private dropletCloseness = 1; private readonly stumpOutward = new THREE.Vector3(); + private readonly tornAxis = new THREE.Vector3(); + private readonly trailPoint = new THREE.Vector3(); private readonly stumps: Stump[] = []; private readonly handStumps: Stump[] = []; private readonly lastDecapitationEvent = [null, null] as Array; @@ -447,27 +518,33 @@ export class Effects3D { { position: new THREE.Vector3(), active: false, rate: 0, accumulator: 0 }, { position: new THREE.Vector3(), active: false, rate: 0, accumulator: 0 }, ]; + private readonly gushes: Gush[] = Array.from({ length: REFEREE_GUSH + 1 }, () => ({ active: false, eventId: null, life: 0, seconds: 1, rate: 0, accumulator: 0, position: new THREE.Vector3(), axis: new THREE.Vector3(0, 1, 0) })); private simulationRemainder = 0; private ambientSeed = 0x5f37_59df; private shake = 0; + /** A client struggling to keep its frame rate throws half the blood. */ + private lowTier = false; private bloodLevel: BloodLevel = "full"; + private readonly lens = new LensBlood(); + private camera: THREE.Camera | null = null; + private readonly lensPoint = new THREE.Vector3(); /** `bloodCanvasSize` is the resolution blood on the canvas is painted at, in pixels across the ring. */ - constructor(private readonly scene: THREE.Scene, bloodCanvasSize = 1024) { - this.dropletPositions = new Float32Array(MAX_DROPLETS * 3); - this.dropletColors = new Float32Array(MAX_DROPLETS * 3); + constructor(private readonly scene: THREE.Scene, bloodCanvasSize = 1024, private readonly budget: GoreBudget = DESKTOP_GORE) { + this.dropletPositions = new Float32Array(budget.droplets * 3); + this.dropletColors = new Float32Array(budget.droplets * 3); this.dropletBuffers = { position: new THREE.BufferAttribute(this.dropletPositions, 3), color: new THREE.BufferAttribute(this.dropletColors, 3), }; this.dropletGeometry = buildDropletGeometry(); this.dropletMaterial = new THREE.MeshStandardMaterial({ color: 0xffffff, roughness: 0.3, metalness: 0.02 }); - this.dropletMesh = new THREE.InstancedMesh(this.dropletGeometry, this.dropletMaterial, MAX_DROPLETS); + this.dropletMesh = new THREE.InstancedMesh(this.dropletGeometry, this.dropletMaterial, budget.droplets); this.dropletMesh.instanceMatrix.setUsage(THREE.DynamicDrawUsage); this.dropletMesh.frustumCulled = false; this.dropletMesh.castShadow = false; scene.add(this.dropletMesh); - for (let i = 0; i < MAX_DROPLETS; i += 1) { + for (let i = 0; i < budget.droplets; i += 1) { this.droplets.push({ alive: false, blood: false, x: 0, y: -50, z: 0, vx: 0, vy: 0, vz: 0, life: 0, maxLife: 1, r: 1, g: 1, b: 1, radius: 0.012 }); this.dropletPositions[i * 3 + 1] = -50; this.dropletMesh.setColorAt(i, this.dropletColor.setRGB(0.5, 0.02, 0.04)); @@ -477,8 +554,8 @@ export class Effects3D { this.dropletMesh.instanceMatrix.needsUpdate = true; this.dropletMesh.count = 0; - this.mistPositions = new Float32Array(MAX_MIST * 3); - this.mistColors = new Float32Array(MAX_MIST * 4).fill(1); + this.mistPositions = new Float32Array(budget.mist * 3); + this.mistColors = new Float32Array(budget.mist * 4).fill(1); this.mistGeometry = new THREE.BufferGeometry(); this.mistGeometry.setAttribute("position", new THREE.BufferAttribute(this.mistPositions, 3)); this.mistGeometry.setAttribute("color", new THREE.BufferAttribute(this.mistColors, 4)); @@ -487,7 +564,7 @@ export class Effects3D { this.mistPoints = new THREE.Points(this.mistGeometry, this.mistMaterial); this.mistPoints.frustumCulled = false; scene.add(this.mistPoints); - for (let i = 0; i < MAX_MIST; i += 1) { + for (let i = 0; i < budget.mist; i += 1) { this.mists.push({ alive: false, x: 0, y: -50, z: 0, life: 0, maxLife: 1, scale: 1 }); this.mistPositions[i * 3 + 1] = -50; } @@ -497,11 +574,11 @@ export class Effects3D { this.gibGeometry = buildChunkGeometry(); // Each piece carries its whole colour, so teeth are white and brain is grey beside the flesh. this.gibMaterial = new THREE.MeshStandardMaterial({ color: 0xffffff, roughness: 0.34, metalness: 0 }); - this.gibMesh = new THREE.InstancedMesh(this.gibGeometry, this.gibMaterial, MAX_GIBS); + this.gibMesh = new THREE.InstancedMesh(this.gibGeometry, this.gibMaterial, budget.gibs); this.gibMesh.instanceMatrix.setUsage(THREE.DynamicDrawUsage); this.gibMesh.frustumCulled = false; scene.add(this.gibMesh); - for (let i = 0; i < MAX_GIBS; i += 1) { + for (let i = 0; i < budget.gibs; i += 1) { const gib = idleGib(); this.gibs.push(gib); this.gibMesh.setColorAt(i, this.gibColor.setHex(0x5c0a10)); @@ -510,12 +587,12 @@ export class Effects3D { this.gibMesh.instanceMatrix.needsUpdate = true; this.shardGeometry = buildShardGeometry(); this.shardMaterial = new THREE.MeshStandardMaterial({ color: 0xffffff, roughness: 0.5, metalness: 0, vertexColors: true, side: THREE.DoubleSide }); - this.shardMesh = new THREE.InstancedMesh(this.shardGeometry, this.shardMaterial, MAX_SHARDS); + this.shardMesh = new THREE.InstancedMesh(this.shardGeometry, this.shardMaterial, budget.shards); this.shardMesh.instanceMatrix.setUsage(THREE.DynamicDrawUsage); this.shardMesh.frustumCulled = false; this.shardMesh.castShadow = true; scene.add(this.shardMesh); - for (let i = 0; i < MAX_SHARDS; i += 1) { + for (let i = 0; i < budget.shards; i += 1) { const shard = idleGib(); this.shards.push(shard); this.shardMesh.setColorAt(i, this.gibColor.setHex(0xffffff)); @@ -547,7 +624,7 @@ export class Effects3D { const cap = new THREE.Mesh(this.stumpGeometry, this.stumpMaterial); cap.visible = false; headMesh.add(cap); - this.heads.push({ mesh: headMesh, defaultGeometry: this.headGeometry, defaultScale: headMesh.scale.clone(), cap, defaultCap: this.stumpGeometry, look: headLook, injury: headInjury, blood: null, baked: null, bakedFlesh: null, radius: HEAD_RADIUS, active: false, moving: false, eventId: null, vx: 0, vy: 0, vz: 0, vrx: 0, vry: 0, vrz: 0, bounces: 0, stained: false, settle: -1, settleFrom: new THREE.Quaternion(), settleTo: new THREE.Quaternion(), settleFromY: 0, settleToY: 0, sideLow: -HEAD_RADIUS, sideHigh: HEAD_RADIUS }); + this.heads.push({ mesh: headMesh, defaultGeometry: this.headGeometry, defaultScale: headMesh.scale.clone(), cap, defaultCap: this.stumpGeometry, look: headLook, injury: headInjury, blood: null, baked: null, bakedFlesh: null, radius: HEAD_RADIUS, active: false, moving: false, eventId: null, vx: 0, vy: 0, vz: 0, vrx: 0, vry: 0, vrz: 0, bounces: 0, stained: false, settle: -1, settleFrom: new THREE.Quaternion(), settleTo: new THREE.Quaternion(), settleFromY: 0, settleToY: 0, sideLow: -HEAD_RADIUS, sideHigh: HEAD_RADIUS, trail: 0 }); const stumpMesh = new THREE.Mesh(this.stumpGeometry, this.stumpMaterial); stumpMesh.visible = false; @@ -571,6 +648,18 @@ export class Effects3D { this.nerveMeshes.push(nerve); this.eyes.push({ active: false, eventId: null, position: new THREE.Vector3(), previous: new THREE.Vector3(), socket: new THREE.Vector3(), facing: new THREE.Vector3(0, 0, 1), skull: new THREE.Vector3(), skullTurn: new THREE.Quaternion(), hasSkull: false, bleeding: 0, accumulator: 0 }); } + // Loose eyeballs, drawn white with the eye's own texture; their colours are set from the start, so the first one compiles nothing. + this.eyeballMesh = new THREE.InstancedMesh(this.eyeGeometry, this.eyeMaterial, budget.eyeballs); + this.eyeballMesh.instanceMatrix.setUsage(THREE.DynamicDrawUsage); + this.eyeballMesh.frustumCulled = false; + scene.add(this.eyeballMesh); + for (let i = 0; i < budget.eyeballs; i += 1) { + const eyeball = idleGib(); + this.eyeballs.push(eyeball); + this.eyeballMesh.setColorAt(i, this.gibColor.setHex(0xffffff)); + this.writeDebrisMatrix(this.eyeballMesh, i, eyeball); + } + this.eyeballMesh.instanceMatrix.needsUpdate = true; this.shieldGeometry = buildMouthpieceGeometry(); for (let index = 0; index < MAX_HEADS; index += 1) { const material = new THREE.MeshStandardMaterial({ color: 0xe8eef5, roughness: 0.22, metalness: 0, side: THREE.DoubleSide }); @@ -595,7 +684,7 @@ export class Effects3D { cap.position.y = 0.02; cap.visible = false; handMesh.add(cap); - this.hands.push({ mesh: handMesh, defaultGeometry: this.handGeometry, defaultScale: handMesh.scale.clone(), cap, defaultCap: this.wristStumpGeometry, look: null, injury: null, blood, baked: null, bakedFlesh: null, radius: HAND_RADIUS, active: false, moving: false, eventId: null, vx: 0, vy: 0, vz: 0, vrx: 0, vry: 0, vrz: 0, bounces: 0, stained: false, settle: -1, settleFrom: new THREE.Quaternion(), settleTo: new THREE.Quaternion(), settleFromY: 0, settleToY: 0, sideLow: -HAND_RADIUS, sideHigh: HAND_RADIUS }); + this.hands.push({ mesh: handMesh, defaultGeometry: this.handGeometry, defaultScale: handMesh.scale.clone(), cap, defaultCap: this.wristStumpGeometry, look: null, injury: null, blood, baked: null, bakedFlesh: null, radius: HAND_RADIUS, active: false, moving: false, eventId: null, vx: 0, vy: 0, vz: 0, vrx: 0, vry: 0, vrz: 0, bounces: 0, stained: false, settle: -1, settleFrom: new THREE.Quaternion(), settleTo: new THREE.Quaternion(), settleFromY: 0, settleToY: 0, sideLow: -HAND_RADIUS, sideHigh: HAND_RADIUS, trail: 0 }); const stumpMesh = new THREE.Mesh(this.wristStumpGeometry, this.wristMaterial); stumpMesh.visible = false; @@ -647,6 +736,21 @@ export class Effects3D { return standIns; } + /** The camera the picture is shot with, whose lens blood thrown at it lands on. */ + setCamera(camera: THREE.Camera): void { + this.camera = camera; + } + + /** Draws the blood on the lens over the picture, `width` by `height`. */ + drawLens(ctx: CanvasRenderingContext2D, width: number, height: number): void { + this.lens.draw(ctx, width, height); + } + + /** Drops of blood on the lens. */ + get lensDrops(): number { + return this.lens.count; + } + setBloodLevel(level: BloodLevel): void { if (level === this.bloodLevel) return; const previous = this.bloodLevel; @@ -682,6 +786,7 @@ export class Effects3D { setLowTier(low: boolean): void { this.canvasBlood.setLowTier(low); + this.lowTier = low; } get liveGibs(): number { @@ -692,9 +797,9 @@ export class Effects3D { return this.shards.filter((shard) => shard.alive).length; } - /** How many teeth, pieces of brain and pieces of skull are out, by kind. */ + /** How many teeth, pieces of brain, pieces of skull and eyeballs are out, by kind. */ debrisCount(kind: DebrisKind): number { - return [...this.gibs, ...this.shards].filter((gib) => gib.alive && gib.kind === kind).length; + return [...this.gibs, ...this.shards, ...this.eyeballs].filter((gib) => gib.alive && gib.kind === kind).length; } get activeHeads(): number { @@ -812,16 +917,25 @@ export class Effects3D { this.eyeDirection.x += launch.x * 0.5; this.eyeDirection.z += launch.z * 0.5; eye.previous.copy(eye.position).addScaledVector(this.eyeDirection, -SIMULATION_STEP); - eye.bleeding = 2; + eye.bleeding = EYE_BLEEDING_SECONDS; eye.accumulator = 0; this.eyeMeshes[index]!.visible = true; this.nerveMeshes[index]!.visible = true; const rand = seeded(safeEventId * 52_711 + index * 3571 + 13); - for (let drop = 0; drop < 36; drop += 1) { + for (let drop = 0; drop < this.forDevice(DROPS_PER_EYE); drop += 1) { const angle = rand() * Math.PI * 2; - this.spawnDroplet(eye.socket.x, eye.socket.y, eye.socket.z, forward.x * (0.8 + rand()) + Math.sin(angle) * 0.6, 0.4 + rand() * 1.2, forward.z * (0.8 + rand()) + Math.cos(angle) * 0.6, bloodShade(rand()), 0.6 + rand() * 0.6, true); + this.spawnDroplet(eye.socket.x, eye.socket.y, eye.socket.z, forward.x * (0.8 + rand() * 1.6) + Math.sin(angle) * 0.7, 0.4 + rand() * 1.6, forward.z * (0.8 + rand() * 1.6) + Math.cos(angle) * 0.7, bloodShade(rand()), 0.6 + rand() * 0.8, true); } - for (let puff = 0; puff < 4; puff += 1) this.spawnMist(eye.socket.x + (rand() - 0.5) * 0.1, eye.socket.y + (rand() - 0.5) * 0.08, eye.socket.z + (rand() - 0.5) * 0.1, 0.7 + rand() * 0.6, 0.5 + rand() * 0.4); + for (let puff = 0; puff < 24; puff += 1) this.spawnMist(eye.socket.x + (rand() - 0.5) * 0.2, eye.socket.y + (rand() - 0.5) * 0.14, eye.socket.z + (rand() - 0.5) * 0.2, 0.8 + rand(), 0.55 + rand() * 0.55); + for (let chunk = 0; chunk < 10; chunk += 1) { + const angle = rand() * Math.PI * 2; + this.spawnGib(eye.socket.x, eye.socket.y, eye.socket.z, forward.x * (0.6 + rand() * 1.2) + Math.sin(angle) * 0.5, 0.6 + rand() * 1.2, forward.z * (0.6 + rand() * 1.2) + Math.cos(angle) * 0.5, rand, "flesh", index); + } + // The other eye pops clean out and bounces away across the canvas. + this.spawnGib(eye.socket.x, eye.socket.y, eye.socket.z, forward.x * 2.2 + launch.x * 0.8, 1.6 + rand(), forward.z * 2.2 + launch.z * 0.8, rand, "eye", index); + this.splatter(eye.socket.x + forward.x * 0.3, eye.socket.z + forward.z * 0.3, 1.8, rand, 24); + this.splashLens(eye.socket.x, eye.socket.y, eye.socket.z, 1.5, safeEventId); + this.shake = Math.min(0.22, this.shake + 0.06); this.writeEye(index); } @@ -874,10 +988,12 @@ export class Effects3D { if (eye.position.y < CANVAS_TOP + EYE_RADIUS) eye.position.y = CANVAS_TOP + EYE_RADIUS; if (this.bloodLevel === "full" && eye.bleeding > 0) { eye.bleeding = Math.max(0, eye.bleeding - step); - eye.accumulator += step * 14; + eye.accumulator += step * this.forDevice(EYE_BLEEDING_RATE); while (eye.accumulator >= 1) { eye.accumulator -= 1; - this.spawnDroplet(eye.socket.x, eye.socket.y - 0.005, eye.socket.z, (this.ambientRandom() - 0.5) * 0.2, -0.2 - this.ambientRandom() * 0.3, (this.ambientRandom() - 0.5) * 0.2, bloodShade(this.ambientRandom()), 0.9, true); + // It pours out of the socket and down the face. + const pour = 0.15 + this.ambientRandom() * 0.5; + this.spawnDroplet(eye.socket.x, eye.socket.y - 0.005, eye.socket.z, eye.facing.x * pour + (this.ambientRandom() - 0.5) * 0.2, -0.15 - this.ambientRandom() * 0.4, eye.facing.z * pour + (this.ambientRandom() - 0.5) * 0.2, bloodShade(this.ambientRandom()), 0.9, true); } } this.writeEye(index); @@ -977,8 +1093,8 @@ export class Effects3D { } private spawnDroplet(x: number, y: number, z: number, vx: number, vy: number, vz: number, color: { r: number; g: number; b: number }, life: number, blood: boolean, radius = blood ? 0.0035 + this.ambientRandom() ** 3 * 0.0125 : 0.0025 + this.ambientRandom() ** 2 * 0.004): void { - // A new droplet joins the live ones at the front; a full pool reuses its slots in turn. - const index = this.liveDroplets < MAX_DROPLETS ? this.liveDroplets++ : this.dropletIndex++ % MAX_DROPLETS; + // A new droplet joins the live ones at the front; a full pool gives up the drop that has flown longest. + const index = this.liveDroplets < this.budget.droplets ? this.liveDroplets++ : this.oldestDroplet(); const droplet = this.droplets[index]!; droplet.alive = true; droplet.blood = blood; @@ -1005,6 +1121,34 @@ export class Effects3D { this.uploadDroplets(index, index + 1, true); } + /** + * The live droplet that has flown longest: about to land, where one just thrown has all its flight ahead + * of it. They are found STEAL_BATCH at a time, oldest first and the lower slot first between equals; time + * ages every drop alike, so the order holds until a drop lands and the slots move. + */ + private oldestDroplet(): number { + if (this.oldest.length === 0) this.findOldest(); + return this.oldest.shift() ?? 0; + } + + private findOldest(): void { + const oldest = this.oldest; + const flown = (slot: number): number => this.droplets[slot]!.maxLife - this.droplets[slot]!.life; + for (let index = 0; index < this.liveDroplets; index += 1) { + const age = flown(index); + if (oldest.length === STEAL_BATCH && age <= flown(oldest[STEAL_BATCH - 1]!)) continue; + let at = oldest.length; + while (at > 0 && flown(oldest[at - 1]!) < age) at -= 1; + oldest.splice(at, 0, index); + if (oldest.length > STEAL_BATCH) oldest.pop(); + } + } + + /** As many drops as a desktop throws, thinned for the device's budget and by half again on a struggling client. */ + private forDevice(count: number): number { + return Math.round((count * this.budget.droplets * (this.lowTier ? 0.5 : 1)) / DESKTOP_GORE.droplets); + } + /** Draws only the live droplets and uploads the instances from `from` up to `to`. */ private uploadDroplets(from: number, to: number, colors: boolean): void { this.dropletMesh.count = this.liveDroplets; @@ -1019,6 +1163,7 @@ export class Effects3D { /** Retires the droplet in slot `index` and moves the last live droplet into its place. */ private retireDroplet(index: number): void { + this.oldest.length = 0; const last = this.liveDroplets - 1; const retired = this.droplets[index]!; retired.alive = false; @@ -1056,7 +1201,7 @@ export class Effects3D { } else { this.dropletQuaternion.identity(); } - const fade = Math.min(1, droplet.life / (droplet.maxLife * 0.3)) * this.dropletCloseness; + const fade = Math.min(1, droplet.life / (droplet.maxLife * 0.3)) * this.dropletCloseness * (droplet.blood && this.bloodLevel === "full" ? CARTOON_DROPS : 1); const shape = dropletShape(droplet.radius * fade, speed, this.dropletShape); this.dropletScale.set(shape.width, shape.length, shape.width); this.dropletMatrix.compose(this.dropletVelocity.set(droplet.x, droplet.y, droplet.z), this.dropletQuaternion, this.dropletScale); @@ -1064,7 +1209,7 @@ export class Effects3D { } private spawnMist(x: number, y: number, z: number, scale: number, life: number): void { - const index = this.mistIndex % MAX_MIST; + const index = this.mistIndex % this.budget.mist; this.mistIndex += 1; const mist = this.mists[index]!; mist.alive = true; @@ -1094,6 +1239,21 @@ export class Effects3D { ); } + /** + * Blood thrown from (x, y, z) lands on the lens when the blow is in the picture and near enough to the + * camera, more of it the nearer and the heavier `weight` is: a few small drops with reduced blood. + */ + private splashLens(x: number, y: number, z: number, weight: number, seed: number): void { + const camera = this.camera; + if (camera === null || this.bloodLevel === "off" || !(weight > 0)) return; + const at = this.lensPoint.set(finite(x), finite(y, 1.5), finite(z)); + const distance = at.distanceTo(camera.position); + at.project(camera); + if (!(at.z < 1) || Math.abs(at.x) > 1.15 || Math.abs(at.y) > 1.15) return; + const near = THREE.MathUtils.clamp((LENS_REACH - distance) / (LENS_REACH - LENS_NEAR), 0, 1); + this.lens.splash((at.x + 1) / 2, (1 - at.y) / 2, near * weight * (this.bloodLevel === "reduced" ? 0.25 : 1), seed); + } + private ambientRandom(): number { this.ambientSeed = Math.imul(this.ambientSeed ^ (this.ambientSeed >>> 15), 1 | this.ambientSeed); this.ambientSeed ^= this.ambientSeed + Math.imul(this.ambientSeed ^ (this.ambientSeed >>> 7), 61 | this.ambientSeed); @@ -1102,14 +1262,15 @@ export class Effects3D { /** * Blood thrown onto the canvas round `x`, `z`: `stamps` blots of about `opacity` each (a quarter as - * many, smaller and fainter, with reduced blood). One splash is a stain the canvas shows through, and - * where splashes land on each other it darkens, so the canvas gets bloodier as the bout goes on. + * many, smaller and fainter, with reduced blood, and larger and darker with full). One splash is a stain + * the canvas shows through, and where splashes land on each other it darkens, so the canvas gets bloodier + * as the bout goes on. */ splatter(x: number, z: number, scale: number, rand: () => number = () => this.ambientRandom(), stamps = 12, opacity = FINISHER_STAIN): void { if (this.bloodLevel === "off") return; const reduced = this.bloodLevel === "reduced"; const drops = reduced ? Math.ceil(stamps / 4) : stamps; - const modeScale = reduced ? 0.35 : 1; + const modeScale = reduced ? 0.35 : SOAK; for (let i = 0; i < drops; i += 1) { const angle = rand() * Math.PI * 2; const radius = rand() * (reduced ? 0.22 : 0.48) * scale; @@ -1119,7 +1280,7 @@ export class Effects3D { (0.35 + rand() * 0.9) * scale * modeScale, (0.2 + rand() * 0.65) * scale * modeScale, rand() * Math.PI, - opacity * (0.75 + rand() * 0.5) * (reduced ? 0.6 : 1), + opacity * (0.75 + rand() * 0.5) * (reduced ? 0.6 : SOAK), i === 0 ? 0x4c070b : 0x6e0d13, ); } @@ -1129,42 +1290,53 @@ export class Effects3D { pool(x: number, z: number, radius: number, stamp: number): void { if (this.bloodLevel === "off") return; const reduced = this.bloodLevel === "reduced"; - this.canvasBlood.pool(finite(x), finite(z), Math.max(0.02, finite(radius, 0.1)) * (reduced ? 0.5 : 1), reduced ? 0.45 : 0.92, stamp); + this.canvasBlood.pool(finite(x), finite(z), Math.max(0.02, finite(radius, 0.1)) * (reduced ? 0.2 : 1), reduced ? 0.45 : 0.95, stamp); } /** - * Blood, sweat and chunks for a contact. `spray` is the way the punch travelled (from puncher to - * recipient); without it the event's world-x sign stands in. + * Blood, sweat and chunks for a contact. `targetWorld` is where the punch landed on him, or a spot on the + * canvas under him, from which it leaves at a standing man's head or chest height. `spray` is the way the + * punch travelled (from puncher to recipient); without it the event's world-x sign stands in. */ addEvent(event: CombatEvent, targetWorld: THREE.Vector3, reducedMotion: boolean, spray?: SprayDirection): void { if (!IMPACT_KINDS.has(event.kind)) return; const rand = seeded(event.event_id * 7919 + 17); const blocked = event.kind === "block" || event.kind === "perfect_block"; + const knockdown = event.kind === "knockdown"; + const full = this.bloodLevel === "full"; const pattern = bloodPatternFor(event); const launch = unitSpray(spray ?? event.direction); // Sweat and chunks are pushed along the punch as hard as the event's sign says (a block may carry none). const push = spray === undefined ? Math.abs(finite(event.direction)) : 1; - const origin = { x: finite(targetWorld.x), y: event.detail.endsWith(":body") ? 1.05 : 1.58, z: finite(targetWorld.z) }; - // A cut's beat throws no sweat and shakes nothing: no punch landed. + const origin = { x: finite(targetWorld.x), y: targetWorld.y > CANVAS_TOP ? finite(targetWorld.y) : event.detail.endsWith(":body") ? 1.05 : 1.58, z: finite(targetWorld.z) }; + // A cut's beat throws no sweat and shakes nothing: no punch landed. At full blood it is the blood that + // flies off a punch, with a little sweat. const beat = event.kind === "bleed"; - const sweatCount = reducedMotion || beat ? 0 : Math.round((blocked ? 6 : 16) + Math.min(20, Math.max(0, event.amount) / 20)); + const sweatCount = reducedMotion || beat + ? 0 + : full + ? Math.round((blocked ? 4 : 6) + Math.min(6, Math.max(0, event.amount) / 40)) + : Math.round((blocked ? 6 : 16) + Math.min(20, Math.max(0, event.amount) / 20)); const strand = { x: 0, y: 0, z: 0, vx: 0, vy: 0, vz: 0, life: 0, radius: 0, color: bloodShade(0) }; - // The engine's blood is the cut's bleeding over eight plus the damage over four: the first part is + // The engine's blood is the cut's bleeding over five plus the damage over three: the first part is // what an open wound throws. A block's amount is the guard's damage and a knockdown's its count, // neither the weight of the punch. const landed = event.kind === "hit" || event.kind === "counter_hit"; - const wound = landed ? Math.max(0, event.blood - Math.floor(Math.max(0, event.amount) / 4)) : 0; + const wound = landed ? Math.max(0, event.blood - Math.floor(Math.max(0, event.amount) / 3)) : 0; const bloodCount = reducedMotion || event.blood <= 0 || this.bloodLevel === "off" ? 0 : beat // The drip from the face carries the bleeding, and the beat adds a few drops. - ? (this.bloodLevel === "reduced" ? 1 : Math.min(5, 2 + Math.floor(Math.max(0, event.amount) / 12))) + ? (this.bloodLevel === "reduced" ? 1 : Math.min(12, 3 + Math.floor(Math.max(0, event.amount) / 8))) : this.bloodLevel === "reduced" ? Math.min(24, Math.round(event.blood * (blocked ? 0.12 : 0.24))) // The guard takes the punch, and half the blood it would have thrown. - : blocked ? Math.round(bloodDropsFor(event.blood, 0) / 2) : bloodDropsFor(event.blood, landed ? event.amount : 0); - if (!beat) this.shake = Math.min(0.09, this.shake + (blocked ? 0.008 : Math.max(0.012, event.amount / 2600))); - if (event.kind === "knockdown") this.shake = Math.min(0.14, this.shake + 0.06); + : this.forDevice(blocked ? Math.round(bloodDropsFor(event.blood, 0) / 2) : knockdown ? bloodDropsFor(event.blood, 0) + KNOCKDOWN_DROPS : bloodDropsFor(event.blood, landed ? event.amount : 0)); + if (!beat) this.shake = Math.min(0.14, this.shake + (blocked ? 0.008 : Math.max(0.012, event.amount / 1500))); + if (knockdown) this.shake = Math.min(0.2, this.shake + 0.09); + // A punch that lands hard throws its blood at a camera near enough to it, and a man going down does. + const thrown = knockdown ? 1.2 : landed ? THREE.MathUtils.clamp((event.amount - 40) / 60, 0, 1) * (0.6 + Math.min(100, event.blood) / 150) : 0; + if (!reducedMotion && !beat && event.blood > 0) this.splashLens(origin.x, origin.y, origin.z, thrown, event.event_id); for (let i = 0; i < sweatCount; i += 1) { const angle = rand() * Math.PI * 2; @@ -1244,27 +1416,33 @@ export class Effects3D { strand.radius = 0.008 + rand() * 0.008; this.spawnDroplet(x, y, z, vx, vy, vz, color, life, true, strand.radius); } - const misty = (event.kind === "hit" && event.amount >= HARD_SHOT) || event.kind === "knockdown" || event.kind === "counter_hit" || wound >= OPEN_WOUND * 2; + // At full blood a punch that lands hard mists the blood it throws, and so does any punch on an open cut. + // The worse the cut, the thicker the mist off every punch, so the blood in the air grows round by round. + const misty = full + ? knockdown || event.kind === "counter_hit" || (landed && (event.amount >= MISTING_SHOT || wound >= OPEN_WOUND)) + : (event.kind === "hit" && event.amount >= HARD_SHOT) || knockdown || event.kind === "counter_hit" || wound >= OPEN_WOUND * 2; if (!reducedMotion && event.blood > 0 && this.bloodLevel !== "off" && misty) { - // The worse the cut, the thicker the mist off every punch, so the blood in the air grows round by round. - const puffs = this.bloodLevel === "reduced" ? (event.kind === "knockdown" ? 3 : 2) : (event.kind === "knockdown" ? 14 : 10 + Math.min(8, Math.floor(wound / 4))); - const scale = this.bloodLevel === "reduced" ? 0.35 : 1; + const puffs = full + ? this.forDevice(knockdown ? 36 : 12 + Math.min(24, Math.floor(wound / 2) + Math.floor(Math.max(0, event.amount - MISTING_SHOT) / 6))) + : (knockdown ? 3 : 2); + const scale = full ? 1 : 0.35; for (let i = 0; i < puffs; i += 1) { this.spawnMist(origin.x + (rand() - 0.5) * 0.34, origin.y + (rand() - 0.5) * 0.26, origin.z + (rand() - 0.5) * 0.34, (0.9 + rand() * 1.2) * scale, 0.55 + rand() * 0.55); } } - // The canvas is splashed by what an open wound throws and by a man going down, not by every punch - // that draws a little blood: the drops that land paint the rest. - const stamps = event.kind === "knockdown" ? 12 : Math.min(8, Math.round(wound / 4)); + // The canvas is splashed by what an open wound throws and by a man going down, and at full blood by any + // punch that lands hard, cut or not; the drops that land paint the rest. + const hard = full && landed ? Math.max(0, Math.round((event.amount - 30) / 10)) : 0; + const stamps = knockdown ? (full ? 30 : 12) : Math.min(full ? 24 : 8, Math.round(wound / (full ? 3 : 4)) + hard); if (stamps > 0 && this.bloodLevel !== "off") { - const knockdown = event.kind === "knockdown"; - this.splatter(origin.x + (rand() - 0.5) * 0.6, origin.z + (rand() - 0.5) * 0.6, knockdown ? 1 + Math.min(2, event.blood / 55) : 0.8 + Math.min(1.2, wound / 30), rand, stamps, knockdown ? KNOCKDOWN_STAIN : SPLASH_STAIN); + const spread = knockdown ? 1 + Math.min(2, event.blood / 55) : 0.8 + Math.min(1.2, wound / 30); + this.splatter(origin.x + (rand() - 0.5) * 0.6, origin.z + (rand() - 0.5) * 0.6, full ? spread * 1.3 : spread, rand, stamps, knockdown ? KNOCKDOWN_STAIN : SPLASH_STAIN); } - // A punch that rocks him tears flesh from an open cut, and a big counter tears it from any face. + // A punch that rocks him tears flesh from any cut at all, and a hard one from any face. const rocking = event.amount >= HARD_SHOT || (event.kind === "counter_hit" && event.amount >= ROCKING_COUNTER); - const tearing = landed && ((rocking && wound >= OPEN_WOUND) || (event.kind === "counter_hit" && event.amount >= BIG_SHOT)); - if (this.bloodLevel === "full" && !reducedMotion && tearing && !event.detail.endsWith(":body")) { - const chunks = Math.min(8, Math.max(2, Math.round((event.amount - 30) / 10))); + const tearing = landed && (event.amount >= TEARING_SHOT || (rocking && wound >= OPEN_WOUND / 4)); + if (full && !reducedMotion && tearing && !event.detail.endsWith(":body")) { + const chunks = Math.min(20, Math.max(3, Math.round((event.amount - 10) / 6))); for (let index = 0; index < chunks; index += 1) { const angle = rand() * Math.PI * 2; const speed = 0.5 + rand() * 1.8; @@ -1358,6 +1536,8 @@ export class Effects3D { const safeEventId = Number.isSafeInteger(eventId) ? eventId : 0; const head = this.heads[index]!; if (head.active || this.lastDecapitationEvent[index] === safeEventId) return; + // The mouth it was pouring from has gone with the head; the neck's fountain takes over. + this.stopGush(index); this.applyBakedPart(head, baked, skinColor); const rand = seeded(safeEventId * 104729 + index * 8191 + 23); const launch = unitSpray(direction); @@ -1375,6 +1555,7 @@ export class Effects3D { head.vry = (rand() - 0.5) * 12; head.vrz = (rand() - 0.5) * 12; head.bounces = 0; + head.trail = 0; head.stained = false; head.settle = -1; head.mesh.position.set(finite(position.x), finite(position.y, 1.55), finite(position.z)); @@ -1408,7 +1589,7 @@ export class Effects3D { index, ); } - for (let i = 0; i < 120; i += 1) { + for (let i = 0; i < this.forDevice(DROPS_PER_DECAPITATION); i += 1) { const angle = rand() * Math.PI * 2; const speed = 1 + rand() * 2.6; const shade = rand(); @@ -1425,10 +1606,12 @@ export class Effects3D { true, ); } - for (let i = 0; i < 14; i += 1) { - this.spawnMist(head.mesh.position.x + (rand() - 0.5) * 0.35, head.mesh.position.y + (rand() - 0.5) * 0.25, head.mesh.position.z + (rand() - 0.5) * 0.35, 1 + rand() * 1.4, 0.65 + rand() * 0.55); + for (let i = 0; i < 48; i += 1) { + this.spawnMist(head.mesh.position.x + (rand() - 0.5) * 0.55, head.mesh.position.y + (rand() - 0.5) * 0.36, head.mesh.position.z + (rand() - 0.5) * 0.55, 1 + rand() * 1.8, 0.7 + rand() * 0.8); } - this.splatter(head.mesh.position.x, head.mesh.position.z, 1.5, rand, 18); + this.splatter(head.mesh.position.x, head.mesh.position.z, 2.6, rand, 50); + this.splashLens(head.mesh.position.x, head.mesh.position.y, head.mesh.position.z, 2.4, safeEventId); + this.shake = Math.min(0.22, this.shake + 0.12); } /** @@ -1442,6 +1625,7 @@ export class Effects3D { const stump = this.stumps[index]!; if (stump.active || this.lastBurstEvent[index] === safeEventId) return; this.lastBurstEvent[index] = safeEventId; + this.stopGush(index); const rand = seeded(safeEventId * 91_813 + index * 6151 + 41); const launch = unitSpray(direction); const x = finite(position.x); @@ -1469,7 +1653,8 @@ export class Effects3D { scatter(SHARDS_PER_BURST, "shard", 2.2, 2.4, 1); scatter(BRAIN_PER_BURST, "brain", 1.2, 1.8, 0.8); scatter(TEETH_PER_BURST, "tooth", 1, 1.4, 0.6); - for (let drop = 0; drop < 180; drop += 1) { + scatter(2, "eye", 1.4, 1.2, 1.2); + for (let drop = 0; drop < this.forDevice(DROPS_PER_BURST); drop += 1) { const around = rand() * Math.PI * 2; const up = rand() * 1.3 - 0.3; const flat = Math.sqrt(Math.max(0, 1 - Math.min(1, up * up))); @@ -1487,11 +1672,12 @@ export class Effects3D { 0.004 + rand() ** 2 * 0.014, ); } - for (let puff = 0; puff < 24; puff += 1) { - this.spawnMist(x + (rand() - 0.5) * 0.5, y + (rand() - 0.3) * 0.4, z + (rand() - 0.5) * 0.5, 1.2 + rand() * 1.6, 0.8 + rand() * 0.7); + for (let puff = 0; puff < 64; puff += 1) { + this.spawnMist(x + (rand() - 0.5) * 0.7, y + (rand() - 0.3) * 0.6, z + (rand() - 0.5) * 0.7, 1.2 + rand() * 2, 0.8 + rand() * 0.9); } - this.splatter(x + launch.x * 0.3, z + launch.z * 0.3, 2.2, rand, 18); - this.shake = Math.min(0.16, this.shake + 0.1); + this.splatter(x + launch.x * 0.3, z + launch.z * 0.3, 3.4, rand, 60); + this.splashLens(x, y, z, 3, safeEventId); + this.shake = Math.min(0.22, this.shake + 0.14); stump.mesh.material = this.jawMaterial; stump.active = true; stump.fountainLife = BURST_FOUNTAIN_SECONDS; @@ -1533,6 +1719,7 @@ export class Effects3D { hand.vry = (rand() - 0.5) * 16; hand.vrz = (rand() - 0.5) * 16; hand.bounces = 0; + hand.trail = 0; hand.stained = false; hand.mesh.position.set(finite(position.x), finite(position.y, 1.25), finite(position.z)); copyFiniteQuaternion(hand.mesh.quaternion, quaternion); @@ -1564,7 +1751,7 @@ export class Effects3D { Math.trunc(fighterIndex), ); } - for (let drop = 0; drop < 80; drop += 1) { + for (let drop = 0; drop < this.forDevice(DROPS_PER_HAND); drop += 1) { const angle = rand() * Math.PI * 2; const speed = 0.8 + rand() * 2.1; this.sprayDroplet( @@ -1580,16 +1767,66 @@ export class Effects3D { true, ); } - for (let puff = 0; puff < 8; puff += 1) { + for (let puff = 0; puff < 30; puff += 1) { this.spawnMist( - hand.mesh.position.x + (rand() - 0.5) * 0.24, - hand.mesh.position.y + (rand() - 0.5) * 0.18, - hand.mesh.position.z + (rand() - 0.5) * 0.24, - 0.7 + rand(), - 0.5 + rand() * 0.45, + hand.mesh.position.x + (rand() - 0.5) * 0.36, + hand.mesh.position.y + (rand() - 0.5) * 0.26, + hand.mesh.position.z + (rand() - 0.5) * 0.36, + 0.8 + rand() * 1.4, + 0.55 + rand() * 0.6, + ); + } + this.splatter(hand.mesh.position.x, hand.mesh.position.z, 2.2, rand, 40); + this.splashLens(hand.mesh.position.x, hand.mesh.position.y, hand.mesh.position.z, 1.8, safeEventId); + this.shake = Math.min(0.22, this.shake + 0.08); + } + + /** + * A finisher tears a fighter open at `position`, the wound facing `axis`: blood, flesh and mist burst out of + * it and along the punch with `teeth` knocked out among them, splash the canvas below, and the wound pours + * for seconds after (see `anchorGush`). What it throws goes if a replay puts him back together. Only with full blood. + */ + tearOpen(fighterIndex: number, position: THREE.Vector3, axis: THREE.Vector3, direction: number | SprayDirection, eventId: number, teeth = 0): void { + if (this.bloodLevel !== "full" || fighterIndex < 0 || fighterIndex >= MAX_HEADS) return; + const index = Math.trunc(fighterIndex); + const safeEventId = Number.isSafeInteger(eventId) ? eventId : 0; + const rand = seeded(safeEventId * 69_061 + index * 2741 + 29); + const launch = unitSpray(direction); + const out = this.tornAxis.copy(axis); + if (!(out.lengthSq() > 1e-8) || !Number.isFinite(out.lengthSq())) out.set(0, 1, 0); + out.normalize(); + const x = finite(position.x); + const y = finite(position.y, 1.2); + const z = finite(position.z); + for (let drop = 0; drop < this.forDevice(TORN_DROPS); drop += 1) { + const pace = 1 + rand() * 2.6; + const along = 0.3 + rand() * 1.4; + this.spawnDroplet( + x + (rand() - 0.5) * 0.06, + y + (rand() - 0.5) * 0.06, + z + (rand() - 0.5) * 0.06, + out.x * pace + launch.x * along + (rand() - 0.5) * 1.4, + out.y * pace + 0.4 + rand() * 1.2, + out.z * pace + launch.z * along + (rand() - 0.5) * 1.4, + bloodShade(rand()), + 0.7 + rand() * 0.9, + true, + 0.004 + rand() ** 2 * 0.012, ); } - this.splatter(hand.mesh.position.x, hand.mesh.position.z, 1.1, rand); + const scatter = (count: number, kind: DebrisKind): void => { + for (let piece = 0; piece < count; piece += 1) { + const pace = 0.6 + rand() * 1.8; + this.spawnGib(x, y, z, out.x * pace + launch.x * rand() * 1.4 + (rand() - 0.5) * 0.8, out.y * pace + 0.6 + rand() * 1.2, out.z * pace + launch.z * rand() * 1.4 + (rand() - 0.5) * 0.8, rand, kind, index); + } + }; + scatter(TORN_CHUNKS, "flesh"); + scatter(teeth, "tooth"); + for (let puff = 0; puff < 28; puff += 1) this.spawnMist(x + (rand() - 0.5) * 0.36, y + (rand() - 0.5) * 0.28, z + (rand() - 0.5) * 0.36, 0.9 + rand() * 1.5, 0.6 + rand() * 0.7); + this.splatter(x + out.x * 0.25 + launch.x * 0.3, z + out.z * 0.25 + launch.z * 0.3, 2.2, rand, 36); + this.splashLens(x, y, z, 1.8, safeEventId); + this.shake = Math.min(0.22, this.shake + 0.08); + this.gush(index, position, out, TORN_GUSH_SECONDS, TORN_GUSH_RATE, safeEventId); } anchorHandStump( @@ -1643,6 +1880,7 @@ export class Effects3D { stump.mesh.material = this.stumpMaterial; // What his finisher threw goes with it, to be thrown again if a replay brings the finisher back. this.clearGibs(index); + this.stopGush(index); const eye = this.eyes[index]!; eye.active = false; eye.bleeding = 0; @@ -1672,7 +1910,7 @@ export class Effects3D { } const emitter = this.dripEmitters[index]; emitter.position.set(finite(headWorld.x), finite(headWorld.y, 1.5), finite(headWorld.z)); - emitter.rate = this.bloodLevel === "reduced" ? Math.min(3, severity * 3) : Math.min(18, severity * 14); + emitter.rate = this.bloodLevel === "reduced" ? Math.min(3, severity * 3) : Math.min(60, severity * 40); emitter.active = true; } @@ -1683,6 +1921,85 @@ export class Effects3D { emitter.accumulator = 0; } + /** + * Blood pours from a fighter's wound at `position` along `axis` with every beat of his heart, `rate` drops + * a second at first and easing off over `seconds`; `anchorGush` keeps it on him as he moves. A new wound's + * gush takes the place of the one before, and the same event never starts one twice. Only with full blood. + */ + gush(fighterIndex: number, position: THREE.Vector3, axis: THREE.Vector3, seconds: number, rate: number, eventId: number): void { + if (this.bloodLevel !== "full" || fighterIndex < 0 || fighterIndex >= this.gushes.length) return; + const gush = this.gushes[Math.trunc(fighterIndex)]!; + const safeEventId = Number.isSafeInteger(eventId) ? eventId : 0; + if (gush.active && gush.eventId === safeEventId) return; + gush.active = true; + gush.eventId = safeEventId; + gush.seconds = Math.max(0.1, finite(seconds, 1)); + gush.life = gush.seconds; + gush.rate = Math.max(0, finite(rate)); + gush.accumulator = 0; + this.anchorGush(fighterIndex, position, axis); + } + + anchorGush(fighterIndex: number, position: THREE.Vector3, axis: THREE.Vector3): void { + const gush = this.gushes[Math.trunc(fighterIndex)]; + if (gush === undefined || !gush.active) return; + gush.position.set(finite(position.x), finite(position.y, 1.4), finite(position.z)); + if (axis.lengthSq() > 1e-8 && Number.isFinite(axis.lengthSq())) gush.axis.copy(axis).normalize(); + } + + /** Whether a fighter's wound is still pouring. */ + gushing(fighterIndex: number): boolean { + return this.gushes[Math.trunc(fighterIndex)]?.active === true; + } + + stopGush(fighterIndex: number): void { + const gush = this.gushes[fighterIndex]; + if (gush === undefined) return; + gush.active = false; + gush.eventId = null; + } + + private updateGushes(step: number): void { + for (const gush of this.gushes) { + if (!gush.active) continue; + gush.life -= step; + if (gush.life <= 0 || this.bloodLevel !== "full") { + gush.active = false; + continue; + } + const pressure = gush.life / gush.seconds; + const beat = ((gush.seconds - gush.life) * HEART_RATE) % 1; + const pulse = Math.exp(-(((beat - 0.5) / GUSH_PULSE_WIDTH) ** 2)); + gush.accumulator += step * this.forDevice(gush.rate) * pressure * (GUSH_BETWEEN_BEATS + (1 - GUSH_BETWEEN_BEATS) * pulse); + if (gush.accumulator < 1) continue; + fountainSide.set(Math.abs(gush.axis.y) < 0.9 ? 0 : 1, Math.abs(gush.axis.y) < 0.9 ? 1 : 0, 0).cross(gush.axis).normalize(); + fountainUp.crossVectors(gush.axis, fountainSide); + while (gush.accumulator >= 1) { + gush.accumulator -= 1; + // A stream out of the wound, wider and slower than an artery's, that gravity soon turns down. + const tilt = Math.sqrt(this.ambientRandom()) * GUSH_CONE; + const around = this.ambientRandom() * Math.PI * 2; + const speed = (GUSH_SPEED_LOW + this.ambientRandom() * (GUSH_SPEED_HIGH - GUSH_SPEED_LOW)) * (0.5 + 0.5 * pressure) * (0.7 + 0.3 * pulse); + fountainVelocity.copy(gush.axis).multiplyScalar(Math.cos(tilt)) + .addScaledVector(fountainSide, Math.sin(tilt) * Math.cos(around)) + .addScaledVector(fountainUp, Math.sin(tilt) * Math.sin(around)) + .multiplyScalar(speed); + this.spawnDroplet( + gush.position.x + (this.ambientRandom() - 0.5) * 0.03, + gush.position.y + (this.ambientRandom() - 0.5) * 0.02, + gush.position.z + (this.ambientRandom() - 0.5) * 0.03, + fountainVelocity.x, + fountainVelocity.y, + fountainVelocity.z, + bloodShade(this.ambientRandom()), + 1.2, + true, + 0.004 + this.ambientRandom() ** 2 * 0.01, + ); + } + } + } + private updateDripEmitters(step: number): void { for (const emitter of this.dripEmitters) { if (!emitter.active) continue; @@ -1704,12 +2021,16 @@ export class Effects3D { } } - /** Ejects teeth from the mouth on heavy head contact, in a spray of blood that reduced blood cuts to a few drops. */ + /** + * Ejects teeth from the mouth on heavy head contact, in a spray of blood. Reduced blood knocks out one tooth, + * and only from a blow that would take three or more, and cuts the spray to a few drops. + */ spawnTeeth(mouthWorld: THREE.Vector3, direction: number | SprayDirection, count: number, eventId: number): void { if (this.bloodLevel === "off") return; + const teeth = this.bloodLevel === "reduced" ? (count >= 3 ? 1 : 0) : Math.min(12, Math.max(1, Math.round(count))); + if (teeth <= 0) return; const rand = seeded((Number.isSafeInteger(eventId) ? eventId : 0) * 7331 + 91); const launch = unitSpray(direction); - const teeth = Math.min(4, Math.max(1, Math.round(count * (this.bloodLevel === "reduced" ? 0.5 : 1)))); for (let i = 0; i < teeth; i += 1) { const angle = rand() * Math.PI * 2; this.sprayGib( @@ -1732,9 +2053,10 @@ export class Effects3D { private spawnGib(x: number, y: number, z: number, vx: number, vy: number, vz: number, rand: () => number, kind: DebrisKind = "flesh", owner = -1): void { const shard = kind === "shard"; - const pool = shard ? this.shards : this.gibs; - const mesh = shard ? this.shardMesh : this.gibMesh; - const index = this.debrisSlot(pool, shard); + const eye = kind === "eye"; + const pool = shard ? this.shards : eye ? this.eyeballs : this.gibs; + const mesh = shard ? this.shardMesh : eye ? this.eyeballMesh : this.gibMesh; + const index = this.debrisSlot(pool); const gib = pool[index]!; gib.alive = true; gib.kind = kind; @@ -1744,6 +2066,7 @@ export class Effects3D { gib.fading = -1; const shade = 0.55 + rand() * 0.45; if (kind === "tooth") this.gibColor.setHex(0xf3ead6); + else if (eye) this.gibColor.setHex(0xffffff); else if (kind === "brain") this.gibColor.setHex(rand() < 0.3 ? 0x8a3a3c : 0xb7918e).multiplyScalar(0.8 + shade * 0.25); else if (shard) this.gibColor.setScalar(0.85 + shade * 0.15); else { @@ -1764,8 +2087,8 @@ export class Effects3D { gib.vrx = (rand() - 0.5) * 18; gib.vry = (rand() - 0.5) * 18; gib.vrz = (rand() - 0.5) * 18; - gib.scale = kind === "tooth" ? 0.22 + rand() * 0.12 : shard ? 0.6 + rand() * 0.6 : kind === "brain" ? 0.45 + rand() * 0.55 : 0.3 + rand() * 0.6; - gib.stretch = kind === "tooth" ? 1 : 0.7 + rand() * 0.9; + gib.scale = kind === "tooth" ? 0.22 + rand() * 0.12 : shard ? 0.6 + rand() * 0.6 : eye ? EYEBALL_SCALE : kind === "brain" ? 0.45 + rand() * 0.55 : 0.3 + rand() * 0.6; + gib.stretch = kind === "tooth" || eye ? 1 : 0.7 + rand() * 0.9; gib.bounces = 0; gib.stained = false; this.writeDebrisMatrix(mesh, index, gib); @@ -1774,8 +2097,8 @@ export class Effects3D { } /** A free place in a pool, looking from the next in turn; with none free, the oldest piece's. */ - private debrisSlot(pool: readonly Gib[], shard: boolean): number { - const start = shard ? this.shardIndex : this.gibIndex; + private debrisSlot(pool: readonly Gib[]): number { + const start = pool === this.shards ? this.shardIndex : pool === this.eyeballs ? this.eyeballIndex : this.gibIndex; let slot = start % pool.length; for (let step = 0; step < pool.length; step += 1) { const index = (start + step) % pool.length; @@ -1785,7 +2108,8 @@ export class Effects3D { } if (pool[index]!.born < pool[slot]!.born) slot = index; } - if (shard) this.shardIndex = slot + 1; + if (pool === this.shards) this.shardIndex = slot + 1; + else if (pool === this.eyeballs) this.eyeballIndex = slot + 1; else this.gibIndex = slot + 1; return slot; } @@ -1842,9 +2166,11 @@ export class Effects3D { gib.ry += gib.vry * dt; gib.rz += gib.vrz * dt; this.confineGib(gib); - if (gib.y <= CANVAS_TOP + 0.015) { - gib.y = CANVAS_TOP + 0.015; - if (!gib.stained && this.bloodLevel === "full" && gib.kind !== "tooth") { + // An eyeball rolls on the canvas on its own radius; anything else lies flat on it. + const floor = CANVAS_TOP + (gib.kind === "eye" ? EYE_RADIUS * EYEBALL_SCALE : 0.015); + if (gib.y <= floor) { + gib.y = floor; + if (!gib.stained && this.bloodLevel === "full" && gib.kind !== "tooth" && gib.kind !== "eye") { gib.stained = true; this.placeDecal(gib.x, gib.z, 0.24 + gib.scale * 0.16, 0.14 + gib.scale * 0.1, gib.rz, 0.55, 0x620a10); } @@ -1900,6 +2226,25 @@ export class Effects3D { part.mesh.rotation.x += part.vrx * dt; part.mesh.rotation.y += part.vry * dt; part.mesh.rotation.z += part.vrz * dt; + // Flying free, it trails a stream of blood from its cut. + if (this.bloodLevel === "full") { + part.trail += dt * this.forDevice(SEVERED_TRAIL_RATE); + if (part.trail >= 1) this.trailPoint.copy(part.cap.position).multiply(part.mesh.scale).applyQuaternion(part.mesh.quaternion).add(part.mesh.position); + while (part.trail >= 1) { + part.trail -= 1; + this.spawnDroplet( + this.trailPoint.x + (this.ambientRandom() - 0.5) * 0.03, + this.trailPoint.y + (this.ambientRandom() - 0.5) * 0.03, + this.trailPoint.z + (this.ambientRandom() - 0.5) * 0.03, + part.vx * 0.35 + (this.ambientRandom() - 0.5) * 0.9, + part.vy * 0.35 + (this.ambientRandom() - 0.5) * 0.9, + part.vz * 0.35 + (this.ambientRandom() - 0.5) * 0.9, + bloodShade(this.ambientRandom()), + 0.9, + true, + ); + } + } // The ropes keep a severed part in the ring, where the cameras can reach it. const limit = ROPE_LINE - part.radius - SEVERED_PART_MARGIN; const x = confineToRopes(part.mesh.position.x, part.vx, fromX, limit); @@ -1980,7 +2325,7 @@ export class Effects3D { const pressure = Math.min(1, stump.fountainLife / FOUNTAIN_FADE_SECONDS); const beat = (stump.fountainLife * HEART_RATE) % 1; const spurt = Math.exp(-(((beat - 0.5) / SPURT_WIDTH) ** 2)); - stump.accumulator += dt * FOUNTAIN_PEAK_RATE * pressure * (FOUNTAIN_BETWEEN_BEATS + (1 - FOUNTAIN_BETWEEN_BEATS) * spurt); + stump.accumulator += dt * this.forDevice(FOUNTAIN_PEAK_RATE) * pressure * (FOUNTAIN_BETWEEN_BEATS + (1 - FOUNTAIN_BETWEEN_BEATS) * spurt); if (stump.accumulator < 1) continue; const axis = stumpAxis(stump, fountainAxis); fountainSide.set(Math.abs(axis.y) < 0.9 ? 0 : 1, Math.abs(axis.y) < 0.9 ? 1 : 0, 0).cross(axis).normalize(); @@ -2015,6 +2360,7 @@ export class Effects3D { update(dt: number): void { this.canvasBlood.update(safeStep(dt)); + this.lens.update(safeStep(dt)); this.simulationRemainder += safeStep(dt); while (this.simulationRemainder + 1e-9 >= SIMULATION_STEP) { this.simulationRemainder = Math.max(0, this.simulationRemainder - SIMULATION_STEP); @@ -2025,6 +2371,7 @@ export class Effects3D { private simulate(step: number): void { this.shake *= Math.pow(0.02, step); this.updateDripEmitters(step); + this.updateGushes(step); this.updateStumpFountains(step); this.updateDetachedParts(this.heads, step); this.updateDetachedParts(this.hands, step); @@ -2032,6 +2379,7 @@ export class Effects3D { this.updateEyes(step); this.updateDebris(this.gibs, this.gibMesh, step); this.updateDebris(this.shards, this.shardMesh, step); + this.updateDebris(this.eyeballs, this.eyeballMesh, step); const live = this.liveDroplets; let retired = false; @@ -2039,12 +2387,13 @@ export class Effects3D { const droplet = this.droplets[i]!; droplet.life -= step; if (droplet.life <= 0 || droplet.y < CANVAS_TOP) { - // A drop leaves a spot the size of the drop: fine spray soaks in unseen, a gob of blood splashes. - const lands = THREE.MathUtils.clamp(droplet.radius / GOB, 0.25, 1) * (this.bloodLevel === "full" ? 1 : 0.4); + // A drop leaves a spot the size of the drop: a gob of blood always splashes, fine spray mostly does. + const full = this.bloodLevel === "full"; + const lands = full ? THREE.MathUtils.clamp(droplet.radius / GOB, FINE_SPRAY_STAINS, 1) : THREE.MathUtils.clamp(droplet.radius / GOB, 0.25, 1) * 0.4; if (droplet.y < CANVAS_TOP && droplet.blood && this.bloodLevel !== "off" && this.ambientRandom() < lands) { - const scale = this.bloodLevel === "full" ? 1 : 0.6; + const scale = full ? SOAK : 0.6; const size = droplet.radius * (40 + this.ambientRandom() * 20) * scale; - this.placeDecal(droplet.x, droplet.z, size, size * (0.55 + this.ambientRandom() * 0.35), this.ambientRandom() * Math.PI, this.bloodLevel === "full" ? DROP_STAIN : DROP_STAIN * 0.6, 0x6e0d13); + this.placeDecal(droplet.x, droplet.z, size, size * (0.55 + this.ambientRandom() * 0.35), this.ambientRandom() * Math.PI, DROP_STAIN * (full ? SOAK : 0.6), 0x6e0d13); } // The last live droplet takes this slot and is stepped next. this.retireDroplet(i); @@ -2121,7 +2470,7 @@ export class Effects3D { /** Clears the debris on the canvas, or only what `owner`'s finisher threw. */ private clearGibs(owner?: number): void { - for (const [pool, mesh] of [[this.gibs, this.gibMesh], [this.shards, this.shardMesh]] as const) { + for (const [pool, mesh] of [[this.gibs, this.gibMesh], [this.shards, this.shardMesh], [this.eyeballs, this.eyeballMesh]] as const) { let changed = false; for (const [index, gib] of pool.entries()) { if (!gib.alive || (owner !== undefined && gib.owner !== owner)) continue; @@ -2136,9 +2485,11 @@ export class Effects3D { clearDynamic(): void { this.clearDroplets(false); this.clearMists(); + this.lens.clear(); this.clearGibs(); this.clearMouthpieces(); for (let index = 0; index < MAX_HEADS; index += 1) this.restoreFighter(index); + this.stopGush(REFEREE_GUSH); this.shake = 0; this.stopDrip(0); this.stopDrip(1); @@ -2149,8 +2500,10 @@ export class Effects3D { clearArcadeGore(): void { this.clearDroplets(true); this.clearMists(); + this.lens.clear(); this.clearGibs(); for (let index = 0; index < MAX_HEADS; index += 1) this.restoreFighter(index); + this.stopGush(REFEREE_GUSH); this.clearDecals(); this.stopDrip(0); this.stopDrip(1); @@ -2166,6 +2519,7 @@ export class Effects3D { this.scene.remove(this.mistPoints); this.scene.remove(this.gibMesh); this.scene.remove(this.shardMesh); + this.scene.remove(this.eyeballMesh); this.dropletMesh.dispose(); this.dropletGeometry.dispose(); this.dropletMaterial.dispose(); @@ -2182,6 +2536,7 @@ export class Effects3D { this.gibGeometry.dispose(); this.gibMaterial.dispose(); this.shardMesh.dispose(); + this.eyeballMesh.dispose(); this.shardGeometry.dispose(); this.shardMaterial.dispose(); this.jawMaterial.dispose(); diff --git a/web/hands/src/render/eye.test.ts b/web/hands/src/render/eye.test.ts index fe6a3ef6..4693c296 100644 --- a/web/hands/src/render/eye.test.ts +++ b/web/hands/src/render/eye.test.ts @@ -5,7 +5,7 @@ import type { CombatEvent } from "../types"; import { EYE_NERVE_LENGTH, Effects3D } from "./effects"; import { SkinnedBoxer, loadBoxerGlb } from "./graph"; import { BODY_SITES, EYE_LIDS, HEAD_SITES, InjuryShading } from "./injury"; -import { FightRenderer, arcadeInjuryFor, eyeSocket, replayReattaches } from "./renderer"; +import { FightRenderer, arcadeInjuryFor, eyeSocket } from "./renderer"; import { CANVAS_TOP } from "./world"; const gltf = await loadBoxerGlb(); @@ -15,15 +15,14 @@ const hit = (detail: string, eventId: number): CombatEvent => ({ event_id: event const puncher = (hand: string) => ({ ...fighter("one"), action_key: `hook:${hand}:head:normal` }); describe("an eye forced out", () => { - it("is what a hard finishing hook earns, on the side it lands; other punches keep their finishers", () => { + it("is what a finishing hook or jab earns, on the side it lands; other punches keep their finishers", () => { expect(arcadeInjuryFor(hit("hook:head", 1), downed, ko, puncher("left"))).toBe("eye_right"); expect(arcadeInjuryFor(hit("hook:head", 3), downed, ko, puncher("right"))).toBe("eye_left"); expect(arcadeInjuryFor(hit("hook:head", 2), downed, ko, puncher("left"))).toBe("eye_right"); - expect(arcadeInjuryFor({ ...hit("hook:head", 2), amount: 50 }, downed, ko, puncher("left"))).toBe("jaw_dislocation"); + expect(arcadeInjuryFor({ ...hit("jab:head", 2), amount: 45 }, downed, ko, puncher("left"))).toBe("eye_right"); + expect(arcadeInjuryFor({ ...hit("hook:head", 2), amount: 39 }, downed, ko, puncher("left"))).toBe("jaw_dislocation"); expect(arcadeInjuryFor(hit("straight:head", 1), downed, ko, puncher("left"))).toBe("decapitation"); expect(["eye_left", "eye_right"]).toContain(arcadeInjuryFor(hit("hook:head", 5), downed, ko)); - expect(replayReattaches("eye_left")).toBe(true); - expect(replayReattaches("eye_right")).toBe(true); }); it("leaves a hollow, bleeding socket where the face has an eye, and nothing on the body", () => { @@ -36,6 +35,11 @@ describe("an eye forced out", () => { head.setEyeOut(null); expect(head.eyeOut).toBeNull(); expect(head.level("rightEye").blood).toBe(0); + head.setEyeOut("both"); + expect(head.eyeOut).toBe("both"); + expect(head.uniforms.uInjuryEyeOut.value.toArray()).toEqual([1, 1]); + expect(head.level("leftEye").blood).toBeGreaterThan(1); + expect(head.level("rightEye").blood).toBeGreaterThan(1); head.setEyeOut("left"); head.clear(); expect(head.eyeOut).toBeNull(); @@ -52,6 +56,18 @@ describe("an eye forced out", () => { expect(shader.fragmentShader).not.toMatch(/\bfloat out\b/); }); + it("leaves both sockets empty on the face, the one it hangs from and the one the other eye popped out of", () => { + const boxer = new SkinnedBoxer(gltf, { skin: 0xb0703f, gear: 0x1d4ed8 }); + const stub = { arcadeInjuries: [null, "eye_right"], graphs: [null, { boxer, setArcadeDislocation: vi.fn() }] }; + const sync = (FightRenderer.prototype as unknown as { syncInjuryPresentation(this: unknown, index: number): void }).syncInjuryPresentation; + sync.call(stub, 1); + expect(boxer.headInjury.eyeOut).toBe("both"); + stub.arcadeInjuries[1] = null; + sync.call(stub, 1); + expect(boxer.headInjury.eyeOut).toBeNull(); + boxer.dispose(); + }); + it("sits in its socket on the face as it is posed, the left and the right on their own sides", () => { const boxer = new SkinnedBoxer(gltf, { skin: 0xb0703f, gear: 0x1d4ed8 }); boxer.root.rotation.y = 0.7; @@ -103,6 +119,27 @@ describe("an eye forced out", () => { reduced.dispose(); }); + it("bursts out of the socket in a spray of blood and flesh, pops the other eye clean out, and the socket pours for seconds after", () => { + const effects = new Effects3D(new THREE.Scene(), 256); + const socket = new THREE.Vector3(0.2, 1.6, 0.1); + effects.gougeEye(0, socket, new THREE.Vector3(0, 0, 1), 1, 50); + expect(effects.liveBloodParticles).toBeGreaterThan(350); + expect(effects.debrisCount("flesh")).toBeGreaterThanOrEqual(10); + expect(effects.debrisCount("eye")).toBe(1); + expect(effects.liveMist).toBeGreaterThan(20); + expect(effects.canvasStains).toBeGreaterThan(15); + const poured = vi.spyOn(effects as unknown as { spawnDroplet(...args: number[]): void }, "spawnDroplet"); + for (let frame = 0; frame < 60 * 9; frame += 1) effects.update(1 / 60); + expect(poured.mock.calls.length).toBeGreaterThan(700); + poured.mockClear(); + for (let frame = 0; frame < 60 * 2; frame += 1) effects.update(1 / 60); + expect(poured.mock.calls.length).toBeLessThan(120); + // A replay that puts him back together takes the loose eye up again. + effects.restoreFighter(0); + expect(effects.debrisCount("eye")).toBe(0); + effects.dispose(); + }); + it("is shot close in the finish, aimed at the eye from the side it hangs on", () => { const effects = new Effects3D(new THREE.Scene(), 256); const socket = new THREE.Vector3(0.6, 0.3, 0.2); diff --git a/web/hands/src/render/gear.test.ts b/web/hands/src/render/gear.test.ts index 6341a41a..351c921c 100644 --- a/web/hands/src/render/gear.test.ts +++ b/web/hands/src/render/gear.test.ts @@ -64,6 +64,15 @@ describe("blood on the gloves", () => { graph.dispose(); }); + it("soaks them from the first punches that bloody the opponent's face", () => { + const boxer = new SkinnedBoxer(gltf, { skin: 0xb0703f, gear: 0x1d4ed8 }); + const graph = new BoxingGraph(boxer, mapping); + const early = { ...bleeding("two"), trauma: { head: 200, body: 0, left_eye: 0, right_eye: 0, left_cut: 40, right_cut: 0, swelling: 0, bleeding: 20 } }; + graph.update(fighter(), early, 1 / 60, 0, false, "full", 1, undefined); + expect(boxer.gloveBloodLevel).toBeGreaterThan(0.5); + graph.dispose(); + }); + it("is lighter with reduced blood and absent with blood off", () => { const boxer = new SkinnedBoxer(gltf, { skin: 0xb0703f, gear: 0xb91c1c }); const graph = new BoxingGraph(boxer, mapping); diff --git a/web/hands/src/render/gore.test.ts b/web/hands/src/render/gore.test.ts index f26f1aea..18fb8b32 100644 --- a/web/hands/src/render/gore.test.ts +++ b/web/hands/src/render/gore.test.ts @@ -2,11 +2,11 @@ import * as THREE from "three"; import { describe, expect, it } from "vitest"; import { fighter } from "../test/fixtures"; import type { CombatEvent, FighterSnapshot } from "../types"; -import { BIG_SHOT, BLOOD_SHADES, HARD_SHOT, ROCKING_COUNTER, bloodDropsFor, bloodShade, buildChunkGeometry, buildDropletGeometry, buildWoundGeometry, closeCut, cutRim, dropletShape, teethFor } from "./gore"; +import { BIG_SHOT, BLOOD_SHADES, HARD_SHOT, MISTING_SHOT, MOST_DROPS, ROCKING_COUNTER, TEARING_SHOT, bloodDropsFor, bloodShade, buildChunkGeometry, buildDropletGeometry, buildWoundGeometry, closeCut, cutRim, dropletShape, teethFor } from "./gore"; import { BoxingGraph, SkinnedBoxer, loadBoxerGlb } from "./graph"; import { HEAD_SITES, InjuryShading, NECK_CUT_HEIGHT, applyHeadTrauma } from "./injury"; import { SCANNED_LOOK, lookShape } from "./looks"; -import { Effects3D, confineToRopes } from "./effects"; +import { DESKTOP_GORE, Effects3D, PHONE_GORE, confineToRopes } from "./effects"; import { FightRenderer, aboveNeckCut, bakeSeveredHead, bakeSkinnedPart, closeUpAngle, keepClear } from "./renderer"; import { CANVAS_TOP, ROPE_LINE, worldMapping } from "./world"; @@ -463,15 +463,17 @@ describe("neck cut", () => { describe("an arterial fountain", () => { type Spawn = { time: number; velocity: THREE.Vector3; at: THREE.Vector3 }; - /** Every drop a stump throws, and when: from the cut until `seconds` later. */ + /** Every drop a stump throws, and when: from the cut until `seconds` later. The part it was cut from is held still, so its own trail adds none. */ const pump = (effects: Effects3D, seconds: number): Spawn[] => { const spawns: Spawn[] = []; let time = 0; const spawn = vi.spyOn(effects as unknown as { spawnDroplet(...args: number[]): void }, "spawnDroplet").mockImplementation((x, y, z, vx, vy, vz) => { spawns.push({ time, velocity: new THREE.Vector3(vx, vy, vz), at: new THREE.Vector3(x, y, z) }); }); + const parts = vi.spyOn(effects as unknown as { updateDetachedParts(...args: unknown[]): void }, "updateDetachedParts").mockImplementation(() => undefined); for (; time < seconds; time += 1 / 60) effects.update(1 / 60); spawn.mockRestore(); + parts.mockRestore(); return spawns; }; // A neck lying on the canvas, its wound facing along +x. @@ -485,11 +487,11 @@ describe("an arterial fountain", () => { it("pumps with the heart for seconds, in spurts that weaken as he bleeds out", () => { const effects = new Effects3D(new THREE.Scene()); severed(effects); - const spawns = pump(effects, 9); + const spawns = pump(effects, 17); const between = (from: number, to: number): Spawn[] => spawns.filter((spawn) => spawn.time >= from && spawn.time < to); - expect(between(5, 6.5).length).toBeGreaterThan(5); - expect(between(6.6, 9)).toHaveLength(0); - expect(between(0, 1).length).toBeGreaterThan(between(4, 5).length * 1.5); + expect(between(11, 14).length).toBeGreaterThan(5); + expect(between(14.1, 17)).toHaveLength(0); + expect(between(0, 1).length).toBeGreaterThan(between(11.5, 12.5).length * 1.5); // Spurts at the heart's rate: tenths of a second at the top of a beat throw far more than those between beats. const tenths = Array.from({ length: 24 }, (_, tenth) => between(tenth / 10, (tenth + 1) / 10).length); expect(Math.max(...tenths)).toBeGreaterThanOrEqual(Math.max(4, 4 * Math.min(...tenths))); @@ -498,24 +500,31 @@ describe("an arterial fountain", () => { // 1.7 beats a second: four beats in 2.4 s. expect(peaks).toBeGreaterThanOrEqual(3); expect(peaks).toBeLessThanOrEqual(5); - // Its heaviest spurts throw only so many drops, for the phones. - expect(spawns.length).toBeLessThan(260); + // Grotesque: about 1,250 drops over its fourteen seconds on a desktop, and half as many on a phone. + expect(spawns.length).toBeGreaterThan(1000); + expect(spawns.length).toBeLessThan(1500); + const phone = new Effects3D(new THREE.Scene(), 256, PHONE_GORE); + severed(phone); + expect(pump(phone, 17).length).toBeLessThanOrEqual(Math.ceil(spawns.length / 2) + 5); + phone.dispose(); effects.dispose(); }); - it("throws the blood at arterial speed along the wound's axis, not straight up", () => { + it("throws the blood in a geyser along the wound's axis, not straight up", () => { const effects = new Effects3D(new THREE.Scene()); severed(effects); - const spawns = pump(effects, 6.5); + const spawns = pump(effects, 14); const early = spawns.filter((spawn) => spawn.time < 1.5); for (const spawn of spawns) { - expect(THREE.MathUtils.radToDeg(spawn.velocity.angleTo(along))).toBeLessThan(25); - expect(spawn.velocity.length()).toBeLessThanOrEqual(6 + 1e-9); + expect(THREE.MathUtils.radToDeg(spawn.velocity.angleTo(along))).toBeLessThan(27); + expect(spawn.velocity.length()).toBeLessThanOrEqual(8.5 + 1e-9); } - const fast = early.filter((spawn) => spawn.velocity.length() >= 4); + const fast = early.filter((spawn) => spawn.velocity.length() >= 5.5); expect(fast.length).toBeGreaterThan(early.length * 0.3); + // The top of a beat throws it hard enough to rain three metres up. + expect(early.some((spawn) => spawn.velocity.length() > 7.5)).toBe(true); // Weaker as the pressure falls. - const late = spawns.filter((spawn) => spawn.time > 5.5); + const late = spawns.filter((spawn) => spawn.time > 13); const mean = (list: Spawn[]): number => list.reduce((sum, spawn) => sum + spawn.velocity.length(), 0) / Math.max(1, list.length); expect(mean(late)).toBeLessThan(mean(early) * 0.8); effects.dispose(); @@ -538,7 +547,7 @@ describe("an arterial fountain", () => { effects.anchorStump(0, centre, turn, rim); const spawns = pump(effects, 1); expect(spawns.length).toBeGreaterThan(10); - for (const spawn of spawns) expect(THREE.MathUtils.radToDeg(spawn.velocity.angleTo(outward))).toBeLessThan(25); + for (const spawn of spawns) expect(THREE.MathUtils.radToDeg(spawn.velocity.angleTo(outward))).toBeLessThan(27); effects.dispose(); }); @@ -548,7 +557,7 @@ describe("an arterial fountain", () => { effects.anchorHandStump(0, "left", new THREE.Vector3(0.3, 0.2, 0), lying); const spawns = pump(effects, 6); expect(spawns.filter((spawn) => spawn.time > 3).length).toBeGreaterThan(5); - for (const spawn of spawns) expect(THREE.MathUtils.radToDeg(spawn.velocity.angleTo(along))).toBeLessThan(25); + for (const spawn of spawns) expect(THREE.MathUtils.radToDeg(spawn.velocity.angleTo(along))).toBeLessThan(27); const reduced = new Effects3D(new THREE.Scene()); severed(reduced); reduced.setBloodLevel("reduced"); @@ -558,6 +567,81 @@ describe("an arterial fountain", () => { }); }); +describe("a wound that gushes", () => { + type Spawn = { time: number; velocity: THREE.Vector3; at: THREE.Vector3 }; + const pour = (effects: Effects3D, seconds: number, each?: (time: number) => void): Spawn[] => { + const spawns: Spawn[] = []; + let time = 0; + const spawn = vi.spyOn(effects as unknown as { spawnDroplet(...args: number[]): void }, "spawnDroplet").mockImplementation((x, y, z, vx, vy, vz) => { + spawns.push({ time, velocity: new THREE.Vector3(vx, vy, vz), at: new THREE.Vector3(x, y, z) }); + }); + for (; time < seconds; time += 1 / 60) { + each?.(time); + effects.update(1 / 60); + } + spawn.mockRestore(); + return spawns; + }; + const mouth = new THREE.Vector3(0.3, 1.45, 0.1); + const out = new THREE.Vector3(0, -0.35, 1).normalize(); + + it("stops pouring from the mouth once the head comes off or bursts", () => { + for (const finish of ["decapitate", "burst"] as const) { + const effects = new Effects3D(new THREE.Scene()); + effects.gush(1, mouth, out, 3, 300, 12); + expect(effects.gushing(1)).toBe(true); + if (finish === "decapitate") effects.decapitate(1, new THREE.Vector3(0.3, 1.55, 0.1), new THREE.Quaternion(), 1, 13); + else effects.burstHead(1, new THREE.Vector3(0.3, 1.6, 0.1), 1, 14); + expect(effects.gushing(1)).toBe(false); + effects.dispose(); + } + }); + + it("pours out of the wound with every beat, slower and wider than an artery, easing off to nothing", () => { + const effects = new Effects3D(new THREE.Scene()); + effects.gush(1, mouth, out, 2, 160, 12); + expect(effects.gushing(1)).toBe(true); + expect(effects.gushing(0)).toBe(false); + const spawns = pour(effects, 3); + const between = (from: number, to: number): number => spawns.filter((spawn) => spawn.time >= from && spawn.time < to).length; + expect(spawns.length).toBeGreaterThan(60); + expect(between(0, 1)).toBeGreaterThan(between(1, 2) * 1.5); + expect(between(2.05, 3)).toBe(0); + expect(effects.gushing(1)).toBe(false); + for (const spawn of spawns) { + expect(THREE.MathUtils.radToDeg(spawn.velocity.angleTo(out))).toBeLessThan(33); + expect(spawn.velocity.length()).toBeLessThan(3.3); + expect(spawn.at.distanceTo(mouth)).toBeLessThan(0.03); + } + effects.dispose(); + }); + + it("follows the wound as the fighter moves, and stops when he is put back together or the blood is turned down", () => { + const effects = new Effects3D(new THREE.Scene()); + effects.gush(0, mouth, out, 3, 160, 4); + const moved = new THREE.Vector3(-0.5, 0.3, 0.6); + const spawns = pour(effects, 0.6, () => effects.anchorGush(0, moved, new THREE.Vector3(1, 0, 0))); + expect(spawns.length).toBeGreaterThan(10); + for (const spawn of spawns) { + expect(spawn.at.distanceTo(moved)).toBeLessThan(0.03); + expect(spawn.velocity.x).toBeGreaterThan(0); + } + // The same blow never starts it again, and a new one takes its place. + effects.gush(0, mouth, out, 3, 160, 4); + expect(pour(effects, 0.1).every((spawn) => spawn.at.distanceTo(moved) < 0.03)).toBe(true); + effects.gush(0, mouth, out, 3, 160, 5); + expect(pour(effects, 0.3).every((spawn) => spawn.at.distanceTo(mouth) < 0.03)).toBe(true); + effects.restoreFighter(0); + expect(effects.gushing(0)).toBe(false); + effects.gush(0, mouth, out, 3, 160, 6); + effects.setBloodLevel("reduced"); + expect(pour(effects, 0.5)).toHaveLength(0); + effects.gush(1, mouth, out, 3, 160, 7); + expect(effects.gushing(1)).toBe(false); + effects.dispose(); + }); +}); + describe("ropes and a severed part", () => { it("bounce a part that reaches them from inside", () => { expect(confineToRopes(2.35, 3, 2.28, 2.3)).toEqual({ position: 2.3, velocity: 3 * -0.42 }); @@ -686,7 +770,7 @@ describe("blood in the air", () => { const effects = new Effects3D(new THREE.Scene()); effects.addEvent(hit, new THREE.Vector3(0, 1.5, 0), false); const slots = bloodSlots(effects); - expect(slots.length).toBe(140); + expect(slots.length).toBe(MOST_DROPS); const origin = slots.map((slot) => dropAt(effects, slot)); for (let frame = 0; frame < 9; frame += 1) effects.update(1 / 60); const matrix = new THREE.Matrix4(); @@ -711,7 +795,7 @@ describe("blood in the air", () => { expect(size(slots[lead + 2]!)).toBeLessThan(size(slots[lead + 1]!)); strands += 1; } - expect(strands).toBe(28); + expect(strands).toBe(MOST_DROPS / 5); const free = dropAt(effects, slots[3]!).sub(dropAt(effects, slots[0]!)); const trailing = dropAt(effects, slots[1]!).sub(dropAt(effects, slots[0]!)); expect(free.clone().cross(trailing).length()).toBeGreaterThan(1e-4); @@ -759,6 +843,35 @@ describe("blood in the air", () => { }); describe("severed head", () => { + it("trails a stream of blood from its neck while it flies, and none once it lies still or with reduced blood", () => { + type Spawn = { time: number; at: THREE.Vector3 }; + const fly = (level: "full" | "reduced", seconds: number): { spawns: Spawn[]; effects: Effects3D } => { + const effects = new Effects3D(new THREE.Scene()); + effects.setBloodLevel(level); + effects.decapitate(0, new THREE.Vector3(0, 1.55, 0), new THREE.Quaternion(), 1, 13); + const spawns: Spawn[] = []; + let time = 0; + const spawn = vi.spyOn(effects as unknown as { spawnDroplet(...args: number[]): void }, "spawnDroplet").mockImplementation((x, y, z) => spawns.push({ time, at: new THREE.Vector3(x, y, z) })); + const fountains = vi.spyOn(effects as unknown as { updateStumpFountains(dt: number): void }, "updateStumpFountains").mockImplementation(() => undefined); + for (; time < seconds; time += 1 / 60) effects.update(1 / 60); + spawn.mockRestore(); + fountains.mockRestore(); + return { spawns, effects }; + }; + const { spawns, effects } = fly("full", 6); + const head = new THREE.Vector3(); + effects.severedHeadPosition(0, head); + const flying = spawns.filter((spawn) => spawn.time < 0.5); + expect(flying.length).toBeGreaterThan(60); + // The trail follows the head: it leaves farther from the neck as the head flies on. + expect(flying.at(-1)!.at.x).toBeGreaterThan(flying[0]!.at.x + 0.4); + expect(spawns.filter((spawn) => spawn.time > 5)).toHaveLength(0); + effects.dispose(); + const reduced = fly("reduced", 1); + expect(reduced.spawns).toHaveLength(0); + reduced.effects.dispose(); + }); + it("stays inside the ropes however hard it is launched", () => { const effects = new Effects3D(new THREE.Scene()); effects.decapitate(0, new THREE.Vector3(2.2, 1.5, -2.2), new THREE.Quaternion(), 1, 9); @@ -831,17 +944,20 @@ describe("referee and a head on the canvas", () => { const head = new THREE.Vector3(); effects.severedHeadPosition(1, head); const updated: unknown[] = []; - const stub = { + const stub = Object.assign(Object.create(FightRenderer.prototype) as Record, { referee: { setRefereeCount: () => {}, aimBreak: () => {}, update: (...frame: unknown[]) => updated.push(frame), boxer: { root: new THREE.Object3D() } }, blobShadows: [], mapping: worldMapping({ tick_rate: 30, ring_half_width: 500, ring_half_height: 500 }), tmpA: new THREE.Vector3(head.x - 0.4, 0, head.z + 2.2), tmpB: new THREE.Vector3(head.x + 0.4, 0, head.z + 2.2), refereePosition: new THREE.Vector3(head.x + 0.1, 0, head.z - 0.2), refereeVelocity: new THREE.Vector3(), refereeAway: new THREE.Vector3(), refereeYaw: 0, - effects, closeUpTarget: new THREE.Vector3(), replay: null, ceremony: null, - }; + effects, closeUpTarget: new THREE.Vector3(), replay: null, ceremony: null, settings: () => ({ reducedMotion: false, blood: "full" }), + }); const step = (FightRenderer.prototype as unknown as { updateReferee: (dt: number, time: number, snapshot: unknown, tick: number) => void }).updateReferee; + // A head landing beside him has him step briskly away, never jump, and keep clear of it from then on. for (let frame = 0; frame < 180; frame += 1) { + const before = stub.refereePosition.clone(); step.call(stub, 1 / 60, frame / 60, null, frame / 2); - expect(Math.hypot(stub.refereePosition.x - head.x, stub.refereePosition.z - head.z)).toBeGreaterThanOrEqual(0.9 - 1e-6); + expect(before.distanceTo(stub.refereePosition)).toBeLessThanOrEqual(2.5 / 60 + 1e-6); + if (frame >= 30) expect(Math.hypot(stub.refereePosition.x - head.x, stub.refereePosition.z - head.z)).toBeGreaterThanOrEqual(0.9 - 1e-6); } expect(updated).toHaveLength(180); effects.dispose(); @@ -850,13 +966,14 @@ describe("referee and a head on the canvas", () => { it("is left out of the knockout replay's close shot, and back for the live picture", () => { const root = new THREE.Object3D(); const shadow = new THREE.Object3D(); - const stub = { + const stub = Object.assign(Object.create(FightRenderer.prototype) as Record, { referee: { setRefereeCount: () => {}, aimBreak: () => {}, update: () => {}, boxer: { root } }, blobShadows: [new THREE.Object3D(), new THREE.Object3D(), shadow], mapping: worldMapping({ tick_rate: 30, ring_half_width: 500, ring_half_height: 500 }), tmpA: new THREE.Vector3(-0.5, 0, 0), tmpB: new THREE.Vector3(0.5, 0, 0), refereePosition: new THREE.Vector3(0, 0, -1.5), refereeVelocity: new THREE.Vector3(), refereeAway: new THREE.Vector3(), refereeYaw: 0, - effects: { severedHeadPosition: () => false }, closeUpTarget: new THREE.Vector3(), replay: {} as unknown, ceremony: null, - }; + effects: { severedHeadPosition: () => false, gushing: () => false }, closeUpTarget: new THREE.Vector3(), replay: { plan: { impact: { kind: "knockdown" } } } as unknown, ceremony: null, + pendingRefereeEvents: [], settings: () => ({ reducedMotion: false, blood: "full" }), + }); const step = (FightRenderer.prototype as unknown as { updateReferee: (dt: number, time: number, snapshot: unknown, tick: number) => void }).updateReferee; step.call(stub, 1 / 60, 0, null, 0); expect(root.visible).toBe(false); @@ -1000,43 +1117,87 @@ describe("severed head close-up", () => { describe("gore from a real punch", () => { // Engine damage: a landed jab is about 30, a straight 50 to 80, a power counter up to about 150. - it("knocks teeth out with the punch that floors a man and with big counters, never with an ordinary shot", () => { - expect(teethFor("knockdown", 1, true)).toBe(2); - expect(teethFor("counter_hit", BIG_SHOT, true)).toBe(1); - expect(teethFor("counter_hit", 130, true)).toBe(2); - expect(teethFor("counter_hit", BIG_SHOT - 1, true)).toBe(0); - expect(teethFor("hit", 80, true)).toBe(0); - expect(teethFor("hit", 118, true)).toBe(1); + it("knocks teeth out with the punch that floors a man and with any solid punch to the head, more the harder it lands", () => { + expect(teethFor("knockdown", 1, true)).toBe(5); + expect(teethFor("counter_hit", 39, true)).toBe(0); + expect(teethFor("counter_hit", 40, true)).toBe(1); + expect(teethFor("counter_hit", 60, true)).toBe(2); + expect(teethFor("counter_hit", 90, true)).toBe(3); + expect(teethFor("counter_hit", 130, true)).toBe(5); + expect(teethFor("hit", 49, true)).toBe(0); + expect(teethFor("hit", 50, true)).toBe(1); + expect(teethFor("hit", 80, true)).toBe(2); + expect(teethFor("hit", 110, true)).toBe(3); + expect(teethFor("hit", 140, true)).toBe(4); expect(teethFor("counter_hit", 140, false)).toBe(0); expect(teethFor("knockdown", 1, false)).toBe(0); expect(teethFor("block", 140, true)).toBe(0); }); - it("throws more blood from an open wound and from a harder punch, up to a limit", () => { - expect(bloodDropsFor(8, 30)).toBeLessThan(15); - expect(bloodDropsFor(25, 110)).toBeGreaterThan(bloodDropsFor(25, 50) + 25); - expect(bloodDropsFor(60, 60)).toBeGreaterThan(bloodDropsFor(20, 60) + 50); - expect(bloodDropsFor(100, 500)).toBe(140); + it("knocks one tooth out with reduced blood, and only from the blows that take three or more", () => { + const knocked = (level: "full" | "reduced", count: number): number => { + const effects = new Effects3D(new THREE.Scene(), 256); + effects.setBloodLevel(level); + effects.spawnTeeth(new THREE.Vector3(0, 1.5, 0), 1, count, 3); + const teeth = effects.debrisCount("tooth"); + effects.dispose(); + return teeth; + }; + expect([1, 2, 3, 8, 20].map((count) => knocked("full", count))).toEqual([1, 2, 3, 8, 12]); + expect([1, 2, 3, 8].map((count) => knocked("reduced", count))).toEqual([0, 0, 1, 1]); + }); + + it("throws dozens of drops off a clean face, more from a harder punch and far more from an open wound, up to a limit", () => { + // A clean jab carries the engine's blood of 11. + expect(bloodDropsFor(11, 34)).toBeGreaterThan(45); + expect(bloodDropsFor(25, 110)).toBeGreaterThan(bloodDropsFor(25, 50) + 50); + expect(bloodDropsFor(60, 60)).toBeGreaterThan(bloodDropsFor(20, 60) + 100); + expect(bloodDropsFor(100, 500)).toBe(MOST_DROPS); expect(bloodDropsFor(0, 0)).toBe(0); }); - it("puts a mist in the air from a hard shot, which an ordinary one does not", () => { + it("sprays an uncut face visibly with every clean punch, blood far more than sweat, and half as much on a phone", () => { + const thrown = (amount: number, detail: string, budget = DESKTOP_GORE): { blood: number; sweat: number } => { + const effects = new Effects3D(new THREE.Scene(), 256, budget); + effects.addEvent(punchOn("hit", amount, 0, detail), origin, false); + const counts = { blood: effects.liveBloodParticles, sweat: effects.liveParticles - effects.liveBloodParticles }; + effects.dispose(); + return counts; + }; + const jab = thrown(34, "jab:head"); + const straight = thrown(52, "straight:head"); + const hook = thrown(64, "hook:head"); + expect(jab.blood).toBeGreaterThan(45); + expect(straight.blood).toBeGreaterThan(jab.blood + 25); + expect(hook.blood).toBeGreaterThan(straight.blood + 15); + for (const punch of [jab, straight, hook]) expect(punch.blood).toBeGreaterThan(punch.sweat * 5); + expect(thrown(64, "hook:head", PHONE_GORE).blood).toBe(Math.round(hook.blood / 2)); + // A client struggling to keep its frame rate throws half again. + const struggling = new Effects3D(new THREE.Scene(), 256); + struggling.setLowTier(true); + struggling.addEvent(punchOn("hit", 64, 0, "hook:head"), origin, false); + expect(struggling.liveBloodParticles).toBe(Math.round(hook.blood / 2)); + struggling.dispose(); + }); + + it("puts a mist in the air from a punch that lands hard, which a light one on a clean face does not", () => { const origin = new THREE.Vector3(); const mist = (kind: string, amount: number): number => { const effects = new Effects3D(new THREE.Scene()); - effects.addEvent({ event_id: 3, tick: 1, kind, actor_id: "one", target_id: "two", amount, detail: "straight:head", blood: 20, direction: 1, action_id: null }, origin, false); + // A clean face: all of the punch's blood is its weight's. + effects.addEvent({ event_id: 3, tick: 1, kind, actor_id: "one", target_id: "two", amount, detail: "straight:head", blood: Math.floor(amount / 3), direction: 1, action_id: null }, origin, false); const live = effects.liveMist; effects.dispose(); return live; }; - expect(mist("hit", HARD_SHOT)).toBeGreaterThan(0); - expect(mist("hit", HARD_SHOT - 1)).toBe(0); + expect(mist("hit", MISTING_SHOT)).toBeGreaterThan(0); + expect(mist("hit", MISTING_SHOT - 1)).toBe(0); expect(mist("counter_hit", 40)).toBeGreaterThan(0); }); - // The engine's blood is the cut's bleeding over eight plus the damage over four. + // The engine's blood is the cut's bleeding over five plus the damage over three. const punchOn = (kind: string, amount: number, bleeding: number, detail = "straight:head"): CombatEvent => ({ - event_id: 7, tick: 1, kind, actor_id: "one", target_id: "two", amount, detail, blood: Math.floor(bleeding / 8) + Math.floor(amount / 4), direction: 1, action_id: null, + event_id: 7, tick: 1, kind, actor_id: "one", target_id: "two", amount, detail, blood: Math.min(100, Math.floor(bleeding / 5) + Math.floor(amount / 3)), direction: 1, action_id: null, }); const origin = new THREE.Vector3(); const after = (event: CombatEvent, read: (effects: Effects3D) => T): T => { @@ -1052,13 +1213,77 @@ describe("gore from a real punch", () => { return effects.canvasStains; }; - it("splashes the canvas from an open cut and a knockdown, not from every punch that draws a little blood", () => { + it("splashes the canvas from a hard punch on any face, more from an open cut and most from a knockdown, but not from a jab on a clean one", () => { const splash = (event: CombatEvent): number => after(event, (effects) => effects.canvasStains); expect(splash(punchOn("hit", 34, 0, "jab:head"))).toBe(0); - expect(splash(punchOn("hit", 110, 0))).toBe(0); - expect(splash(punchOn("hit", 64, 130, "hook:head"))).toBe(4); - expect(splash(punchOn("counter_hit", 64, 320, "hook:head"))).toBe(8); - expect(splash({ ...punchOn("knockdown", 1, 0), blood: 18 })).toBe(12); + expect(splash(punchOn("hit", 110, 0))).toBe(8); + expect(splash(punchOn("hit", 64, 130, "hook:head"))).toBe(12); + expect(splash(punchOn("counter_hit", 64, 320, "hook:head"))).toBe(24); + expect(splash({ ...punchOn("knockdown", 1, 0), blood: 18 })).toBe(30); + // Reduced blood splashes only from a cut, a quarter as many, as it always did. + const reduced = new Effects3D(new THREE.Scene(), 256); + reduced.setBloodLevel("reduced"); + reduced.addEvent(punchOn("hit", 110, 0), origin, false); + expect(reduced.canvasStains).toBe(0); + reduced.addEvent(punchOn("hit", 64, 130, "hook:head"), origin, false); + expect(reduced.canvasStains).toBe(2); + reduced.dispose(); + }); + + it("stains the canvas under most of the fine spray at full blood, where reduced blood lets most of it soak in unseen", () => { + const stained = (level: "full" | "reduced"): number => { + const effects = new Effects3D(new THREE.Scene(), 256); + effects.setBloodLevel(level); + const drops = effects as unknown as { spawnDroplet(x: number, y: number, z: number, vx: number, vy: number, vz: number, color: { r: number; g: number; b: number }, life: number, blood: boolean, radius?: number): void }; + for (let drop = 0; drop < 200; drop += 1) drops.spawnDroplet((drop % 20) * 0.1 - 1, 0.3, Math.floor(drop / 20) * 0.1 - 0.5, 0, -2, 0, bloodShade(0.5), 2, true, 0.004); + const count = landed(effects); + effects.dispose(); + return count; + }; + expect(stained("full")).toBeGreaterThan(100); + expect(stained("reduced")).toBeLessThan(40); + }); + + it("throws an explosion of blood as a man goes down, over what his punch threw", () => { + const thrown = after({ ...punchOn("knockdown", 1, 0), blood: 18 }, (effects) => effects.liveBloodParticles); + expect(thrown).toBe(bloodDropsFor(18, 0) + 250); + }); + + it("draws the blood in gobs at full blood, bigger than reduced blood draws the same drop and bigger than sweat", () => { + const drawn = (level: "full" | "reduced", blood: boolean): number => { + const effects = new Effects3D(new THREE.Scene(), 256); + effects.setBloodLevel(level); + (effects as unknown as { spawnDroplet(x: number, y: number, z: number, vx: number, vy: number, vz: number, color: { r: number; g: number; b: number }, life: number, blood: boolean, radius: number): void }).spawnDroplet(0, 1, 0, 0, 0, 0, bloodShade(0), 1, blood, 0.01); + const matrix = new THREE.Matrix4(); + effects.dropletMesh.getMatrixAt(0, matrix); + const size = new THREE.Vector3().setFromMatrixScale(matrix).x; + effects.dispose(); + return size; + }; + expect(drawn("full", true) / drawn("reduced", true)).toBeCloseTo(1.35, 6); + expect(drawn("full", false)).toBeCloseTo(drawn("reduced", false), 9); + }); + + it("throws the blood from where the punch landed on him, or from a standing man's head over the spot under him", () => { + const start = (at: THREE.Vector3): number => { + const effects = new Effects3D(new THREE.Scene(), 256); + effects.addEvent(punchOn("hit", 90, 100), at, false); + const positions = effects.dropletBuffers.position; + let lowest = Infinity; + for (let index = 0; index < effects.liveParticles; index += 1) lowest = Math.min(lowest, positions.getY(index)); + effects.dispose(); + return lowest; + }; + expect(start(new THREE.Vector3(0.3, 0.22, 0.4))).toBeLessThan(0.3); + expect(start(new THREE.Vector3(0.3, 0, 0.4))).toBeGreaterThan(1.4); + }); + + it("shakes the camera harder the harder the punch, and hardest when a man goes down", () => { + const shaken = (event: CombatEvent): number => after(event, (effects) => effects.shakeAmount); + expect(shaken(punchOn("hit", 140, 0))).toBeGreaterThan(0.09); + expect(shaken(punchOn("hit", 140, 0))).toBeGreaterThan(shaken(punchOn("hit", 60, 0)) * 2); + expect(shaken({ ...punchOn("knockdown", 1, 0), blood: 20 })).toBeGreaterThan(0.1); + expect(shaken(punchOn("hit", 500, 0))).toBeLessThanOrEqual(0.14); }); it("throws less blood from a punch the guard took than from a clean jab, however hard it hit the guard", () => { @@ -1079,25 +1304,33 @@ describe("gore from a real punch", () => { const effects = new Effects3D(new THREE.Scene(), 256); effects.addEvent(beat, origin, false); expect(effects.liveParticles).toBe(effects.liveBloodParticles); - expect(effects.liveBloodParticles).toBeGreaterThan(0); - expect(effects.liveBloodParticles).toBeLessThanOrEqual(5); + expect(effects.liveBloodParticles).toBeGreaterThan(3); + expect(effects.liveBloodParticles).toBeLessThanOrEqual(12); expect(effects.canvasStains).toBe(0); expect(effects.shakeAmount).toBe(0); - expect(landed(effects)).toBeLessThanOrEqual(5); + expect(landed(effects)).toBeLessThanOrEqual(12); effects.dispose(); }); - it("tears flesh from an open cut with a punch that rocks him, and from any face with a big counter", () => { + it("tears flesh from any cut with a punch that rocks him, and from any face with a solid punch", () => { const torn = (event: CombatEvent): number => after(event, (effects) => effects.liveGibs); - expect(torn(punchOn("hit", HARD_SHOT, 130))).toBeGreaterThan(0); - expect(torn(punchOn("counter_hit", ROCKING_COUNTER, 130))).toBeGreaterThan(0); - expect(torn(punchOn("hit", HARD_SHOT - 1, 130))).toBe(0); + // Any face loses flesh to a punch of TEARING_SHOT. + expect(torn(punchOn("hit", TEARING_SHOT, 0))).toBeGreaterThan(0); + expect(torn(punchOn("hit", TEARING_SHOT - 1, 0))).toBe(0); + // A counter that rocks him tears it from a cut that has only just opened, but not from an unmarked face. + expect(torn(punchOn("counter_hit", ROCKING_COUNTER, 10))).toBeGreaterThan(0); + expect(torn(punchOn("counter_hit", ROCKING_COUNTER, 0))).toBe(0); expect(torn(punchOn("counter_hit", ROCKING_COUNTER - 1, 130))).toBe(0); - // A cut that has barely opened, and an unmarked face, keep their flesh but for a big counter. - expect(torn(punchOn("hit", 110, 40))).toBe(0); expect(torn(punchOn("counter_hit", BIG_SHOT, 0))).toBeGreaterThan(0); expect(torn(punchOn("hit", 120, 300, "hook:body"))).toBe(0); expect(torn(punchOn("counter_hit", 140, 300))).toBeGreaterThan(torn(punchOn("counter_hit", 60, 300))); + expect(torn(punchOn("counter_hit", 140, 300))).toBe(20); + // Reduced blood tears nothing. + const reduced = new Effects3D(new THREE.Scene(), 256); + reduced.setBloodLevel("reduced"); + reduced.addEvent(punchOn("counter_hit", 140, 300), origin, false); + expect(reduced.liveGibs).toBe(0); + reduced.dispose(); }); it("keeps a knockdown, teeth and gum shield included, to one reduced spray of blood with reduced blood", () => { @@ -1124,9 +1357,9 @@ describe("gore from a real punch", () => { it("throws a thicker mist off a punch the worse the cut it lands on", () => { const mist = (event: CombatEvent): number => after(event, (effects) => effects.liveMist); - expect(mist(punchOn("hit", 75, 0))).toBe(10); + expect(mist(punchOn("hit", 75, 0))).toBe(18); expect(mist(punchOn("hit", 75, 300))).toBeGreaterThan(mist(punchOn("hit", 75, 80))); - expect(mist(punchOn("hit", 75, 600))).toBe(18); + expect(mist(punchOn("hit", 75, 600))).toBe(36); // A face cut badly enough mists at every punch, a jab included. expect(mist(punchOn("hit", 34, 0, "jab:head"))).toBe(0); expect(mist(punchOn("hit", 34, 160, "jab:head"))).toBeGreaterThan(0); diff --git a/web/hands/src/render/gore.ts b/web/hands/src/render/gore.ts index ed18bde8..e056e96d 100644 --- a/web/hands/src/render/gore.ts +++ b/web/hands/src/render/gore.ts @@ -30,21 +30,27 @@ export function buildChunkGeometry(): THREE.BufferGeometry { */ export const HARD_SHOT = 70; export const BIG_SHOT = 95; +/** At full blood a punch this hard mists the blood it throws, and one this hard tears flesh from any face. */ +export const MISTING_SHOT = 35; +export const TEARING_SHOT = 60; /** A counter this heavy rocks a man, as the engine reckons it, as a hard shot does. */ export const ROCKING_COUNTER = manifestJson.stun.rocked_counter_damage; -/** Teeth a blow to the head knocks out: two more as the punch floors a man, one or two by a big counter or a huge shot, none otherwise. */ +/** Teeth a blow to the head knocks out: five more as the punch floors a man, and up to five by any solid punch, more the harder it lands. */ export function teethFor(kind: string, amount: number, head: boolean): number { if (!head) return 0; - if (kind === "knockdown") return 2; - if (kind === "counter_hit" && amount >= BIG_SHOT) return amount >= 120 ? 2 : 1; - if (kind === "hit" && amount >= 115) return 1; + if (kind === "knockdown") return 5; + if (kind === "counter_hit") return amount >= 120 ? 5 : amount >= 90 ? 3 : amount >= 60 ? 2 : amount >= 40 ? 1 : 0; + if (kind === "hit") return amount >= 130 ? 4 : amount >= 100 ? 3 : amount >= 75 ? 2 : amount >= 50 ? 1 : 0; return 0; } -/** Drops of blood a blow throws at full blood: more from an open wound, and more from a harder punch. */ +/** The most drops of blood one blow throws. */ +export const MOST_DROPS = 800; + +/** Drops of blood a blow throws at full blood: plenty off any face it lands on clean, more the harder it lands, and far more from an open wound. */ export function bloodDropsFor(blood: number, amount: number): number { - return Math.min(140, Math.round(Math.max(0, blood) * 1.4 + Math.max(0, amount - 50) * 0.5)); + return Math.min(MOST_DROPS, Math.round(Math.max(0, blood) * 4.5 + Math.max(0, amount) * 2.8)); } const DROPLET_TAIL = 1.1; diff --git a/web/hands/src/render/graph.ts b/web/hands/src/render/graph.ts index 4c9f0fd2..defaacc1 100644 --- a/web/hands/src/render/graph.ts +++ b/web/hands/src/render/graph.ts @@ -1,7 +1,7 @@ import * as THREE from "three"; import { GLTFLoader, type GLTF } from "three/examples/jsm/loaders/GLTFLoader.js"; import { clone as cloneSkeleton } from "three/examples/jsm/utils/SkeletonUtils.js"; -import { GLOVE_HITBOX_RADIUS, GUARD_BLOCK_MINIMUM, HURTBOXES, cancelsRecovery, punchTiming, recoveryCancelAge, totalTicks, type PunchTiming } from "../manifest"; +import { COUNT_TICKS, EVASION_TICKS, GLOVE_HITBOX_RADIUS, GUARD_BLOCK_MINIMUM, HITSTOP_MS, HURTBOXES, RECOVERY_SPEED_PERCENT, TICK_RATE, cancelsRecovery, punchTiming, recoveryCancelAge, totalTicks, type PunchTiming } from "../manifest"; import type { BloodLevel } from "../settings"; import type { CombatEvent, FighterSnapshot, Hand, Power, PunchAction, PunchClass, SemanticAction, Target } from "../types"; import { FIGHTER_GLB_GZIP_BASE64 } from "../assets/fighter-glb"; @@ -145,8 +145,9 @@ export function pressOntoCanvas(material: THREE.Material): void { } export function applyFighterSkin(target: THREE.Object3D, palette: BoxerPaletteColors): AppliedFighterMaterials { - // An official never takes damage or sweats: plain materials, injury state that shades nothing, and no shadow. + // An official never sweats: plain materials and no shadow, and unless he can be hurt, injury state that shades nothing. const official = palette.outfit !== undefined; + const wounded = !official || palette.wounds === true; const skin: THREE.MeshStandardMaterial[] = []; const owned: THREE.Material[] = []; const bySource = new Map(); @@ -176,8 +177,8 @@ export function applyFighterSkin(target: THREE.Object3D, palette: BoxerPaletteCo bySource.set(sourceName, material); owned.push(material); if (isSkin) skin.push(material); - if (sourceName === "MHeadMat0") headInjury = new InjuryShading(official ? null : material, HEAD_SITES, { core: HEAD_SWELL_CORE, lids: EYE_LIDS }); - if (sourceName === "MBodyMat0") bodyInjury = new InjuryShading(official ? null : material, BODY_SITES, { core: BODY_SWELL_CORE, wash: true }); + if (sourceName === "MHeadMat0") headInjury = new InjuryShading(wounded ? material : null, HEAD_SITES, { core: HEAD_SWELL_CORE, lids: EYE_LIDS }); + if (sourceName === "MBodyMat0") bodyInjury = new InjuryShading(wounded ? material : null, BODY_SITES, { core: BODY_SWELL_CORE, wash: true }); const part = OUTFIT_PARTS[sourceName]; if (outfit !== undefined && part !== undefined) applyOutfitShading(material, part, outfit); else if (sourceName === "PantsMat0") trunksBlood = wearCornerColour(material, false, "trunks"); @@ -205,6 +206,8 @@ export interface BoxerPaletteColors { * no injury shading, no sweat and no shadow (see applyFighterSkin). */ readonly outfit?: OfficialOutfit; + /** An official who can be punched: his face and body shade their injuries like a fighter's. */ + readonly wounds?: boolean; } const OUTFIT_PARTS: Readonly> = { MHeadMat0: "head", MBodyMat0: "body", ShoesMat0: "shoes", PantsMat0: "pants" }; @@ -447,6 +450,8 @@ interface OwnPress { readonly action: PunchAction & { readonly id: string }; readonly timing: PunchTiming; readonly leadTicks: number; + /** Ticks until a snapshot answering the press is due. */ + readonly answerTicks: number; readonly pressedAt: number; /** The input frame that carried it, once known. */ sequence: number | null; @@ -566,7 +571,9 @@ export class BoxingGraph { private completedActionId: string | null = null; /** Id of the viewer's own punch while its animation is the one started on the key press. */ private ownActionId: string | null = null; - /** Ticks the key press led the server's presentation, absorbed by stretching the punch's startup. */ + /** The early punch is the viewer's own press, played at the server's pace, rather than an opponent's punch seen early. */ + private ownPress = false; + /** Ticks an opponent's punch seen early leads the server's presentation, absorbed by stretching its startup. */ private ownLeadTicks = 0; private ownAuthoritativeAge: number | null = null; /** Real ticks the own punch has waited for the server, and how long that is expected to take. */ @@ -582,6 +589,10 @@ export class BoxingGraph { private ownPressedAt = 0; /** The server refused the punch or cut it off before contact, so the pull-back is final. */ private ownRefused = false; + /** The own punch had reached its contact without the server's word, which then refused it or never came: it goes back at once. */ + private ownCut = false; + /** A slip, weave or pull pressed during the own punch cuts its recovery short once it has landed or missed. */ + private recoveryCut = false; /** A press made during a punch: the server holds it until that punch lets it go, and so does the graph. */ private ownQueued: OwnPress | null = null; /** This fighter's newest punch the server reported meeting the opponent, and whether it was parried. */ @@ -592,9 +603,13 @@ export class BoxingGraph { private shownOpponent: FighterSnapshot | null = null; /** Own punches already played or cut short here; the server's copy of them is not played again. */ private readonly retiredOwnIds: string[] = []; + /** The viewer's own presses whose glove reached the target here on the press's time, newest last. */ + private readonly pressesLanded: string[] = []; private anticipatedId: string | null = null; private hitstop = 0; private hitstopScale = 1; + /** Ticks of the punch a hit's freeze held back, made up once the freeze is over instead of jumped. */ + private hitstopLag = 0; private downState: "up" | "falling" | "down" | "rising" = "up"; private fallAge = 0; /** How far along the get-up he is (see RISE_KNEE), and where it stood when the server let him up. */ @@ -646,6 +661,11 @@ export class BoxingGraph { /** How far the punch's aim has moved from that head onto the live one: only once the punch is known to have met him. */ private followHead = 0; private aimActionId: string | null = null; + /** This fighter's newest punch the server reported finding the referee in the way, his head as drawn, and how far the aim has moved onto it. */ + private refereeContactId: string | null = null; + private readonly refereeHead = new THREE.Vector3(); + private hasRefereeHead = false; + private followReferee = 0; private readonly headKick: Spring3 = { value: new THREE.Vector3(), velocity: new THREE.Vector3() }; private readonly torsoKick: Spring3 = { value: new THREE.Vector3(), velocity: new THREE.Vector3() }; private readonly rootKick: Spring3 = { value: new THREE.Vector3(), velocity: new THREE.Vector3() }; @@ -797,7 +817,7 @@ export class BoxingGraph { private refereeCounting = false; /** Render tick the referee's count last changed on; the counting arm is timed from it. */ private countChangedTick: number | null = null; - /** Knockout physics; officials have none. */ + /** Knockout physics; officials have none, except a referee who can be knocked out. */ private readonly ragdoll: KnockoutRagdoll | null; /** Knocked out on his feet (a flash knockout): down although the engine never counts him. */ private forcedDown = false; @@ -810,7 +830,7 @@ export class BoxingGraph { /** Seconds since the knockout physics handed the body to the get-up, which blends in from where it left it. */ private riseBlendAge = 0; - constructor(boxer: SkinnedBoxer, private readonly mapping: WorldMapping, options: { referee?: boolean } = {}) { + constructor(boxer: SkinnedBoxer, private readonly mapping: WorldMapping, options: { referee?: boolean; knockout?: boolean } = {}) { this.boxer = boxer; this.referee = options.referee === true; this.solver = new PoseSolver(boxer.rig); @@ -822,7 +842,7 @@ export class BoxingGraph { boxer.rig.bones.gloveL.add(this.enswell.group); this.bottle = buildBottle(); boxer.rig.bones.gloveL.add(this.bottle.group); - this.ragdoll = this.referee ? null : new KnockoutRagdoll(boxer.rig, boxer.root); + this.ragdoll = this.referee && options.knockout !== true ? null : new KnockoutRagdoll(boxer.rig, boxer.root); } /** The knockout replay runs the recorded fall again rather than a new one. */ @@ -902,6 +922,7 @@ export class BoxingGraph { this.riseProgress = 0; this.hitstop = 0; this.hitstopScale = 1; + this.hitstopLag = 0; for (const spring of [this.headKick, this.torsoKick, this.rootKick, this.coverKick]) { spring.value.set(0, 0, 0); spring.velocity.set(0, 0, 0); @@ -1023,17 +1044,19 @@ export class BoxingGraph { } /** - * Starts the viewer's own punch on the key press. `leadTicks` estimates how far ahead of the - * server's presentation that is (input latency plus the interpolation delay); the startup is - * stretched by it so the glove arrives when the hit is shown. A press made during a punch waits, as - * it does on the server, until that punch lets it go. + * Starts the viewer's own punch on the key press, at the speed the server will throw it: the press starts the punch + * there the moment it arrives, so the glove travels on the press's own time, a one-way trip ahead of the server. A + * press made during a punch waits, as it does on the server, until that punch lets it go. `leadTicks` is how far the + * render clock trails that time (input latency plus the interpolation delay), for a punch played on the server's + * timeline; `answerTicks` is how soon a snapshot answering the press is due. */ - predict(action: SemanticAction, timeSeconds: number, tickRate: number, leadTicks = 0, expected?: PunchTiming): void { + predict(action: SemanticAction, timeSeconds: number, tickRate: number, leadTicks = 0, expected?: PunchTiming, answerTicks = leadTicks): void { if (action.kind !== "punch" || action.id === undefined) return; const press: OwnPress = { action: { ...action, id: action.id }, timing: expected ?? punchTiming(action.class, action.target, action.power), leadTicks, + answerTicks, pressedAt: timeSeconds, sequence: null, started: false, @@ -1051,15 +1074,24 @@ export class BoxingGraph { // Behind a punch the server holds the press until a combination cuts the recovery short or the // punch ends. A press it already holds is replaced only if it is still held when this one // arrives; otherwise it has started by then, and this one waits behind it and plays when shown. - if (this.ownQueued !== null && this.followUpStartAge(this.ownQueued) - this.punchAgeTicks <= leadTicks) return; - if (this.punchAgeTicks < this.followUpStartAge(press)) { + const age = this.punchAgeTicks + this.serverLag(leadTicks); + if (this.ownQueued !== null && this.followUpStartAge(this.ownQueued) <= age) return; + if (age < this.followUpStartAge(press)) { this.ownQueued = press; return; } } this.ownQueued = null; this.retirePunch(); - this.startOwnPunch(press, leadTicks); + this.startOwnPunch(press); + } + + /** + * How far the punch being played trails the moment a press made now reaches the server: nothing for the viewer's own + * press, which plays on that time, `leadTicks` for a punch played on the server's timeline, behind on the render clock. + */ + private serverLag(leadTicks: number): number { + return this.ownPress && this.ownActionId !== null ? 0 : leadTicks; } /** True while the viewer's own punch, started on the key press, is playing. */ @@ -1067,6 +1099,51 @@ export class BoxingGraph { return this.punchActive && this.ownActionId !== null; } + /** The instance id of the viewer's own press while it plays on the press's time, else null. */ + get ownPressId(): string | null { + return this.punchActive && this.ownPress ? this.ownActionId : null; + } + + /** Whether the viewer's own press with this instance id reached the target on screen on the press's time. */ + pressLanded(actionId: string | null): boolean { + return actionId !== null && this.pressesLanded.includes(actionId); + } + + /** The class of the punch being played, and whether it is a power punch. */ + get punchKind(): { readonly punchClass: PunchClass; readonly power: boolean } { + return { punchClass: this.punchClass, power: this.punchPower === "power" }; + } + + /** + * The share of his footwork the server gives the player's fighter, for input sent now, while his own punch plays on the + * press's time: none through its startup and active ticks, the recovery's share while it recovers, all of it once an + * evasion has cut the recovery short or the server is known not to have thrown it. + */ + get ownFootwork(): number { + if (!this.punchActive || this.ownActionId === null || !this.ownPress || this.ownPulled || this.ownCut) return 1; + if (this.punchAgeTicks < this.punchTiming.startup + this.punchTiming.active) return 0; + return this.recoveryCut ? 1 : RECOVERY_SPEED_PERCENT / 100; + } + + /** Ticks until the player's own punch has landed or missed, when the server lets an evasion cut its recovery short. */ + get ownTicksToRecovery(): number { + return Math.max(0, this.punchTiming.startup + this.punchTiming.active - this.punchAgeTicks); + } + + /** + * A slip, weave or pull was pressed during the player's own punch: from the end of its active ticks the server ends the + * punch for it, so the glove goes straight back to the guard, and the press it held for later is gone, replaced. + */ + cutOwnRecovery(): void { + if (this.ownPunchActive) this.recoveryCut = true; + this.ownQueued = null; + } + + /** The slip, weave or pull pressed to cut the player's own punch's recovery short was replaced or turned down before it started. */ + keepOwnRecovery(): void { + this.recoveryCut = false; + } + /** * Squares the viewer's own punches with the newest snapshot, which is ahead of the one on screen by * the interpolation delay. `sequenceOf` gives the input frame that carried a press once it has gone @@ -1078,6 +1155,7 @@ export class BoxingGraph { */ acknowledge(server: FighterSnapshot, fighting: boolean, contacts: readonly CombatEvent[] = [], sequenceOf: ((actionId: string) => number | null) | null = null): void { for (const event of contacts) { + if (event.kind === "referee_hit" && event.action_id !== null) this.refereeContactId = event.action_id; if (event.action_id === null || !CONNECTING_CONTACTS.has(event.kind)) continue; if (event.action_id !== this.contactId) { this.contactId = event.action_id; @@ -1103,7 +1181,7 @@ export class BoxingGraph { this.ownActionId = null; this.ownQueued = null; this.retirePunch(); - this.startOwnPunch(held, Math.max(0, held.leadTicks - held.waited)); + this.startOwnPunch(held); return; } const refused = started @@ -1112,8 +1190,16 @@ export class BoxingGraph { && (cutOff || (this.ownSequence !== null && server.last_input_sequence >= this.ownSequence && server.queued_actions === 0)); if (!refused) return; this.ownRefused = true; - // Before contact the glove comes back the way it went; after it the punch simply finishes. + this.takeBack(); + } + + /** + * The early punch goes back: before contact the way it went; after it, the viewer's own press straight back to the + * guard at once, as the server never threw it or cut it off; an opponent's punch seen early simply finishes. + */ + private takeBack(): void { if (this.punchAgeTicks < this.punchTiming.startup) this.ownPulled = true; + else if (this.ownPress) this.ownCut = true; } /** @@ -1141,10 +1227,11 @@ export class BoxingGraph { this.startEarly(id, fighter.action, hand, target, power, timing, leadTicks, leadTicks); } - /** Plays the viewer's own press from its first frame, its startup stretched by `leadTicks`. */ - private startOwnPunch(press: OwnPress, leadTicks: number): void { + /** Plays the viewer's own press from its first frame, at the server's pace, waiting the press's answer time for word of it. */ + private startOwnPunch(press: OwnPress): void { const { action, timing } = press; - this.startEarly(action.id, action.class, action.hand, action.target, action.power, timing, leadTicks, Math.max(0, leadTicks)); + this.startEarly(action.id, action.class, action.hand, action.target, action.power, timing, 0, Math.max(0, press.answerTicks)); + this.ownPress = true; this.ownSequence = press.sequence; this.ownStarted = press.started; this.ownPressedAt = press.pressedAt; @@ -1169,7 +1256,7 @@ export class BoxingGraph { /** * Age of the punch being played at which the server starts `press`, held behind it: the cancel age * when a combination may cut the recovery short (the engine's rule, with the fighters as shown), - * otherwise the tick after the punch ends. + * otherwise the tick the punch ends. */ private followUpStartAge(press: OwnPress): number { const fighter = this.shownFighter; @@ -1179,22 +1266,22 @@ export class BoxingGraph { if (fighter !== null && opponent !== null && cancelsRecovery(this.punchClass, landed, press.action, fighter.stamina, opponent.stunned_ticks > 0, fighter.style)) { return recoveryCancelAge(this.punchTiming); } - return this.punchTotalTicks + 1; + return this.punchTotalTicks; } /** * Starts the held press when the server would: at the cancel age when a combination cuts the - * recovery short, the tick after the punch ends otherwise, and at once if the punch in front of it - * was refused. Its startup is stretched by whatever lead the wait has not used up. + * recovery short, the tick the punch ends otherwise, and at once if the punch in front of it was + * refused. Its startup is stretched by whatever lead the wait has not used up. */ - private releaseQueuedPress(simDt: number, ended: boolean): void { + private releaseQueuedPress(simDt: number): void { const press = this.ownQueued; if (press === null) return; press.waited += simDt * 30; - if (this.punchActive && !this.ownPulled && this.punchAgeTicks < this.followUpStartAge(press)) return; + if (this.punchActive && !this.ownPulled && this.punchAgeTicks + this.serverLag(press.leadTicks) < this.followUpStartAge(press)) return; this.ownQueued = null; this.retirePunch(); - this.startOwnPunch(press, Math.max(ended ? 1 : 0, press.leadTicks - press.waited)); + this.startOwnPunch(press); } /** Marks the punch being played as done so neither copy of it is started again. */ @@ -1207,6 +1294,7 @@ export class BoxingGraph { this.actionId = null; this.punchActive = false; this.ownActionId = null; + this.ownPress = false; this.ownLeadTicks = 0; this.ownAuthoritativeAge = null; this.ownWaitedTicks = 0; @@ -1215,10 +1303,40 @@ export class BoxingGraph { this.ownSequence = null; this.ownStarted = false; this.ownRefused = false; + this.ownCut = false; + this.recoveryCut = false; + this.hitstopLag = 0; + } + + /** The referee's head as drawn, which a punch the server says found him lands on; null with no referee in the ring. */ + setRefereeHead(head: THREE.Vector3 | null): void { + this.hasRefereeHead = head !== null; + if (head !== null) this.refereeHead.copy(head); + } + + /** + * The punch with this instance id met the opponent: it freezes at the target for a moment, a power punch that landed + * longest. Only that punch freezes, and only while its glove is at the target: the player's own punch, thrown on the + * press's time, is on its way back by the time the server's word of the contact is shown, or a combination has already + * let the next punch go. + */ + landedHit(actionId: string | null, blocked: boolean, power = false): void { + if (!this.punchActive || actionId === null || actionId !== (this.actionId ?? this.ownActionId)) return; + if (this.punchAgeTicks >= this.punchTiming.startup + this.punchTiming.active + 1) return; + this.hitstop = Math.max(this.hitstop, (blocked ? HITSTOP_MS.block : power ? HITSTOP_MS.power : HITSTOP_MS.hit) / 1000); } - landedHit(blocked: boolean): void { - this.hitstop = Math.max(this.hitstop, blocked ? 0.045 : 0.078); + /** + * How hot the glove throwing a power punch glows, 0 to 1: building through the load, full at the target, cooling as it + * comes back. Any other glove, or a punch that is not a power punch, is cold. + */ + powerHeat(hand: Hand): number { + if (!this.punchActive || this.punchPower !== "power" || this.punchHand !== hand || this.ownPulled) return 0; + const { startup, active, recovery } = this.punchTiming; + const age = this.punchAgeTicks; + if (age < startup) return smoothstep(0, POWER_LOAD * 0.6, age / Math.max(1, startup)); + if (age < startup + active) return 1; + return 1 - smoothstep(0, 0.6, (age - startup - active) / Math.max(1, recovery)); } setArcadeDislocation(dislocation: ArcadeDislocation | null): void { @@ -1422,8 +1540,9 @@ export class BoxingGraph { this.yaw = targetYaw; this.yawInitialized = true; } - // On the canvas and getting up he turns with his whole body on the ground, so more slowly. - const turnRate = this.punchActive ? 3 : this.downState === "up" ? 9 : 4; + // On the canvas and getting up he turns with his whole body on the ground, so more slowly. The engine holds his facing + // through a punch's startup and active ticks and turns him again as it recovers, while he can walk. + const turnRate = this.punchActive && this.punchAgeTicks < this.punchTiming.startup + this.punchTiming.active ? 3 : this.downState === "up" ? 9 : 4; this.yaw = smoothAngle(this.yaw, targetYaw, turnRate, dt); boxer.root.position.set(this.rootX, 0, this.rootZ); boxer.root.rotation.set(0, this.yaw, 0); @@ -1431,6 +1550,7 @@ export class BoxingGraph { this.hitstop = Math.max(0, this.hitstop - dt); this.hitstopScale = this.hitstop > 0 ? 0.12 : 1; const simDt = dt * this.hitstopScale; + if (this.punchActive && this.hitstop > 0) this.hitstopLag += (dt - simDt) * 30; this.syncAction(fighter, opponent, sampledTick, simDt); if (!this.debugHoldImpact) { @@ -1483,15 +1603,15 @@ export class BoxingGraph { this.tired = smooth(this.tired, clamp((0.55 - stamina) / 0.5, 0, 1), 2, dt); this.stunAmount = smooth(this.stunAmount, Math.min(1, fighter.stunned_ticks / 24), 8, dt); const defending = fighter.defense; - this.guardHigh = smooth(this.guardHigh, defending === "guard_high" ? 1 : 0, 14, dt); - this.guardLow = smooth(this.guardLow, defending === "guard_low" ? 1 : 0, 14, dt); + this.guardHigh = smooth(this.guardHigh, defending === "guard_high" ? 1 : 0, DEFENCE_RATE, dt); + this.guardLow = smooth(this.guardLow, defending === "guard_low" ? 1 : 0, DEFENCE_RATE, dt); this.guardSpent = smooth(this.guardSpent, fighter.guard < GUARD_BLOCK_MINIMUM ? 1 : 0, 10, dt); const slipTarget = defending === "slip_left" ? 1 : defending === "slip_right" ? -1 : 0; - this.slip = smooth(this.slip, slipTarget, 16, dt); + this.slip = smooth(this.slip, slipTarget, DEFENCE_RATE, dt); const weaving = defending === "weave"; this.weaveTime = weaving ? this.weaveTime + dt : 0; - this.weave = smooth(this.weave, weaving ? 1 : 0, 14, dt); - this.pull = smooth(this.pull, defending === "pull" ? 1 : 0, 14, dt); + this.weave = smooth(this.weave, weaving ? 1 : 0, DEFENCE_RATE, dt); + this.pull = smooth(this.pull, defending === "pull" ? 1 : 0, DEFENCE_RATE, dt); this.clinchWeight = smooth(this.clinchWeight, fighter.clinch_ticks > 0 || fighter.clinch_startup_ticks > 0 ? 1 : 0, 10, dt); this.foulWeight = smooth(this.foulWeight, fighter.is_foul_recovery_target ? 1 : 0, 8, dt); this.tauntWeight = smooth(this.tauntWeight, fighter.taunt_ticks > 0 ? 1 : 0, 10, dt); @@ -1631,7 +1751,7 @@ export class BoxingGraph { } if (this.weave > 0.001) { const w = this.weave; - const phase = clamp(this.weaveTime / 0.42, 0, 1); + const phase = clamp(this.weaveTime / WEAVE_SECONDS, 0, 1); const arc = Math.sin(phase * Math.PI); torso.hips.y -= w * 0.2; torso.spinePitch += w * 0.42; @@ -1692,34 +1812,8 @@ export class BoxingGraph { torso.hipsRoll -= toRopes.x * ROPE_LEAN_ROLL * this.ropeLean; } - // Reactions. - torso.headOffset.add(this.headKick.value); - torso.headPitch += -this.headKick.value.z * 2.4 + this.headKick.value.y * 1.6; - torso.headYaw += this.headKick.value.x * 2.2; - torso.headRoll += -this.headKick.value.x * 0.9; - torso.spinePitch += this.torsoKick.value.x; - torso.spineRoll += this.torsoKick.value.z * 0.5; - torso.hips.x += this.rootKick.value.x; - torso.hips.z += this.rootKick.value.z; - torso.hips.y -= Math.max(0, this.torsoKick.value.x) * 0.08; - if (this.torsoKick.value.x > 0.05) { - leadHand.position.y -= this.torsoKick.value.x * 0.25; - rearHand.position.y -= this.torsoKick.value.x * 0.2; - leadHand.position.z -= this.torsoKick.value.x * 0.1; - } - // A body uppercut lifts the fighter onto his toes. - const lift = Math.max(0, this.rootKick.value.y); - torso.hips.y += lift; - lead.heel += lift * 6; - rear.heel += lift * 6; - const cover = this.coverKick.value.x; - if (Math.abs(cover) > 0.002) { - const near = cover > 0 ? this.hand.R : this.hand.L; - near.position.y -= Math.abs(cover) * 0.9; - near.position.x += cover * 0.2; - near.position.z -= Math.abs(cover) * 0.25; - near.pole.y -= Math.abs(cover) * 3; - } + // Reactions; the referee's go on top of his own posture, which would otherwise set them aside. + if (!this.referee) this.applyReactions(leadHand, rearHand, lead, rear); // Punch. if (this.punchActive) { @@ -1730,7 +1824,10 @@ export class BoxingGraph { else shrugRear = shrug; } - if (this.referee) this.applyRefereePose(mirror, leadHand, rearHand, lead, rear, headRest, time, sampledTick); + if (this.referee) { + this.applyRefereePose(mirror, leadHand, rearHand, lead, rear, headRest, time, sampledTick, fighter.stunned_ticks); + this.applyReactions(leadHand, rearHand, lead, rear); + } // Special states. if (this.clinchWeight > 0.001) this.applyClinchPose(this.clinchWeight, time, mirror, fighter, opponent, leadHand, rearHand, headRest); @@ -1807,8 +1904,8 @@ export class BoxingGraph { const opponentBlood = Math.min( 1, - (opponent.trauma.bleeding + opponent.trauma.left_cut + opponent.trauma.right_cut) / 620 - * (blood === "off" ? 0 : blood === "reduced" ? 0.3 : 1.5), + (opponent.trauma.bleeding + opponent.trauma.left_cut + opponent.trauma.right_cut + opponent.trauma.head / 4) / 300 + * (blood === "off" ? 0 : blood === "reduced" ? 0.15 : 1.5), ); boxer.setGloveBlood(opponentBlood); boxer.setTrunksBlood(trunksBloodFor(fighter.trauma, blood)); @@ -1937,7 +2034,8 @@ export class BoxingGraph { // The server let the held press go sooner than expected: it plays on the server's timeline. this.ownQueued = null; this.retirePunch(); - this.startOwnPunch(queued, 0); + this.startOwnPunch(queued); + this.ownPress = false; } if ( fighter.action_id !== null @@ -1970,11 +2068,13 @@ export class BoxingGraph { // A punch the server cut off keeps coming back; one that was only late resumes. if (!this.ownRefused) { this.ownPulled = false; + this.ownCut = false; if (authoritativeAge - this.punchAgeTicks > 1) this.punchAgeTicks = authoritativeAge; } } else { this.punchAgeTicks = authoritativeAge; this.ownActionId = null; + this.ownPress = false; this.ownLeadTicks = 0; this.ownAuthoritativeAge = null; } @@ -1991,16 +2091,17 @@ export class BoxingGraph { const authoritativeAge = Math.max(0, sampledTick - fighter.action_start_tick); if (this.ownActionId === this.actionId) { this.ownAuthoritativeAge = authoritativeAge; - if (!this.ownPulled && authoritativeAge - this.punchAgeTicks > 1.5) this.punchAgeTicks = authoritativeAge; - } else if (Math.abs(this.punchAgeTicks - authoritativeAge) > 1.5) { + if (!this.ownPulled && authoritativeAge - this.punchAgeTicks - this.hitstopLag > 1.5) this.punchAgeTicks = authoritativeAge; + } else if (Math.abs(this.punchAgeTicks + this.hitstopLag - authoritativeAge) > 1.5) { this.punchAgeTicks = authoritativeAge; + this.hitstopLag = 0; } } - if (this.punchActive && this.ownActionId !== null && this.ownAuthoritativeAge === null && !this.ownPulled) { - // No word from the server well past when it was due: it turned the punch down. Before - // contact the glove comes back; after it the punch simply finishes. + if (this.punchActive && this.ownActionId !== null && this.ownAuthoritativeAge === null && !this.ownPulled && !this.ownCut) { + // No word from the server well past when it was due: it turned the punch down, or has yet to get it. The viewer's + // own press is only judged until the server is seen to start it; an opponent's punch seen early, before contact. this.ownWaitedTicks += simDt * 30; - if (this.ownWaitedTicks > this.ownExpectedTicks * 1.5 + OWN_PUNCH_GRACE_TICKS && this.punchAgeTicks < this.punchTiming.startup) this.ownPulled = true; + if (this.ownWaitedTicks > this.ownExpectedTicks * 1.5 + OWN_PUNCH_GRACE_TICKS && (this.ownPress ? !this.ownStarted : this.punchAgeTicks < this.punchTiming.startup)) this.takeBack(); } let ended = false; if (this.punchActive && this.ownPulled) { @@ -2012,7 +2113,17 @@ export class BoxingGraph { this.retirePunch(); } } else if (this.punchActive) { - this.punchAgeTicks += simDt * 30 * this.ownPunchRate(); + const recovery = this.punchTiming.startup + this.punchTiming.active; + if (this.ownCut && this.punchAgeTicks < recovery) this.punchAgeTicks = recovery; + const cut = this.ownCut || (this.recoveryCut && this.punchAgeTicks >= recovery); + // After a freeze the punch makes up what it held back, quickly but without a jump. + const repay = this.hitstop > 0 ? 0 : Math.min(this.hitstopLag, simDt * 30 * HITSTOP_REPAY_RATE); + this.hitstopLag -= repay; + this.punchAgeTicks += simDt * 30 * (cut ? OWN_PUNCH_CUT_RATE : this.ownPunchRate()) + repay; + if (this.ownPress && this.ownActionId !== null && !this.ownCut && this.punchAgeTicks >= this.punchTiming.startup && this.pressesLanded.at(-1) !== this.ownActionId) { + this.pressesLanded.push(this.ownActionId); + if (this.pressesLanded.length > 6) this.pressesLanded.shift(); + } if (this.punchAgeTicks >= this.punchTotalTicks) { this.retirePunch(); ended = true; @@ -2022,7 +2133,7 @@ export class BoxingGraph { if (this.punchActive) this.retirePunch(); this.ownQueued = null; } - this.releaseQueuedPress(simDt, ended); + this.releaseQueuedPress(simDt); // A punch the server says met the opponent, hit or block, follows his head wherever it went. const aimed = this.actionId ?? this.ownActionId; if (aimed !== this.aimActionId) { @@ -2030,6 +2141,8 @@ export class BoxingGraph { this.followHead = 0; } this.followHead = smooth(this.followHead, aimed !== null && aimed === this.contactId ? 1 : 0, FOLLOW_HEAD_RATE, simDt); + // And one that found the referee in the way lands on him. + this.followReferee = smooth(this.followReferee, aimed !== null && aimed === this.refereeContactId ? 1 : 0, FOLLOW_HEAD_RATE, simDt); } /** Takes the opponent's head as drawn and keeps where it would be without his slip, weave or pull. */ @@ -2043,12 +2156,12 @@ export class BoxingGraph { } /** - * Playback rate of the viewer's own punch. Until the server's version is on screen the startup is - * stretched by the estimated lead; once it is, the rate aims the glove at the server's contact - * tick, and any lead left after contact is worked off in a slower recovery. + * Playback rate of a punch started early. The viewer's own press keeps the server's pace. An opponent's punch seen + * early has its startup stretched by its lead until the server's version is on screen; once it is, the rate aims the + * glove at the server's contact tick, and any lead left after contact is worked off in a slower recovery. */ private ownPunchRate(): number { - if (this.ownActionId === null) return 1; + if (this.ownActionId === null || this.ownPress) return 1; const startup = this.punchTiming.startup; const authoritative = this.ownAuthoritativeAge; if (authoritative === null) return this.punchAgeTicks < startup ? startup / (startup + this.ownLeadTicks) : 1; @@ -2088,18 +2201,22 @@ export class BoxingGraph { // the hand over the windup, its turn and the elbow over twice that. let windupIn = 1; let onset = 1; + // A power punch loads up first, through most of its longer startup: he sinks, turns his shoulders and hips away from + // the punch and cocks the glove back, then unwinds into it. + let load = 0; if (age < startup) { phase = "startup"; const u = age / startup; - const windupEnd = this.punchClass === "hook" ? 0.3 : this.punchClass === "uppercut" ? 0.45 : 0.18; + const windupEnd = power === 1 ? POWER_LOAD : this.punchClass === "hook" ? 0.3 : this.punchClass === "uppercut" ? 0.45 : 0.18; windup = smoothstep(0, windupEnd, u) * (1 - smoothstep(windupEnd, Math.min(1, windupEnd + 0.4), u)); - extend = u <= windupEnd ? 0 : easeIn((u - windupEnd) / (1 - windupEnd), 1.65); + extend = u <= windupEnd ? 0 : easeIn((u - windupEnd) / (1 - windupEnd), power === 1 ? POWER_SNAP : 1.65); windupIn = smoothstep(0, windupEnd, u); onset = smoothstep(0, Math.min(1, windupEnd * 2), u); + load = power * smoothstep(0, POWER_LOAD * 0.8, u) * (1 - smoothstep(POWER_LOAD, Math.min(1, POWER_LOAD + 0.3), u)); } else if (age < startup + active) { phase = "active"; windup = 0; - extend = 1 + 0.06 * Math.sin(((age - startup) / active) * Math.PI); + extend = 1 + (0.06 + 0.05 * power) * Math.sin(((age - startup) / active) * Math.PI); } else { phase = "recovery"; windup = 0; @@ -2154,13 +2271,15 @@ export class BoxingGraph { break; } const rotation = this.punchClass === "hook" ? smoothstep(0.15, 1, e) : e; - torso.shouldersYaw = blade * 0.88 + yawTravel * mirror * rotation; - torso.hipsYaw = blade + hipsTravel * mirror * rotation; - torso.hips.z += hipsForward * e; + // The load turns him the other way from the punch's own turn. + const away = -Math.sign(yawTravel) * mirror * load; + torso.shouldersYaw = blade * 0.88 + yawTravel * mirror * rotation + POWER_LOAD_YAW * away; + torso.hipsYaw = blade + hipsTravel * mirror * rotation + POWER_LOAD_HIPS_YAW * away; + torso.hips.z += hipsForward * e - 0.04 * load; torso.hips.x += (isLead ? 0.02 : 0.05) * mirror * e; - torso.hips.y -= body * 0.1 * e + dip * windup + dip * 0.3 * e; - torso.spinePitch += 0.06 * e + body * 0.25 * e + dip * 1.4 * windup; - torso.headPitch += 0.05 * e + body * 0.12 * e; + torso.hips.y -= body * 0.1 * e + dip * windup + dip * 0.3 * e + POWER_LOAD_DIP * load; + torso.spinePitch += 0.06 * e + body * 0.25 * e + dip * 1.4 * windup + 0.14 * load; + torso.headPitch += 0.05 * e + body * 0.12 * e + 0.1 * load; torso.headOffset.z += 0.02 * e; torso.headYaw += -yawTravel * mirror * rotation * 0.35; @@ -2169,7 +2288,9 @@ export class BoxingGraph { const rootPosition = this.scratchB.set(this.rootX ?? 0, 0, this.rootZ); if (this.hasLiveHead) { // An evading head is aimed at where it was, so a slip or weave that worked shows the glove go by. - target.copy(this.guardOpponentHead).lerp(this.liveOpponentHead, this.followHead).sub(rootPosition).applyQuaternion(this.scratchQ.setFromAxisAngle(worldUpVector, -this.yaw)); + target.copy(this.guardOpponentHead).lerp(this.liveOpponentHead, this.followHead); + if (this.hasRefereeHead) target.lerp(this.refereeHead, this.followReferee); + target.sub(rootPosition).applyQuaternion(this.scratchQ.setFromAxisAngle(worldUpVector, -this.yaw)); if (body === 1) target.y -= 0.42; else target.y -= 0.04; } else { @@ -2219,6 +2340,10 @@ export class BoxingGraph { windupOffset.set(0, -0.01, -0.05 - 0.04 * power); break; } + // Loading a power punch, the glove draws further back and drops, wider still for a hook. + windupOffset.x += (this.punchClass === "hook" ? 0.08 : 0) * side * mirror * power; + windupOffset.y -= 0.05 * power; + windupOffset.z -= 0.12 * power; // A hook or uppercut keeps part of its windup until it travels, once the windup has eased in. const start = this.punchStart.copy(guard).addScaledVector(windupOffset, Math.max(windup, this.punchClass === "hook" || this.punchClass === "uppercut" ? (1 - travel) * 0.6 * windupIn : 0)); if (this.punchClass === "hook") { @@ -2281,6 +2406,38 @@ export class BoxingGraph { return e; } + /** The spring kicks a punch left in the body: the head snapped back, the trunk bent round it, the feet knocked off line. */ + private applyReactions(leadHand: HandTarget, rearHand: HandTarget, lead: { heel: number }, rear: { heel: number }): void { + const torso = this.torso; + torso.headOffset.add(this.headKick.value); + torso.headPitch += -this.headKick.value.z * 2.4 + this.headKick.value.y * 1.6; + torso.headYaw += this.headKick.value.x * 2.2; + torso.headRoll += -this.headKick.value.x * 0.9; + torso.spinePitch += this.torsoKick.value.x; + torso.spineRoll += this.torsoKick.value.z * 0.5; + torso.hips.x += this.rootKick.value.x; + torso.hips.z += this.rootKick.value.z; + torso.hips.y -= Math.max(0, this.torsoKick.value.x) * 0.08; + if (this.torsoKick.value.x > 0.05) { + leadHand.position.y -= this.torsoKick.value.x * 0.25; + rearHand.position.y -= this.torsoKick.value.x * 0.2; + leadHand.position.z -= this.torsoKick.value.x * 0.1; + } + // A body uppercut lifts the fighter onto his toes. + const lift = Math.max(0, this.rootKick.value.y); + torso.hips.y += lift; + lead.heel += lift * 6; + rear.heel += lift * 6; + const cover = this.coverKick.value.x; + if (Math.abs(cover) > 0.002) { + const near = cover > 0 ? this.hand.R : this.hand.L; + near.position.y -= Math.abs(cover) * 0.9; + near.position.x += cover * 0.2; + near.position.z -= Math.abs(cover) * 0.25; + near.pole.y -= Math.abs(cover) * 3; + } + } + /** Square, hands-low official's posture with a raised counting arm during knockdowns. */ private applyRefereePose( mirror: number, @@ -2291,6 +2448,7 @@ export class BoxingGraph { headRest: THREE.Vector3, time: number, sampledTick: number, + reeling = 0, ): void { const torso = this.torso; torso.hipsYaw = 0; @@ -2328,6 +2486,20 @@ export class BoxingGraph { torso.headPitch += 0.18; leadHand.position.set(0.24 * mirror, 0.95, 0.08); } + if (reeling > 0) { + // Punched, he staggers where he stands: knees going, head lolling, hands out for balance. + const reel = Math.min(1, reeling / 12); + const wobble = Math.sin(time * 9.5); + torso.hips.y -= 0.09 * reel; + torso.hips.x += wobble * 0.05 * reel; + torso.spineRoll += wobble * 0.18 * reel; + torso.headRoll -= wobble * 0.35 * reel; + torso.headPitch += 0.25 * reel; + leadHand.position.x += 0.18 * mirror * reel; + rearHand.position.x -= 0.18 * mirror * reel; + leadHand.position.y -= 0.1 * reel; + rearHand.position.y -= 0.1 * reel; + } } private updateDownState(fighter: FighterSnapshot, dt: number, reducedMotion: boolean, speed: number): void { @@ -3183,7 +3355,6 @@ const STOOL_SEAT_HEIGHT = 0.44; /** Seated weight below which a rising fighter's hips are about 0.2 m clear of the seat. */ const STOOL_CLEAR_SEATED = 0.2; /** The engine counts a knockdown one number a second; the counting arm starts down this far into each second. */ -const COUNT_TICKS = 30; const COUNT_DROP_START = 0.75; /** Where the referee's palms press to break a clinch: on each fighter's chest, this far toward the other from his centre, at sternum height. */ const BREAK_CHEST_DEPTH = 0.26; @@ -3576,19 +3747,34 @@ function buildStool(): { group: THREE.Group; dispose: () => void } { } const worldUpVector = new THREE.Vector3(0, 1, 0); -/** Most ticks of latency a predicted punch absorbs by stretching its startup; beyond this the hit is shown late instead. */ +/** Most ticks of latency an opponent's punch seen early absorbs by stretching its startup. */ const MAX_OWN_LEAD_TICKS = 6; -const OWN_PUNCH_GRACE_TICKS = 5; +const OWN_PUNCH_GRACE_TICKS = 3; const OWN_PUNCH_PULL_RATE = 1.5; +/** A punch taken back after contact goes straight back to the guard at this many times its own pace. */ +const OWN_PUNCH_CUT_RATE = 2.5; +/** How much faster than its own pace a punch makes up what a hit's freeze held back. */ +const HITSTOP_REPAY_RATE = 1.5; +/** Share of a power punch's startup spent loading up before it unwinds, and how sharply the glove then snaps out. */ +const POWER_LOAD = 0.55; +const POWER_SNAP = 2.1; +/** How far a power punch's load turns the shoulders and hips away from the punch (radians) and sinks him (metres). */ +const POWER_LOAD_YAW = 0.42; +const POWER_LOAD_HIPS_YAW = 0.22; +const POWER_LOAD_DIP = 0.08; /** An opponent's punch seen early is held back unless its wind-up can play at this share of its speed or faster. */ const MIN_ANTICIPATION_RATE = 0.5; /** Presses closer together than this usually reach the server before the same step, where the newer one replaces the older. */ const SAME_STEP_TICKS = 0.5; /** Contact events in which a punch met the opponent: a hit or a block, a parry included. */ -const CONNECTING_CONTACTS: ReadonlySet = new Set(["hit", "counter_hit", "block", "perfect_block"]); +const CONNECTING_CONTACTS: ReadonlySet = new Set(["hit", "counter_hit", "block", "perfect_block", "referee_hit"]); const EVASION_POSES: ReadonlySet = new Set(["slip_left", "slip_right", "weave", "pull"]); -/** Seconds after an evasion ends for the head to settle back (the slip, weave and pull ease at 14-16 a second). */ -const HEAD_SETTLE_SECONDS = 0.25; +/** Rate the guards, slips, weaves and pulls ease in and out at: nine tenths of the way in under a sixteenth of a second. */ +const DEFENCE_RATE = 40; +/** A weave's dip and roll from one side to the other runs as long as the engine's evasion. */ +const WEAVE_SECONDS = EVASION_TICKS / TICK_RATE; +/** Seconds after an evasion ends for the head to settle back (see DEFENCE_RATE). */ +const HEAD_SETTLE_SECONDS = 0.12; /** Rate at which a punch known to connect turns its aim onto the head where it actually is. */ const FOLLOW_HEAD_RATE = 30; /** How far the elbow's pull swings out while it turns from the guard's to the punch's. */ diff --git a/web/hands/src/render/hud-corner.test.ts b/web/hands/src/render/hud-corner.test.ts index a2d0a458..aa740cb7 100644 --- a/web/hands/src/render/hud-corner.test.ts +++ b/web/hands/src/render/hud-corner.test.ts @@ -1,5 +1,5 @@ import { EYE_SHUT_TRAUMA } from "../manifest"; -import { cornerWorkLine, drawHud, shutEyeTag } from "./hud"; +import { cornerWorkLine, drawHud, POWER_TAG, shutEyeTag } from "./hud"; import { fighter, mockHudContext, publicPlayers, snapshot } from "../test/fixtures"; const players = Object.fromEntries(publicPlayers.map((player) => [player.id, player])); @@ -42,3 +42,18 @@ describe("the corners between rounds", () => { expect(texts).toContain("Blue: icing the swelling"); }); }); + +describe("a power punch armed", () => { + it("is shown on the player's own plate while he holds the power modifier in the fight, and to nobody else", () => { + const shown = (viewerId: string, powerHeld: boolean, phase: "fight" | "countdown" | "rest" = "fight"): number => { + const texts: string[] = []; + drawHud(mockHudContext(texts), 1280, 720, { ...snapshot(), phase }, players, viewerId, null, 0, 30, null, null, null, null, null, null, null, false, powerHeld); + return texts.filter((text) => text === POWER_TAG).length; + }; + expect(shown("one", true)).toBe(1); + expect(shown("one", true, "countdown")).toBe(1); + expect(shown("one", false)).toBe(0); + expect(shown("one", true, "rest")).toBe(0); + expect(shown("spectator", true)).toBe(0); + }); +}); diff --git a/web/hands/src/render/hud.ts b/web/hands/src/render/hud.ts index 287b32a3..9bd8443c 100644 --- a/web/hands/src/render/hud.ts +++ b/web/hands/src/render/hud.ts @@ -1,4 +1,4 @@ -import { EYE_SHUT_TRAUMA, GUARD_BLOCK_MINIMUM } from "../manifest"; +import { EYE_SHUT_TRAUMA, GUARD_BLOCK_MINIMUM, GUARD_REARM } from "../manifest"; import { isDebut, recordLine } from "../record"; import { styleTag } from "../styles"; import type { CombatEvent, CornerChoice, EngineSnapshot, FighterSnapshot, FinalMessage, FinishMethod, PublicPlayer, PunchTotals, RatingDelta, TraumaSnapshot } from "../types"; @@ -8,6 +8,8 @@ import { monogram } from "./avatars"; export type PictureSource = (player: PublicPlayer) => CanvasImageSource | null; export const HUD_MAX_GUARD = 700; +/** What the player's own plate says while he holds the power modifier. */ +export const POWER_TAG = "POWER ARMED"; export const HUD_MAX_POISE = 600; export const HUD_MAX_CONDITIONING = 1000; export const scoreTotal = (scores: readonly number[]): number => scores.reduce((sum, score) => sum + score, 0); @@ -137,6 +139,26 @@ export function cornerWorkLine(fighters: readonly FighterSnapshot[]): string | n return told.length === 0 ? null : told.join(" · "); } +/** The player's own plate says his next punch is a power punch while he holds the power modifier. */ +function powerTag(ctx: CanvasRenderingContext2D, x: number, y: number, mirror: boolean): void { + ctx.save(); + ctx.font = "900 12px Inter, system-ui, sans-serif"; + const width = ctx.measureText(POWER_TAG).width + 16; + const left = mirror ? x - width : x; + ctx.shadowColor = "rgba(255,120,30,0.9)"; + ctx.shadowBlur = 12; + const fill = ctx.createLinearGradient(0, y, 0, y + 18); + fill.addColorStop(0, "#ffd36b"); + fill.addColorStop(1, "#ff6a1a"); + ctx.fillStyle = fill; + ctx.fillRect(left, y, width, 18); + ctx.shadowBlur = 0; + ctx.fillStyle = "#2a0c00"; + ctx.textAlign = "left"; + ctx.fillText(POWER_TAG, left + 8, y + 13); + ctx.restore(); +} + function warningTag(ctx: CanvasRenderingContext2D, x: number, y: number, text: string, mirror: boolean): void { ctx.save(); ctx.font = "800 9px Inter, system-ui, sans-serif"; @@ -423,7 +445,7 @@ export class RoundClock { } if (snapshot.phase === "fight") this.fightTicks = snapshot.phase_ticks_remaining; // A stoppage freezes the clock where the bout ended, as the broadcast does. - const held = snapshot.phase === "knockdown" || snapshot.phase === "foul_recovery" || snapshot.phase === "complete"; + const held = snapshot.phase === "knockdown" || snapshot.phase === "foul_recovery" || snapshot.phase === "referee_down" || snapshot.phase === "complete"; return held && this.fightTicks !== null ? this.fightTicks : snapshot.phase_ticks_remaining; } } @@ -519,14 +541,14 @@ export function decisionLabel(final: FinalMessage): string { export const STOPPAGE_METHODS: ReadonlySet = new Set(["ko", "flash_ko", "tko"]); export const FINAL_REVEAL_DELAY_SECONDS = 3.6; -/** A disqualification or a doctor's stoppage is the referee's call: a moment for it before the result. */ +/** A disqualification is the referee's call: a moment for it before the result. */ export const REFEREE_REVEAL_DELAY_SECONDS = 2.4; /** Seconds to hold the result panel back so a stoppage's slow-motion fall stays visible. */ export function finalRevealDelay(final: FinalMessage | null): number { if (final === null) return 0; if (STOPPAGE_METHODS.has(final.method)) return FINAL_REVEAL_DELAY_SECONDS; - return final.method === "disqualification" || final.method === "doctor_stoppage" ? REFEREE_REVEAL_DELAY_SECONDS : 0; + return final.method === "disqualification" ? REFEREE_REVEAL_DELAY_SECONDS : 0; } /** Below the top bar, or below the round card where a phone puts it under the top bar. */ @@ -562,6 +584,8 @@ export function drawHud( countTarget: string | null = null, /** The touch pads are up over the right of the screen. */ touch = false, + /** The viewer holds the power modifier: his next punch is a power punch. */ + powerHeld = false, ): void { ctx.save(); const scale = hudScale(width, height); @@ -587,8 +611,9 @@ export function drawHud( const bars: BarSpec[] = [ { label: `${compact ? "STA" : "STAMINA"} ${Math.round(fighter.stamina)}`, value: fighter.stamina, maximum: fighter.maximum_stamina, from: "#ffe08a", to: "#d9a53a" }, { label: `${compact ? "HP" : "HEALTH"} ${Math.round(fighter.conditioning)}`, value: fighter.conditioning, maximum: HUD_MAX_CONDITIONING, from: "#ff8a7a", to: "#b02a20" }, - // Under the mark a guard stops nothing: a block that takes it there breaks it (guard_break). - { label: "GUARD", value: fighter.guard, maximum: HUD_MAX_GUARD, from: "#9ec7ff", to: "#3d6fb8", spentBelow: GUARD_BLOCK_MINIMUM }, + // Under the mark a guard stops nothing: a block that takes it there breaks it (guard_break), and a broken + // guard stops nothing until it is back past the rearm mark. + { label: fighter.guard_broken ? "GUARD BROKEN" : "GUARD", value: fighter.guard, maximum: HUD_MAX_GUARD, from: "#9ec7ff", to: "#3d6fb8", spentBelow: fighter.guard_broken ? GUARD_REARM : GUARD_BLOCK_MINIMUM }, { label: `POISE ${Math.round(fighter.poise)}`, value: fighter.poise, maximum: HUD_MAX_POISE, from: "#e8c890", to: "#8a6a34" }, ]; const accent = index === 0 ? "#3d6fb8" : "#b02a20"; @@ -603,6 +628,7 @@ export function drawHud( broadcastBar(ctx, mirror ? x + plateWidth - 8 - miniWidth : x + 32 + miniWidth, miniY, miniWidth, bars[3]!, mirror); const eyeTag = shutEyeTag(fighter.trauma); if (eyeTag !== null) warningTag(ctx, mirror ? x + plateWidth - 20 : x + 20, miniY - 34, eyeTag, mirror); + if (powerHeld && fighter.player_id === viewerId && (snapshot.phase === "fight" || snapshot.phase === "countdown")) powerTag(ctx, mirror ? x + plateWidth - 20 : x + 20, miniY - (eyeTag === null ? 38 : 60), mirror); }); const seconds = Math.floor((clockTicks ?? snapshot.phase_ticks_remaining) / tickRate); @@ -785,7 +811,6 @@ const METHOD_HEADLINES: Readonly>> = { ko: "KNOCKOUT", flash_ko: "FLASH KNOCKOUT", tko: "TECHNICAL KNOCKOUT", - doctor_stoppage: "DOCTOR STOPPAGE", disqualification: "DISQUALIFICATION", forfeit: "FORFEIT", }; diff --git a/web/hands/src/render/injury.test.ts b/web/hands/src/render/injury.test.ts index d3e5e6ab..dbc22db0 100644 --- a/web/hands/src/render/injury.test.ts +++ b/web/hands/src/render/injury.test.ts @@ -130,17 +130,34 @@ describe("swelling", () => { boxer.dispose(); }); - it("opens a cheek cut wide before the doctor stops the bout, and splits a forehead swollen for a round or two", () => { + it("opens a cheek cut wide on a bad cut, and splits a forehead swollen for a round or two", () => { const shading = new InjuryShading(new THREE.MeshStandardMaterial(), HEAD_SITES); - // The doctor stops a bout at a cut of 800. applyHeadTrauma(shading, trauma({ left_cut: 760, swelling: 450 }), "full"); expect(shading.level("leftCheek").cut).toBe(1); expect(shading.level("forehead").cut).toBeGreaterThan(0.15); expect(shading.level("forehead").blood).toBeGreaterThan(0.15); - applyHeadTrauma(shading, trauma({ left_cut: 300, swelling: 360 }), "full"); + applyHeadTrauma(shading, trauma({ left_cut: 140, swelling: 230 }), "full"); expect(shading.level("leftCheek").cut).toBe(0); expect(shading.level("forehead").cut).toBe(0); }); + + it("bleeds from the nose after a couple of clean head shots and from the brow as soon as it is cut", () => { + const shading = new InjuryShading(new THREE.MeshStandardMaterial(), HEAD_SITES); + applyHeadTrauma(shading, trauma({ head: 110 }), "full"); + // Half as much again as the wound itself at full blood. + expect(shading.level("nose").blood).toBeCloseTo((50 / 300) * 1.5, 6); + expect(shading.level("leftBrow").blood).toBe(0); + const cut = trauma({ head: 110, left_cut: 40, bleeding: 20 }); + applyHeadTrauma(shading, cut, "full"); + expect(shading.level("leftBrow").blood).toBeGreaterThan(0.4); + expect(shading.level("leftBrow").cut).toBeGreaterThan(0.3); + // A face cut wide open runs with blood from every wound. + applyHeadTrauma(shading, trauma({ head: 700, left_cut: 400, right_cut: 350, swelling: 500, bleeding: 400 }), "full"); + for (const site of ["leftBrow", "rightBrow", "nose", "mouth", "leftCheek", "rightCheek", "forehead"]) expect(shading.level(site).blood, site).toBeGreaterThan(0.8); + // Reduced blood shows a fifth of it. + applyHeadTrauma(shading, cut, "reduced"); + expect(shading.level("leftBrow").blood).toBeLessThan(0.1); + }); }); describe("an eye swelling shut", () => { @@ -188,9 +205,12 @@ describe("an eye swelling shut", () => { }); describe("blood running from a wound", () => { - it("splits into a second rivulet only once it runs freely", () => { + it("splits into a second rivulet once it runs freely and a third once it pours, each running most of the face", () => { const head = compile(new InjuryShading(new THREE.MeshStandardMaterial(), HEAD_SITES).material!); - expect(head.fragmentShader).toContain("if (fk > 0.5 && blood < 0.45) break;"); + expect(head.fragmentShader).toContain("for (int k = 0; k < 3; k++)"); + expect(head.fragmentShader).toContain("if (fk > 0.5 && blood < 0.3) break;"); + expect(head.fragmentShader).toContain("if (fk > 1.5 && blood < 0.7) break;"); + expect(head.fragmentShader).toContain("float reach = (4.0 + blood * 18.0)"); }); it("is washed broad across the body by sweat, and only the body", () => { @@ -227,7 +247,8 @@ describe("a cut with blood off", () => { describe("blood in the trunks", () => { it("runs in from a fighter's own bleeding, lighter with reduced blood and never with blood off", () => { - expect(trunksBloodFor(trauma({ bleeding: 30, left_cut: 60 }), "full")).toBe(0); + expect(trunksBloodFor(trauma({ bleeding: 8, left_cut: 40 }), "full")).toBe(0); + expect(trunksBloodFor(trauma({ bleeding: 60, left_cut: 120 }), "full")).toBeGreaterThan(0.3); const bleeding = trauma({ bleeding: 300, left_cut: 300, right_cut: 150 }); expect(trunksBloodFor(bleeding, "full")).toBeGreaterThan(0.6); expect(trunksBloodFor(bleeding, "reduced")).toBeLessThan(trunksBloodFor(bleeding, "full") * 0.5); diff --git a/web/hands/src/render/injury.ts b/web/hands/src/render/injury.ts index 8ab0ff73..0fcac186 100644 --- a/web/hands/src/render/injury.ts +++ b/web/hands/src/render/injury.ts @@ -268,19 +268,20 @@ const FRAGMENT_BODY = /* glsl */ ` float drop = origin.y - injuryPos.y; if (drop < -0.6 || injuryPos.z < origin.z - 3.2) continue; float flow = smoothstep(0.0, 0.3, blood); - float well = (1.0 - smoothstep(0.0, 0.3 + blood * 0.4, distance(injuryPos.xy, origin.xy))) * flow; + float well = (1.0 - smoothstep(0.0, 0.4 + blood * 0.6, distance(injuryPos.xy, origin.xy))) * flow; float w = well; - // Two rivulets of their own lengths run from each wound, wandering, thinning, with a bead at each tip. - for (int k = 0; k < 2; k++) { + // Up to three rivulets of their own lengths run from each wound, wandering, thinning, with a bead at each tip. + for (int k = 0; k < 3; k++) { float fk = float(k); - if (fk > 0.5 && blood < 0.45) break; + if (fk > 0.5 && blood < 0.3) break; + if (fk > 1.5 && blood < 0.7) break; float seed = fract(sin(float(i) * 12.9898 + fk * 78.233) * 43758.5453); - float reach = (2.0 + blood * 9.0) * (fk < 0.5 ? 1.0 : 0.55 + 0.3 * seed); - float start = (fk < 0.5 ? -0.3 : 0.4) * (0.6 + 0.6 * seed) * radius * 0.35; + float reach = (4.0 + blood * 18.0) * (fk < 0.5 ? 1.0 : 0.55 + 0.3 * seed); + float start = (fk < 0.5 ? -0.3 : fk < 1.5 ? 0.4 : 0.05) * (0.6 + 0.6 * seed) * radius * 0.35; float t = clamp(drop / reach, 0.0, 1.0); float wander = (0.35 * sin(injuryPos.y * 1.3 + float(i) * 1.7 + fk * 2.1) + 0.15 * sin(injuryPos.y * 3.7 + fk)) * t; float dx = abs(injuryPos.x - origin.x - start - wander); - float width = (0.26 - 0.12 * t) * (0.7 + 0.45 * min(1.0, blood)); + float width = (0.32 - 0.12 * t) * (0.8 + 0.9 * min(1.4, blood)); float run = (1.0 - smoothstep(width * 0.55, width, dx)) * step(drop, reach) * smoothstep(-0.4, 0.1, drop); float tipY = origin.y - reach; vec2 tip = vec2(origin.x + start + 0.35 * sin(tipY * 1.3 + float(i) * 1.7 + fk * 2.1) + 0.15 * sin(tipY * 3.7 + fk), tipY); @@ -296,7 +297,7 @@ const FRAGMENT_BODY = /* glsl */ ` float t = clamp(drop / (radius * 3.2 + blood * 10.0), 0.0, 1.0); float across = abs(injuryPos.x - origin.x + 0.9 * sin(injuryPos.y * 0.45 + float(i))); float wash = (1.0 - smoothstep(radius * (0.5 + 0.4 * t), radius * (1.0 + 0.7 * t), across)) * (1.0 - t * t) * smoothstep(-0.6, 0.6, drop) * flow; - diffuseColor.rgb = mix(diffuseColor.rgb, diffuseColor.rgb * vec3(0.95, 0.26, 0.26) + vec3(0.07, 0.0, 0.0), wash * min(1.0, blood) * 0.7); + diffuseColor.rgb = mix(diffuseColor.rgb, diffuseColor.rgb * vec3(0.95, 0.26, 0.26) + vec3(0.07, 0.0, 0.0), wash * min(1.0, blood) * 0.9); w = max(w, wash * 0.5); } injuryWet = max(injuryWet, w); @@ -515,20 +516,20 @@ export class InjuryShading { if (rightLid!.y > -500) rightLid!.w = THREE.MathUtils.clamp(right, 0, 1) || 0; } - /** Hollows a socket whose eye has been forced out: `side` is the fighter's own. */ - setEyeOut(side: "left" | "right" | null): void { + /** Hollows a socket whose eye has been forced out, or both: `side` is the fighter's own. */ + setEyeOut(side: "left" | "right" | "both" | null): void { const lids = this.uniforms.uInjuryLid.value; - const left = side === "left" && lids[0]!.y > -500; - const right = side === "right" && lids[1]!.y > -500; + const left = (side === "left" || side === "both") && lids[0]!.y > -500; + const right = (side === "right" || side === "both") && lids[1]!.y > -500; this.uniforms.uInjuryEyeOut.value.set(left ? 1 : 0, right ? 1 : 0); // The empty socket runs with blood down the cheek. if (this.index.has("leftEye")) this.set("leftEye", { blood: left ? 1.3 : 0 }); if (this.index.has("rightEye")) this.set("rightEye", { blood: right ? 1.3 : 0 }); } - get eyeOut(): "left" | "right" | null { + get eyeOut(): "left" | "right" | "both" | null { const out = this.uniforms.uInjuryEyeOut.value; - return out.x > 0 ? "left" : out.y > 0 ? "right" : null; + return out.x > 0 && out.y > 0 ? "both" : out.x > 0 ? "left" : out.y > 0 ? "right" : null; } get eyesShut(): readonly [number, number] { @@ -558,7 +559,8 @@ export class InjuryShading { } } -const bloodScale = (blood: BloodLevel): number => (blood === "off" ? 0 : blood === "reduced" ? 0.35 : 1); +/** How much of a wound's blood shows on the skin and the gear: half as much again at full blood, a fifth with reduced. */ +const bloodScale = (blood: BloodLevel): number => (blood === "off" ? 0 : blood === "reduced" ? 0.2 : 1.5); /** Eye damage at which an eye is swollen fully shut, whatever the rest of the face: the engine's blind side starts there too. */ export { EYE_SHUT_TRAUMA }; @@ -577,10 +579,11 @@ export function eyeShut(eyeTrauma: number, swelling: number): number { */ export const EYE_SWELL = 2; export const CHEEK_SWELL = 1.8; -/** A cheek cut is wide open by this much cut damage, short of the 800 at which the doctor stops the bout. */ -const CHEEK_CUT_OPEN = 750; -/** Swelling at which the forehead splits: a face battered for a round or two, where 520 was all but out of reach. */ -const FOREHEAD_SPLITS = 380; +/** A cheek starts to split at this much cut damage and is wide open by the next. */ +const CHEEK_CUT_STARTS = 150; +const CHEEK_CUT_OPEN = 500; +/** Swelling at which the forehead splits: a face battered for a round, where 520 was all but out of reach. */ +const FOREHEAD_SPLITS = 240; /** Maps authoritative trauma onto head injury sites. */ export function applyHeadTrauma(shading: InjuryShading, trauma: TraumaSnapshot, blood: BloodLevel): void { @@ -592,28 +595,30 @@ export function applyHeadTrauma(shading: InjuryShading, trauma: TraumaSnapshot, shading.set("leftEye", { bruise: eye(trauma.left_eye), swell: swell(trauma.left_eye) }); shading.set("rightEye", { bruise: eye(trauma.right_eye), swell: swell(trauma.right_eye) }); shading.setEyesShut(eyeShut(trauma.left_eye, trauma.swelling), eyeShut(trauma.right_eye, trauma.swelling)); - const browCut = (cut: number): number => Math.min(1, cut / 220); - const browBlood = (cut: number): number => Math.min(1.4, (cut / 260 + trauma.bleeding / 520) * bleed); + // The face bleeds from the first cut, and runs with blood long before the fight is lost. + const browCut = (cut: number): number => Math.min(1, cut / 120); + const browBlood = (cut: number): number => Math.min(1.4, (cut / 120 + trauma.bleeding / 240) * bleed); shading.set("leftBrow", { bruise: Math.min(1, trauma.left_eye / 700), swell: Math.min(1.2, trauma.left_eye / 900) * graphic, cut: browCut(trauma.left_cut), blood: browBlood(trauma.left_cut) }); shading.set("rightBrow", { bruise: Math.min(1, trauma.right_eye / 700), swell: Math.min(1.2, trauma.right_eye / 900) * graphic, cut: browCut(trauma.right_cut), blood: browBlood(trauma.right_cut) }); const cheek = Math.min(1, trauma.head / 950 + trauma.swelling / 1100); const cheekSwell = Math.min(CHEEK_SWELL, trauma.swelling / 520) * graphic; - const cheekCut = (cut: number): number => Math.min(1, Math.max(0, cut - 350) / (CHEEK_CUT_OPEN - 350)); - shading.set("leftCheek", { bruise: cheek * 0.9, swell: cheekSwell, cut: cheekCut(trauma.left_cut), blood: Math.min(1, Math.max(0, trauma.left_cut - 350) / 400) * bleed }); - shading.set("rightCheek", { bruise: cheek * 0.85, swell: cheekSwell, cut: cheekCut(trauma.right_cut), blood: Math.min(1, Math.max(0, trauma.right_cut - 350) / 400) * bleed }); - shading.set("nose", { bruise: Math.min(1, trauma.head / 800), swell: Math.min(0.8, trauma.head / 1400) * graphic, blood: Math.min(1.4, (Math.max(0, trauma.head - 160) / 520 + trauma.bleeding / 420) * bleed) }); - shading.set("mouth", { bruise: Math.min(0.8, trauma.head / 1100), cut: Math.min(1, Math.max(0, trauma.head - 420) / 700), blood: Math.min(1.2, (Math.max(0, trauma.head - 280) / 650 + trauma.bleeding / 500) * bleed) }); + const cheekCut = (cut: number): number => Math.min(1, Math.max(0, cut - CHEEK_CUT_STARTS) / (CHEEK_CUT_OPEN - CHEEK_CUT_STARTS)); + const cheekBlood = (cut: number): number => Math.min(1.2, Math.max(0, cut - CHEEK_CUT_STARTS + 30) / 240) * bleed; + shading.set("leftCheek", { bruise: cheek * 0.9, swell: cheekSwell, cut: cheekCut(trauma.left_cut), blood: cheekBlood(trauma.left_cut) }); + shading.set("rightCheek", { bruise: cheek * 0.85, swell: cheekSwell, cut: cheekCut(trauma.right_cut), blood: cheekBlood(trauma.right_cut) }); + shading.set("nose", { bruise: Math.min(1, trauma.head / 800), swell: Math.min(0.8, trauma.head / 1400) * graphic, blood: Math.min(1.4, (Math.max(0, trauma.head - 60) / 300 + trauma.bleeding / 220) * bleed) }); + shading.set("mouth", { bruise: Math.min(0.8, trauma.head / 1100), cut: Math.min(1, Math.max(0, trauma.head - 250) / 500), blood: Math.min(1.3, (Math.max(0, trauma.head - 120) / 360 + trauma.bleeding / 260) * bleed) }); shading.set("chin", { bruise: Math.min(0.7, trauma.head / 1300) }); const noseSide = trauma.left_eye >= trauma.right_eye ? -1 : 1; shading.setNoseShift(noseSide * Math.min(1.1, Math.max(0, trauma.head - 520) / 450) * graphic); shading.set("leftJaw", { bruise: Math.min(0.9, trauma.left_eye / 900 + trauma.head / 1600) }); shading.set("rightJaw", { bruise: Math.min(0.9, trauma.right_eye / 900 + trauma.head / 1600) }); - shading.set("forehead", { bruise: Math.min(0.6, trauma.swelling / 1200), cut: Math.min(1, Math.max(0, trauma.swelling - FOREHEAD_SPLITS) / 400), blood: Math.min(1.2, Math.max(0, trauma.swelling - FOREHEAD_SPLITS) / 360) * bleed }); + shading.set("forehead", { bruise: Math.min(0.6, trauma.swelling / 1200), cut: Math.min(1, Math.max(0, trauma.swelling - FOREHEAD_SPLITS) / 300), blood: Math.min(1.2, Math.max(0, trauma.swelling - FOREHEAD_SPLITS) / 220) * bleed }); } /** How far a fighter's own blood has run down into the front of the trunks, 0 to 1. */ export function trunksBloodFor(trauma: TraumaSnapshot, blood: BloodLevel): number { - return Math.min(1, (Math.max(0, trauma.bleeding - 40) / 420 + Math.max(0, trauma.left_cut + trauma.right_cut - 150) / 1300) * bloodScale(blood)); + return Math.min(1, (Math.max(0, trauma.bleeding - 10) / 220 + Math.max(0, trauma.left_cut + trauma.right_cut - 60) / 650) * bloodScale(blood)); } /** Maps authoritative trauma onto torso injury sites. Head bleeding smears down the neck and chest. */ @@ -625,8 +630,8 @@ export function applyBodyTrauma(shading: InjuryShading, trauma: TraumaSnapshot, shading.set("solarPlexus", { bruise: Math.min(1, trauma.body / 800) }); shading.set("leftPec", { bruise: Math.min(0.8, trauma.body / 1100) }); shading.set("rightPec", { bruise: Math.min(0.8, trauma.body / 1150) }); - const smear = Math.min(1.4, (trauma.bleeding / 380 + (trauma.left_cut + trauma.right_cut) / 900) * bleed); + const smear = Math.min(1.4, (trauma.bleeding / 200 + (trauma.left_cut + trauma.right_cut) / 450) * bleed); shading.set("neckSmear", { blood: smear }); - shading.set("leftShoulderSmear", { blood: Math.min(1, trauma.left_cut / 600) * bleed }); - shading.set("rightShoulderSmear", { blood: Math.min(1, trauma.right_cut / 600) * bleed }); + shading.set("leftShoulderSmear", { blood: Math.min(1.2, trauma.left_cut / 300) * bleed }); + shading.set("rightShoulderSmear", { blood: Math.min(1.2, trauma.right_cut / 300) * bleed }); } diff --git a/web/hands/src/render/lens-blood.test.ts b/web/hands/src/render/lens-blood.test.ts new file mode 100644 index 00000000..b508703e --- /dev/null +++ b/web/hands/src/render/lens-blood.test.ts @@ -0,0 +1,141 @@ +import * as THREE from "three"; +import { describe, expect, it, vi } from "vitest"; +import type { CombatEvent } from "../types"; +import { Effects3D } from "./effects"; +import { LensBlood, MOST_LENS_DROPS } from "./lens-blood"; + +/** A context that records where each drop's sprite is drawn, after the drop's own turn and move. */ +function recording(): { ctx: CanvasRenderingContext2D; drawn: { x: number; y: number; size: number; alpha: number }[]; resets: number } { + const drawn: { x: number; y: number; size: number; alpha: number }[] = []; + const stack: { x: number; y: number }[] = []; + let at = { x: 0, y: 0 }; + const record = { ctx: null as unknown as CanvasRenderingContext2D, drawn, resets: 0 }; + record.ctx = { + globalAlpha: 1, + fillStyle: "", + save: () => stack.push({ ...at }), + restore: () => { at = stack.pop() ?? { x: 0, y: 0 }; }, + translate: (x: number, y: number) => { at = { x: at.x + x, y: at.y + y }; }, + rotate: () => {}, + setTransform: () => { record.resets += 1; }, + createLinearGradient: () => ({ addColorStop: () => {} }), + beginPath: () => {}, + moveTo: () => {}, + lineTo: () => {}, + closePath: () => {}, + fill: () => {}, + drawImage(this: { globalAlpha: number }, _image: unknown, x: number, _y: number, width: number) { drawn.push({ x: at.x, y: at.y, size: width, alpha: this.globalAlpha }); }, + } as unknown as CanvasRenderingContext2D; + return record; +} + +describe("blood on the lens", () => { + it("lands round where the blow is on the screen, more of it and bigger the harder it is thrown", () => { + const light = new LensBlood(); + light.splash(0.7, 0.4, 0.2, 3); + const soaked = new LensBlood(); + soaked.splash(0.7, 0.4, 3, 3); + expect(light.count).toBeGreaterThanOrEqual(1); + expect(light.count).toBeLessThanOrEqual(3); + expect(soaked.count).toBe(24); + const draw = (lens: LensBlood) => { + const record = recording(); + lens.draw(record.ctx, 1000, 500); + return record; + }; + const big = draw(soaked); + expect(big.drawn).toHaveLength(24); + const near = big.drawn.filter((drop) => Math.hypot(drop.x - 700, drop.y - 200) < 500); + expect(near.length).toBeGreaterThan(14); + expect(Math.max(...big.drawn.map((drop) => drop.size))).toBeGreaterThan(Math.max(...draw(light).drawn.map((drop) => drop.size))); + // Drawn within the screen's own transform (the HUD's pixel ratio), which it never resets. + expect(big.resets).toBe(0); + }); + + it("runs the big drops down the glass and fades every drop away within five seconds", () => { + const lens = new LensBlood(); + lens.splash(0.5, 0.3, 2, 8); + const heights = (): number[] => { + const record = recording(); + lens.draw(record.ctx, 800, 600); + return record.drawn.map((drop) => drop.y); + }; + const before = heights(); + lens.update(1); + const after = heights(); + expect(after.some((y, index) => y > before[index]! + 5)).toBe(true); + expect(after.every((y, index) => y >= before[index]! - 1e-9)).toBe(true); + for (let step = 0; step < 41; step += 1) lens.update(0.1); + expect(lens.count).toBe(0); + }); + + it("holds only so many drops, wiping off the oldest, and ignores nonsense", () => { + const lens = new LensBlood(); + for (let splash = 0; splash < 10; splash += 1) lens.splash(0.5, 0.5, 2, splash); + expect(lens.count).toBe(MOST_LENS_DROPS); + lens.clear(); + expect(lens.count).toBe(0); + lens.splash(Number.NaN, 0.5, 2, 1); + lens.splash(0.5, 0.5, 0, 1); + lens.update(Number.NaN); + expect(lens.count).toBe(0); + }); +}); + +describe("blood thrown at the camera", () => { + const camera = (z: number): THREE.PerspectiveCamera => { + const lens = new THREE.PerspectiveCamera(36, 16 / 9, 0.1, 80); + lens.position.set(0, 1.5, z); + lens.lookAt(0, 1.4, 0); + lens.updateMatrixWorld(true); + return lens; + }; + const punch = (amount: number, blood = 60, eventId = 5): CombatEvent => ({ event_id: eventId, tick: 1, kind: "hit", actor_id: "one", target_id: "two", amount, detail: "straight:head", blood, direction: 1, action_id: null }); + const thrown = (event: CombatEvent, lens: THREE.Camera | null, at = new THREE.Vector3(), setup?: (effects: Effects3D) => void, reducedMotion = false): number => { + const effects = new Effects3D(new THREE.Scene(), 256); + if (lens !== null) effects.setCamera(lens); + setup?.(effects); + effects.addEvent(event, at, reducedMotion); + const drops = effects.lensDrops; + effects.dispose(); + return drops; + }; + + it("lands on the lens from a solid punch in the picture, even from the broadcast camera, and soaks it from a nearer one", () => { + expect(thrown(punch(120), camera(3))).toBeGreaterThan(8); + expect(thrown(punch(120), camera(3))).toBeGreaterThan(thrown(punch(120), camera(8))); + expect(thrown(punch(120), camera(8))).toBeGreaterThan(2); + expect(thrown(punch(120), camera(13))).toBe(0); + // Nothing from a light punch, from behind the camera, from off the screen, or without a camera. + expect(thrown(punch(39), camera(3))).toBe(0); + expect(thrown(punch(120), camera(-3), new THREE.Vector3(0, 0, -6))).toBe(0); + expect(thrown(punch(120), camera(3), new THREE.Vector3(6, 0, 0))).toBe(0); + expect(thrown(punch(120), null)).toBe(0); + }); + + it("throws a few drops with reduced blood and none with blood off or reduced motion", () => { + const full = thrown(punch(140, 100), camera(2.5)); + const reduced = thrown(punch(140, 100), camera(2.5), undefined, (effects) => effects.setBloodLevel("reduced")); + expect(reduced).toBeGreaterThan(0); + expect(reduced).toBeLessThan(full / 2); + expect(thrown(punch(140, 100), camera(2.5), undefined, (effects) => effects.setBloodLevel("off"))).toBe(0); + expect(thrown(punch(140, 100), camera(2.5), undefined, undefined, true)).toBe(0); + }); + + it("is soaked by a finisher near the camera, and wiped clean when the blood is turned off or the bout is cleared", () => { + const effects = new Effects3D(new THREE.Scene(), 256); + effects.setCamera(camera(3)); + effects.burstHead(1, new THREE.Vector3(0, 1.6, 0), 1, 9); + expect(effects.lensDrops).toBe(24); + const draw = vi.fn(); + effects.drawLens({ save: vi.fn(), restore: vi.fn(), translate: vi.fn(), rotate: vi.fn(), fillRect: vi.fn(), drawImage: draw } as unknown as CanvasRenderingContext2D, 1280, 720); + expect(draw).toHaveBeenCalledTimes(24); + effects.clearDynamic(); + expect(effects.lensDrops).toBe(0); + effects.decapitate(0, new THREE.Vector3(0.2, 1.55, 0), new THREE.Quaternion(), 1, 10); + expect(effects.lensDrops).toBeGreaterThan(8); + effects.setBloodLevel("off"); + expect(effects.lensDrops).toBe(0); + effects.dispose(); + }); +}); diff --git a/web/hands/src/render/lens-blood.ts b/web/hands/src/render/lens-blood.ts new file mode 100644 index 00000000..c1e15000 --- /dev/null +++ b/web/hands/src/render/lens-blood.ts @@ -0,0 +1,179 @@ +/** Drops the lens holds at most: past that the oldest is wiped off to make room. */ +export const MOST_LENS_DROPS = 96; +const SPRITE_SIZE = 96; +const SPRITE_COUNT = 4; +/** Seconds a drop stays on the lens, and the last share of them it takes to fade. */ +const LENS_SECONDS_LOW = 2.5; +const LENS_SECONDS_HIGH = 5; +const LENS_FADE = 0.45; +/** A drop this big (a share of the screen's height) or bigger runs down the lens before it fades. */ +const RUNNING_DROP = 0.032; + +interface LensDrop { + x: number; + y: number; + /** As a share of the screen's height. */ + radius: number; + alpha: number; + life: number; + maxLife: number; + /** How fast it runs down the lens and how far it has run, as shares of the screen's height. */ + run: number; + ran: number; + sprite: number; + turn: number; +} + +const seeded = (seed: number): (() => number) => () => { + seed = Math.imul(seed ^ (seed >>> 15), 1 | seed); + seed ^= seed + Math.imul(seed ^ (seed >>> 7), 61 | seed); + return ((seed ^ (seed >>> 14)) >>> 0) / 4294967296; +}; + +/** + * A splash of blood on glass, seen out of focus: a ragged blot darkest at its rim where it is thickest, + * runs thrown out from it as it hit, and flecks round it. + */ +function lensSprite(seed: number): HTMLCanvasElement { + const canvas = document.createElement("canvas"); + canvas.width = SPRITE_SIZE; + canvas.height = SPRITE_SIZE; + const ctx = canvas.getContext("2d"); + if (ctx === null) return canvas; + const rand = seeded(seed); + const middle = SPRITE_SIZE / 2; + const lobes = 4 + Math.floor(rand() * 3); + for (let lobe = 0; lobe < lobes; lobe += 1) { + const angle = rand() * Math.PI * 2; + const reach = lobe === 0 ? 0 : 9 + rand() * 11; + const x = middle + Math.cos(angle) * reach; + const y = middle + Math.sin(angle) * reach; + const radius = lobe === 0 ? 21 : 8 + rand() * 9; + const body = ctx.createRadialGradient(x, y, 0, x, y, radius); + body.addColorStop(0, "rgba(140,4,10,0.55)"); + body.addColorStop(0.7, "rgba(100,0,6,0.85)"); + body.addColorStop(0.92, "rgba(50,0,3,0.95)"); + body.addColorStop(1, "rgba(50,0,3,0)"); + ctx.fillStyle = body; + ctx.beginPath(); + ctx.arc(x, y, radius, 0, Math.PI * 2); + ctx.fill(); + } + ctx.fillStyle = "rgba(92,0,6,0.85)"; + for (let spike = 0; spike < 4 + Math.floor(rand() * 5); spike += 1) { + const angle = rand() * Math.PI * 2; + const reach = 20 + rand() * 12; + ctx.beginPath(); + ctx.ellipse(middle + Math.cos(angle) * reach, middle + Math.sin(angle) * reach, 5 + rand() * 8, 1.4 + rand() * 1.8, angle, 0, Math.PI * 2); + ctx.fill(); + } + for (let fleck = 0; fleck < 4 + Math.floor(rand() * 5); fleck += 1) { + const angle = rand() * Math.PI * 2; + const reach = 32 + rand() * 13; + ctx.beginPath(); + ctx.arc(middle + Math.cos(angle) * reach, middle + Math.sin(angle) * reach, 1 + rand() * 2.5, 0, Math.PI * 2); + ctx.fill(); + } + ctx.fillStyle = "rgba(255,210,210,0.1)"; + ctx.beginPath(); + ctx.ellipse(middle - 6, middle - 7, 6, 3, -0.6, 0, Math.PI * 2); + ctx.fill(); + return canvas; +} + +/** + * Blood thrown at the camera: drops that land on its lens, drawn over the picture and under the broadcast's + * graphics. Big drops run down the glass; all of them fade away within a few seconds. + */ +export class LensBlood { + private readonly drops: LensDrop[] = []; + private sprites: HTMLCanvasElement[] | null = null; + + /** Drops on the lens now. */ + get count(): number { + return this.drops.length; + } + + /** + * Spatters the lens round (x, y), as shares of the screen across and down, `strength` from a few small + * drops (0.2) to a soaking (3) with a big gob or two running down the glass. + */ + splash(x: number, y: number, strength: number, seed: number): void { + if (!(strength > 0.05) || !Number.isFinite(x) || !Number.isFinite(y)) return; + const rand = seeded((Number.isSafeInteger(seed) ? seed : 0) * 40_503 + 11); + const count = Math.min(24, Math.max(1, Math.round(strength * 12))); + const size = 0.7 + 0.3 * Math.min(3, strength); + for (let drop = 0; drop < count; drop += 1) { + // Most land round where the blow is on the screen, a few anywhere on the glass. + const anywhere = rand() < 0.2; + const spread = 0.12 + 0.12 * Math.min(3, strength); + const radius = (0.01 + rand() ** 2 * 0.04) * size * (drop === 0 && strength >= 1.5 ? 1.8 : 1); + const maxLife = LENS_SECONDS_LOW + rand() * (LENS_SECONDS_HIGH - LENS_SECONDS_LOW); + this.drops.push({ + x: Math.min(1, Math.max(0, anywhere ? rand() : x + (rand() + rand() - 1) * spread * 1.6)), + y: Math.min(1, Math.max(0, anywhere ? rand() : y + (rand() + rand() - 1) * spread)), + radius, + alpha: 0.6 + rand() * 0.35, + life: maxLife, + maxLife, + run: radius >= RUNNING_DROP ? 0.02 + rand() * 0.04 : 0, + ran: 0, + sprite: Math.floor(rand() * SPRITE_COUNT), + turn: rand() * Math.PI * 2, + }); + } + if (this.drops.length > MOST_LENS_DROPS) this.drops.splice(0, this.drops.length - MOST_LENS_DROPS); + } + + update(dt: number): void { + const step = Number.isFinite(dt) ? Math.max(0, dt) : 0; + for (let index = this.drops.length - 1; index >= 0; index -= 1) { + const drop = this.drops[index]!; + drop.life -= step; + if (drop.life <= 0) { + this.drops.splice(index, 1); + continue; + } + // A running drop slows as it leaves its blood on the glass behind it. + drop.ran += drop.run * step * (drop.life / drop.maxLife); + } + } + + draw(ctx: CanvasRenderingContext2D, width: number, height: number): void { + if (this.drops.length === 0) return; + this.sprites ??= Array.from({ length: SPRITE_COUNT }, (_, index) => lensSprite(0x51ed_270b + index * 7919)); + ctx.save(); + for (const drop of this.drops) { + const fade = Math.min(1, drop.life / (drop.maxLife * LENS_FADE)); + const radius = drop.radius * height; + const x = drop.x * width; + const y = (drop.y + drop.ran) * height; + ctx.globalAlpha = drop.alpha * fade; + if (drop.ran > 0) { + // The trail a running drop leaves on the glass, thinning and fading back up to where it landed. + const top = drop.y * height; + const trail = ctx.createLinearGradient(0, top, 0, y); + trail.addColorStop(0, "rgba(88,0,6,0)"); + trail.addColorStop(1, "rgba(88,0,6,0.6)"); + ctx.fillStyle = trail; + ctx.beginPath(); + ctx.moveTo(x - radius * 0.06, top); + ctx.lineTo(x + radius * 0.06, top); + ctx.lineTo(x + radius * 0.28, y); + ctx.lineTo(x - radius * 0.28, y); + ctx.closePath(); + ctx.fill(); + } + ctx.save(); + ctx.translate(x, y); + ctx.rotate(drop.turn); + ctx.drawImage(this.sprites[drop.sprite]!, -radius, -radius, radius * 2, radius * 2); + ctx.restore(); + } + ctx.restore(); + } + + clear(): void { + this.drops.length = 0; + } +} diff --git a/web/hands/src/render/mouthpiece.test.ts b/web/hands/src/render/mouthpiece.test.ts index 7fd1bd32..de3736e4 100644 --- a/web/hands/src/render/mouthpiece.test.ts +++ b/web/hands/src/render/mouthpiece.test.ts @@ -2,7 +2,6 @@ import * as THREE from "three"; import { describe, expect, it } from "vitest"; import { snapshot } from "../test/fixtures"; import { Effects3D } from "./effects"; -import { BIG_SHOT } from "./gore"; import { buildMouthpieceGeometry, idleShield, mouthpieceFlies, stepShield } from "./mouthpiece"; import { FightRenderer } from "./renderer"; import { CANVAS_TOP, ROPE_LINE } from "./world"; @@ -29,13 +28,14 @@ describe("gum shield", () => { geometry.dispose(); }); - it("flies from the punch that floors a man and from big counters and huge shots to the head", () => { + it("flies from the punch that floors a man and from clean counters and solid shots to the head", () => { expect(mouthpieceFlies("knockdown", 1, true)).toBe(true); expect(mouthpieceFlies("knockdown", 1, false)).toBe(false); - expect(mouthpieceFlies("counter_hit", BIG_SHOT, true)).toBe(true); - expect(mouthpieceFlies("counter_hit", BIG_SHOT - 1, true)).toBe(false); - expect(mouthpieceFlies("hit", 110, true)).toBe(true); - expect(mouthpieceFlies("hit", 109, true)).toBe(false); + // A jab countered clean (34 damage, 28% more is 43) keeps it in; a straight countered (66) or a hook landed clean (64) does not. + expect(mouthpieceFlies("counter_hit", 50, true)).toBe(true); + expect(mouthpieceFlies("counter_hit", 49, true)).toBe(false); + expect(mouthpieceFlies("hit", 65, true)).toBe(true); + expect(mouthpieceFlies("hit", 64, true)).toBe(false); expect(mouthpieceFlies("counter_hit", 150, false)).toBe(false); expect(mouthpieceFlies("block", 150, true)).toBe(false); }); @@ -143,6 +143,7 @@ describe("gum shield", () => { lastKnockdown: { knockdown: { ...hit, kind: "knockdown", amount: 1, detail: "" }, hit, finisher: null }, contactPoint: new THREE.Vector3(), tmpA: new THREE.Vector3(-1, 0, 0), tmpB: new THREE.Vector3(1, 0, 0), pendingContacts: [], mapping: { x: (value: number) => value / 100, z: (value: number) => value / 100 }, + contactOn: () => new THREE.Vector3(), effects: { addEvent: () => undefined }, settings: () => ({ reducedMotion: false }), graphs: null, diff --git a/web/hands/src/render/mouthpiece.ts b/web/hands/src/render/mouthpiece.ts index 42f44917..2b775109 100644 --- a/web/hands/src/render/mouthpiece.ts +++ b/web/hands/src/render/mouthpiece.ts @@ -1,5 +1,4 @@ import * as THREE from "three"; -import { BIG_SHOT } from "./gore"; /** Half the width of the arch across the back teeth, and how far the front of it reaches forward of them. */ const ARCH_HALF_WIDTH = 0.026; @@ -70,12 +69,12 @@ export function buildMouthpieceGeometry(): THREE.BufferGeometry { return geometry; } -/** Whether a blow knocks the gum shield out: the punch that floors a man, a big counter or a huge shot, to the head. */ +/** Whether a blow knocks the gum shield out: the punch that floors a man, a clean counter or a solid shot, to the head. */ export function mouthpieceFlies(kind: string, amount: number, head: boolean): boolean { if (!head) return false; if (kind === "knockdown") return true; - if (kind === "counter_hit") return amount >= BIG_SHOT; - return kind === "hit" && amount >= 110; + if (kind === "counter_hit") return amount >= 50; + return kind === "hit" && amount >= 65; } const GRAVITY = 9.81; diff --git a/web/hands/src/render/officials.test.ts b/web/hands/src/render/officials.test.ts index adacb2cc..363298d5 100644 --- a/web/hands/src/render/officials.test.ts +++ b/web/hands/src/render/officials.test.ts @@ -1,5 +1,6 @@ import * as THREE from "three"; -import { fighter as baseFighter, snapshot as baseSnapshot } from "../test/fixtures"; +import { COUNT_TICKS } from "../manifest"; +import { fighter as baseFighter, referee as baseReferee, snapshot as baseSnapshot } from "../test/fixtures"; import type { EngineSnapshot, FighterSnapshot } from "../types"; import { BoxingGraph, SkinnedBoxer, loadBoxerGlb } from "./graph"; import { FightRenderer, refereeSpacing } from "./renderer"; @@ -44,7 +45,7 @@ const closest = (from: readonly THREE.Vector3[], to: readonly THREE.Vector3[]): describe("referee clinch break", () => { const updateReferee = (FightRenderer.prototype as unknown as { updateReferee: (dt: number, time: number, snapshot: EngineSnapshot | null, sampledTick: number) => void }).updateReferee; - it.each([["behind the fighters", -Math.PI / 2], ["almost in line with them", -0.3], ["in front of them", 0.9]])("steps in from %s and puts a palm on each fighter's chest", (_from, angle) => { + it.each([["behind the fighters", 62], ["in front of them", -62]])("breaks them from %s, where the engine stands him, with a palm on each fighter's chest", (_from, side) => { const referee = official(); const graph = new BoxingGraph(referee, mapping, { referee: true }); const blue = new SkinnedBoxer(gltf, { skin: 0xb0703f, gear: 0x1d4ed8 }); @@ -53,12 +54,13 @@ describe("referee clinch break", () => { const redGraph = new BoxingGraph(red, mapping); // The renderer's referee state, driven through its own placement code: live, with no replay, ceremony, // stoppage, body or severed head on the canvas to keep him elsewhere. - const renderer = { + const renderer = Object.assign(Object.create(FightRenderer.prototype) as Record, { referee: graph, mapping, tmpA: new THREE.Vector3(), tmpB: new THREE.Vector3(), - refereePosition: new THREE.Vector3(Math.cos(angle) * 2, 0, Math.sin(angle) * 2), refereeAway: new THREE.Vector3(), refereeVelocity: new THREE.Vector3(), refereeYaw: 0, + refereePosition: new THREE.Vector3(0, 0, -mapping.z(side) * 3), refereeAway: new THREE.Vector3(), refereeVelocity: new THREE.Vector3(), refereeYaw: 0, + pendingRefereeEvents: [], settings: () => ({ reducedMotion: false, blood: "full" }), replay: null, ceremony: null, stoppageWinner: -1, stoppageRaiseAt: Number.POSITIVE_INFINITY, frameSeconds: 0, blobShadows: [], graphs: null, - effects: { severedHeadPosition: () => false }, closeUpTarget: new THREE.Vector3(), bodyPoint: new THREE.Vector3(), - }; + effects: { severedHeadPosition: () => false, gushing: () => false }, closeUpTarget: new THREE.Vector3(), bodyPoint: new THREE.Vector3(), + }); let tick = 0; const step = (one: FighterSnapshot, two: FighterSnapshot): void => { tick += 0.5; @@ -66,7 +68,9 @@ describe("referee clinch break", () => { renderer.tmpB.set(mapping.x(two.x), 0, mapping.z(two.y)); blueGraph.update(one, two, 1 / 60, tick / 30, false, "full", tick); redGraph.update(two, one, 1 / 60, tick / 30, false, "full", tick); - updateReferee.call(renderer, 1 / 60, tick / 30, { ...baseSnapshot(Math.ceil(tick)), fighters: [one, two] }, tick); + // Beside the clinch, as far off the line as the engine's body for him allows, facing it. + const official = { ...baseReferee(0, side), facing_x: 0, facing_y: side > 0 ? -1000 : 1000 }; + updateReferee.call(renderer, 1 / 60, tick / 30, { ...baseSnapshot(Math.ceil(tick)), fighters: [one, two], referee: official }, tick); }; // Tied up at the hold distance, then the engine's break pushes them apart and the referee_break event arrives. const heldBlue: FighterSnapshot = { ...baseFighter("one"), x: -30, y: 0, facing_x: 1000, facing_y: 0, clinch_ticks: 30 }; @@ -104,8 +108,8 @@ describe("referee count", () => { const graph = new BoxingGraph(referee, mapping, { referee: true }); const self: FighterSnapshot = { ...baseFighter("referee"), x: 0, y: 160, facing_x: 0, facing_y: -1000 }; const focus: FighterSnapshot = { ...baseFighter("focus"), x: 0, y: -140 }; - // Knocked down on tick 308: the engine counts a number every 30 ticks after that, and the numbers - // change a quarter of a second past each whole second of the clock (where a free-running beat sits high). + // Knocked down on tick 308: the engine counts a number every COUNT_TICKS after that, and the numbers + // change off the beat of the clock's whole seconds (where a free-running beat sits high). const knockdownTick = 308; const heights: number[] = []; const changes: number[] = []; @@ -115,7 +119,7 @@ describe("referee count", () => { renderTick += 0.5; const presentedTick = Math.ceil(renderTick); const counting = presentedTick >= knockdownTick; - const count = counting ? Math.floor((presentedTick - knockdownTick) / 30) : 0; + const count = counting ? Math.floor((presentedTick - knockdownTick) / COUNT_TICKS) : 0; if (counting && count !== shown) { if (shown >= 0) changes.push(frame); shown = count; diff --git a/web/hands/src/render/poser.test.ts b/web/hands/src/render/poser.test.ts index 127b6686..54a4aedc 100644 --- a/web/hands/src/render/poser.test.ts +++ b/web/hands/src/render/poser.test.ts @@ -1,5 +1,5 @@ import * as THREE from "three"; -import { FIGHTER_RADIUS, RING_HALF_WIDTH, punchTiming } from "../manifest"; +import { EVASION_TICKS, FIGHTER_RADIUS, RING_HALF_WIDTH, punchTiming, recoveryCancelAge } from "../manifest"; import { fighter as baseFighter } from "../test/fixtures"; import type { FighterSnapshot } from "../types"; import { BoxingGraph, SkinnedBoxer, loadBoxerGlb, remapPunchAge } from "./graph"; @@ -578,6 +578,114 @@ describe("a spent guard", () => { }); }); +describe("power punches", () => { + const thrown = (power: "power" | "normal", fraction: number): { hips: number; shoulders: number; glove: number; heat: number } => { + const { boxer, graph } = makeGraph(); + const idle = facingOpponent(baseFighter("one")); + const timing = punchTiming("straight", "head", power); + run(graph, idle, opponentFor("two"), 10, undefined); + const start = 100; + const punch: FighterSnapshot = { ...idle, action: "straight", action_hand: "right", action_target: "head", action_power: power, action_id: `straight-${power}`, action_key: `straight:right:head:${power}`, action_start_tick: start, action_startup_ticks: timing.startup, action_active_ticks: timing.active, action_recovery_ticks: timing.recovery }; + graph.update(punch, opponentFor("two"), 1 / 60, 1, false, "full", start + fraction * timing.startup, undefined); + const left = bone(boxer, "shoulderL"); + const right = bone(boxer, "shoulderR"); + return { hips: bone(boxer, "hips").y, shoulders: Math.atan2(right.z - left.z, right.x - left.x), glove: bone(boxer, "gloveR").z - boxer.root.position.z, heat: graph.powerHeat("right") }; + }; + + it("load up through most of their startup: he sinks, turns away from the punch and cocks the glove back, which a normal punch never does", () => { + const normal = thrown("normal", 0.45); + const power = thrown("power", 0.45); + expect(normal.hips - power.hips).toBeGreaterThan(0.05); + expect(Math.abs(power.shoulders - normal.shoulders)).toBeGreaterThan(0.25); + expect(normal.glove - power.glove).toBeGreaterThan(0.08); + // Both end on the target. + expect(Math.abs(thrown("power", 1).glove - thrown("normal", 1).glove)).toBeLessThan(0.08); + }); + + it("heat the throwing glove through the load, full at the target, and leave every other glove cold", () => { + expect(thrown("normal", 0.5).heat).toBe(0); + expect(thrown("power", 0.1).heat).toBeGreaterThan(0); + expect(thrown("power", 0.1).heat).toBeLessThan(thrown("power", 0.5).heat); + expect(thrown("power", 1).heat).toBe(1); + const { graph } = makeGraph(); + expect(graph.powerHeat("left")).toBe(0); + }); + + it("hold a landed power punch at the target longest, then make up the time without a jump and end with the server's copy", () => { + const run = (power: "power" | "normal"): { held: number; worstStep: number; endsAt: number } => { + const { graph } = makeGraph(); + const idle = facingOpponent(baseFighter("one")); + const timing = punchTiming("straight", "head", power); + const start = 100; + const punch: FighterSnapshot = { ...idle, action: "straight", action_hand: "right", action_target: "head", action_power: power, action_id: "p", action_key: `straight:right:head:${power}`, action_start_tick: start, action_startup_ticks: timing.startup, action_active_ticks: timing.active, action_recovery_ticks: timing.recovery }; + let held = 0; + let worstStep = 0; + let endsAt = Infinity; + let previous = 0; + for (let tick = start; tick < start + 40; tick += 0.5) { + graph.update(punch, opponentFor("two"), 1 / 60, tick / 30, false, "full", tick, undefined); + const age = (graph as unknown as { punchAgeTicks: number; punchActive: boolean }).punchAgeTicks; + if (!(graph as unknown as { punchActive: boolean }).punchActive) { endsAt = Math.min(endsAt, tick); continue; } + if (tick === start + timing.startup) graph.landedHit("p", false, power === "power"); + if (tick > start + timing.startup && age - previous < 0.2) held += 1; + if (tick > start) worstStep = Math.max(worstStep, age - previous); + previous = age; + } + return { held, worstStep, endsAt: endsAt - start }; + }; + const normal = run("normal"); + const power = run("power"); + expect(power.held).toBeGreaterThan(normal.held + 2); + expect(power.worstStep).toBeLessThan(1.4); + const timing = punchTiming("straight", "head", "power"); + expect(Math.abs(power.endsAt - (timing.startup + timing.active + timing.recovery))).toBeLessThanOrEqual(1); + }); +}); + +describe("turning while punching", () => { + it("holds the facing through a punch's startup and active ticks and turns at the usual rate as it recovers, as the engine does", () => { + const yawAfter = (fraction: number): number => { + const { graph } = makeGraph(); + const idle = facingOpponent(baseFighter("one")); + const timing = punchTiming("straight", "head", "normal"); + run(graph, idle, opponentFor("two"), 10, undefined); + const start = 100; + const age = fraction * (timing.startup + timing.active + timing.recovery); + const punch: FighterSnapshot = { ...idle, action: "straight", action_hand: "right", action_target: "head", action_power: "normal", action_id: "p", action_key: "straight:right:head:normal", action_start_tick: start - age, action_startup_ticks: timing.startup, action_active_ticks: timing.active, action_recovery_ticks: timing.recovery }; + // Turned a quarter round; six frames to follow. + const turned = { ...punch, facing_x: 1000, facing_y: 0 }; + for (let frame = 0; frame < 6; frame += 1) graph.update(turned, opponentFor("two"), 1 / 60, 1 + frame / 60, false, "full", start + frame / 2, undefined); + return Math.abs((graph as unknown as { yaw: number }).yaw); + }; + expect(yawAfter(0.7)).toBeGreaterThan(yawAfter(0.1) * 1.5); + }); +}); + +describe("defensive snap", () => { + it("raises the guard and goes into a slip nine tenths of the way in four frames, and finishes a weave's dip and rise inside the engine's evasion", () => { + const weights = (graph: BoxingGraph): { guardHigh: number; slip: number } => graph as unknown as { guardHigh: number; slip: number }; + const idle = facingOpponent(baseFighter("one")); + for (const [defense, read] of [["guard_high", (graph: BoxingGraph) => weights(graph).guardHigh], ["slip_left", (graph: BoxingGraph) => weights(graph).slip]] as const) { + const { graph } = makeGraph(); + run(graph, idle, opponentFor("two"), 10, undefined); + run(graph, { ...idle, defense }, opponentFor("two"), 4, undefined, 10, 10 / 60); + expect(read(graph), defense).toBeGreaterThan(0.9); + } + const { boxer, graph } = makeGraph(); + run(graph, idle, opponentFor("two"), 10, undefined); + const heights: number[] = []; + for (let frame = 0; frame < 2 * EVASION_TICKS; frame += 1) { + run(graph, { ...idle, defense: "weave" }, opponentFor("two"), 1, undefined, 10 + frame / 2, (20 + frame) / 60); + heights.push(bone(boxer, "head").y); + } + // Lowest halfway through, and coming back up before the engine's evasion is over. + const lowest = heights.indexOf(Math.min(...heights)); + expect(lowest).toBeGreaterThan(EVASION_TICKS / 2); + expect(lowest).toBeLessThan(1.5 * EVASION_TICKS); + expect(heights.at(-1)! - heights[lowest]!).toBeGreaterThan(0.04); + }); +}); + describe("cutman", () => { it("crouches before the seated fighter, presses the enswell on the eye, and stands back up when done", () => { const { boxer, graph } = makeGraph(); @@ -600,33 +708,31 @@ describe("own punch prediction", () => { const age = (graph: BoxingGraph): number => (graph as unknown as { punchAgeTicks: number }).punchAgeTicks; const active = (graph: BoxingGraph): boolean => (graph as unknown as { punchActive: boolean }).punchActive; - it("starts on the key press, never jumps back when the server confirms late, and lands on the server's contact tick", () => { + it("starts on the key press and keeps the server's pace, landing a lead ahead of the server's copy on screen, which it never jumps back for", () => { const { graph } = makeGraph(); const idle = facingOpponent(baseFighter("one")); - const timing = punchTiming("jab", "head", "normal"); + const timing = punchTiming("straight", "head", "normal"); run(graph, idle, opponentFor("two"), 10, undefined); - graph.predict(jab, 0, 30, 6); + graph.predict({ ...jab, class: "straight", hand: "right" }, 0, 30, 6); expect(active(graph)).toBe(true); const ages: number[] = []; let tick = 100; + let contactAt: number | null = null; const step = (fighter: FighterSnapshot): void => { tick += 0.5; graph.update(fighter, opponentFor("two"), 1 / 60, tick / 30, false, "full", tick, undefined); if (active(graph)) ages.push(age(graph)); + if (contactAt === null && age(graph) >= timing.startup) contactAt = tick; }; for (let frame = 0; frame < 12; frame += 1) step(idle); - expect(age(graph)).toBeGreaterThan(1.5); - expect(age(graph)).toBeLessThan(timing.startup); - const startTick = tick; - const confirmed = { ...idle, action: "jab" as const, action_hand: "left" as const, action_target: "head" as const, action_power: "normal" as const, action_id: "own-1", action_key: "jab:left:head:normal", action_start_tick: startTick, action_startup_ticks: timing.startup, action_active_ticks: timing.active, action_recovery_ticks: timing.recovery }; - let contactAt: number | null = null; - for (let frame = 0; frame < 40 && active(graph); frame += 1) { - step(confirmed); - if (contactAt === null && age(graph) >= timing.startup) contactAt = tick; - } - for (let index = 1; index < ages.length; index += 1) expect(ages[index]!).toBeGreaterThanOrEqual(ages[index - 1]!); - expect(contactAt).not.toBeNull(); - expect(Math.abs(contactAt! - (startTick + timing.startup))).toBeLessThanOrEqual(1); + expect(age(graph)).toBeCloseTo(6, 5); + // The server's copy reaches the render clock six ticks after the press. + const confirmed = { ...idle, action: "straight" as const, action_hand: "right" as const, action_target: "head" as const, action_power: "normal" as const, action_id: "own-1", action_key: "straight:right:head:normal", action_start_tick: tick, action_startup_ticks: timing.startup, action_active_ticks: timing.active, action_recovery_ticks: timing.recovery }; + for (let frame = 0; frame < 40 && active(graph); frame += 1) step(confirmed); + for (let index = 1; index < ages.length; index += 1) expect(ages[index]! - ages[index - 1]!).toBeCloseTo(0.5, 5); + expect(contactAt).toBe(100 + timing.startup); + // Over on the frame it reaches its full length, after neither a stretch nor a jump. + expect(ages.length).toBe(2 * (timing.startup + timing.active + timing.recovery) - 1); }); const state = (graph: BoxingGraph): { punchClass: string; ownActionId: string | null; actionId: string | null } => @@ -663,8 +769,9 @@ describe("own punch prediction", () => { const hook = serverPunch(idle, "theirs-hook", "hook", tick); const step = (fighter: FighterSnapshot): void => { tick += 0.5; graph.update(fighter, opponentFor("two"), 1 / 60, tick / 30, false, "full", tick, undefined); }; graph.acknowledge(hook, true, [{ event_id: 1, tick: 307, kind: "hit", actor_id: "one", target_id: "two", amount: 30, detail: "hook:head", blood: 0, direction: 1, action_id: "theirs-hook" }]); - // The engine lets a chained follow-up cut a landed hook's recovery short from 7 + 3 + 12 / 2 ticks. - while (age(graph) < 16) step(hook); + // The engine lets a chained follow-up cut a landed hook's recovery short from its cancel age. + const cancelAge = recoveryCancelAge(punchTiming("hook", "head", "normal")); + while (age(graph) < cancelAge) step(hook); expect(state(graph).punchClass).toBe("hook"); graph.predict({ ...jab, id: "own-3", class: "uppercut" }, 0, 30, 3); expect(state(graph).punchClass).toBe("uppercut"); @@ -692,20 +799,22 @@ describe("own punch prediction", () => { it("brings the glove back the way it went when the server never starts the punch", () => { const { graph } = makeGraph(); const idle = facingOpponent(baseFighter("one")); - const timing = punchTiming("hook", "head", "normal"); + // A power uppercut winds up long enough for the server's silence to tell before it would land. + const timing = punchTiming("uppercut", "head", "power"); run(graph, idle, opponentFor("two"), 10, undefined); - graph.predict({ ...jab, id: "own-hook", class: "hook" }, 0, 30, 2); + graph.predict({ ...jab, id: "own-hook", class: "uppercut", power: "power" }, 0, 30, 2); let tick = 600; const step = (fighter: FighterSnapshot): void => { tick += 0.5; graph.update(fighter, opponentFor("two"), 1 / 60, tick / 30, false, "full", tick, undefined); }; const ages: number[] = []; let frames = 0; while (active(graph) && frames < 200) { step(idle); frames += 1; if (active(graph)) ages.push(age(graph)); } expect(active(graph)).toBe(false); - expect(frames / 2).toBeLessThan(timing.startup + timing.active + timing.recovery - 4); + // Pulled back within a few ticks of the punch's own length. + expect(frames / 2).toBeLessThan(timing.startup + timing.active + timing.recovery + 4); const peak = ages.indexOf(Math.max(...ages)); expect(Math.max(...ages)).toBeLessThan(timing.startup); for (let index = peak + 1; index < ages.length; index += 1) expect(ages[index]!).toBeLessThan(ages[index - 1]!); - step(serverPunch(idle, "own-hook", "hook", tick)); + step(serverPunch(idle, "own-hook", "uppercut", tick)); expect(active(graph)).toBe(true); }); @@ -728,6 +837,142 @@ describe("own punch prediction", () => { expect(age(graph) / slower).toBeGreaterThanOrEqual(progress - 0.01); }); + it("freezes on a landed punch only while the glove is at the target, not one the server's word reaches on its way back", () => { + const hitstop = (graph: BoxingGraph): number => (graph as unknown as { hitstop: number }).hitstop; + const timing = punchTiming("jab", "head", "normal"); + for (const [frames, frozen] of [[2 * timing.startup, true], [2 * (timing.startup + timing.active + 1), false]] as const) { + const { graph } = makeGraph(); + const idle = facingOpponent(baseFighter("one")); + run(graph, idle, opponentFor("two"), 10, undefined); + graph.predict(jab, 0, 30, 6); + run(graph, idle, opponentFor("two"), frames, undefined, 100); + graph.landedHit("own-1", false); + expect(hitstop(graph) > 0).toBe(frozen); + } + }); + + it("freezes the punch a contact belongs to, never the next one a combination let go before the word of it was shown", () => { + const hitstop = (graph: BoxingGraph): number => (graph as unknown as { hitstop: number }).hitstop; + const timing = punchTiming("jab", "head", "normal"); + const { graph } = makeGraph(); + const idle = facingOpponent(baseFighter("one")); + run(graph, idle, opponentFor("two"), 10, undefined); + graph.predict(jab, 0, 30, 6); + graph.predict({ ...jab, id: "own-2", class: "straight", hand: "right" }, 1 / 60, 30, 6); + run(graph, idle, opponentFor("two"), 2 * (timing.startup + timing.active + timing.recovery) + 1, undefined, 100); + expect(state(graph).ownActionId).toBe("own-2"); + // The jab's contact, shown on arrival a round trip after its glove got there, finds the straight in its wind-up. + graph.landedHit("own-1", false, true); + expect(hitstop(graph)).toBe(0); + graph.landedHit("own-2", false); + expect(hitstop(graph)).toBeGreaterThan(0); + }); + + it("never freezes on a contact that names no punch, as a guard broken by holding it up too long does", () => { + const hitstop = (graph: BoxingGraph): number => (graph as unknown as { hitstop: number }).hitstop; + const timing = punchTiming("hook", "head", "normal"); + const { graph } = makeGraph(); + const idle = facingOpponent(baseFighter("one")); + run(graph, idle, opponentFor("two"), 10, undefined); + // His hook is at the target when the other man's held guard gives out: the engine names him and no punch. + const hook = serverPunch(idle, "theirs-1", "hook", 100); + run(graph, hook, opponentFor("two"), 2 * timing.startup + 1, undefined, 100); + graph.landedHit(null, false); + expect(hitstop(graph)).toBe(0); + graph.landedHit("theirs-1", false); + expect(hitstop(graph)).toBeGreaterThan(0); + }); + + it("tells the footwork its own punch allows on the press's time: none to the end of its active ticks, the recovery's share, then all", () => { + const { graph } = makeGraph(); + const idle = facingOpponent(baseFighter("one")); + const timing = punchTiming("straight", "head", "normal"); + run(graph, idle, opponentFor("two"), 10, undefined); + graph.predict({ ...jab, class: "straight", hand: "right" }, 0, 30, 6); + const shares: number[] = []; + let tick = 100; + for (let frame = 0; frame < 2 * (timing.startup + timing.active + timing.recovery) + 2; frame += 1) { + shares.push(graph.ownFootwork); + tick = run(graph, idle, opponentFor("two"), 1, undefined, tick, tick / 30); + } + const recovery = 2 * (timing.startup + timing.active); + expect(shares.slice(0, recovery)).toEqual(Array.from({ length: recovery }, () => 0)); + expect(shares.slice(recovery, 2 * (timing.startup + timing.active + timing.recovery))).toEqual(Array.from({ length: 2 * timing.recovery }, () => 0.6)); + expect(shares.at(-1)).toBe(1); + }); + + it("goes straight back to the guard with the feet free once a slip pressed during it cuts the recovery short, and drops the press it held", () => { + const { graph } = makeGraph(); + const idle = facingOpponent(baseFighter("one")); + const timing = punchTiming("straight", "head", "normal"); + run(graph, idle, opponentFor("two"), 10, undefined); + graph.predict({ ...jab, class: "straight", hand: "right" }, 0, 30, 6); + let tick = run(graph, idle, opponentFor("two"), 4, undefined, 100); + graph.predict({ ...jab, id: "own-hook", class: "hook" }, tick / 30, 30, 6); + expect(graph.ownTicksToRecovery).toBeCloseTo(timing.startup + timing.active - 2, 5); + graph.cutOwnRecovery(); + // Still held through the active ticks: the server holds the slip until the straight has landed or missed. + expect(graph.ownFootwork).toBe(0); + let frames = 4; + while (active(graph) && frames < 200) { + tick = run(graph, idle, opponentFor("two"), 1, undefined, tick, tick / 30); + frames += 1; + if (active(graph) && age(graph) >= timing.startup + timing.active) expect(graph.ownFootwork).toBe(1); + expect(state(graph).ownActionId).not.toBe("own-hook"); + } + expect(frames / 2).toBeLessThan(timing.startup + timing.active + timing.recovery / 2); + tick = run(graph, idle, opponentFor("two"), 20, undefined, tick, tick / 30); + expect(state(graph).ownActionId).toBeNull(); + }); + + it("recovers in full when the slip pressed to cut its recovery short is replaced or turned down before it starts", () => { + const timing = punchTiming("hook", "head", "normal"); + const play = (slip: boolean): { shares: number[]; followUpFrame: number } => { + const { graph } = makeGraph(); + const idle = facingOpponent(baseFighter("one")); + run(graph, idle, opponentFor("two"), 10, undefined); + graph.predict({ ...jab, class: "hook" }, 0, 30, 6); + // The server's word that it started the hook, so the give-up timer leaves it alone. + graph.acknowledge({ ...idle, action: "hook", action_hand: "left", action_target: "head", action_power: "normal", action_id: "own-1", action_key: "hook:left:head:normal", action_start_tick: 102, action_startup_ticks: timing.startup, action_active_ticks: timing.active, action_recovery_ticks: timing.recovery }, true); + let tick = run(graph, idle, opponentFor("two"), 2, undefined, 100); + if (slip) graph.cutOwnRecovery(); + tick = run(graph, idle, opponentFor("two"), 2, undefined, tick, tick / 30); + if (slip) graph.keepOwnRecovery(); + graph.predict({ ...jab, id: "own-2", hand: "right" }, tick / 30, 30, 6); + const shares: number[] = []; + let frame = 4; + for (; state(graph).ownActionId === "own-1" && frame < 200; frame += 1) { + shares.push(graph.ownFootwork); + tick = run(graph, idle, opponentFor("two"), 1, undefined, tick, tick / 30); + } + return { shares, followUpFrame: frame }; + }; + const unslipped = play(false); + expect(unslipped.shares).toContain(0.6); + expect(unslipped.followUpFrame).toBeGreaterThanOrEqual(2 * (timing.startup + timing.active + timing.recovery)); + expect(play(true)).toEqual(unslipped); + }); + + it("knows which of the player's own presses reached the target on screen, and not one pulled back or played on the server's clock", () => { + const { graph } = makeGraph(); + const idle = facingOpponent(baseFighter("one")); + const timing = punchTiming("jab", "head", "normal"); + run(graph, idle, opponentFor("two"), 10, undefined); + graph.predict(jab, 0, 30, 6); + let tick = run(graph, idle, opponentFor("two"), 2 * timing.startup - 2, undefined, 100); + expect(graph.pressLanded("own-1")).toBe(false); + tick = run(graph, idle, opponentFor("two"), 2, undefined, tick); + expect(graph.pressLanded("own-1")).toBe(true); + // Pulled back before contact: the server turned it down. + graph.predict({ ...jab, id: "own-2", class: "uppercut", power: "power" }, tick / 30 + 1, 30, 6); + graph.acknowledge({ ...idle, stunned_ticks: 10 }, true); + tick = run(graph, idle, opponentFor("two"), 40, undefined, tick); + expect(graph.pressLanded("own-2")).toBe(false); + run(graph, serverPunch(idle, "theirs-1", "jab", tick), opponentFor("two"), 20, undefined, tick); + expect(graph.pressLanded("theirs-1")).toBe(false); + expect(graph.pressLanded(null)).toBe(false); + }); + it("forgets the punch when the fighter is reset for the replay", () => { const { graph } = makeGraph(); const idle = facingOpponent(baseFighter("one")); @@ -856,7 +1101,8 @@ describe("own punch prediction", () => { } for (let index = 1; index < ages.length; index += 1) expect(ages[index]!).toBeGreaterThanOrEqual(ages[index - 1]!); expect(starts).toBe(0); - expect(Math.abs(contactAt! - (startTick + timing.startup))).toBeLessThanOrEqual(1); + // On the press's own time, three ticks ahead of the server's copy. + expect(Math.abs(contactAt! - (100 + timing.startup))).toBeLessThanOrEqual(0.5); }); const followUp = (startTick: number, lead: number): { startedAt: number; progress: number; starts: number } => { @@ -901,10 +1147,11 @@ describe("own punch prediction", () => { }); it("leaves a follow-up to the server's clock when the punch in flight is not yet half way", () => { - // The server cancels the jab's recovery into a hook, and the news of it is five ticks ahead of the screen. - const soon = followUp(208, 5); - expect(soon.startedAt).toBeGreaterThanOrEqual(207); - expect(soon.startedAt).toBeLessThanOrEqual(208.5); + // The hook starts before the jab is half way through its nine ticks, and the news of it is three ticks + // ahead of the screen. + const soon = followUp(205, 3); + expect(soon.startedAt).toBeGreaterThanOrEqual(204); + expect(soon.startedAt).toBeLessThanOrEqual(205.5); expect(soon.starts).toBe(1); }); @@ -1655,9 +1902,9 @@ describe("per-frame allocations", () => { describe("transition sweep", () => { const PUNCHES = ["jab", "straight", "hook", "uppercut"] as const; - // 9.6 m/s: a straight's glove peaks near 7 m/s and a hook's elbow from the crowded guard of fighters this close - // near 9.2 m/s, while the snaps this guards against moved bones 0.5 m in a frame. - const MAX_STEP = 0.16; + // 14.4 m/s: with the quicker punches a hook's elbow from the crowded guard of fighters this close peaks near + // 12 m/s, while the snaps this guards against moved bones 0.5 m in a frame. + const MAX_STEP = 0.24; it("moves every bone smoothly, keeps the skin above the canvas and bends the knees forward from idle through punches, falls, get-ups, the corner stool and a taunt", () => { const { boxer, graph } = makeGraph(); diff --git a/web/hands/src/render/power.test.ts b/web/hands/src/render/power.test.ts new file mode 100644 index 00000000..566ba79e --- /dev/null +++ b/web/hands/src/render/power.test.ts @@ -0,0 +1,48 @@ +import * as THREE from "three"; +import { GloveGlow, ImpactFlash, glowTexture } from "./power"; + +describe("a power punch's glow", () => { + it("builds with the glove's heat and flares as it reaches the target, only glowing when motion is reduced", () => { + const glove = new THREE.Vector3(0.2, 1.4, 0.3); + const sizes = (reducedMotion: boolean): number[] => { + const glow = new GloveGlow(glowTexture()); + const seen: number[] = []; + for (const heat of [0, 0.3, 0.7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.5, 0]) { + glow.update(glove, heat, 1 / 60, reducedMotion, new THREE.PerspectiveCamera()); + seen.push(glow.active ? glow.mesh.scale.x : 0); + } + expect(glow.mesh.position.toArray()).toEqual(glove.toArray()); + glow.dispose(); + return seen; + }; + const full = sizes(false); + expect(full[0]).toBe(0); + expect(full[1]).toBeGreaterThan(0); + expect(full[2]).toBeGreaterThan(full[1]!); + // The flare at the target, gone in a fifth of a second. + expect(full[3]).toBeGreaterThan(full[2]! * 1.8); + expect(full[12]).toBeLessThan(full[3]! * 0.7); + expect(full.at(-1)).toBe(0); + const calm = sizes(true); + expect(Math.max(...calm)).toBeCloseTo(calm[12]!, 6); + }); +}); + +describe("a landed power punch's flash", () => { + it("flashes and throws a ring out from where it lands, then is gone", () => { + const flash = new ImpactFlash(glowTexture()); + const camera = new THREE.PerspectiveCamera(); + expect(flash.active).toBe(false); + flash.fire(new THREE.Vector3(0, 1.5, 0.4)); + flash.update(0, camera); + expect(flash.active).toBe(true); + expect(flash.group.position.toArray()).toEqual([0, 1.5, 0.4]); + const ring = flash.group.children[1]!; + const early = ring.scale.x; + for (let frame = 0; frame < 8; frame += 1) flash.update(1 / 60, camera); + expect(ring.scale.x).toBeGreaterThan(early * 3); + for (let frame = 0; frame < 12; frame += 1) flash.update(1 / 60, camera); + expect(flash.active).toBe(false); + flash.dispose(); + }); +}); diff --git a/web/hands/src/render/power.ts b/web/hands/src/render/power.ts new file mode 100644 index 00000000..ec077534 --- /dev/null +++ b/web/hands/src/render/power.ts @@ -0,0 +1,153 @@ +import * as THREE from "three"; + +/** The colour of a power punch's heat, on the glove and where it lands. */ +export const POWER_HEAT_COLOR = new THREE.Color(1, 0.5, 0.12); +/** Width of a glove's glow at full heat, in metres, and how much wider its flare at the target makes it. */ +const GLOW_SIZE = 0.42; +const FLARE_GROWTH = 1.3; +/** A flare fades in this many seconds. */ +const FLARE_SECONDS = 0.18; +/** A landed power punch's flash and ring: how long each lasts and how wide each grows, in metres. */ +const FLASH_SECONDS = 0.16; +const FLASH_SIZE = 1.1; +const RING_SECONDS = 0.28; +const RING_SIZE = 1.5; + +/** White in the middle fading to nothing at the edge, for additive glows. */ +export function glowTexture(): THREE.CanvasTexture { + const canvas = document.createElement("canvas"); + canvas.width = 64; + canvas.height = 64; + const ctx = canvas.getContext("2d"); + if (ctx !== null) { + const gradient = ctx.createRadialGradient(32, 32, 0, 32, 32, 32); + gradient.addColorStop(0, "rgba(255,255,255,1)"); + gradient.addColorStop(0.25, "rgba(255,255,255,0.75)"); + gradient.addColorStop(0.6, "rgba(255,255,255,0.18)"); + gradient.addColorStop(1, "rgba(255,255,255,0)"); + ctx.fillStyle = gradient; + ctx.fillRect(0, 0, 64, 64); + } + return new THREE.CanvasTexture(canvas); +} + +/** A square facing the camera, glowing additively with `texture`. */ +function glowCard(texture: THREE.Texture, color: THREE.Color): THREE.Mesh { + return new THREE.Mesh(new THREE.PlaneGeometry(1, 1), new THREE.MeshBasicMaterial({ map: texture, color, blending: THREE.AdditiveBlending, depthWrite: false, transparent: true, side: THREE.DoubleSide })); +} + +/** + * The glow on a glove throwing a power punch: it builds with the punch's heat through the load and flares as the glove + * reaches the target, unless motion is reduced, when it only glows. + */ +export class GloveGlow { + readonly mesh: THREE.Mesh; + private flare = 0; + private lastHeat = 0; + + constructor(texture: THREE.Texture) { + this.mesh = glowCard(texture, POWER_HEAT_COLOR); + // A rear glove loads behind its own shoulder: the glow shows through the body that hides it. + this.mesh.material.depthTest = false; + this.mesh.material.opacity = 0; + this.mesh.visible = false; + this.mesh.renderOrder = 5; + } + + update(glove: THREE.Vector3, heat: number, dt: number, reducedMotion: boolean, camera: THREE.Camera): void { + if (heat >= 1 && this.lastHeat < 1 && !reducedMotion) this.flare = 1; + this.lastHeat = heat; + this.flare = Math.max(0, this.flare - dt / FLARE_SECONDS); + const material = this.mesh.material; + material.opacity = Math.min(1, heat * 0.8 + this.flare * 0.6); + this.mesh.visible = material.opacity > 0.01; + if (!this.mesh.visible) return; + this.mesh.position.copy(glove); + this.mesh.quaternion.copy(camera.quaternion); + const size = GLOW_SIZE * (0.55 + 0.45 * heat) * (1 + this.flare * FLARE_GROWTH); + this.mesh.scale.set(size, size, 1); + } + + /** Whether it shows this frame. */ + get active(): boolean { + return this.mesh.visible; + } + + /** A visible copy sharing its geometry and material, for compiling its shader before it is first needed. */ + standIn(): THREE.Object3D { + return new THREE.Mesh(this.mesh.geometry, this.mesh.material); + } + + reset(): void { + this.flare = 0; + this.lastHeat = 0; + this.mesh.material.opacity = 0; + this.mesh.visible = false; + } + + dispose(): void { + this.mesh.geometry.dispose(); + this.mesh.material.dispose(); + } +} + +/** Where a power punch lands: a white-hot flash and a ring of heat thrown out from it. */ +export class ImpactFlash { + readonly group = new THREE.Group(); + private readonly flash: THREE.Mesh; + private readonly ring: THREE.Mesh; + private age = Infinity; + + constructor(texture: THREE.Texture) { + this.flash = glowCard(texture, new THREE.Color(1, 0.86, 0.62)); + this.flash.material.depthTest = false; + this.ring = new THREE.Mesh(new THREE.RingGeometry(0.42, 0.5, 40), new THREE.MeshBasicMaterial({ color: POWER_HEAT_COLOR, blending: THREE.AdditiveBlending, depthWrite: false, transparent: true, side: THREE.DoubleSide })); + this.flash.renderOrder = 6; + this.ring.renderOrder = 6; + this.group.add(this.flash, this.ring); + this.group.visible = false; + } + + fire(at: THREE.Vector3): void { + this.age = 0; + this.group.position.copy(at); + } + + /** Faces the ring to `camera` and plays the flash out. */ + update(dt: number, camera: THREE.Camera): void { + this.age += dt; + const flash = this.age / FLASH_SECONDS; + const ring = this.age / RING_SECONDS; + this.group.visible = ring < 1; + if (!this.group.visible) return; + this.group.quaternion.copy(camera.quaternion); + this.flash.visible = flash < 1; + const flashSize = FLASH_SIZE * (0.35 + 0.65 * Math.sqrt(Math.min(1, flash))); + this.flash.scale.set(flashSize, flashSize, 1); + this.flash.material.opacity = (1 - Math.min(1, flash)) ** 2; + const ringSize = RING_SIZE * (0.15 + 0.85 * (1 - (1 - ring) ** 3)); + this.ring.scale.set(ringSize, ringSize, ringSize); + this.ring.material.opacity = 0.9 * (1 - ring); + } + + get active(): boolean { + return this.group.visible; + } + + /** Visible copies sharing its materials, for compiling their shaders before they are first needed. */ + standIns(): THREE.Object3D[] { + return [new THREE.Mesh(this.flash.geometry, this.flash.material), new THREE.Mesh(this.ring.geometry, this.ring.material)]; + } + + reset(): void { + this.age = Infinity; + this.group.visible = false; + } + + dispose(): void { + this.flash.geometry.dispose(); + this.flash.material.dispose(); + this.ring.geometry.dispose(); + this.ring.material.dispose(); + } +} diff --git a/web/hands/src/render/punch-aim.test.ts b/web/hands/src/render/punch-aim.test.ts index a383e042..2417d819 100644 --- a/web/hands/src/render/punch-aim.test.ts +++ b/web/hands/src/render/punch-aim.test.ts @@ -139,7 +139,8 @@ describe("punches at an evading head", () => { // A left jab is slipped to the defender's right: the glove goes where it would have met him and misses. const slipped = throwAt("jab", "slip_right", 150, false); expect(slipped.glove.distanceTo(cleanJab.glove)).toBeLessThan(0.02); - expect(slipped.glove.distanceTo(slipped.head)).toBeGreaterThan(cleanReach + 0.08); + // The quick jab lands before the slip is all the way over, so the miss is a little narrower than the slip. + expect(slipped.glove.distanceTo(slipped.head)).toBeGreaterThan(cleanReach + 0.06); // Slipping left does not get away from it: the server reports the hit and the glove follows the head. const caught = throwAt("jab", "slip_left", 150, true); expect(Math.abs(caught.glove.distanceTo(caught.head) - cleanReach)).toBeLessThan(0.05); @@ -151,6 +152,61 @@ describe("punches at an evading head", () => { }); }); +describe("punches that find the referee", () => { + /** + * Throws a left straight at a defender 150 away with `referee` (his head, or none in the ring), the two graphs + * handing each other their heads a frame late as the renderer does. `verdict` is when the server's word that + * the punch found the referee comes in: before it is thrown (his replay), two ticks before contact, or never. + * Returns the glove and the defender's head at the contact tick. + */ + function throwPast(verdict: "known" | "late" | "never", referee: THREE.Vector3 | null): { glove: THREE.Vector3; head: THREE.Vector3 } { + const attacker = new BoxingGraph(new SkinnedBoxer(gltf, { skin: 0xb0703f, gear: 0x1d4ed8 }), mapping); + const defender = new BoxingGraph(new SkinnedBoxer(gltf, { skin: 0xb0703f, gear: 0xb91c1c }), mapping); + const attackerIdle = facingOpponent(baseFighter("one")); + const defenderIdle = opponentAt(150); + const timing = punchTiming("straight", "head", "normal"); + const start = 100; + const punch: FighterSnapshot = { + ...attackerIdle, action: "straight", action_hand: "left", action_target: "head", action_power: "normal", action_id: "p1", action_key: "straight:left:head:normal", + action_start_tick: start, action_startup_ticks: timing.startup, action_active_ticks: timing.active, action_recovery_ticks: timing.recovery, + }; + const found = { event_id: 3, tick: start + timing.startup, kind: "referee_hit", actor_id: "one", target_id: "referee", amount: 60, detail: "straight:head", blood: 20, direction: 1, action_id: "p1" }; + if (verdict === "known") attacker.acknowledge(attackerIdle, true, [found]); + const attackerHead = new THREE.Vector3(); + const defenderHead = new THREE.Vector3(); + const glove = new THREE.Vector3(); + for (let tick = start - 10; tick <= start + timing.startup; tick += 0.5) { + const shownAttacker = tick >= start ? punch : attackerIdle; + if (verdict === "late" && tick === start + timing.startup - 2) attacker.acknowledge(punch, true, [found]); + attacker.setRefereeHead(referee); + attacker.update(shownAttacker, defenderIdle, 1 / 60, tick / 30, false, "full", tick, tick > start - 10 ? defenderHead : undefined); + defender.update(defenderIdle, shownAttacker, 1 / 60, tick / 30, false, "full", tick, tick > start - 10 ? attackerHead : undefined); + attacker.boxer.root.updateMatrixWorld(true); + defender.boxer.root.updateMatrixWorld(true); + worldPosition(attacker.boxer.rig.bones.head, attackerHead); + worldPosition(defender.boxer.rig.bones.head, defenderHead); + worldPosition(attacker.boxer.rig.bones.gloveL, glove); + } + return { glove, head: defenderHead }; + } + + it("lands on his head, thrown at him from the start when that is already known and turned onto him when the verdict comes in mid-flight", () => { + const referee = new THREE.Vector3(0.22, 1.55, mapping.z(-75)); + const past = throwPast("never", referee); + const known = throwPast("known", referee); + const late = throwPast("late", referee); + // A clean punch stops this far short of the middle of the head it lands on; without the verdict it goes past him. + const standOff = past.glove.distanceTo(past.head); + expect(past.glove.distanceTo(referee)).toBeGreaterThan(standOff + 0.08); + // With it the glove lands on the referee's head as on any head, well short of the defender's. + expect(Math.abs(known.glove.distanceTo(referee) - standOff)).toBeLessThan(0.03); + expect(known.glove.distanceTo(known.head)).toBeGreaterThan(standOff + 0.2); + expect(Math.abs(late.glove.distanceTo(referee) - standOff)).toBeLessThan(0.03); + // With no referee in the ring the verdict changes nothing. + expect(throwPast("known", null).glove.distanceTo(past.glove)).toBeLessThan(0.02); + }); +}); + describe("punch onset", () => { it("starts every punch from the guard and eases into the windup instead of jumping on its first frame", () => { for (const punchClass of ["jab", "straight", "hook", "uppercut"] as const) { @@ -179,10 +235,10 @@ describe("punch onset", () => { })); if (tick >= 100) moves.push(step); } - expect(moves[0], `${hand} ${punchClass} first frame`).toBeLessThan(0.05); + expect(moves[0], `${hand} ${punchClass} first frame`).toBeLessThan(0.09); // No faster than the punches themselves move near contact, and building up rather than starting there. (From - // the tucked guard of fighters this close a hook's windup peaks near 9.5 m/s.) - expect(Math.max(...moves), `${hand} ${punchClass} windup`).toBeLessThan(0.16); + // the tucked guard of fighters this close the quick hook's windup peaks near 12 m/s.) + expect(Math.max(...moves), `${hand} ${punchClass} windup`).toBeLessThan(0.24); expect(moves[0]!, `${hand} ${punchClass} eases in`).toBeLessThan(Math.max(...moves)); } } diff --git a/web/hands/src/render/punch-prediction.test.ts b/web/hands/src/render/punch-prediction.test.ts index b2238b7a..f4be266d 100644 --- a/web/hands/src/render/punch-prediction.test.ts +++ b/web/hands/src/render/punch-prediction.test.ts @@ -1,4 +1,5 @@ import * as THREE from "three"; +import { recoveryCancelAge, totalTicks } from "../manifest"; import { predictedPunchTiming } from "../prediction"; import { fighter as baseFighter } from "../test/fixtures"; import type { FighterSnapshot, PunchAction, PunchClass } from "../types"; @@ -43,32 +44,84 @@ function stepper(graph: BoxingGraph, from: number): (shown: FighterSnapshot) => describe("own punch the server refuses", () => { for (const [punchClass, hand] of [["jab", "left"], ["straight", "right"]] as const) { - for (const lead of [2.6, 3.8, 8.6]) { - it(`pulls a ${punchClass} back before contact once the frame that carried it is acknowledged, at a lead of ${lead} ticks`, () => { + for (const answer of [1.6, 2.8, 6.6]) { + it(`plays a ${punchClass} at the server's pace and takes it back once the frame that carried it is acknowledged unstarted, ${answer} ticks on: the way it went before contact, straight back after it`, () => { const graph = makeGraph(); const { sent, sequenceOf } = frames(); const action = press("own-1", punchClass, hand); const timing = predictedPunchTiming(idle, action); - graph.predict(action, 0, 30, lead, timing); + graph.predict(action, 0, 30, answer + INTERPOLATION_TICKS, timing, answer); sent.set("own-1", 41); const step = stepper(graph, 100); - const ackFrame = Math.round((lead - INTERPOLATION_TICKS) * 2); + const ackFrame = Math.round(answer * 2); const ages: number[] = []; - for (let frame = 0; state(graph).punchActive && frame < 120; frame += 1) { + let frame = 0; + for (; state(graph).punchActive && frame < 120; frame += 1) { // The server took the frame but never started the punch: no action, nothing queued. graph.acknowledge({ ...idle, last_input_sequence: frame >= ackFrame ? 41 : 40 }, true, [], sequenceOf); step(idle); if (state(graph).punchActive) ages.push(state(graph).punchAgeTicks); } expect(state(graph).punchActive).toBe(false); - expect(Math.max(...ages)).toBeLessThan(timing.startup); - const peak = ages.indexOf(Math.max(...ages)); - expect(peak).toBeLessThanOrEqual(ackFrame + 1); - for (let index = peak + 1; index < ages.length; index += 1) expect(ages[index]!).toBeLessThan(ages[index - 1]!); + for (let index = 0; index < ackFrame; index += 1) expect(ages[index]).toBeCloseTo((index + 1) / 2, 5); + if (ackFrame / 2 < timing.startup) { + const peak = ages.indexOf(Math.max(...ages)); + expect(Math.max(...ages)).toBeLessThan(timing.startup); + expect(peak).toBeLessThanOrEqual(ackFrame + 1); + for (let index = peak + 1; index < ages.length; index += 1) expect(ages[index]!).toBeLessThan(ages[index - 1]!); + } else { + // Whatever it had left at the target is skipped, and it is back in the guard well inside its own length. + expect(ages[ackFrame]!).toBeGreaterThan(timing.startup + timing.active); + expect(frame / 2).toBeLessThan(answer + timing.recovery / 2 + 1); + } }); } } + it("lets a power punch's glove go cold as it is taken back, not glow all the way back to the guard", () => { + const graph = makeGraph(); + const { sent, sequenceOf } = frames(); + const power = { ...press("own-1", "straight", "right"), power: "power" as const }; + graph.predict(power, 0, 30, 2.8 + INTERPOLATION_TICKS, predictedPunchTiming(idle, power), 2.8); + sent.set("own-1", 41); + const step = stepper(graph, 100); + for (let frame = 0; frame < 6; frame += 1) { + graph.acknowledge({ ...idle, last_input_sequence: 40 }, true, [], sequenceOf); + step(idle); + } + expect(graph.powerHeat("right")).toBeGreaterThan(0); + graph.acknowledge({ ...idle, last_input_sequence: 41 }, true, [], sequenceOf); + step(idle); + expect(state(graph).punchActive).toBe(true); + expect(graph.powerHeat("right")).toBe(0); + }); + + it("gives up on a press the server says nothing of well past when its answer was due, and shows it after all if the server throws it late", () => { + const pulled = makeGraph(); + const power = { ...press("own-1", "straight", "right"), power: "power" as const }; + const powerTiming = predictedPunchTiming(idle, power); + pulled.predict(power, 0, 30, 2 + INTERPOLATION_TICKS, powerTiming, 2); + const step = stepper(pulled, 100); + const ages: number[] = []; + let tick = 100; + while (state(pulled).punchActive && ages.length < 120) { tick = step(idle); if (state(pulled).punchActive) ages.push(state(pulled).punchAgeTicks); } + // Its answer was due in two ticks; three and a half more, and the long power wind-up never reaches the target. + expect(Math.max(...ages)).toBeLessThan(powerTiming.startup); + expect(Math.max(...ages)).toBeGreaterThan(5); + step(serverPunch({ ...idle, last_input_sequence: 41 }, "own-1", power, tick)); + expect(state(pulled).punchActive).toBe(true); + // A straight is past its contact by then: it goes straight back to the guard instead of playing out. + const cut = makeGraph(); + const straight = press("own-2", "straight", "right"); + const straightTiming = predictedPunchTiming(idle, straight); + cut.predict(straight, 0, 30, 2 + INTERPOLATION_TICKS, straightTiming, 2); + const next = stepper(cut, 100); + let frames = 0; + while (state(cut).punchActive && frames < 120) { next(idle); frames += 1; } + expect(frames / 2).toBeLessThan(6 + straightTiming.recovery / 2.5 + 1); + expect(frames / 2).toBeLessThan(totalTicks(straightTiming) - 2); + }); + it("keeps a punch the server has queued behind another, then lets it play once started", () => { const graph = makeGraph(); const { sent, sequenceOf } = frames(); @@ -240,97 +293,119 @@ describe("follow-up pressed during a punch", () => { const hookTiming = predictedPunchTiming(idle, hook); const T0 = 300; const thrown = serverPunch(idle, "s1", straight, T0); - const contact = (kind: string, actionId = "s1") => ({ event_id: 7, tick: T0 + 6, kind, actor_id: kind.includes("block") ? "two" : "one", target_id: kind.includes("block") ? "one" : "two", amount: 30, detail: "straight:head", blood: 0, direction: 1, action_id: actionId }); + const contact = (kind: string, actionId = "s1") => ({ event_id: 7, tick: T0 + straightTiming.startup, kind, actor_id: kind.includes("block") ? "two" : "one", target_id: kind.includes("block") ? "one" : "two", amount: 30, detail: "straight:head", blood: 0, direction: 1, action_id: actionId }); /** - * Plays a straight from T0 and presses a hook at `pressAge` with a lead of 4 ticks; the snapshots - * on screen show the server's hook from `serverStart`. Returns the tick at which the graph first - * plays the hook and the tick at which it reaches contact. + * The straight is the player's own press at T0, played on the press's own time; its server copy shows on the render + * clock `lead` ticks later. The hook is pressed `pressAge` ticks into the straight, and the snapshots on screen show + * the server's hook from `serverStart`. With `onServerClock` the straight was not predicted and plays on the render + * clock from T0 instead, `lead` ticks behind the press's time. Returns the tick at which the graph first plays the hook + * and the tick at which it reaches contact, and the graph as it is then. */ - function followUp(serverStart: number, options: { contacts?: ReturnType[]; stunnedUntil?: number; pressAge?: number } = {}): { start: number; contact: number } { + function followUp(serverStart: number, options: { contacts?: ReturnType[]; stunnedUntil?: number; pressAge?: number; lead?: number; onServerClock?: boolean } = {}): { start: number; contact: number; graph: BoxingGraph } { const graph = makeGraph(); - const pressAge = options.pressAge ?? 10; + const pressAge = options.pressAge ?? 7; + const lead = options.lead ?? 4; const served = serverPunch(idle, "own-hook", hook, serverStart); + const shown = options.onServerClock === true ? thrown : serverPunch(idle, "s1", straight, T0 + lead); let tick = T0 - 0.5; let start = NaN; let reached = NaN; - graph.acknowledge(thrown, true, options.contacts ?? []); + if (options.onServerClock !== true) graph.predict(straight, T0 / 30, 30, lead, straightTiming); + graph.acknowledge(shown, true, options.contacts ?? []); for (let frame = 0; frame < 120 && Number.isNaN(reached); frame += 1) { tick += 0.5; const opposite = { ...opponent, stunned_ticks: tick < (options.stunnedUntil ?? -Infinity) ? 20 : 0 }; - graph.update(tick < serverStart ? thrown : served, opposite, 1 / 60, tick / 30, false, "full", tick, head); - if (tick === T0 + pressAge) graph.predict(hook, tick / 30, 30, 4, hookTiming); + graph.update(tick >= serverStart ? served : tick >= shown.action_start_tick ? shown : idle, opposite, 1 / 60, tick / 30, false, "full", tick, head); + if (tick === T0 + pressAge) graph.predict(hook, tick / 30, 30, lead, hookTiming); if (state(graph).ownActionId !== "own-hook") continue; if (Number.isNaN(start)) start = tick; if (state(graph).punchAgeTicks >= hookTiming.startup) reached = tick; } - return { start, contact: reached }; + return { start, contact: reached, graph }; } const near = (actual: number, expected: number): void => expect(Math.abs(actual - expected)).toBeLessThanOrEqual(1); - it("waits for a whiffed straight to end and starts the hook the tick after, as the engine does", () => { - expect(straightTiming).toMatchObject({ startup: 6, active: 2, recovery: 10 }); - // Pressed at 56% of the straight, the engine starts the hook at T0 + 19 and lands it 7 ticks later. - const { start, contact: reached } = followUp(T0 + 19); - expect(start).toBeGreaterThanOrEqual(T0 + 17.5); - near(reached, T0 + 19 + hookTiming.startup); + // The straight runs 12 ticks and a chained follow-up may cut its recovery short from age 9. A press p ticks into the + // straight on the press's own time reaches the server p ticks into the server's copy. + const ends = T0 + totalTicks(straightTiming); + const cancels = T0 + recoveryCancelAge(straightTiming); + + it("waits for a whiffed straight to end and starts the hook on the tick it ends, as the engine does", () => { + expect(straightTiming).toMatchObject({ startup: 4, active: 2, recovery: 6 }); + // Pressed at 58% of the straight, the engine starts the hook as it ends and lands it at the hook's startup. + const { start, contact: reached } = followUp(ends + 4); + expect(start).toBeGreaterThanOrEqual(ends - 0.5); + near(reached, ends + hookTiming.startup); }); - it("cuts a landed straight's recovery short at its cancel age, or when the press arrives after it", () => { - // Cancel age 6 + 2 + 5: pressed at age 8 the hook reaches the server before it and starts there. - near(followUp(T0 + 13, { contacts: [contact("hit")], pressAge: 8 }).contact, T0 + 13 + hookTiming.startup); - // Pressed at age 10 with a lead of 4 it reaches the server at T0 + 14 and starts at once. - near(followUp(T0 + 14, { contacts: [contact("hit")], pressAge: 10 }).contact, T0 + 14 + hookTiming.startup); - // An ordinary block lets the combination through too. - near(followUp(T0 + 13, { contacts: [contact("block"), contact("hit")], pressAge: 8 }).contact, T0 + 13 + hookTiming.startup); + it("cuts a landed straight's recovery short at its cancel age, or at once when the press comes after it", () => { + near(followUp(cancels + 4, { contacts: [contact("hit")], pressAge: 4 }).contact, cancels + hookTiming.startup); + near(followUp(T0 + 14, { contacts: [contact("hit")], pressAge: 10 }).contact, T0 + 10 + hookTiming.startup); + // An ordinary block lets the combination through too, and so does a punch that found the referee in the way. + near(followUp(cancels + 4, { contacts: [contact("block"), contact("hit")], pressAge: 4 }).contact, cancels + hookTiming.startup); + near(followUp(cancels + 4, { contacts: [contact("referee_hit")], pressAge: 4 }).contact, cancels + hookTiming.startup); }); it("does not cut the recovery short for a parried straight or a contact that belongs to another punch", () => { for (const contacts of [[contact("perfect_block"), contact("hit")], [contact("hit", "s0")]]) { - const { start, contact: reached } = followUp(T0 + 19, { contacts, pressAge: 8 }); - expect(start).toBeGreaterThanOrEqual(T0 + 17.5); - near(reached, T0 + 19 + hookTiming.startup); + const { start, contact: reached } = followUp(ends + 4, { contacts, pressAge: 4 }); + expect(start).toBeGreaterThanOrEqual(ends - 0.5); + near(reached, ends + hookTiming.startup); } }); it("holds the follow-up while the defender is stunned and cuts in once he is not", () => { - const { start, contact: reached } = followUp(T0 + 15, { contacts: [contact("hit")], pressAge: 8, stunnedUntil: T0 + 15 }); - expect(start).toBeGreaterThanOrEqual(T0 + 15); - near(reached, T0 + 15 + hookTiming.startup); - const held = followUp(T0 + 19, { contacts: [contact("hit")], pressAge: 8, stunnedUntil: T0 + 40 }); - expect(held.start).toBeGreaterThanOrEqual(T0 + 17.5); - near(held.contact, T0 + 19 + hookTiming.startup); + const { start, contact: reached } = followUp(T0 + 15, { contacts: [contact("hit")], pressAge: 4, stunnedUntil: T0 + 11 }); + expect(start).toBeGreaterThanOrEqual(T0 + 11); + near(reached, T0 + 11 + hookTiming.startup); + const held = followUp(ends + 4, { contacts: [contact("hit")], pressAge: 4, stunnedUntil: T0 + 40 }); + expect(held.start).toBeGreaterThanOrEqual(ends - 0.5); + near(held.contact, ends + hookTiming.startup); + }); + + it("plays the held press from the server's timeline when the server starts it before it is let go here", () => { + // No contact reached the client, so it holds the hook to the straight's end; the server cut in at the cancel age + // and, two ticks behind, its hook is on screen first. + const { start, contact: reached, graph } = followUp(cancels + 2, { pressAge: 6, lead: 2 }); + expect(start).toBe(cancels + 2); + near(reached, cancels + 2 + hookTiming.startup); + // On the server's timeline it is no press played on the press's time: its contact keeps to the delayed clock. + expect(graph.ownPressId).toBeNull(); + expect(graph.pressLanded("own-hook")).toBe(false); }); - it("plays the held press from the server's timeline when the server starts it sooner than expected", () => { - // No contact reached the client, so the graph expects the hook after the straight; the server cut in at T0 + 14. - const { start, contact: reached } = followUp(T0 + 14, { pressAge: 10 }); - expect(start).toBe(T0 + 14); - near(reached, T0 + 14 + hookTiming.startup); + it("lets a follow-up go behind a punch on the server's timeline as early as the press's own time allows", () => { + // The straight on the render clock trails the press's time by the lead: a whiffed straight lets the hook go a lead + // early on screen, when the server does on the press's time. + const { start, contact: reached } = followUp(ends, { onServerClock: true }); + expect(start).toBeGreaterThanOrEqual(ends - 4 - 0.5); + expect(start).toBeLessThan(ends); + near(reached, ends - 4 + hookTiming.startup); }); it("keeps only the newest held press while the punch in front still holds it, and forgets one the server drops", () => { const graph = makeGraph(); const step = stepper(graph, T0 - 0.5); let tick = T0; - while (tick < T0 + 8) tick = step(thrown); + while (tick < ends - 7) tick = step(thrown); graph.predict(hook, tick / 30, 30, 4, hookTiming); const uppercut = press("own-upper", "uppercut", "right"); graph.predict(uppercut, tick / 30 + 0.1, 30, 4, predictedPunchTiming(idle, uppercut)); - while (tick < T0 + 16) tick = step(thrown); + while (tick < ends - 3) tick = step(thrown); // Three ticks from the end, a press arrives after the held one has started: it is not predicted. graph.predict(press("own-late", "jab", "left"), tick / 30, 30, 4, predictedPunchTiming(idle, press("own-late", "jab", "left"))); - while (tick < T0 + 19.5) tick = step(thrown); + while (tick < ends + 0.5) tick = step(thrown); expect(state(graph).ownActionId).toBe("own-upper"); expect(state(graph).punchClass).toBe("uppercut"); const dropped = makeGraph(); const next = stepper(dropped, T0 - 0.5); tick = T0; - while (tick < T0 + 8) tick = next(thrown); + while (tick < ends - 7) tick = next(thrown); dropped.predict(hook, tick / 30, 30, 4, hookTiming); // The server got the frame and holds nothing: a guard raised in the same tick cleared it. dropped.acknowledge({ ...thrown, last_input_sequence: 51, queued_actions: 0 }, true, [], (actionId) => (actionId === "own-hook" ? 51 : null)); - while (tick < T0 + 24) tick = next(thrown); + while (tick < ends + 4) tick = next(thrown); expect(state(dropped).ownActionId).toBeNull(); expect(state(dropped).punchClass).toBe("straight"); }); diff --git a/web/hands/src/render/referee.test.ts b/web/hands/src/render/referee.test.ts new file mode 100644 index 00000000..bc059404 --- /dev/null +++ b/web/hands/src/render/referee.test.ts @@ -0,0 +1,553 @@ +import * as THREE from "three"; +import { fighter, referee as engineReferee, snapshot } from "../test/fixtures"; +import type { CombatEvent, EngineSnapshot } from "../types"; +import { CommentaryDirector } from "./commentary"; +import { Effects3D, REFEREE_GUSH } from "./effects"; +import { BoxingGraph, SkinnedBoxer, loadBoxerGlb } from "./graph"; +import { OFFICIAL_LOOKS } from "./looks"; +import { BLUE_CORNER_OUTFIT, REFEREE_OUTFIT } from "./outfit"; +import { RoundClock } from "./hud"; +import { FightRenderer, REFEREE_ID, REFEREE_REPLAY_DELAY_SECONDS, punchGush } from "./renderer"; +import { SnapshotBuffer } from "../interpolation"; +import { planKnockoutReplay, REFEREE_REPLAY } from "./replay"; +import { worldPosition } from "./rig"; +import { worldMapping } from "./world"; + +const mapping = worldMapping({ tick_rate: 30, ring_half_width: 500, ring_half_height: 500 }); +const gltf = await loadBoxerGlb(); +const referee = (): SkinnedBoxer => new SkinnedBoxer(gltf, { skin: 0xc79b76, gear: 0x3b57b8, look: OFFICIAL_LOOKS.referee, outfit: REFEREE_OUTFIT, wounds: true }); +const event = (kind: string, tick: number, extra: Partial = {}): CombatEvent => ({ event_id: tick, tick, kind, actor_id: "one", target_id: REFEREE_ID, amount: 80, detail: "hook:head", blood: 30, direction: 1, action_id: `one@${tick - 8}`, ...extra }); + +describe("a referee who can be punched", () => { + it("shades his injuries like a fighter, while the corner's officials still never take a mark", () => { + const official = referee(); + const head = official.headMesh.material as THREE.MeshStandardMaterial; + expect(head.customProgramCacheKey()).toContain("hands-injury"); + // Still an official: matte cloth and skin, and no shadow. + expect(head).not.toBeInstanceOf(THREE.MeshPhysicalMaterial); + const corner = new SkinnedBoxer(gltf, { skin: 0x8a5a3b, gear: 0x1b2230, look: OFFICIAL_LOOKS.blueCorner, outfit: BLUE_CORNER_OUTFIT }); + expect((corner.headMesh.material as THREE.MeshStandardMaterial).customProgramCacheKey()).not.toContain("hands-injury"); + }); + + it("snaps away from a punch on top of his own posture", () => { + const hit = referee(); + const still = referee(); + const graphs = [new BoxingGraph(hit, mapping, { referee: true, knockout: true }), new BoxingGraph(still, mapping, { referee: true, knockout: true })]; + const self = { ...fighter("referee"), x: 0, y: 160, facing_x: 0, facing_y: -1000 }; + const focus = { ...fighter("focus"), x: 0, y: -140 }; + const step = (frames: number, from: number): void => { + for (let frame = 0; frame < frames; frame += 1) for (const graph of graphs) graph.update(self, focus, 1 / 60, (from + frame) / 60, false, "full", (from + frame) / 2); + }; + step(30, 0); + graphs[0]!.react("hit", "head", 1, "hook", "left", 120); + step(8, 30); + for (const boxer of [hit, still]) boxer.root.updateMatrixWorld(true); + const moved = worldPosition(hit.rig.bones.head, new THREE.Vector3()).distanceTo(worldPosition(still.rig.bones.head, new THREE.Vector3())); + expect(moved).toBeGreaterThan(0.04); + }); + + it("goes down for good when knocked out, which the corner's officials never are", () => { + const official = referee(); + const graph = new BoxingGraph(official, mapping, { referee: true, knockout: true }); + const self = { ...fighter("referee"), x: 0, y: 160, facing_x: 0, facing_y: -1000 }; + const focus = { ...fighter("focus"), x: 0, y: -140 }; + graph.update(self, focus, 1 / 60, 0, false, "full", 0); + graph.react("hit", "head", 1, "uppercut", "right", 150); + graph.knockOut(); + for (let frame = 1; frame < 600; frame += 1) graph.update(self, focus, 1 / 60, frame / 60, false, "full", frame / 2); + // Ten seconds on, he has not got up. + expect(graph.isDown).toBe(true); + official.root.updateMatrixWorld(true); + expect(worldPosition(official.rig.bones.head, new THREE.Vector3()).y).toBeLessThan(0.5); + const corner = new BoxingGraph(new SkinnedBoxer(gltf, { skin: 0x8a5a3b, gear: 0x1b2230, look: OFFICIAL_LOOKS.blueCorner, outfit: BLUE_CORNER_OUTFIT }), mapping, { referee: true }); + expect(corner.fallBody).toBeNull(); + }); +}); + +describe("the renderer's referee", () => { + type Stub = Record & { refereePosition: THREE.Vector3 }; + const updateReferee = (FightRenderer.prototype as unknown as { updateReferee: (dt: number, time: number, snapshot: EngineSnapshot | null, tick: number) => void }).updateReferee; + const placement = (): Stub => { + const graph = new BoxingGraph(referee(), mapping, { referee: true, knockout: true }); + return Object.assign(Object.create(FightRenderer.prototype) as Record, { + referee: graph, mapping, tmpA: new THREE.Vector3(-0.6, 0, 0), tmpB: new THREE.Vector3(0.6, 0, 0), + refereePosition: new THREE.Vector3(0, 0, -2), refereeAway: new THREE.Vector3(), refereeVelocity: new THREE.Vector3(), refereeYaw: 0, + replay: null, ceremony: null, stoppageWinner: -1, stoppageRaiseAt: Number.POSITIVE_INFINITY, frameSeconds: 0, blobShadows: [], graphs: null, + effects: { severedHeadPosition: () => false, gushing: () => false, pool: vi.fn() }, closeUpTarget: new THREE.Vector3(), bodyPoint: new THREE.Vector3(), pendingRefereeEvents: [], settings: () => ({ reducedMotion: false, blood: "full" }), + refereeHead: new THREE.Vector3(), refereePoolAccumulator: 0, refereePoolCount: 0, + }); + }; + const at = (state: EngineSnapshot, stub: Stub, frames: number): void => { + for (let frame = 0; frame < frames; frame += 1) updateReferee.call(stub, 1 / 60, frame / 60, state, state.tick); + }; + + it("stands where the engine has him while punches can land, so they land on him where he is drawn", () => { + const stub = placement(); + at({ ...snapshot(40), referee: engineReferee(30, 62) }, stub, 30); + expect(stub.refereePosition.x).toBeCloseTo(mapping.x(30), 2); + expect(stub.refereePosition.z).toBeCloseTo(mapping.z(62), 2); + }); + + it("goes where the picture needs him over a count, and stays where he fell once down", () => { + const counting = placement(); + at({ ...snapshot(40), phase: "knockdown", fighters: [fighter("one", -100), { ...fighter("two", 100), is_downed: true }], referee: engineReferee(-300, -300) }, counting, 30); + expect(Math.hypot(counting.refereePosition.x - mapping.x(-300), counting.refereePosition.z - mapping.z(-300))).toBeGreaterThan(0.5); + + const fallen = placement(); + at({ ...snapshot(40), referee: engineReferee(30, 62) }, fallen, 30); + const where = fallen.refereePosition.clone(); + at({ ...snapshot(80), phase: "referee_down", referee: { ...engineReferee(200, 200), alive: false } }, fallen, 60); + at({ ...snapshot(120), referee: { ...engineReferee(-200, 100), alive: false } }, fallen, 60); + expect(fallen.refereePosition.distanceTo(where)).toBeLessThan(1e-9); + }); + + it("keeps his pouring mouth on him as he moves, and leaves it alone when nothing pours", () => { + const stub = placement(); + const anchorGush = vi.fn(); + stub.effects = { severedHeadPosition: () => false, gushing: (index: number) => index === REFEREE_GUSH, anchorGush, pool: vi.fn() }; + Object.assign(stub, { tmpHead: new THREE.Vector3(), tmpHeadQuaternion: new THREE.Quaternion(), tmpStumpOffset: new THREE.Vector3(), woundPoint: new THREE.Vector3(), woundAxis: new THREE.Vector3() }); + at({ ...snapshot(40), referee: engineReferee(30, 62) }, stub, 30); + expect(anchorGush).toHaveBeenCalledTimes(30); + const [index, position] = anchorGush.mock.calls.at(-1)! as [number, THREE.Vector3]; + expect(index).toBe(REFEREE_GUSH); + const head = (stub.referee as BoxingGraph).boxer.rig.bones.head.getWorldPosition(new THREE.Vector3()); + expect(position.distanceTo(head)).toBeLessThan(0.3); + stub.effects = { ...(stub.effects as object), gushing: () => false }; + anchorGush.mockClear(); + at({ ...snapshot(40), referee: engineReferee(30, 62) }, stub, 5); + expect(anchorGush).not.toHaveBeenCalled(); + }); + + it("bleeds out dead into a pool under his head, which spreads as wide as an open wound's and stops, and starts afresh in a new bout", () => { + const stub = placement(); + const pool = (stub.effects as { pool: ReturnType }).pool; + at({ ...snapshot(40), referee: engineReferee(30, 62) }, stub, 30); + expect(pool).not.toHaveBeenCalled(); + const dead = { ...snapshot(80), referee: { ...engineReferee(30, 62), alive: false } }; + at(dead, stub, 60 * 30); + const radii = pool.mock.calls.map((call) => call[2] as number); + expect(radii.length).toBeGreaterThan(100); + for (let index = 1; index < radii.length; index += 1) expect(radii[index]!).toBeGreaterThanOrEqual(radii[index - 1]!); + expect(radii.at(-1)!).toBeGreaterThan(1.5); + const head = (stub.referee as BoxingGraph).boxer.rig.bones.head.getWorldPosition(new THREE.Vector3()); + const last = pool.mock.calls.at(-1)! as number[]; + expect(Math.hypot(last[0]! - head.x, last[1]! - head.z)).toBeLessThan(0.6); + // As wide as it goes, it stops spilling. + const spilled = pool.mock.calls.length; + at(dead, stub, 60 * 10); + expect(pool.mock.calls.length).toBe(spilled); + // On his feet in a new bout and dead again: a new pool from nothing. + at({ ...snapshot(200), referee: engineReferee(30, 62) }, stub, 5); + pool.mockClear(); + at({ ...snapshot(260), referee: { ...engineReferee(30, 62), alive: false } }, stub, 60); + expect(pool.mock.calls[0]![2] as number).toBeLessThan(radii.at(-1)! / 4); + + // Not with blood off, nor while his death is replayed. + for (const change of [{ settings: () => ({ reducedMotion: false, blood: "off" }) }, { replay: { plan: { impact: { kind: "referee_down" } } } }]) { + const quiet = Object.assign(placement(), change); + at(dead, quiet, 120); + expect((quiet.effects as { pool: ReturnType }).pool).not.toHaveBeenCalled(); + } + }); + + const moments = (): { renderer: Record; react: ReturnType; knockOut: ReturnType; addEvent: ReturnType; gush: ReturnType; onContact: ReturnType; landedHit: ReturnType } => { + const react = vi.fn(); + const gush = vi.fn(); + const knockOut = vi.fn(); + const addEvent = vi.fn(); + const onContact = vi.fn(); + const landedHit = vi.fn(); + const head = new THREE.Object3D(); + head.position.set(0.1, 1.6, -0.4); + const live = { ...snapshot(60), referee: engineReferee(0, 62) }; + const renderer = Object.assign(Object.create(FightRenderer.prototype) as Record, { + pendingRefereeEvents: [] as CombatEvent[], refereeReplayAt: null, eventCallout: null, frameSeconds: 10, history: [] as EngineSnapshot[], + buffer: { latest: () => live }, referee: { react, knockOut, boxer: { rig: { bones: { head } } } }, effects: { addEvent, gush }, + settings: () => ({ reducedMotion: false, blood: "full" }), mapping, graphs: [{ landedHit }, { landedHit: vi.fn() }], onContact, refereeHead: new THREE.Vector3(), + tmpHead: new THREE.Vector3(), tmpHeadQuaternion: new THREE.Quaternion(), tmpStumpOffset: new THREE.Vector3(), woundPoint: new THREE.Vector3(), woundAxis: new THREE.Vector3(), + }); + return { renderer, react, knockOut, addEvent, gush, onContact, landedHit }; + }; + const fire = (renderer: Record, tick: number): void => (FightRenderer.prototype as unknown as { fireRefereeEvents: (tick: number) => void }).fireRefereeEvents.call(renderer, tick); + + it("shows a punch on him when the render clock reaches it: he reels, he bleeds and the puncher feels it land", () => { + const { renderer, react, addEvent, onContact, landedHit } = moments(); + const hit = event("referee_hit", 40); + (renderer.pendingRefereeEvents as CombatEvent[]).push(hit); + fire(renderer, 39.5); + expect(react).not.toHaveBeenCalled(); + fire(renderer, 40); + expect(react).toHaveBeenCalledWith("hit", "head", 1, "hook", null, 80); + expect(addEvent).toHaveBeenCalledTimes(1); + expect(addEvent.mock.calls[0]![0]).toMatchObject({ kind: "hit", blood: 30 }); + // The blood comes off his head. + expect((addEvent.mock.calls[0]![1] as THREE.Vector3).y).toBeCloseTo(1.6); + expect(landedHit).toHaveBeenCalledWith(hit.action_id, false, false); + expect(onContact).toHaveBeenCalledWith(hit, false); + expect(renderer.pendingRefereeEvents).toEqual([]); + }); + + it("lands a power punch on him as one, held longest and heard as one", () => { + const { renderer, landedHit, onContact } = moments(); + const hit = event("referee_hit", 40); + // The snapshot the punch arrived in has the puncher throwing it as a power punch. + renderer.history = [{ ...snapshot(40), fighters: [{ ...fighter("one"), action_id: hit.action_id, action_power: "power" }, fighter("two")] }]; + (renderer.pendingRefereeEvents as CombatEvent[]).push(hit); + fire(renderer, 40); + expect(landedHit).toHaveBeenCalledWith(hit.action_id, false, true); + expect(onContact).toHaveBeenCalledWith(hit, true); + }); + + it("knocks him out cold on his fall, says so, and replays it once it has played live", () => { + const { renderer, knockOut, addEvent, onContact } = moments(); + const down = event("referee_down", 50, { amount: 0, blood: 0, detail: "" }); + (renderer.pendingRefereeEvents as CombatEvent[]).push(down); + fire(renderer, 50); + expect(knockOut).toHaveBeenCalledTimes(1); + // Heard as it is shown, not as its snapshot arrives. + expect(onContact).toHaveBeenCalledWith(down, false); + expect(addEvent.mock.calls[0]![0]).toMatchObject({ kind: "knockdown" }); + expect(renderer.eventCallout).toMatchObject({ text: "THE REFEREE IS DEAD!" }); + expect(renderer.refereeReplayAt).toMatchObject({ impact: down }); + expect((renderer.refereeReplayAt as { at: number }).at).toBeGreaterThan(10); + }); + + it("spurts from his face when a solid punch lands on him, as a fighter's does, but not from a light one or with reduced motion", () => { + const solid = moments(); + (solid.renderer.pendingRefereeEvents as CombatEvent[]).push(event("referee_hit", 40, { amount: 90 })); + fire(solid.renderer, 40); + const expected = punchGush({ kind: "hit", amount: 90, blood: 30, detail: "hook:head" })!; + expect(solid.gush).toHaveBeenCalledWith(REFEREE_GUSH, expect.any(THREE.Vector3), expect.any(THREE.Vector3), expected.seconds, expected.rate, 40); + // From his mouth, at his head. + expect((solid.gush.mock.calls[0]![1] as THREE.Vector3).distanceTo(new THREE.Vector3(0.1, 1.6, -0.4))).toBeLessThan(0.3); + + const light = moments(); + (light.renderer.pendingRefereeEvents as CombatEvent[]).push(event("referee_hit", 40, { amount: 20 })); + fire(light.renderer, 40); + expect(light.gush).not.toHaveBeenCalled(); + + const calm = moments(); + calm.renderer.settings = () => ({ reducedMotion: true, blood: "full" }); + (calm.renderer.pendingRefereeEvents as CombatEvent[]).push(event("referee_hit", 40, { amount: 90 })); + fire(calm.renderer, 40); + expect(calm.gush).not.toHaveBeenCalled(); + }); + + it("pours blood from his mouth as he dies, longer than any spurt, and pours it again when his death is replayed", () => { + const { renderer, gush } = moments(); + const down = event("referee_down", 50, { amount: 0, blood: 0, detail: "" }); + (renderer.pendingRefereeEvents as CombatEvent[]).push(down); + fire(renderer, 50); + expect(gush).toHaveBeenCalledWith(REFEREE_GUSH, expect.any(THREE.Vector3), expect.any(THREE.Vector3), expect.any(Number), expect.any(Number), 50); + expect(gush.mock.calls[0]![3] as number).toBeGreaterThan(punchGush({ kind: "hit", amount: 200, blood: 50, detail: "hook:head" })!.seconds); + + // The replay stands him up with his live gush stopped, so its fall starts it again. + const effects = new Effects3D(new THREE.Scene()); + effects.gush(REFEREE_GUSH, new THREE.Vector3(0, 1.5, 0), new THREE.Vector3(0, -0.3, 1), 3, 300, 50); + const replaying = Object.assign(Object.create(FightRenderer.prototype) as Record, { simulation: { tick_rate: 30 }, frameSeconds: 0, commentary: { replay: vi.fn() }, referee: { resetTransient: vi.fn(), primeReplayFall: vi.fn() }, effects }); + (FightRenderer.prototype as unknown as { startReplay(this: unknown, plan: unknown): void }).startReplay.call(replaying, { snapshots: [snapshot(40)], impact: down, durationSeconds: 3 }); + expect(effects.gushing(REFEREE_GUSH)).toBe(false); + // The physics runs his recorded fall again, so the replay leaves him where the live fall did. + expect((replaying.referee as { primeReplayFall: ReturnType }).primeReplayFall).toHaveBeenCalledOnce(); + effects.gush(REFEREE_GUSH, new THREE.Vector3(0, 1.5, 0), new THREE.Vector3(0, -0.3, 1), 3, 300, 50); + expect(effects.gushing(REFEREE_GUSH)).toBe(true); + effects.dispose(); + }); + + it("keeps a gush of his own after the fighters', which clearing the ring stops", () => { + for (const clear of ["clearDynamic", "clearArcadeGore"] as const) { + const effects = new Effects3D(new THREE.Scene()); + effects.gush(REFEREE_GUSH, new THREE.Vector3(0, 1.5, 0), new THREE.Vector3(0, -0.3, 1), 3, 300, 7); + expect(effects.gushing(REFEREE_GUSH)).toBe(true); + expect(effects.gushing(0) || effects.gushing(1)).toBe(false); + effects.gush(REFEREE_GUSH + 1, new THREE.Vector3(0, 1.5, 0), new THREE.Vector3(0, -0.3, 1), 3, 300, 8); + expect(effects.gushing(REFEREE_GUSH + 1)).toBe(false); + effects[clear](); + expect(effects.gushing(REFEREE_GUSH)).toBe(false); + effects.dispose(); + } + }); + + it("lands the punch that killed him again in his replay, as hard as a fall needs, and is heard again", () => { + const { renderer, react, onContact } = moments(); + const blow = event("referee_hit", 50, { amount: 80, action_id: "one@42" }); + const down = event("referee_down", 50, { amount: 0, blood: 0, detail: "", action_id: "one@42" }); + renderer.history = [{ ...snapshot(50), events: [blow, down] }]; + (FightRenderer.prototype as unknown as { fireRefereeFall(this: unknown, event: CombatEvent, live: EngineSnapshot, replayed: boolean): void }).fireRefereeFall.call(renderer, down, { ...snapshot(50), referee: engineReferee(0, 62) }, true); + expect(react).toHaveBeenCalledWith("hit", "head", 1, "hook", null, 140); + expect(onContact).toHaveBeenCalledWith(blow, false); + expect(onContact).toHaveBeenCalledWith(down, false); + }); + + it("neither waves off nor walks over to raise the winner's arm once he is dead, and the winner still celebrates", () => { + const finish = (alive: boolean) => { + const waveOff = vi.fn(); + const celebrate = vi.fn(); + const stub = Object.assign(Object.create(FightRenderer.prototype) as Record, { + buffer: { latest: () => ({ ...snapshot(400), phase: "complete", referee: { ...engineReferee(0, 62), alive } }) }, referee: { waveOff }, + headCacheValid: [false, false], settings: () => ({ reducedMotion: false }), frameSeconds: 10, graphs: [{ celebrate }, { celebrate: vi.fn() }], + stoppageWinner: -1, stoppageRaiseAt: Number.POSITIVE_INFINITY, + }); + (FightRenderer.prototype as unknown as { presentFinish(this: unknown, final: unknown): void }).presentFinish.call(stub, { version: 1, type: "final", match_id: "m", winner_id: "one", method: "ko", round: 2, scorecards: [], ratings: {} }); + return { waveOff, celebrate, raising: stub.stoppageWinner as number }; + }; + const living = finish(true); + expect(living.waveOff).toHaveBeenCalledOnce(); + expect(living.raising).toBe(0); + const dead = finish(false); + expect(dead.waveOff).not.toHaveBeenCalled(); + expect(dead.raising).toBe(-1); + expect(dead.celebrate).toHaveBeenCalledOnce(); + }); + + it("drips his blood from his head while he bleeds", () => { + const { renderer, addEvent, react } = moments(); + (renderer.pendingRefereeEvents as CombatEvent[]).push(event("bleed", 70, { actor_id: REFEREE_ID, target_id: null, detail: "", amount: 30, blood: 25 })); + fire(renderer, 70); + expect(react).not.toHaveBeenCalled(); + expect(addEvent.mock.calls[0]![0]).toMatchObject({ kind: "bleed" }); + expect((addEvent.mock.calls[0]![1] as THREE.Vector3).y).toBeCloseTo(1.6); + }); +}); + +describe("the commentary on the referee", () => { + const players = { one: { id: "one", name: "Azure Vector", avatar: null, rating: 1500, connected: true }, two: { id: "two", name: "Crimson Geometry", avatar: null, rating: 1500, connected: true } }; + const said = (events: CombatEvent[]): string[] => { + const director = new CommentaryDirector(); + director.observe(snapshot(events[0]!.tick), events, players, 30, 0); + const lines: string[] = []; + for (let at = 0; at < 6; at += 0.25) { + const text = director.current(at)?.line.text; + if (text !== undefined && !lines.includes(text)) lines.push(text); + } + return lines; + }; + + it("calls a punch on the referee, and calls his death above everything", () => { + expect(said([event("referee_hit", 40)]).some((text) => /referee/u.test(text))).toBe(true); + expect(said([event("referee_down", 40)])[0]).toMatch(/killed|dead|for good/u); + }); + + it("says the referee bled out when no punch put him down", () => { + expect(said([event("referee_down", 40, { action_id: null, amount: 0, detail: "" })])[0]).toMatch(/bled out|blood/u); + expect(said([event("referee_down", 40)])[0]).not.toMatch(/bled out|blood/u); + }); + + it("names the man who killed him in the replay of his fall, not the last man knocked down", () => { + const lines = new Set(); + for (let tick = 40; tick < 70; tick += 1) { + const director = new CommentaryDirector(); + director.observe(snapshot(tick - 20), [event("knockdown", tick - 20, { actor_id: "one", target_id: "two", detail: "knockdown" })], players, 30, 0); + director.replay(30, { kind: "referee_down", actor_id: "two", tick }); + for (let at = 30; at < 36; at += 0.25) { + const text = director.current(at)?.line.text; + if (text !== undefined && /Watch/u.test(text)) lines.add(text); + } + } + expect([...lines].some((text) => text.includes("Crimson Geometry"))).toBe(true); + expect([...lines].some((text) => text.includes("Azure Vector"))).toBe(false); + }); + + it("notices nobody is left to break a clinch", () => { + expect(said([event("clinch_break", 40, { actor_id: "one", target_id: "two", detail: "", amount: 0 })]).some((text) => /break|part/u.test(text))).toBe(true); + }); +}); + +describe("the referee's death on screen, from the punch to the next bout", () => { + type Stub = Record & { refereePosition: THREE.Vector3 }; + const updateReferee = (FightRenderer.prototype as unknown as { updateReferee: (dt: number, time: number, snapshot: EngineSnapshot | null, tick: number) => void }).updateReferee; + const placed = (graph = new BoxingGraph(referee(), mapping, { referee: true, knockout: true }), a = -100, b = 100): Stub => Object.assign(Object.create(FightRenderer.prototype) as Record, { + referee: graph, mapping, tmpA: new THREE.Vector3(mapping.x(a), 0, 0), tmpB: new THREE.Vector3(mapping.x(b), 0, 0), + refereePosition: new THREE.Vector3(0, 0, -2), refereeAway: new THREE.Vector3(), refereeVelocity: new THREE.Vector3(), refereeYaw: 0, + replay: null, ceremony: null, stoppageWinner: -1, stoppageRaiseAt: Number.POSITIVE_INFINITY, frameSeconds: 0, blobShadows: [], graphs: null, + effects: { severedHeadPosition: () => false, gushing: () => false, pool: vi.fn() }, closeUpTarget: new THREE.Vector3(), bodyPoint: new THREE.Vector3(), + pendingRefereeEvents: [], refereeReplayAt: null, settings: () => ({ reducedMotion: false, blood: "full" }), + refereeHead: new THREE.Vector3(), refereePoolAccumulator: 0, refereePoolCount: 0, lastKnockdown: null, + }); + /** Runs `frames` frames of `state` and returns the longest single-frame step he took. */ + const run = (stub: Stub, state: EngineSnapshot, frames: number, dt = 1 / 60, from = 0): number => { + let longest = 0; + for (let frame = 0; frame < frames; frame += 1) { + const before = stub.refereePosition.clone(); + updateReferee.call(stub, dt, (from + frame) * dt, state, state.tick); + longest = Math.max(longest, before.distanceTo(stub.refereePosition)); + } + return longest; + }; + const down = (tick: number) => ({ event_id: 1, tick, kind: "referee_down", actor_id: "one", target_id: REFEREE_ID, amount: 0, detail: "", blood: 0, direction: 0, action_id: "x" }); + + it("replays his fall inside the engine's pause, with half a second to spare for the playback delay and a stalled frame", () => { + const history = Array.from({ length: 120 }, (_, index) => ({ ...snapshot(40 + index) })); + const plan = planKnockoutReplay(history, down(100), 30, REFEREE_REPLAY.speed, REFEREE_REPLAY.before, REFEREE_REPLAY.after)!; + expect(REFEREE_REPLAY_DELAY_SECONDS + plan.durationSeconds).toBeLessThanOrEqual(150 / 30 - 0.5); + }); + + it("starts the replay only while the bout still waits for it", () => { + const history = Array.from({ length: 200 }, (_, index) => ({ ...snapshot(40 + index) })); + const attempt = (live: EngineSnapshot): ReturnType => { + const startReplay = vi.fn(); + const stub = Object.assign(Object.create(FightRenderer.prototype) as Record, { + pendingContacts: [], replay: null, pendingRefereeEvents: [], refereeReplayAt: { at: 5, impact: down(100) }, frameSeconds: 9, history, + simulation: { tick_rate: 30 }, settings: () => ({ reducedMotion: false, blood: "full" }), startReplay, buffer: { latest: () => live }, + }); + (FightRenderer.prototype as unknown as { fireContacts(this: unknown, tick: number): void }).fireContacts.call(stub, live.tick); + expect(stub.refereeReplayAt).toBeNull(); + return startReplay; + }; + expect(attempt({ ...snapshot(124), phase: "referee_down", phase_ticks_remaining: 126 })).toHaveBeenCalledOnce(); + // A frame stall that leaves less of the pause than the whole replay costs only its closing hold. + expect(attempt({ ...snapshot(150), phase: "referee_down", phase_ticks_remaining: 100 })).toHaveBeenCalledOnce(); + // Long resumed (a hidden tab, a reconnect), or too little of the pause left: no replay over the fight. + expect(attempt({ ...snapshot(239), phase: "fight" })).not.toHaveBeenCalled(); + expect(attempt({ ...snapshot(230), phase: "referee_down", phase_ticks_remaining: 20 })).not.toHaveBeenCalled(); + }); + + it("stands in the killing punch's path in his replay until it lands, through the tick the recording says he died", () => { + const stub = placed(undefined, -130, 150); + const fightAt = (tick: number): EngineSnapshot => ({ ...snapshot(tick), fighters: [fighter("one", -130), fighter("two", 150)], referee: engineReferee(-55, 8) }); + run(stub, fightAt(80), 60); + expect(stub.refereePosition.x).toBeCloseTo(mapping.x(-55), 2); + const buffer = new SnapshotBuffer(8, 30); + buffer.push(fightAt(82)); + buffer.push(fightAt(83)); + buffer.push({ ...fightAt(84), phase: "referee_down", referee: { ...engineReferee(-55, 8), alive: false } }); + const sampled = buffer.sample(83.4)!; + expect(sampled.referee.alive).toBe(false); + stub.replay = { plan: { impact: { kind: "referee_down" } }, impactFired: false }; + expect(run(stub, sampled, 1, 0.5 / 60, 60)).toBeLessThan(0.01); + expect(stub.refereePosition.x).toBeCloseTo(mapping.x(-55), 2); + }); + + it("never jumps or dashes when the fight stops or starts again: at a bell, a count or a foul", () => { + for (const phase of ["rest", "knockdown", "foul_recovery"] as const) { + const stub = placed(); + const fight = { ...snapshot(80), referee: engineReferee(0, 62) }; + run(stub, fight, 60); + const fighters = phase === "knockdown" ? [fighter("one", -100), { ...fighter("two", 100), is_downed: true }] : fight.fighters; + expect(run(stub, { ...fight, tick: 81, phase, fighters: fighters as EngineSnapshot["fighters"] }, 30)).toBeLessThan(3 / 60); + } + const stub = placed(); + run(stub, { ...snapshot(80), phase: "rest", referee: engineReferee(0, 0) }, 60 * 4); + expect(run(stub, { ...snapshot(90), referee: engineReferee(0, 62) }, 60)).toBeLessThan(3 / 60); + // And he does get back to where the engine stands him. + expect(stub.refereePosition.distanceTo(new THREE.Vector3(mapping.x(0), 0, mapping.z(62)))).toBeLessThan(0.02); + }); + + it("is lying where the engine has him for a spectator who joins after he died", () => { + const graph = new BoxingGraph(referee(), mapping, { referee: true, knockout: true }); + const stub = placed(graph); + // Already lying there on the first frame he is drawn, not falling in front of the newcomer. + run(stub, { ...snapshot(4000), referee: { ...engineReferee(30, 62), alive: false } }, 1); + expect(graph.isDown).toBe(true); + graph.boxer.root.updateMatrixWorld(true); + expect(graph.boxer.rig.bones.head.getWorldPosition(new THREE.Vector3()).y).toBeLessThan(0.6); + expect(stub.refereePosition.x).toBeCloseTo(mapping.x(30), 2); + expect(stub.refereePosition.z).toBeCloseTo(mapping.z(62), 2); + }); + + it("follows the recording exactly in his replay, cutting to wherever it has him, and lies still once the punch has landed", () => { + const stub = placed(); + run(stub, { ...snapshot(80), referee: engineReferee(0, 62) }, 30); + // The replay cuts to a moment the recording has him well away from where he lay. + stub.replay = { plan: { impact: { kind: "referee_down" } }, impactFired: false }; + run(stub, { ...snapshot(60), referee: engineReferee(-250, -200) }, 1); + expect(stub.refereePosition.x).toBeCloseTo(mapping.x(-250), 2); + expect(stub.refereePosition.z).toBeCloseTo(mapping.z(-200), 2); + // Once the punch has landed he goes where the fall takes him, not where the recording drifts, and his pool spreads. + (stub.replay as { impactFired: boolean }).impactFired = true; + const lying = stub.refereePosition.clone(); + const pool = (stub.effects as { pool: ReturnType }).pool; + run(stub, { ...snapshot(70), phase: "referee_down", referee: { ...engineReferee(150, 100), alive: false } }, 60); + expect(stub.refereePosition.distanceTo(lying)).toBeLessThan(1e-9); + expect(pool).toHaveBeenCalled(); + }); + + it("is laid down where the engine has him after a reconnect that missed his fall", () => { + const graph = new BoxingGraph(referee(), mapping, { referee: true, knockout: true }); + const stub = placed(graph); + run(stub, { ...snapshot(80), referee: engineReferee(0, 62) }, 30); + expect(graph.isDown).toBe(false); + run(stub, { ...snapshot(400), referee: { ...engineReferee(-120, -80), alive: false } }, 1); + expect(graph.isDown).toBe(true); + expect(stub.refereePosition.x).toBeCloseTo(mapping.x(-120), 2); + expect(stub.refereePosition.z).toBeCloseTo(mapping.z(-80), 2); + graph.boxer.root.updateMatrixWorld(true); + expect(graph.boxer.rig.bones.head.getWorldPosition(new THREE.Vector3()).y).toBeLessThan(0.6); + }); + + it("keeps his pool through the replay of his death rather than starting another", () => { + const stub = placed(); + const pool = (stub.effects as { pool: ReturnType }).pool; + const dead = { ...snapshot(90), phase: "referee_down" as const, referee: { ...engineReferee(30, 62), alive: false } }; + run(stub, dead, 60); + const live = pool.mock.calls.map((call) => call[2] as number); + stub.replay = { plan: { impact: { kind: "referee_down" } }, impactFired: false }; + run(stub, { ...snapshot(70), referee: engineReferee(30, 62) }, 30); + stub.replay = null; + pool.mockClear(); + run(stub, dead, 10); + expect(pool.mock.calls[0]![2] as number).toBeGreaterThanOrEqual(live.at(-1)!); + }); + + it("stays where he lies after a stoppage, raising nobody's arm, and a ceremony goes on without him", () => { + const graph = new BoxingGraph(referee(), mapping, { referee: true, knockout: true }); + const raise = vi.spyOn(graph, "raise"); + const stub = placed(graph); + graph.knockOut(); + const dead = { ...snapshot(4000), phase: "complete" as const, referee: { ...engineReferee(30, 62), alive: false } }; + run(stub, dead, 30); + const lying = stub.refereePosition.clone(); + Object.assign(stub, { stoppageWinner: 0, stoppageRaiseAt: 0, frameSeconds: 10, stoppageSpot: null, raiseSpot: () => ({ x: 0.6, z: 0 }) }); + run(stub, dead, 60 * 4); + expect(lying.distanceTo(stub.refereePosition)).toBeLessThan(1e-9); + expect(raise).not.toHaveBeenCalled(); + const ceremony = { winnerSeat: 0, positions: [{ x: -102, y: -16 }, { x: 102, y: -16 }], marks: [0, 1], refereeArrived: false, arrivedAt: null, announced: false }; + Object.assign(stub, { stoppageWinner: -1, ceremony }); + run(stub, dead, 5); + expect(ceremony.refereeArrived).toBe(true); + expect(lying.distanceTo(stub.refereePosition)).toBeLessThan(1e-9); + }); + + it("stands up again for the next bout", () => { + const graph = new BoxingGraph(referee(), mapping, { referee: true, knockout: true }); + const stub = placed(graph); + run(stub, { ...snapshot(4000), referee: { ...engineReferee(30, 62), alive: false } }, 30); + expect(graph.isDown).toBe(true); + run(stub, { ...snapshot(10), referee: engineReferee(0, 62) }, 5); + expect(graph.isDown).toBe(false); + }); + + it("staggers where he stands while he reels from a punch", () => { + const reeling = new BoxingGraph(referee(), mapping, { referee: true }); + const steady = new BoxingGraph(referee(), mapping, { referee: true }); + const self = { ...fighter("referee"), x: 0, y: 160, facing_x: 0, facing_y: -1000 }; + const focus = { ...fighter("focus"), x: 0, y: -140 }; + for (let frame = 0; frame < 40; frame += 1) { + reeling.update({ ...self, stunned_ticks: 12 }, focus, 1 / 60, frame / 60, false, "full", frame / 2); + steady.update(self, focus, 1 / 60, frame / 60, false, "full", frame / 2); + } + for (const graph of [reeling, steady]) graph.boxer.root.updateMatrixWorld(true); + expect(worldPosition(reeling.boxer.rig.bones.head, new THREE.Vector3()).distanceTo(worldPosition(steady.boxer.rig.bones.head, new THREE.Vector3()))).toBeGreaterThan(0.04); + }); + + it("puts his blob shadow under his body once he is down", () => { + const graph = new BoxingGraph(referee(), mapping, { referee: true, knockout: true }); + const stub = placed(graph); + run(stub, { ...snapshot(4000), referee: { ...engineReferee(30, 62), alive: false } }, 30); + const body = graph.fallBody; + expect(body).not.toBeNull(); + const shadows = [new THREE.Object3D(), new THREE.Object3D(), new THREE.Object3D()]; + Object.assign(stub, { blobShadows: shadows, buffer: { latest: () => null }, flashKnockout: null, refereePosition: new THREE.Vector3(2, 0, 2) }); + (FightRenderer.prototype as unknown as { updateBlobShadows(this: unknown): void }).updateBlobShadows.call(stub); + const centre = body!.centre(new THREE.Vector3()); + expect(shadows[2]!.position.x).toBeCloseTo(centre.x, 5); + expect(shadows[2]!.position.z).toBeCloseTo(centre.z, 5); + expect(shadows[2]!.scale.x).toBeGreaterThan(1.5); + }); + + it("holds the round clock through his five seconds, as it does through a count", () => { + const clock = new RoundClock(); + expect(clock.ticks({ ...snapshot(100), phase: "fight", phase_ticks_remaining: 4000 })).toBe(4000); + expect(clock.ticks({ ...snapshot(102), phase: "referee_down", phase_ticks_remaining: 150 })).toBe(4000); + }); +}); diff --git a/web/hands/src/render/render.test.ts b/web/hands/src/render/render.test.ts index e3de4edb..50929120 100644 --- a/web/hands/src/render/render.test.ts +++ b/web/hands/src/render/render.test.ts @@ -4,7 +4,7 @@ import { FIGHTER_RADIUS, punchTiming, REST_CORNER_OFFSET, RING_HALF_WIDTH, total import { buildArena } from "./arena"; import { CameraDirector, ceremonyShot, cornerFrame, cornerPoint, cornerShot, cornerShotProgress, CUTMAN_WORK_DEGREES, CUTMAN_WORK_DISTANCE } from "./camera"; import { captionSlot, drawCaption } from "./caption"; -import { bloodPatternFor, Effects3D, NECK_FOUNTAIN_SECONDS } from "./effects"; +import { bloodPatternFor, DESKTOP_GORE, Effects3D, NECK_FOUNTAIN_SECONDS } from "./effects"; import { CLOCK_PORTRAIT_RADIUS, cardRows, decisionLabel, drawHud, finalRevealDelay as revealDelay, hudScale, lagWarning, plateDetails, REFEREE_REVEAL_DELAY_SECONDS, FINAL_REVEAL_DELAY_SECONDS, finalRevealDelay, fitFontSize, HUD_MAX_GUARD, HUD_MAX_POISE, PLATE_PORTRAIT_RADIUS, RESULT_CARD_FOOTER, resultCard, resultCardLayout, RoundClock, RoundStatsTracker, scoreTotal, topPanelOffset } from "./hud"; import { FightRenderer } from "./renderer"; import { buildRing, disposeRing, nearRopeOpacityFor, ROPE_FLEX_GLSL, ROPE_GIVE_GLSL, ropePress, ROPE_BACK, ROPE_MAX_GIVE, ropeExcess } from "./ring"; @@ -175,10 +175,10 @@ describe("effects", () => { const full = new Effects3D(new THREE.Scene()); full.addEvent(severeHit(1), origin, false); - expect(full.liveBloodParticles).toBe(140); - expect(full.liveMist).toBe(18); - expect(full.liveGibs).toBe(8); - expect(full.canvasStains).toBe(8); + expect(full.liveBloodParticles).toBe(800); + expect(full.liveMist).toBe(36); + expect(full.liveGibs).toBe(20); + expect(full.canvasStains).toBe(24); full.dispose(); const reduced = new Effects3D(new THREE.Scene()); @@ -214,7 +214,7 @@ describe("effects", () => { effects.drip(right, 1, false, 1); effects.update(1 / 60); } - expect(effects.liveBloodParticles).toBe(2); + expect(effects.liveBloodParticles).toBe(6); const positions = effects.dropletBuffers.position; const liveX = Array.from({ length: positions.count }, (_unused, index) => positions.getX(index)) .filter((_x, index) => positions.getY(index) > -10); @@ -252,7 +252,7 @@ describe("effects", () => { effects.decapitate(0, origin, new THREE.Quaternion(), 1, 10); const sweat = effects.liveParticles - effects.liveBloodParticles; expect(sweat).toBeGreaterThan(0); - expect(effects.liveGibs).toBe(32); + expect(effects.liveGibs).toBe(80); expect(effects.activeHeads).toBe(1); expect(effects.activeStumps).toBe(1); expect(effects.canvasStains).toBeGreaterThan(0); @@ -287,15 +287,15 @@ describe("effects", () => { ) as THREE.Mesh; expect(visibleHead.material.color.getHex()).toBe(0xb0703f); expect(effects.activeStumps).toBe(1); - expect(effects.liveGibs).toBe(24); - expect(effects.liveBloodParticles).toBe(120); + expect(effects.liveGibs).toBe(60); + expect(effects.liveBloodParticles).toBe(900); expect(scene.children).toHaveLength(childCount); effects.decapitate(0, position, quaternion, 1, 42); expect(effects.activeHeads).toBe(1); expect(effects.activeStumps).toBe(1); - expect(effects.liveGibs).toBe(24); - expect(effects.liveBloodParticles).toBe(120); + expect(effects.liveGibs).toBe(60); + expect(effects.liveBloodParticles).toBe(900); effects.decapitate(1, position, quaternion, -1, 43, 0x6e4128); expect(effects.activeHeads).toBe(2); @@ -304,7 +304,7 @@ describe("effects", () => { .map((child) => ((child as THREE.Mesh).material as THREE.MeshStandardMaterial).color.getHex()); expect(visibleHeadColors).toEqual([0xb0703f, 0x6e4128]); expect(effects.activeStumps).toBe(2); - expect(effects.liveGibs).toBe(48); + expect(effects.liveGibs).toBe(120); expect(scene.children).toHaveLength(childCount); effects.restoreFighter(0); @@ -336,17 +336,17 @@ describe("effects", () => { effects.dismemberHand(0, "left", position, quaternion, 1, 60, 0x1d4ed8); expect(effects.activeHands).toBe(1); expect(effects.activeStumps).toBe(1); - expect(effects.liveGibs).toBe(16); - expect(effects.liveBloodParticles).toBe(80); + expect(effects.liveGibs).toBe(40); + expect(effects.liveBloodParticles).toBe(600); expect(scene.children).toHaveLength(childCount); effects.dismemberHand(0, "left", position, quaternion, 1, 60, 0x1d4ed8); expect(effects.activeHands).toBe(1); - expect(effects.liveGibs).toBe(16); + expect(effects.liveGibs).toBe(40); effects.dismemberHand(0, "right", position, quaternion, -1, 61, 0x1d4ed8); expect(effects.activeHands).toBe(2); expect(effects.activeStumps).toBe(2); - expect(effects.liveGibs).toBe(32); + expect(effects.liveGibs).toBe(80); effects.anchorHandStump(0, "left", new THREE.Vector3(0.1, 1.2, 0), quaternion); effects.restoreFighter(0); @@ -374,7 +374,7 @@ describe("effects", () => { for (let i = 0; i < 360; i += 1) effects.update(1 / 60); // The flesh lies where it fell for the rest of the bout; the blood in the air has all come down. - expect(effects.liveGibs).toBe(24); + expect(effects.liveGibs).toBe(60); expect(effects.liveBloodParticles).toBe(0); expect(effects.liveMist).toBe(0); expect(effects.activeHeads).toBe(1); @@ -454,7 +454,7 @@ describe("effects", () => { expect(live).toBe(effects.liveParticles); expect(matrices.updateRanges).toEqual([{ start: 0, count: live * 16 }]); const positions = effects.dropletBuffers.position; - for (let index = 0; index < 900; index += 1) expect(positions.getY(index) > -10).toBe(index < live); + for (let index = 0; index < DESKTOP_GORE.droplets; index += 1) expect(positions.getY(index) > -10).toBe(index < live); // Once the blood has landed nothing is drawn or uploaded. for (let frame = 0; frame < 180; frame += 1) effects.update(1 / 60); expect(effects.liveParticles).toBe(0); @@ -465,11 +465,45 @@ describe("effects", () => { expect(matrices.version).toBe(version); // A full pool keeps reusing its slots. for (let eventId = 0; eventId < 12; eventId += 1) effects.addEvent(severeHit(100 + eventId), new THREE.Vector3(), false); - expect(mesh.count).toBe(900); - expect(effects.liveParticles).toBe(900); + expect(mesh.count).toBe(DESKTOP_GORE.droplets); + expect(effects.liveParticles).toBe(DESKTOP_GORE.droplets); effects.dispose(); }); + it("gives up the drop that has flown longest when the pool is full, never one just thrown", () => { + const effects = new Effects3D(new THREE.Scene(), 256, { ...DESKTOP_GORE, droplets: 8 }); + const spawn = (x: number, life: number): void => (effects as unknown as { spawnDroplet(x: number, y: number, z: number, vx: number, vy: number, vz: number, color: { r: number; g: number; b: number }, life: number, blood: boolean): void }).spawnDroplet(x, 10, 0, 0, 0, 0, { r: 0.3, g: 0.01, b: 0.01 }, life, true); + const flying = (): number[] => { + const positions = effects.dropletBuffers.position; + return Array.from({ length: positions.count }, (_, index) => index).filter((index) => positions.getY(index) > -10).map((index) => positions.getX(index)).sort((a, b) => a - b); + }; + const run = (seconds: number): void => { + for (let elapsed = 0; elapsed < seconds - 1e-9; elapsed += 1 / 60) effects.update(1 / 60); + }; + // A short-lived drop leaves the first slot, which the young drop at the back moves into, ahead of three old ones. + spawn(-1, 0.4); + for (const x of [1, 2, 3]) spawn(x, 5); + run(0.2); + spawn(10, 5); + run(0.25); + for (const x of [11, 12, 13, 14]) spawn(x, 5); + expect(flying()).toEqual([1, 2, 3, 10, 11, 12, 13, 14]); + spawn(20, 5); + expect(flying()).toEqual([2, 3, 10, 11, 12, 13, 14, 20]); + for (const x of [21, 22]) spawn(x, 5); + expect(flying()).toEqual([10, 11, 12, 13, 14, 20, 21, 22]); + effects.dispose(); + // A burst bigger than a full pool's batch of oldest drops gives up only old ones, however many it takes. + const big = new Effects3D(new THREE.Scene(), 256, { ...DESKTOP_GORE, droplets: 150 }); + const spawnBig = (x: number): void => (big as unknown as { spawnDroplet(x: number, y: number, z: number, vx: number, vy: number, vz: number, color: { r: number; g: number; b: number }, life: number, blood: boolean): void }).spawnDroplet(x, 10, 0, 0, 0, 0, { r: 0.3, g: 0.01, b: 0.01 }, 5, true); + for (let drop = 0; drop < 150; drop += 1) spawnBig(-1); + big.update(1 / 60); + for (let drop = 0; drop < 150; drop += 1) spawnBig(drop); + const xs = Array.from({ length: 150 }, (_, index) => big.dropletBuffers.position.getX(index)).sort((a, b) => a - b); + expect(xs).toEqual(Array.from({ length: 150 }, (_, index) => index)); + big.dispose(); + }); + it("sprays blood, teeth and severed parts along the line the punch travelled", () => { const towardsAway = { x: 0, z: -1 }; /** Mean horizontal position of the airborne blood droplets, or of the airborne gibs. */ @@ -553,11 +587,11 @@ describe("effects", () => { effects.restoreFighter(fighterIndex); effects.decapitate(fighterIndex, position, quaternion, fighterIndex === 0 ? 1 : -1, 2000 + eventId); } - expect(effects.liveParticles).toBeLessThanOrEqual(900); - expect(effects.liveBloodParticles).toBeLessThanOrEqual(900); - expect(effects.liveMist).toBeLessThanOrEqual(90); + expect(effects.liveParticles).toBeLessThanOrEqual(DESKTOP_GORE.droplets); + expect(effects.liveBloodParticles).toBeLessThanOrEqual(DESKTOP_GORE.droplets); + expect(effects.liveMist).toBeLessThanOrEqual(DESKTOP_GORE.mist); expect(scene.children.length).toBe(children); - expect(effects.liveGibs).toBe(96); + expect(effects.liveGibs).toBe(DESKTOP_GORE.gibs); expect(effects.activeHeads).toBeLessThanOrEqual(2); expect(effects.activeStumps).toBeLessThanOrEqual(2); @@ -969,7 +1003,7 @@ describe("round stats", () => { hudCanvas: { getBoundingClientRect: () => ({ width: 1280, height: 720 }), width: 0, height: 0, getContext: () => ctx }, hudViewport: { width: 0, height: 0 }, viewerHitFlash: 0, settings: () => ({ reducedMotion: false }), players, viewerId: "one", final: null, frameSeconds: 0, finalRevealAt: 0, reconnectMs: 0, simulation: { tick_rate: 30 }, roundStats: new RoundStatsTracker(), replay: null, - roundCalloutUntil: 0, roundCalloutRound: 0, eventCallout: null, roundClock: { ticks: () => null }, avatars: { get: () => null }, drawCaption: () => undefined, + roundCalloutUntil: 0, roundCalloutRound: 0, eventCallout: null, roundClock: { ticks: () => null }, avatars: { get: () => null }, drawCaption: () => undefined, effects: { drawLens: () => undefined }, }) as unknown as { setInputLatency(milliseconds: number | null): void; drawHudOverlay(snapshot: EngineSnapshot): void }; const shownAt = (latency: number): string | undefined => { texts.length = 0; @@ -1107,10 +1141,9 @@ describe("the broadcast HUD after the QA pass", () => { expect(texts).not.toContain("COMPLETE"); }); - it("gives the referee a moment before a disqualification or a doctor's stoppage is shown", () => { + it("gives the referee a moment before a disqualification is shown", () => { const final = (method: string) => ({ version: PROTOCOL_VERSION, type: "final" as const, match_id: "m", winner_id: "one", method: method as "decision", round: 1, scorecards: [], ratings: {} }); expect(revealDelay(final("disqualification"))).toBe(REFEREE_REVEAL_DELAY_SECONDS); - expect(revealDelay(final("doctor_stoppage"))).toBe(REFEREE_REVEAL_DELAY_SECONDS); expect(revealDelay(final("decision"))).toBe(0); }); @@ -1450,6 +1483,24 @@ describe("the guard bar", () => { expect(drawn(width, height, [GUARD_BLOCK_MINIMUM, 650]).strokes.filter((style) => style === red)).toHaveLength(0); } }); + + it("says a guard is broken and keeps it spent until it is back past the rearm mark", async () => { + const { GUARD_REARM } = await import("../manifest"); + const players = Object.fromEntries(publicPlayers.map((player) => [player.id, player])); + const labels: string[] = []; + let stroked = 0; + const ctx = Object.assign(mockHudContext([]), { fillText: (text: string) => labels.push(text), stroke: () => { stroked += 1; } }); + const broken = { ...fighter("one", -100), guard: GUARD_REARM - 1, guard_broken: true }; + drawHud(ctx, 1280, 720, { ...snapshot(), fighters: [broken, fighter("two", 100)] as const }, players, "one", null, 0, 30); + expect(labels).toContain("GUARD BROKEN"); + const spent = stroked; + labels.length = 0; + stroked = 0; + drawHud(ctx, 1280, 720, { ...snapshot(), fighters: [{ ...broken, guard_broken: false }, fighter("two", 100)] as const }, players, "one", null, 0, 30); + expect(labels).not.toContain("GUARD BROKEN"); + // The same guard, no longer broken, is past the block line and draws no spent hatching. + expect(stroked).toBeLessThan(spent); + }); }); describe("the line under a fighter's name", () => { diff --git a/web/hands/src/render/renderer-frame.test.ts b/web/hands/src/render/renderer-frame.test.ts index 5a030c37..545741b5 100644 --- a/web/hands/src/render/renderer-frame.test.ts +++ b/web/hands/src/render/renderer-frame.test.ts @@ -6,6 +6,7 @@ import { CameraDirector, ceremonyShot, cornerPoint, FIGHTER_CAM_FOV_SCALE, Fight import { RoundStatsTracker } from "./hud"; import { lookFor } from "./looks"; import { FightRenderer, resultCardTop } from "./renderer"; +import { SnapshotBuffer } from "../interpolation"; import { buildRing, disposeRing } from "./ring"; import { RockedVision } from "./rocked"; import { worldMapping } from "./world"; @@ -26,8 +27,10 @@ function graph() { setResting: vi.fn(), setCountdown: vi.fn(), setObstacle: vi.fn(), + setRefereeHead: vi.fn(), stayDown: vi.fn(), update: vi.fn(), + resetTransient: vi.fn(), fallBody: null, stoolVisible: false, }; @@ -90,7 +93,8 @@ function frame(state: EngineSnapshot, overrides: Record = {}) { tmpCamera: new THREE.Vector3(), downedPoolAccumulators: [0, 0], downedPoolCounts: [0, 0], - effects: { drip: vi.fn(), stopDrip: vi.fn(), pool: vi.fn(), update: vi.fn(), shakeAmount: 0, setViewDistance: vi.fn() }, + effects: { drip: vi.fn(), stopDrip: vi.fn(), pool: vi.fn(), update: vi.fn(), shakeAmount: 0, setViewDistance: vi.fn(), gushing: () => false }, + powerShake: 0, updateIdleFighters: vi.fn(), updateTrails: vi.fn(), updateReferee: vi.fn(), @@ -125,6 +129,9 @@ function frame(state: EngineSnapshot, overrides: Record = {}) { pixelRatioCap: 2, basePixelRatio: 2, pendingFinish: null, + pendingRefereeEvents: [], + refereeHead: new THREE.Vector3(), + refereeReplayAt: null, ...overrides, }); const draw = (FightRenderer.prototype as unknown as { draw(this: unknown, time: number, manual: boolean, render: boolean): void }).draw; @@ -149,7 +156,7 @@ describe("a rendered frame", () => { const opponentHead = new THREE.Vector3(0.67, 1.6, 0); const moved = (camera: Settings["camera"]): { quiet: number; contact: number } => { const state = fighting({ x: -110 }, { x: 110 }); - const effects = { drip: vi.fn(), stopDrip: vi.fn(), pool: vi.fn(), update: vi.fn(), shakeAmount: 0, setViewDistance: vi.fn(), addEvent: vi.fn(), spawnTeeth: vi.fn(), ejectMouthpiece: vi.fn() }; + const effects = { drip: vi.fn(), stopDrip: vi.fn(), pool: vi.fn(), update: vi.fn(), shakeAmount: 0, setViewDistance: vi.fn(), addEvent: vi.fn(), spawnTeeth: vi.fn(), ejectMouthpiece: vi.fn(), gush: vi.fn(), gushing: () => false }; const harness = frame(state, { fireContacts, effects, @@ -159,6 +166,8 @@ describe("a rendered frame", () => { presentFightEvent: vi.fn(), applyArcadeInjury: vi.fn(), headWorldPose: () => ({ position: opponentHead, quaternion: new THREE.Quaternion() }), + woundPoint: new THREE.Vector3(), + woundAxis: new THREE.Vector3(), gearColor: () => 0xffffff, flashKnockout: null, onContact: null, @@ -184,6 +193,25 @@ describe("a rendered frame", () => { } }); + it("tells of the player's own punch the frame it starts on screen, once, whatever the other fighter throws", () => { + const heard: [string, boolean, string][] = []; + const harness = frame(fighting(), { onOwnPunch: (punchClass: string, power: boolean, id: string) => heard.push([punchClass, power, id]), soundedPress: null }); + const [own, other] = harness.graphs as unknown as Record[]; + Object.assign(own!, { ownPressId: null, punchKind: { punchClass: "straight", power: true } }); + Object.assign(other!, { ownPressId: "theirs", punchKind: { punchClass: "jab", power: false } }); + harness.run(2); + expect(heard).toEqual([]); + own!.ownPressId = "c4"; + harness.run(3); + expect(heard).toEqual([["straight", true, "c4"]]); + own!.ownPressId = null; + harness.run(1); + own!.ownPressId = "c5"; + own!.punchKind = { punchClass: "jab", power: false }; + harness.run(1); + expect(heard).toEqual([["straight", true, "c4"], ["jab", false, "c5"]]); + }); + it("dresses each fighter in the look of the player in that seat", () => { const { run, graphs } = frame(fighting()); run(3); @@ -362,6 +390,32 @@ describe("a rendered frame", () => { } }); + it("hands both fighters the referee's head as drawn, for a punch that finds him to land on, before they are posed", () => { + const head = new THREE.Object3D(); + head.position.set(0.3, 1.62, -0.8); + const { renderer, run } = frame(fighting(), { referee: { setRefereeCount: vi.fn(), aimBreak: vi.fn(), update: vi.fn(), boxer: { root: new THREE.Object3D(), rig: { bones: { head } } } } }); + run(); + for (const shown of renderer.graphs as ReturnType[]) { + const [aim] = shown.setRefereeHead.mock.calls.at(-1)! as [THREE.Vector3]; + expect(aim.toArray()).toEqual([0.3, 1.62, -0.8]); + expect(shown.setRefereeHead.mock.invocationCallOrder.at(-1)!).toBeLessThan(shown.update.mock.invocationCallOrder.at(-1)!); + } + }); + + it("ends the replay of the referee's fall the moment the bout resumes, never playing it over the fight", () => { + const replayAfter = (phase: EngineSnapshot["phase"]): unknown => { + const buffer = new SnapshotBuffer(8, 30); + for (let tick = 20; tick <= 26; tick += 1) buffer.push(fighting({}, {}, { tick })); + const plan = { impact: { kind: "referee_down", tick: 40 }, durationSeconds: 10, fromTick: 20, toTick: 60, speed: 0.5, snapshots: [] }; + const referee = { boxer: { root: new THREE.Object3D(), rig: { bones: { head: new THREE.Object3D() } } }, fallBody: null, isDown: false, setRefereeCount: vi.fn(), aimBreak: vi.fn(), update: vi.fn(), resetTransient: vi.fn() }; + const { renderer, run } = frame(fighting({}, {}, { phase }), { referee, replayCameraPosition: new THREE.Vector3(), replayLookAt: new THREE.Vector3(), replay: { plan, buffer, startedAt: 1, impactFired: false, side: null } }); + run(); + return renderer.replay; + }; + expect(replayAfter("fight")).toBeNull(); + expect(replayAfter("referee_down")).not.toBeNull(); + }); + it("spreads a pool of blood under a bleeding fighter who is down", () => { const bleeding = { ...fighter("two").trauma, bleeding: 500, left_cut: 300 }; const { renderer, run } = frame(fighting({}, { is_downed: true, trauma: bleeding }, { phase: "knockdown" })); @@ -373,7 +427,7 @@ describe("a rendered frame", () => { const final: FinalMessage = { version: PROTOCOL_VERSION, type: "final", match_id: "m", winner_id: "one", method: "decision", round: 3, scorecards: [], ratings: {} }; const state = fighting({}, {}, { phase: "complete" }); const ceremony = { winnerSeat: 0, positions: [{ x: -102, y: -16 }, { x: 102, y: -16 }], marks: [0, 1], refereeArrived: true, arrivedAt: 0.5, announced: true }; - const { renderer, run, camera } = frame(state, { ceremony, final, settings: () => ({ reducedMotion: true, blood: "full", camera: "broadcast" }), referee: { raise: vi.fn() }, ceremonyWrists: [new THREE.Vector3(), new THREE.Vector3()], commentary: { verdict: vi.fn() } }); + const { renderer, run, camera } = frame(state, { ceremony, final, settings: () => ({ reducedMotion: true, blood: "full", camera: "broadcast" }), referee: { raise: vi.fn(), boxer: { rig: { bones: { head: new THREE.Object3D() } } } }, ceremonyWrists: [new THREE.Vector3(), new THREE.Vector3()], commentary: { verdict: vi.fn() } }); run(); const top = resultCardTop(final, 1280, 720, state.fighters, {}, new RoundStatsTracker(), "one"); const shot = ceremonyShot(16 / 9, 36, (720 - top) / 720); @@ -395,7 +449,7 @@ describe("around the fight", () => { hudCanvas: { getBoundingClientRect: () => ({ width: 1280, height: 720 }), width: 0, height: 0, getContext: () => mockHudContext([]) }, hudViewport: { width: 0, height: 0 }, viewerHitFlash: 0, settings: () => ({ reducedMotion: false }), players: {}, viewerId: "one", final: null, frameSeconds: 0, finalRevealAt: 0, reconnectMs: 0, simulation: SIMULATION, roundStats: new RoundStatsTracker(), replay: null, inputLatencyMs: null, - roundCalloutUntil: 0, roundCalloutRound: 0, eventCallout: null, roundClock: { ticks: () => null }, avatars: { get: () => null }, drawCaption, + roundCalloutUntil: 0, roundCalloutRound: 0, eventCallout: null, roundClock: { ticks: () => null }, avatars: { get: () => null }, drawCaption, effects: { drawLens: vi.fn() }, }); method("drawHudOverlay").call(stub, snapshot()); expect(drawCaption).toHaveBeenCalledOnce(); @@ -429,6 +483,57 @@ describe("around the fight", () => { expect(waiting.injury).toBe("decapitation"); }); + it("spurts blood from the face of a man a solid punch lands on, but not with reduced motion", () => { + const gush = vi.fn(); + const hook = combat("hit", { event_id: 14, detail: "hook:head", amount: 80, blood: 50 }); + const head = { position: new THREE.Vector3(0.6, 1.5, 0.1), quaternion: new THREE.Quaternion() }; + const pending = () => [{ event: hook, presentationEvent: hook, presentImpact: true, reactAmount: hook.amount, contactTick: 40, recipientIndex: 1, puncherIndex: 0, injury: null }]; + const stub = prototypeOf({ + pendingContacts: pending(), + buffer: { latest: () => snapshot() }, presentFightEvent: vi.fn(), mapping: worldMapping(SIMULATION), contactPoint: new THREE.Vector3(), mouthPoint: new THREE.Vector3(), woundPoint: new THREE.Vector3(), woundAxis: new THREE.Vector3(), tmpA: new THREE.Vector3(), tmpB: new THREE.Vector3(), + effects: { addEvent: vi.fn(), spawnTeeth: vi.fn(), gush }, settings: () => ({ reducedMotion: false, blood: "full" }), arena: { excite: vi.fn() }, viewerId: null, + arcadeInjuries: [null, null], graphs: null, headWorldPose: () => ({ position: head.position.clone(), quaternion: head.quaternion }), knockOutMouthpiece: vi.fn(), onContact: null, viewerHitFlash: 0, + }); + method("fireContacts").call(stub, 50); + expect(gush).toHaveBeenCalledOnce(); + const [index, at, , seconds, rate, eventId] = gush.mock.calls[0]! as [number, THREE.Vector3, THREE.Vector3, number, number, number]; + expect([index, eventId]).toEqual([1, 14]); + expect(at.distanceTo(new THREE.Vector3(0.6, 1.43, 0.2))).toBeLessThan(1e-6); + expect(seconds).toBeCloseTo(1.6, 6); + expect(rate).toBeCloseTo(370, 6); + stub.pendingContacts = pending(); + stub.settings = () => ({ reducedMotion: true, blood: "full" }); + method("fireContacts").call(stub, 50); + expect(gush).toHaveBeenCalledOnce(); + }); + + it("pours blood from the mouth of a man going down, from his head as it is posed", () => { + const gush = vi.fn(); + const knockdown = combat("knockdown", { event_id: 12, detail: "hook:head", amount: 1, blood: 30 }); + const head = { position: new THREE.Vector3(0.6, 1.5, 0.1), quaternion: new THREE.Quaternion().setFromAxisAngle(new THREE.Vector3(0, 1, 0), Math.PI / 2) }; + const stub = prototypeOf({ + pendingContacts: [{ event: knockdown, presentationEvent: knockdown, presentImpact: true, reactAmount: null, contactTick: 40, recipientIndex: 1, puncherIndex: 0, injury: null }], + buffer: { latest: () => snapshot() }, presentFightEvent: vi.fn(), mapping: worldMapping(SIMULATION), contactPoint: new THREE.Vector3(), mouthPoint: new THREE.Vector3(), woundPoint: new THREE.Vector3(), woundAxis: new THREE.Vector3(), tmpA: new THREE.Vector3(), tmpB: new THREE.Vector3(), + effects: { addEvent: vi.fn(), spawnTeeth: vi.fn(), gush }, settings: () => ({ reducedMotion: false, blood: "full" }), arena: { excite: vi.fn() }, viewerId: null, + arcadeInjuries: [null, null], graphs: null, headWorldPose: () => ({ position: head.position.clone(), quaternion: head.quaternion }), knockOutMouthpiece: vi.fn(), onContact: null, viewerHitFlash: 0, + }); + method("fireContacts").call(stub, 50); + expect(gush).toHaveBeenCalledOnce(); + const [index, at, axis, seconds, rate, eventId] = gush.mock.calls[0]! as [number, THREE.Vector3, THREE.Vector3, number, number, number]; + expect([index, eventId]).toEqual([1, 12]); + // The face points along +x: the mouth is ten centimetres in front of the skull and seven below it. + expect(at.x).toBeCloseTo(0.7, 6); + expect(at.y).toBeCloseTo(1.43, 6); + expect(axis.x).toBeGreaterThan(0.9); + expect(seconds).toBeGreaterThan(1); + expect(rate).toBeGreaterThan(100); + // None with reduced motion. + stub.pendingContacts = [{ event: knockdown, presentationEvent: knockdown, presentImpact: true, reactAmount: null, contactTick: 40, recipientIndex: 1, puncherIndex: 0, injury: null }]; + stub.settings = () => ({ reducedMotion: true, blood: "full" }); + method("fireContacts").call(stub, 50); + expect(gush).toHaveBeenCalledOnce(); + }); + it("knocks the gum shield out with a big counter to the head", () => { const knockOutMouthpiece = vi.fn(); const event = combat("counter_hit", { event_id: 9, detail: "hook:head", amount: 120 }); @@ -574,11 +679,11 @@ describe("around the fight", () => { }; const stub = prototypeOf({ referee: { waveOff: vi.fn(), raise, setRefereeCount: vi.fn(), aimBreak: vi.fn(), update: vi.fn(), boxer: { root: new THREE.Object3D() } }, blobShadows: [], buffer: { latest: () => snapshot() }, headCacheValid: [false, false], - settings: () => ({ reducedMotion: false }), frameSeconds: 0, finishCloseUpIndex: -1, + settings: () => ({ reducedMotion: false, blood: "full" }), frameSeconds: 0, finishCloseUpIndex: -1, graphs: [{ celebrate: vi.fn(), fallBody: null }, { celebrate: vi.fn(), fallBody: null, boxer: { rig: { bones: { gloveL: glove(1.2), gloveR: glove(0.8) } } } }], mapping: worldMapping({ tick_rate: 30, ring_half_width: 500, ring_half_height: 500 }), tmpA: new THREE.Vector3(-1.4, 0, -0.6), tmpB: new THREE.Vector3(1, 0, 0.3), refereePosition: new THREE.Vector3(-0.8, 0, -1.4), - refereeVelocity: new THREE.Vector3(), refereeAway: new THREE.Vector3(), refereeYaw: 0, effects: { severedHeadPosition: () => false }, + refereeVelocity: new THREE.Vector3(), refereeAway: new THREE.Vector3(), refereeYaw: 0, effects: { severedHeadPosition: () => false, gushing: () => false }, closeUpTarget: new THREE.Vector3(), replay: null, ceremony: null, stoppageWrist: new THREE.Vector3(), stoppageOtherWrist: new THREE.Vector3(), }); method("presentFinish").call(stub, { version: PROTOCOL_VERSION, type: "final", match_id: "m", winner_id: "two", method: "ko", round: 2, scorecards: [], ratings: {} }); @@ -752,7 +857,7 @@ describe("around the fight", () => { referee, blobShadows: [], replay: null, ceremony: null, mapping: worldMapping(SIMULATION), frameSeconds: 0, stoppageWinner: -1, stoppageRaiseAt: Number.POSITIVE_INFINITY, stoppageSpot: null, graphs: [{ fallBody: null, boxer: { rig: { bones: { gloveL: glove(-0.35), gloveR: glove(-0.65) } } } }, { fallBody: null }], tmpA: new THREE.Vector3(), tmpB: new THREE.Vector3(), refereePosition: new THREE.Vector3(0.4, 0, -2.1), refereeVelocity: new THREE.Vector3(), refereeAway: new THREE.Vector3(), - refereeYaw: 0, effects: { severedHeadPosition: () => false }, closeUpTarget: new THREE.Vector3(), bodyPoint: new THREE.Vector3(), + refereeYaw: 0, effects: { severedHeadPosition: () => false, gushing: () => false }, closeUpTarget: new THREE.Vector3(), bodyPoint: new THREE.Vector3(), settings: () => ({ reducedMotion: false, blood: "full" }), stoppageWrist: new THREE.Vector3(), stoppageOtherWrist: new THREE.Vector3(), lastKnockdown: null, ...fields, }); diff --git a/web/hands/src/render/renderer-gpu.test.ts b/web/hands/src/render/renderer-gpu.test.ts index 7c480a01..4323379a 100644 --- a/web/hands/src/render/renderer-gpu.test.ts +++ b/web/hands/src/render/renderer-gpu.test.ts @@ -3,7 +3,7 @@ import type { Settings } from "../settings"; import { fighter, snapshot } from "../test/fixtures"; import { PROTOCOL_VERSION, type CombatEvent, type FighterSnapshot, type FinalMessage, type MatchResult } from "../types"; import { attachFakeWebGl, type FakeWebGl } from "../test/webgl"; -import type { Effects3D } from "./effects"; +import { DESKTOP_GORE, PHONE_GORE, type Effects3D } from "./effects"; import type { BoxingGraph } from "./graph"; import { FightRenderer } from "./renderer"; @@ -100,6 +100,18 @@ describe("quality tiers on the graphics card", () => { }); }); +describe("a phone's gore", () => { + it("keeps half of what a desktop keeps in flight", async () => { + const desktop = await mount(); + const matchMedia = window.matchMedia; + Object.defineProperty(window, "matchMedia", { configurable: true, value: (query: string) => ({ matches: query === "(pointer: coarse)", media: query }) }); + const phone = await mount().finally(() => Object.defineProperty(window, "matchMedia", { configurable: true, value: matchMedia })); + expect(desktop.internals.effects.dropletMesh.instanceMatrix.count).toBe(DESKTOP_GORE.droplets); + expect(phone.internals.effects.dropletMesh.instanceMatrix.count).toBe(PHONE_GORE.droplets); + expect(PHONE_GORE.droplets * 2).toBe(DESKTOP_GORE.droplets); + }); +}); + describe("spray direction", () => { it("throws the blood and the severed head along the punch when the fighters face each other along y", async () => { const { fight, internals } = await mount(); diff --git a/web/hands/src/render/renderer-mechanics.test.ts b/web/hands/src/render/renderer-mechanics.test.ts index 739eaf8a..97f9dfb6 100644 --- a/web/hands/src/render/renderer-mechanics.test.ts +++ b/web/hands/src/render/renderer-mechanics.test.ts @@ -2,7 +2,7 @@ import * as THREE from "three"; import { EventDeduplicator, SnapshotBuffer } from "../interpolation"; import { EvasionPrediction, MovementPrediction } from "../prediction"; import { fighter, snapshot } from "../test/fixtures"; -import { PROTOCOL_VERSION, type CombatEvent, type EngineSnapshot } from "../types"; +import { PROTOCOL_VERSION, type CombatEvent, type EngineSnapshot, type SemanticAction } from "../types"; import { BoxingGraph, SkinnedBoxer, loadBoxerGlb } from "./graph"; import { RoundStatsTracker } from "./hud"; import { bodySideStruck, contactPresentationPlan, cutmanWork, FightRenderer, isDelayedBodyKnockdown } from "./renderer"; @@ -114,7 +114,7 @@ describe("fight mechanics on screen", () => { simulation: { tick_rate: 30 }, frameSeconds: 0, final: null, graphs, commentary: { replay: vi.fn() }, arcadeInjuries: [null, null], arcadeInjuryEvents: [null, null], replayInjuries: [null, null], lastKnockdown: { knockdown: combat("knockdown", { event_id: 9, tick: 40, detail, amount: 1, action_id: "liver" }), hit, finisher: null }, - pendingContacts: [], effects: { returnMouthpiece: vi.fn() }, liveFallTicks: [null, null], + pendingContacts: [], effects: { returnMouthpiece: vi.fn(), stopGush: vi.fn() }, liveFallTicks: [null, null], }; startReplay.call(stub, { snapshots: [snapshot(20), snapshot(40)], impact: hit, durationSeconds: 3 }); return graphs; @@ -168,19 +168,21 @@ describe("a bout that ends on the punch itself", () => { const result = (method: "tko" | "flash_ko") => ({ match_id: "m", activity_instance_id: "i", guild_id: "g", player_one_id: "one", player_two_id: "two", winner_id: "one", finish_method: method, round_number: 2, tick: 160, scorecards: [], player_one_knockdowns: 0, player_two_knockdowns: 3, player_one_damage: 900, player_two_damage: 300 }); /** The room's own sequence: a snapshot every tick, and none after the one that carries the result. */ - const fightTo = (method: "tko" | "flash_ko") => { + /** `throughGuard`: the knockout punch met the guard, which the engine reports as the block and then the hit that leaked through. */ + const fightTo = (method: "tko" | "flash_ko", throughGuard = false) => { const graphs = fakeGraphs().map((graph) => ({ ...graph, awaitVerdict: vi.fn(), knockOut: vi.fn() })) as unknown as [FakeGraph, FakeGraph]; const spies = { presentFinish: vi.fn(), applyArcadeInjury: vi.fn(), returnMouthpiece: vi.fn() }; const stub = Object.assign(Object.create(FightRenderer.prototype) as Record, pushStub(graphs), { commentary: { observe: vi.fn(), finish: vi.fn(), replay: vi.fn() }, - effects: { addEvent: vi.fn(), returnMouthpiece: spies.returnMouthpiece }, + effects: { addEvent: vi.fn(), returnMouthpiece: spies.returnMouthpiece, stopGush: vi.fn() }, endCeremony: vi.fn(), presentFinish: spies.presentFinish, applyArcadeInjury: spies.applyArcadeInjury, restoreInjury: vi.fn(), arcadeInjuries: [null, null], arcadeInjuryEvents: [null, null], replayInjuries: [null, null], flashKnockout: null, replay: null, ceremony: null, finalRevealAt: 0, ovationUntil: 0, }); for (let tick = 100; tick < 160; tick += 1) methods.push.call(stub, { ...snapshot(tick), fighters: [fighter("one", -60), fighter("two", 60)] }); - const punch = combat("counter_hit", { event_id: 900, tick: 160, detail: "uppercut:head", amount: 140, action_id: "upper" }); - const events = method === "tko" ? [punch, combat("knockdown", { event_id: 901, tick: 160, amount: 3 }), combat("result", { event_id: 902, tick: 160, target_id: null, detail: "tko" })] : [punch, combat("result", { event_id: 902, tick: 160, target_id: null, detail: "flash_ko" })]; + const punch = combat(throughGuard ? "hit" : "counter_hit", { event_id: 900, tick: 160, detail: "uppercut:head", amount: 140, action_id: "upper" }); + const guarded = throughGuard ? [combat("block", { event_id: 899, tick: 160, actor_id: "two", target_id: "one", amount: 194, action_id: "upper" })] : []; + const events = method === "tko" ? [...guarded, punch, combat("knockdown", { event_id: 901, tick: 160, amount: 3 }), combat("result", { event_id: 902, tick: 160, target_id: null, detail: "tko" })] : [punch, combat("result", { event_id: 902, tick: 160, target_id: null, detail: "flash_ko" })]; const downed = { ...fighter("two", 60), is_downed: method === "tko" }; methods.push.call(stub, { ...snapshot(160), phase: "complete", fighters: [{ ...fighter("one", -60), action: "uppercut", action_key: "uppercut:right:head:power", action_contact_tick: 160 }, downed], events, result: result(method) }); // The final follows at once, while the render clock is still a few ticks behind the punch. @@ -216,9 +218,10 @@ describe("a bout that ends on the punch itself", () => { Object.assign(stub, { onContact: (event: CombatEvent) => heard.push(event.kind), arena: { excite }, viewerId: "two", viewerHitFlash: 0, knockOutMouthpiece: vi.fn(), headWorldPose: () => null, mouthPoint: new THREE.Vector3(), reapplyReplayInjuries: vi.fn(), + impactFlashes: [{ fire: vi.fn() }, { fire: vi.fn() }], headCache: [], headCacheValid: [false, false], powerHitPoint: new THREE.Vector3(), powerShake: 0, // Where the frame draws them, eased apart: fighter two 0.6 m out, his engine place 0.37 m. tmpA: new THREE.Vector3(-0.6, 0, 0), tmpB: new THREE.Vector3(0.6, 0, 0), - effects: { addEvent: (_event: CombatEvent, at: THREE.Vector3) => splashed.push(at.clone()), returnMouthpiece: vi.fn() }, + effects: { addEvent: (_event: CombatEvent, at: THREE.Vector3) => splashed.push(at.clone()), returnMouthpiece: vi.fn(), stopGush: vi.fn() }, }); // The graphs' rendered roots are where the frame draws the fighters. for (const [index, graph] of (stub.graphs as unknown as Record[]).entries()) { @@ -240,17 +243,80 @@ describe("a bout that ends on the punch itself", () => { expect(stub.viewerHitFlash).toBeGreaterThan(0); expect(stub.pendingContacts).toEqual([]); }); + + /** Fights to a stoppage with the knockout punch thrown as `power`, and fires the replay's impact. */ + const replayImpact = (power: "power" | "normal", reducedMotion: boolean, throughGuard = false) => { + const { stub } = fightTo("tko", throughGuard); + const landedHit = vi.fn(); + const flashes = [{ fire: vi.fn() }, { fire: vi.fn() }]; + const powers: boolean[] = []; + Object.assign(stub, { + onContact: (_event: CombatEvent, isPower: boolean) => powers.push(isPower), arena: { excite: vi.fn() }, viewerId: "two", viewerHitFlash: 0, + knockOutMouthpiece: vi.fn(), headWorldPose: () => null, mouthPoint: new THREE.Vector3(), reapplyReplayInjuries: vi.fn(), + tmpA: new THREE.Vector3(-0.6, 0, 0), tmpB: new THREE.Vector3(0.6, 0, 0), settings: () => ({ reducedMotion, blood: "full" }), + impactFlashes: flashes, headCache: [], headCacheValid: [false, false], powerHitPoint: new THREE.Vector3(), powerShake: 0, + }); + for (const [index, graph] of (stub.graphs as unknown as Record[]).entries()) Object.assign(graph, { react: vi.fn(), landedHit: index === 0 ? landedHit : vi.fn(), currentRoot: { x: index === 0 ? -0.6 : 0.6, z: 0 } }); + const shown = (stub.replay as unknown as { plan: { snapshots: EngineSnapshot[] } }).plan.snapshots.find((one) => one.tick === 160)!; + const fireReplayImpact = (FightRenderer.prototype as unknown as { fireReplayImpact(this: unknown, snapshot: EngineSnapshot): void }).fireReplayImpact; + fireReplayImpact.call(stub, { ...shown, fighters: [{ ...shown.fighters[0], action_id: "upper", action_key: `uppercut:right:head:${power}` }, shown.fighters[1]] }); + return { landedHit, flashed: flashes[1]!.fire.mock.calls.length, shake: stub.powerShake as number, powers }; + }; + + it("lands a power punch at the replay's impact as it did live, held longest with its flash and kick, the flash and kick left out with reduced motion", () => { + const power = replayImpact("power", false); + expect(power.landedHit).toHaveBeenCalledWith("upper", false, true); + expect(power.flashed).toBe(1); + expect(power.shake).toBeGreaterThan(0); + expect(power.powers).toEqual([true]); + const calm = replayImpact("power", true); + expect(calm.landedHit).toHaveBeenCalledWith("upper", false, true); + expect([calm.flashed, calm.shake]).toEqual([0, 0]); + const normal = replayImpact("normal", false); + expect(normal.landedHit).toHaveBeenCalledWith("upper", false, false); + expect([normal.flashed, normal.shake]).toEqual([0, 0]); + }); + + it("replays a knockdown through the guard as the block it was live: a block's freeze, and a power punch without its flash and kick", () => { + const guarded = replayImpact("power", false, true); + expect(guarded.landedHit).toHaveBeenCalledWith("upper", true, true); + expect([guarded.flashed, guarded.shake]).toEqual([0, 0]); + }); + + it("kicks the replay's shot for a power punch as it does the live camera, and not with reduced motion", () => { + const replayFrame = (FightRenderer.prototype as unknown as { replayFrame(this: unknown, snapshot: EngineSnapshot, elapsed: number): { position: THREE.Vector3; lookAt: THREE.Vector3 } }).replayFrame; + const shot = (powerShake: number, reducedMotion: boolean): number[] => { + const stub = { + mapping: worldMapping({ tick_rate: 30, ring_half_width: 500, ring_half_height: 500 }), referee: null, headCache: [], headCacheValid: [false, false], + replay: { plan: { impact: combat("counter_hit", { tick: 160 }) }, impactFired: true, side: null }, replayFollowAt: 0, replayFollow: 0, portraitPull: 1, + replayCameraPosition: new THREE.Vector3(), replayLookAt: new THREE.Vector3(), settings: () => ({ reducedMotion }), powerShake, + }; + const frame = replayFrame.call(stub, { ...snapshot(160), fighters: [fighter("one", -60), fighter("two", 60)] }, 1.2); + return [...frame.position.toArray(), ...frame.lookAt.toArray()]; + }; + const still = shot(0, false); + const kicked = shot(0.08, false); + expect(Math.hypot(kicked[0]! - still[0]!, kicked[1]! - still[1]!)).toBeGreaterThan(0.02); + expect(shot(0.08, true)).toEqual(still); + }); }); describe("the knockout replay's fall", () => { const startReplay = (FightRenderer.prototype as unknown as { startReplay(this: unknown, plan: unknown): void }).startReplay; const impact = combat("counter_hit", { event_id: 30, tick: 400, detail: "hook:head", amount: 120 }); + const stopGush = vi.fn(); const replayed = (graphs: unknown[], liveFallTicks: [number | null, number | null]) => startReplay.call({ simulation: { tick_rate: 30 }, frameSeconds: 0, final: null, graphs, commentary: { replay: vi.fn() }, - arcadeInjuries: [null, null], arcadeInjuryEvents: [null, null], replayInjuries: [null, null], pendingContacts: [], effects: { returnMouthpiece: vi.fn() }, + arcadeInjuries: [null, null], arcadeInjuryEvents: [null, null], replayInjuries: [null, null], pendingContacts: [], effects: { returnMouthpiece: vi.fn(), stopGush }, lastKnockdown: { knockdown: combat("knockdown", { event_id: 31, tick: 400, amount: 3 }), hit: impact, finisher: null }, liveFallTicks, }, { snapshots: [snapshot(380), snapshot(400)], impact, durationSeconds: 3 }); + it("stops what was pouring from either man live, so the lead-up does not pour it", () => { + stopGush.mockClear(); + replayed(fakeGraphs(), [null, null]); + expect(stopGush.mock.calls.map(([index]) => index)).toEqual([0, 1]); + }); + it("runs the recorded fall again only when it is this knockdown's", () => { const fallen = fakeGraphs(); replayed(fallen, [null, 401]); @@ -297,6 +363,112 @@ describe("the knockout replay's fall", () => { }, 30_000); }); +describe("a contact's power", () => { + it("is taken from the punch the snapshot shows the puncher throwing, matched by its instance", () => { + const pending = (power: "power" | "normal", actionId: string): boolean => { + const stub = pushStub(fakeGraphs()); + const base = snapshot(30); + const thrown = { ...base.fighters[0], action: "straight" as const, action_id: "p1", action_power: power, action_key: `straight:right:head:${power}`, action_contact_tick: 30 }; + methods.push.call(stub, { ...base, fighters: [thrown, base.fighters[1]], events: [combat("hit", { event_id: 4, tick: 30, amount: 90, detail: "straight:head", action_id: actionId })] }); + return (stub.pendingContacts as { power: boolean }[])[0]!.power; + }; + expect(pending("power", "p1")).toBe(true); + expect(pending("normal", "p1")).toBe(false); + // A contact belonging to some other punch than the one the puncher now throws is not taken for a power punch. + expect(pending("power", "p0")).toBe(false); + }); +}); + +describe("the player's own punch's contact", () => { + const contactTick = (options: { viewer?: string; landed?: boolean; knockdown?: boolean } = {}): number => { + const graphs = fakeGraphs().map((graph, seat) => Object.assign(graph, { pressLanded: (id: string | null) => seat === 0 && id === "c1" && options.landed !== false })) as unknown as [FakeGraph, FakeGraph]; + const stub: Record = { ...pushStub(graphs), viewerId: options.viewer ?? "one" }; + const base = snapshot(30); + const thrown = { ...base.fighters[0], action: "jab" as const, action_id: "c1", action_power: "normal" as const, action_key: "jab:left:head:normal", action_contact_tick: 30 }; + const events = [combat("hit", { event_id: 4, tick: 30, amount: 40, detail: "jab:head", action_id: "c1" }), ...(options.knockdown === true ? [combat("knockdown", { event_id: 5, tick: 30, amount: 1 })] : [])]; + methods.push.call(stub, { ...base, fighters: [thrown, base.fighters[1]], events }); + return (stub.pendingContacts as { contactTick: number }[])[0]!.contactTick; + }; + + it("is shown as soon as it arrives, the glove having reached the opponent on screen already", () => { + expect(contactTick()).toBe(Number.NEGATIVE_INFINITY); + }); + + it("keeps to the delayed clock for the opponent's view, a press that never reached the target here, and a knockdown", () => { + expect(contactTick({ viewer: "two" })).toBe(30); + expect(contactTick({ landed: false })).toBe(30); + expect(contactTick({ knockdown: true })).toBe(30); + }); +}); + +describe("the player's own slip, weave or pull behind his punch", () => { + const predictAction = (FightRenderer.prototype as unknown as { predictAction(this: unknown, action: SemanticAction): void }).predictAction; + const stub = (graph: object, latest: EngineSnapshot = snapshot(40)) => ({ + buffer: { latest: () => latest, interpolationDelayTicks: 2 }, viewerId: "one", replay: null, inputLatencyMs: 100, + simulation: { tick_rate: 30 }, manualClock: true, lastManualTime: 1000, graphs: [graph, {}], evasion: new EvasionPrediction(), + }); + const ownPunch = (ticksToRecovery: number) => ({ ownPunchActive: true, ownTicksToRecovery: ticksToRecovery, cutOwnRecovery: vi.fn(), keepOwnRecovery: vi.fn(), predict: vi.fn(), acknowledge: vi.fn() }); + + it("shows at once behind a punch that has landed or missed, cutting the punch's recovery short for it", () => { + const graph = ownPunch(0); + const renderer = stub(graph); + predictAction.call(renderer, { kind: "slip_left", id: "c3" }); + expect(renderer.evasion.pose(1000)).toBe("slip_left"); + expect(graph.cutOwnRecovery).toHaveBeenCalledTimes(1); + }); + + it("starts once the punch has landed or missed when pressed before, as the server holds it until then", () => { + const renderer = stub(ownPunch(3)); + predictAction.call(renderer, { kind: "weave", id: "c4" }); + expect(renderer.evasion.pose(1000 + 2.9 * (1000 / 30))).toBeNull(); + expect(renderer.evasion.pose(1000 + 3 * (1000 / 30))).toBe("weave"); + // A punch pressed meanwhile takes its place in the server's buffer. + predictAction.call(renderer, { kind: "punch", id: "c5", hand: "left", class: "jab", target: "head", power: "normal" }); + expect(renderer.evasion.pose(1000 + 3 * (1000 / 30))).toBeNull(); + }); + + it("leaves the punch's recovery alone once a punch press takes its place before it starts, or the server turns it down", () => { + const acknowledgeActions = (FightRenderer.prototype as unknown as { acknowledgeActions(this: unknown, snapshot: EngineSnapshot, events: readonly CombatEvent[]): void }).acknowledgeActions; + const punch: SemanticAction = { kind: "punch", id: "c5", hand: "left", class: "jab", target: "head", power: "normal" }; + const replaced = ownPunch(3); + const beforeStart = stub(replaced); + predictAction.call(beforeStart, { kind: "weave", id: "c4" }); + predictAction.call(beforeStart, punch); + expect(replaced.keepOwnRecovery).toHaveBeenCalledTimes(1); + // Once it has started there, on the press's time, the punch waits behind it and the recovery stays cut. + const behind = ownPunch(0); + const afterStart = stub(behind); + predictAction.call(afterStart, { kind: "weave", id: "c4" }); + predictAction.call(afterStart, punch); + expect(behind.keepOwnRecovery).not.toHaveBeenCalled(); + // Turned down: the frame that carried it is acknowledged with nothing started or waiting. + const turnedDown = ownPunch(3); + const refused = { ...stub(turnedDown), graphs: [turnedDown, { acknowledge: vi.fn() }], inputSequenceOf: (id: string) => (id === "c4" ? 41 : null) }; + predictAction.call(refused, { kind: "weave", id: "c4" }); + const base = snapshot(42); + acknowledgeActions.call(refused, { ...base, fighters: [{ ...base.fighters[0], last_input_sequence: 41, queued_actions: 1 }, base.fighters[1]] }, []); + expect(turnedDown.keepOwnRecovery).not.toHaveBeenCalled(); + acknowledgeActions.call(refused, { ...base, fighters: [{ ...base.fighters[0], last_input_sequence: 41 }, base.fighters[1]] }, []); + expect(turnedDown.keepOwnRecovery).toHaveBeenCalledTimes(1); + }); + + it("leaves it to the server behind a punch it never predicted or anything else the server holds", () => { + const free = { ownPunchActive: false, predict: vi.fn() }; + const base = snapshot(40); + const punching: EngineSnapshot = { ...base, fighters: [{ ...base.fighters[0], action: "hook", action_start_tick: 38, action_startup_ticks: 5, action_active_ticks: 2, action_recovery_ticks: 7 }, base.fighters[1]] }; + const behindPunch = stub(free, punching); + predictAction.call(behindPunch, { kind: "pull", id: "c6" }); + expect(behindPunch.evasion.pose(1000)).toBeNull(); + const queued: EngineSnapshot = { ...base, fighters: [{ ...base.fighters[0], queued_actions: 1 }, base.fighters[1]] }; + const behindPress = stub(free, queued); + predictAction.call(behindPress, { kind: "pull", id: "c7" }); + expect(behindPress.evasion.pose(1000)).toBeNull(); + const open = stub(free); + predictAction.call(open, { kind: "pull", id: "c8" }); + expect(open.evasion.pose(1000)).toBe("pull"); + }); +}); + describe("the player's own fighter folding over a body shot", () => { const predict = (FightRenderer.prototype as unknown as { applyLocalPrediction(this: unknown, state: EngineSnapshot, dt: number, timeMs: number): EngineSnapshot }).applyLocalPrediction; @@ -315,6 +487,23 @@ describe("the player's own fighter folding over a body shot", () => { expect(predict.call(viewer, held, 1 / 30, 1033).fighters[1].x).toBeGreaterThan(held.fighters[1].x); }); + it("walks at the share of his footwork his own punch leaves him, as the server will move him for the input sent meanwhile", () => { + const walked = (ownFootwork: number): number => { + const viewer = { + localInput: () => ({ moveX: 1000, moveY: 0, defense: "none" as const }), viewerId: "two", graphs: [{}, { ownFootwork, ownPunchActive: true }], buffer: { interpolationDelayTicks: 2 }, + movement: new MovementPrediction(), evasion: new EvasionPrediction(), simulation: { tick_rate: 30 }, inputLatencyMs: null, ownCollapseUntil: 0, + }; + const held: EngineSnapshot = { ...snapshot(35), phase: "fight" }; + let shown = held; + for (let frame = 0; frame < 8; frame += 1) shown = predict.call(viewer, held, 1 / 30, 1000 + (frame * 1000) / 30); + return shown.fighters[1].x - held.fighters[1].x; + }; + const free = walked(1); + expect(free).toBeGreaterThan(10); + expect(walked(0.6) / free).toBeCloseTo(0.6, 1); + expect(walked(0)).toBe(0); + }); + it("is not set by a body shot folding the opponent", () => { const stub = { ...pushStub(fakeGraphs()), viewerId: "one", ownCollapseUntil: 0 }; methods.push.call(stub, { ...snapshot(30), events: [combat("body_collapse", { event_id: 6, tick: 30, actor_id: "one", target_id: "two", amount: 10 })] }); diff --git a/web/hands/src/render/renderer-scene.test.ts b/web/hands/src/render/renderer-scene.test.ts index 9647d658..087f3911 100644 --- a/web/hands/src/render/renderer-scene.test.ts +++ b/web/hands/src/render/renderer-scene.test.ts @@ -4,7 +4,7 @@ import type { EngineSnapshot, FighterSnapshot } from "../types"; import { CameraDirector, FighterCam } from "./camera"; import { cameraOnPlatform } from "./crowd"; import { RoundStatsTracker } from "./hud"; -import { BODY_SITES, BODY_SWELL_CORE, InjuryShading, applyBodyTrauma } from "./injury"; +import { BODY_SITES, BODY_SWELL_CORE, HEAD_SITES, InjuryShading, applyBodyTrauma } from "./injury"; import { FightRenderer } from "./renderer"; import { worldMapping } from "./world"; @@ -18,10 +18,15 @@ type Settings = { reducedMotion: boolean; blood: "full" | "reduced" | "off"; cam function graph() { return { - boxer: { root: new THREE.Object3D(), bone: () => null, setLook: vi.fn(), metrics: { headRestY: 1.52 }, rig: { bones: { gloveL: new THREE.Object3D(), gloveR: new THREE.Object3D() } } }, + boxer: { + root: new THREE.Object3D(), bone: () => null, setLook: vi.fn(), metrics: { headRestY: 1.52 }, + rig: { bones: { gloveL: new THREE.Object3D(), gloveR: new THREE.Object3D(), hips: new THREE.Object3D(), upperChest: new THREE.Object3D(), shoulderL: new THREE.Object3D(), shoulderR: new THREE.Object3D() } }, + headInjury: new InjuryShading(null, HEAD_SITES), bodyInjury: new InjuryShading(null, BODY_SITES, { core: BODY_SWELL_CORE, wash: true }), + }, setResting: vi.fn(), setCountdown: vi.fn(), setObstacle: vi.fn(), + setRefereeHead: vi.fn(), stayDown: vi.fn(), update: vi.fn(), fallBody: null, @@ -79,9 +84,15 @@ function frame(state: EngineSnapshot, overrides: Record = {}) { tmpB: new THREE.Vector3(), tmpHead: new THREE.Vector3(), tmpCamera: new THREE.Vector3(), + tmpStump: new THREE.Vector3(), + tmpStumpOffset: new THREE.Vector3(), + tmpStumpAcross: new THREE.Vector3(), + woundPoint: new THREE.Vector3(), + woundAxis: new THREE.Vector3(), downedPoolAccumulators: [0, 0], downedPoolCounts: [0, 0], - effects: { drip: vi.fn(), stopDrip: vi.fn(), pool: vi.fn(), update: vi.fn(), shakeAmount: 0, setViewDistance: vi.fn() }, + effects: { drip: vi.fn(), stopDrip: vi.fn(), pool: vi.fn(), update: vi.fn(), shakeAmount: 0, setViewDistance: vi.fn(), gushing: () => false }, + powerShake: 0, updateIdleFighters: vi.fn(), updateTrails: vi.fn(), updateReferee: vi.fn(), @@ -155,43 +166,147 @@ describe("blood from a fighter held on the ropes", () => { }); }); -describe("ribs caved in by the knockout punch", () => { - const punch = { event_id: 31, tick: 40, kind: "hit", actor_id: "one", target_id: "two", amount: 72, detail: "straight:body", blood: 20, direction: 1, action_id: null }; - const apply = (chestHeight: number) => { +describe("blood from the punch that lands", () => { + const fire = (detail: string, overrides: Record) => { + const event = { event_id: 9, tick: 40, kind: "hit", actor_id: "one", target_id: "two", amount: 80, detail, blood: 30, direction: 1, action_id: null }; + const engine = { ...snapshot(), fighters: [fighter("one", -60), fighter("two", 60)] as [FighterSnapshot, FighterSnapshot] }; + const addEvent = vi.fn(); + const stub = Object.assign(Object.create(FightRenderer.prototype) as Record, { + pendingContacts: [{ event, presentationEvent: event, presentImpact: true, reactAmount: null, contactTick: 40, recipientIndex: 1, puncherIndex: 0, injury: null }], + buffer: { latest: () => engine }, presentFightEvent: vi.fn(), mapping: worldMapping(SIMULATION), contactPoint: new THREE.Vector3(), mouthPoint: new THREE.Vector3(), + effects: { addEvent, spawnTeeth: vi.fn(), gush: vi.fn() }, settings: () => ({ reducedMotion: false, blood: "full" }), arena: { excite: vi.fn() }, viewerId: null, + arcadeInjuries: [null, null], headWorldPose: () => null, knockOutMouthpiece: vi.fn(), onContact: null, viewerHitFlash: 0, + woundPoint: new THREE.Vector3(), woundAxis: new THREE.Vector3(), + ...overrides, + }); + (FightRenderer.prototype as unknown as { fireContacts(this: unknown, tick: number): void }).fireContacts.call(stub, 50); + return (addEvent.mock.calls[0]! as [unknown, THREE.Vector3])[1].clone(); + }; + + it("leaves the face where it is drawn, on the side that faced the punch, ducked low or lying on the canvas", () => { + // Fighter one at -x punches fighter two at +x; two's skull is drawn low and off his spot, slipping the punch. + const at = fire("straight:head", { graphs: [{ currentRoot: { x: -0.4, z: 0 }, landedHit: vi.fn() }, { currentRoot: { x: 0.4, z: 0 }, react: vi.fn() }], headWorldPose: (index: number) => (index === 1 ? { position: new THREE.Vector3(0.55, 1.22, 0.18), quaternion: new THREE.Quaternion() } : null) }); + expect(at.x).toBeCloseTo(0.47, 6); + expect(at.y).toBeCloseTo(1.22, 6); + expect(at.z).toBeCloseTo(0.18, 6); + }); + + it("leaves the chest where it is drawn for a body shot", () => { const chest = new THREE.Object3D(); - chest.position.y = chestHeight; + chest.position.set(0.5, 1.1, -0.1); chest.updateMatrixWorld(true); - const addEvent = vi.fn(); + const at = fire("hook:body", { graphs: [{ currentRoot: { x: -0.4, z: 0 }, landedHit: vi.fn() }, { currentRoot: { x: 0.4, z: 0 }, react: vi.fn(), boxer: { rig: { bones: { upperChest: chest } } } }] }); + expect(at.x).toBeCloseTo(0.38, 6); + expect(at.y).toBeCloseTo(1.1, 6); + expect(at.z).toBeCloseTo(-0.1, 6); + }); +}); + +describe("a landed power punch", () => { + const event = { event_id: 9, tick: 40, kind: "hit", actor_id: "one", target_id: "two", amount: 140, detail: "straight:head", blood: 30, direction: 1, action_id: "p1" }; + const fire = (power: boolean, reducedMotion = false) => { + const flashes = [{ fire: vi.fn() }, { fire: vi.fn() }]; + const landedHit = vi.fn(); + const heard: [string, boolean][] = []; + const head = new THREE.Vector3(0.6, 1.52, 0.1); + const stub = Object.assign(Object.create(FightRenderer.prototype) as Record, { + pendingContacts: [{ event, presentationEvent: event, presentImpact: true, reactAmount: 140, contactTick: 40, recipientIndex: 1, puncherIndex: 0, injury: null, power }], + buffer: { latest: () => snapshot() }, presentFightEvent: vi.fn(), mapping: worldMapping(SIMULATION), contactPoint: new THREE.Vector3(), mouthPoint: new THREE.Vector3(), + effects: { addEvent: vi.fn(), spawnTeeth: vi.fn() }, settings: () => ({ reducedMotion, blood: "full" }), arena: { excite: vi.fn() }, viewerId: null, + arcadeInjuries: [null, null], graphs: [{ currentRoot: { x: -0.6, z: 0 }, landedHit }, { currentRoot: { x: 0.6, z: 0.1 }, react: vi.fn() }], headWorldPose: () => null, knockOutMouthpiece: vi.fn(), + onContact: (shown: { kind: string }, wasPower: boolean) => heard.push([shown.kind, wasPower]), viewerHitFlash: 0, + impactFlashes: flashes, powerShake: 0, powerHitPoint: new THREE.Vector3(), headCache: [new THREE.Vector3(), head], headCacheValid: [true, true], + }); + (FightRenderer.prototype as unknown as { fireContacts(this: unknown, tick: number): void }).fireContacts.call(stub, 50); + return { flashes, landedHit, heard, shake: stub.powerShake as number, head }; + }; + + it("flashes on the head it lands on, kicks the camera, holds the glove there longest and is heard as one", () => { + const power = fire(true); + expect(power.flashes[1]!.fire).toHaveBeenCalledTimes(1); + expect((power.flashes[1]!.fire.mock.calls[0]![0] as THREE.Vector3).toArray()).toEqual(power.head.toArray()); + expect(power.flashes[0]!.fire).not.toHaveBeenCalled(); + expect(power.shake).toBeGreaterThan(0); + expect(power.landedHit).toHaveBeenCalledWith("p1", false, true); + expect(power.heard).toEqual([["hit", true]]); + const normal = fire(false); + expect(normal.flashes[1]!.fire).not.toHaveBeenCalled(); + expect(normal.shake).toBe(0); + expect(normal.landedHit).toHaveBeenCalledWith("p1", false, false); + expect(normal.heard).toEqual([["hit", false]]); + }); + + it("neither flashes nor shakes with motion reduced, and still sounds and holds as one", () => { + const calm = fire(true, true); + expect(calm.flashes[1]!.fire).not.toHaveBeenCalled(); + expect(calm.shake).toBe(0); + expect(calm.landedHit).toHaveBeenCalledWith("p1", false, true); + expect(calm.heard).toEqual([["hit", true]]); + }); +}); + +describe("a fighter torn open by the knockout punch", () => { + const punch = { event_id: 31, tick: 40, kind: "hit", actor_id: "one", target_id: "two", amount: 72, detail: "straight:body", blood: 20, direction: 1, action_id: null }; + /** Fighter two's body standing at (0.6, 0) facing +z, his own left toward +x; `lying` lays him on his back. */ + const torso = (lying: boolean) => { + const root = new THREE.Object3D(); + const place = (x: number, up: number): THREE.Object3D => { + const bone = new THREE.Object3D(); + bone.position.set(0.6 + x, lying ? 0.18 : up, lying ? -up : 0); + root.add(bone); + return bone; + }; + return { root, rig: { bones: { hips: place(0, 0.95), upperChest: place(0, 1.3), shoulderL: place(0.18, 1.42), shoulderR: place(-0.18, 1.42) } } }; + }; + const apply = (injury: string, lying = false, head: { position: THREE.Vector3; quaternion: THREE.Quaternion } | null = null) => { + const tearOpen = vi.fn(); const onArcadeInjury = vi.fn(); const stub = Object.assign(Object.create(FightRenderer.prototype) as Record, { - graphs: [{ currentRoot: { x: -0.6, z: 0 } }, { currentRoot: { x: 0.62, z: 0.1 }, boxer: { rig: { bones: { upperChest: chest } } } }], + graphs: [{ currentRoot: { x: -0.6, z: 0 } }, { currentRoot: { x: 0.62, z: 0.1 }, boxer: torso(lying) }], buffer: { latest: () => snapshot() }, mapping: worldMapping(SIMULATION), contactPoint: new THREE.Vector3(), tmpPart: new THREE.Vector3(), - effects: { addEvent }, arcadeInjuries: [null, null], arcadeInjuryEvents: [null, null], observedInjuryDown: [false, false], + tmpStump: new THREE.Vector3(), tmpStumpOffset: new THREE.Vector3(), tmpStumpAcross: new THREE.Vector3(), woundPoint: new THREE.Vector3(), woundAxis: new THREE.Vector3(), + headWorldPose: () => head, effects: { tearOpen }, arcadeInjuries: [null, null], arcadeInjuryEvents: [null, null], observedInjuryDown: [false, false], syncInjuryPresentation: vi.fn(), onArcadeInjury, }); - const applied = (FightRenderer.prototype as unknown as { applyArcadeInjury(this: unknown, index: number, injury: string, event: unknown, spray?: unknown): boolean }).applyArcadeInjury.call(stub, 1, "ribs_left", punch, { x: 1, z: 0 }); - return { applied, addEvent, onArcadeInjury, stub }; + const applied = (FightRenderer.prototype as unknown as { applyArcadeInjury(this: unknown, index: number, injury: string, event: unknown, spray?: unknown): boolean }).applyArcadeInjury.call(stub, 1, injury, punch, { x: 1, z: 0 }); + const [index, at, axis, spray, eventId, teeth] = (tearOpen.mock.calls[0] ?? []) as [number, THREE.Vector3, THREE.Vector3, unknown, number, number | undefined]; + return { applied, tearOpen, onArcadeInjury, stub, index, at: at?.clone(), axis: axis?.clone(), spray, eventId, teeth }; }; - it("burst blood from his side as the punch lands, and are kept for the rest of the bout", () => { - const { applied, addEvent, onArcadeInjury, stub } = apply(1.3); - expect(applied).toBe(true); - expect((stub.arcadeInjuries as unknown[])[1]).toBe("ribs_left"); - expect(onArcadeInjury).toHaveBeenCalledWith("ribs_left", punch); - const [burst, at, reducedMotion, spray] = addEvent.mock.calls[0]! as [{ kind: string; detail: string; amount: number; blood: number; event_id: number }, THREE.Vector3, boolean, unknown]; - // A body burst as big as any blow throws, from where he is drawn, along the punch. - expect(burst).toMatchObject({ kind: "counter_hit", detail: "hook:body", blood: 100 }); - expect(burst.amount).toBeGreaterThanOrEqual(95); - expect(burst.event_id).not.toBe(punch.event_id); - expect([at.x, at.z]).toEqual([0.62, 0.1]); - expect(reducedMotion).toBe(false); - expect(spray).toEqual({ x: 1, z: 0 }); + it("bursts the ribs open at his side as the punch lands, standing or lying, and keeps them so for the rest of the bout", () => { + const standing = apply("ribs_left"); + expect(standing.applied).toBe(true); + expect((standing.stub.arcadeInjuries as unknown[])[1]).toBe("ribs_left"); + expect(standing.onArcadeInjury).toHaveBeenCalledWith("ribs_left", punch); + // Out of his left side, a little below the chest bone, along the punch. + expect([standing.index, standing.eventId, standing.teeth ?? 0]).toEqual([1, 31, 0]); + expect(standing.at!.x).toBeCloseTo(0.73, 6); + expect(standing.at!.y).toBeCloseTo(1.24, 6); + expect(standing.axis!.x).toBeCloseTo(1, 6); + expect(standing.spray).toEqual({ x: 1, z: 0 }); + const right = apply("ribs_right"); + expect(right.at!.x).toBeCloseTo(0.47, 6); + expect(right.axis!.x).toBeCloseTo(-1, 6); + // On his back on the canvas the wound is down there with him, where it once threw blood from standing height. + const lying = apply("ribs_left", true); + expect(lying.applied).toBe(true); + expect(lying.at!.y).toBeCloseTo(0.18, 6); }); - it("throw no blood from rib height over a man already lying on the canvas", () => { - const { applied, addEvent } = apply(0.25); - expect(applied).toBe(true); - expect(addEvent).not.toHaveBeenCalled(); + it("tears a shoulder open at the joint, facing out and up, and breaks the jaw open at the mouth with its teeth", () => { + const shoulder = apply("shoulder_right"); + expect(shoulder.applied).toBe(true); + expect([shoulder.at!.x, shoulder.at!.y, shoulder.at!.z]).toEqual([0.42, 1.42, 0]); + expect(shoulder.axis!.x).toBeLessThan(-0.8); + expect(shoulder.axis!.y).toBeGreaterThan(0.3); + const head = { position: new THREE.Vector3(0.6, 1.55, 0), quaternion: new THREE.Quaternion() }; + const jaw = apply("jaw_dislocation", false, head); + expect(jaw.applied).toBe(true); + expect(jaw.at!.distanceTo(new THREE.Vector3(0.6, 1.48, 0.1))).toBeLessThan(1e-6); + expect(jaw.axis!.z).toBeGreaterThan(0.9); + expect(jaw.teeth).toBe(8); + // Without the head to tear open there is nothing to record. + expect(apply("jaw_dislocation", false, null).applied).toBe(false); }); it("stay caved in every frame over the engine's own bruising", () => { @@ -225,6 +340,40 @@ describe("blood on the canvas", () => { expect(pools(renderer).length).toBeGreaterThan(0); }); + it("keeps the blood pouring from his mouth there as his head moves", () => { + const root = new THREE.Object3D(); + const head = new THREE.Bone(); + root.add(head); + head.position.set(0.4, 0.3, -0.2); + head.rotation.x = -1.2; + const anchorGush = vi.fn(); + const { run, graphs } = frame(fighting({}, { is_downed: true }, { phase: "knockdown" }), { + tmpHeadQuaternion: new THREE.Quaternion(), tmpStumpOffset: new THREE.Vector3(), tmpPart: new THREE.Vector3(), mouthPoint: new THREE.Vector3(), + effects: { drip: vi.fn(), stopDrip: vi.fn(), pool: vi.fn(), update: vi.fn(), shakeAmount: 0, setViewDistance: vi.fn(), gushing: (index: number) => index === 1, anchorGush }, + }); + Object.assign(graphs[1]!.boxer, { root, bone: (name: string) => (name === "head" ? head : null) }); + run(2); + const [index, at] = anchorGush.mock.calls.at(-1)! as [number, THREE.Vector3]; + expect(index).toBe(1); + root.updateMatrixWorld(true); + const skull = new THREE.Vector3(0, 0.12, 0.02).applyQuaternion(head.quaternion).add(head.getWorldPosition(new THREE.Vector3())); + expect(at.distanceTo(skull.add(new THREE.Vector3(0, -0.07, 0.1).applyQuaternion(head.quaternion)))).toBeLessThan(1e-6); + expect(anchorGush.mock.calls.every((call) => call[0] === 1)).toBe(true); + }); + + it("keeps a torn shoulder pouring from the shoulder, not from his mouth", () => { + const anchorGush = vi.fn(); + const { run, graphs } = frame(fighting({}, { is_downed: true }, { phase: "knockdown" }), { + arcadeInjuries: [null, "shoulder_right"], + effects: { drip: vi.fn(), stopDrip: vi.fn(), pool: vi.fn(), update: vi.fn(), shakeAmount: 0, setViewDistance: vi.fn(), gushing: (index: number) => index === 1, anchorGush }, + }); + graphs[1]!.boxer.rig.bones.shoulderR.position.set(-0.7, 0.25, 0.3); + run(2); + const [index, at] = anchorGush.mock.calls.at(-1)! as [number, THREE.Vector3]; + expect(index).toBe(1); + expect(at.toArray()).toEqual([-0.7, 0.25, 0.3]); + }); + it("drips from under the chin of the head as it is drawn: seated on his stool, not at standing height over his spot", () => { const root = new THREE.Object3D(); const head = new THREE.Bone(); @@ -253,16 +402,27 @@ describe("blood on the canvas", () => { const calls = pools(renderer); expect(calls.length).toBeGreaterThan(50); const widest = Math.max(...calls.map((call) => call[2]!)); - expect(widest).toBeGreaterThan(0.55); - expect(widest).toBeLessThanOrEqual(0.8); - for (const [x, z] of calls) expect(Math.hypot(x! - 0.6, z! + 0.2)).toBeLessThan(0.25); + expect(widest).toBeGreaterThan(1.4); + expect(widest).toBeLessThanOrEqual(2); + for (const [x, z] of calls) expect(Math.hypot(x! - 0.6, z! + 0.2)).toBeLessThan(0.51); }); - it("leaves a dislocation, which opens no wound, to the engine's cuts", () => { - const { renderer, run, graphs } = frame(fighting({}, { is_downed: true }, { phase: "knockdown" }), { arcadeInjuries: [null, "jaw_dislocation"] }); - graphs[1]!.isDown = true; - run(120); - expect(pools(renderer)).toHaveLength(0); + it("pools from a broken jaw as from any finisher's wound, and from a torn shoulder at the shoulder", () => { + const jaw = frame(fighting({}, { is_downed: true }, { phase: "knockdown" }), { arcadeInjuries: [null, "jaw_dislocation"] }); + jaw.graphs[1]!.isDown = true; + jaw.run(120); + expect(pools(jaw.renderer).length).toBeGreaterThan(10); + // The broken jaw runs with blood down the chin, the neck and the chest over the engine's own trauma. + expect((jaw.graphs[1]!.boxer.headInjury as InjuryShading).level("mouth").blood).toBeCloseTo(1.4, 6); + expect((jaw.graphs[1]!.boxer.bodyInjury as InjuryShading).level("neckSmear").blood).toBeCloseTo(1.4, 6); + const shoulder = frame(fighting({}, { is_downed: true }, { phase: "knockdown" }), { arcadeInjuries: [null, "shoulder_left"] }); + shoulder.graphs[1]!.isDown = true; + shoulder.graphs[1]!.boxer.rig.bones.shoulderL.position.set(1.1, 0.2, -0.4); + shoulder.run(120); + const calls = pools(shoulder.renderer); + expect(calls.length).toBeGreaterThan(10); + for (const [x, z] of calls) expect(Math.hypot(x! - 1.1, z! + 0.4)).toBeLessThan(0.35); + expect((shoulder.graphs[1]!.boxer.bodyInjury as InjuryShading).level("leftShoulderSmear").blood).toBeCloseTo(1.4, 6); }); it("lays a flash knockout's loser's shadow out flat with him", () => { diff --git a/web/hands/src/render/renderer.test.ts b/web/hands/src/render/renderer.test.ts index 30bd86b7..0cd17ae2 100644 --- a/web/hands/src/render/renderer.test.ts +++ b/web/hands/src/render/renderer.test.ts @@ -4,7 +4,7 @@ import { Avatars } from "./avatars"; import { RoundClock } from "./hud"; import { PROTOCOL_VERSION, type CombatEvent, type EngineSnapshot, type MatchResult } from "../types"; import { releaseSharedGpu, disposeSkeletons } from "./graph"; -import { arcadeInjuryFor, canStartPunch, compileForComposer, CEREMONY_MARKS, ceremonyStep, contactParticipants, contactPresentationPlan, disposeComposer, cornersAtWork, FightRenderer, ownViewPhase, isArcadeInjuryCandidate, knockdownFinisher, presentationTickFor, refereeSpacing, replayCameraSide, replayReattaches, sprayDirection, visualSeparation, resultCardTop } from "./renderer"; +import { arcadeInjuryFor, canStartPunch, compileForComposer, CEREMONY_MARKS, ceremonyStep, contactParticipants, contactPresentationPlan, disposeComposer, cornersAtWork, FightRenderer, hitFlash, hurtVignette, ownViewPhase, isArcadeInjuryCandidate, knockdownFinisher, presentationTickFor, punchGush, refereeSpacing, replayCameraSide, sprayDirection, visualSeparation, resultCardTop } from "./renderer"; import { RockedVision } from "./rocked"; import { worldMapping } from "./world"; @@ -128,9 +128,9 @@ describe("arcade injury candidate routing", () => { expect(arcadeInjuryFor({ ...event("hit", "hook:head"), event_id: 1 }, downed, tko, leftPunch)).toBe("eye_right"); expect(arcadeInjuryFor({ ...event("hit", "uppercut:head"), event_id: 1 }, downed, tko, leftPunch)).toBe("decapitation"); expect(arcadeInjuryFor({ ...event("hit", "hook:body"), event_id: 0 }, downed, tko, leftPunch)).toBe("dismember_right"); - expect(arcadeInjuryFor({ ...event("hit", "hook:body"), event_id: 1, amount: 80 }, downed, tko, leftPunch)).toBe("shoulder_right"); + expect(arcadeInjuryFor({ ...event("hit", "hook:body"), event_id: 1, amount: 45 }, downed, tko, leftPunch)).toBe("shoulder_right"); expect(arcadeInjuryFor({ ...event("hit", "hook:body"), event_id: 0 }, downed, tko, rightPunch)).toBe("dismember_left"); - expect(arcadeInjuryFor({ ...event("hit", "hook:body"), event_id: 1, amount: 80 }, downed, tko, rightPunch)).toBe("shoulder_left"); + expect(arcadeInjuryFor({ ...event("hit", "hook:body"), event_id: 1, amount: 45 }, downed, tko, rightPunch)).toBe("shoulder_left"); expect(arcadeInjuryFor({ ...event("hit", "straight:body"), event_id: 1 }, downed, tko, rightPunch)).toBe("ribs_left"); }); @@ -183,6 +183,71 @@ describe("a knockout by the count", () => { }); }); +describe("screen gore", () => { + const blow = (kind: string, amount: number) => ({ kind, amount }); + + it("flashes red hardest when the viewer's own fighter is hit or floored, and for any big clean punch with blood on", () => { + expect(hitFlash(blow("hit", 60), true, "off")).toBeCloseTo(0.5, 6); + expect(hitFlash(blow("knockdown", 2), true, "full")).toBe(1); + expect(hitFlash(blow("counter_hit", 140), false, "full")).toBeCloseTo(0.75, 6); + expect(hitFlash(blow("hit", 100), false, "full")).toBeCloseTo(0.5, 6); + expect(hitFlash(blow("hit", 100), false, "full")).toBeLessThan(hitFlash(blow("hit", 100), true, "full")); + expect(hitFlash(blow("knockdown", 1), false, "full")).toBeCloseTo(0.85, 6); + expect(hitFlash(blow("hit", 50), false, "full")).toBeGreaterThan(0.1); + expect(hitFlash(blow("hit", 49), false, "full")).toBe(0); + expect(hitFlash(blow("hit", 140), false, "reduced")).toBeLessThan(hitFlash(blow("hit", 140), false, "full") * 0.5); + expect(hitFlash(blow("hit", 140), false, "off")).toBe(0); + }); + + it("spurts blood from the face of a man any solid punch lands on, longer and harder the harder it lands and the worse he is cut", () => { + const punch = (kind: string, amount: number, blood: number, detail = "straight:head") => ({ kind, amount, blood, detail }); + expect(punchGush(punch("hit", 49, 16))).toBeNull(); + expect(punchGush(punch("block", 120, 40))).toBeNull(); + expect(punchGush(punch("hit", 65, 25, "hook:body"))).toBeNull(); + const clean = punchGush(punch("hit", 64, 21, "hook:head"))!; + const cut = punchGush(punch("hit", 64, 81, "hook:head"))!; + expect(clean.seconds).toBeGreaterThan(0.9); + expect(cut.seconds).toBeGreaterThan(clean.seconds * 2); + expect(cut.rate).toBeGreaterThan(clean.rate); + expect(punchGush(punch("counter_hit", 140, 60))!.rate).toBeGreaterThan(cut.rate); + // A hard body shot makes him cough it up. + expect(punchGush(punch("hit", 80, 26, "hook:body"))).not.toBeNull(); + }); + + it("darkens the hurt vignette from the first damage at full blood, as it always did otherwise", () => { + expect(hurtVignette(100, "full")).toBe(0); + expect(hurtVignette(300, "full")).toBeGreaterThan(0.15); + expect(hurtVignette(2000, "full")).toBeGreaterThan(0.5); + expect(hurtVignette(5000, "full")).toBe(0.65); + expect(hurtVignette(300, "reduced")).toBe(0); + expect(hurtVignette(5000, "off")).toBe(0.3); + }); + + it("flashes for the opponent's big clean punch, and draws the blood on the lens unless motion is reduced", async () => { + const { mockHudContext } = await import("../test/fixtures"); + const event = { ...{ event_id: 3, tick: 40, kind: "counter_hit", actor_id: "two", target_id: "one", amount: 130, detail: "straight:head", blood: 60, direction: -1, action_id: null } }; + const settings = { reducedMotion: false, blood: "full" }; + const drawLens = vi.fn(); + const stub = Object.assign(Object.create(FightRenderer.prototype) as Record, { + pendingContacts: [{ event, presentationEvent: event, presentImpact: true, reactAmount: null, contactTick: 40, recipientIndex: 0, puncherIndex: 1, injury: null }], + buffer: { latest: () => snapshot() }, presentFightEvent: vi.fn(), mapping: worldMapping({ tick_rate: 30, ring_half_width: 500, ring_half_height: 500 }), contactPoint: new THREE.Vector3(), mouthPoint: new THREE.Vector3(), + effects: { addEvent: vi.fn(), spawnTeeth: vi.fn(), drawLens }, settings: () => settings, arena: { excite: vi.fn() }, viewerId: "two", + arcadeInjuries: [null, null], graphs: null, headWorldPose: () => null, knockOutMouthpiece: vi.fn(), onContact: null, viewerHitFlash: 0, + hudCanvas: { getBoundingClientRect: () => ({ width: 1280, height: 720 }), width: 0, height: 0, getContext: () => mockHudContext([]) }, + hudViewport: { width: 0, height: 0 }, players: {}, final: null, frameSeconds: 0, finalRevealAt: 0, reconnectMs: 0, simulation: { tick_rate: 30 }, roundStats: null, replay: null, inputLatencyMs: null, + roundCalloutUntil: 0, roundCalloutRound: 0, eventCallout: null, roundClock: { ticks: () => null }, avatars: { get: () => null }, drawCaption: vi.fn(), pendingRefereeEvents: [], refereeReplayAt: null, + }); + (FightRenderer.prototype as unknown as { fireContacts(this: unknown, tick: number): void }).fireContacts.call(stub, 50); + expect(stub.viewerHitFlash).toBeCloseTo(100 / 140, 6); + const overlay = (FightRenderer.prototype as unknown as { drawHudOverlay(this: unknown, frame: unknown): void }).drawHudOverlay; + overlay.call(stub, snapshot()); + expect(drawLens).toHaveBeenCalledWith(expect.anything(), 1280, 720); + settings.reducedMotion = true; + overlay.call(stub, snapshot()); + expect(drawLens).toHaveBeenCalledOnce(); + }); +}); + describe("referee spacing", () => { it("stands off during the action, steps in for a clinch and tightest over a count", () => { expect(refereeSpacing(false, false).standoff).toBeGreaterThan(refereeSpacing(false, true).standoff); @@ -193,15 +258,20 @@ describe("referee spacing", () => { }); describe("knockout replay injuries", () => { - it("reattaches severed parts and caved-in ribs for the replay but leaves dislocations in place", () => { - expect(replayReattaches("decapitation")).toBe(true); - expect(replayReattaches("dismember_left")).toBe(true); - expect(replayReattaches("dismember_right")).toBe(true); - expect(replayReattaches("ribs_left")).toBe(true); - expect(replayReattaches("ribs_right")).toBe(true); - expect(replayReattaches("jaw_dislocation")).toBe(false); - expect(replayReattaches("shoulder_left")).toBe(false); - expect(replayReattaches("shoulder_right")).toBe(false); + it("puts every finisher back for the replay to do again at its impact, the broken jaw and the torn shoulder too", () => { + const startReplay = (FightRenderer.prototype as unknown as { startReplay(this: unknown, plan: unknown): void }).startReplay; + const impact = { ...event("counter_hit", "hook:head"), event_id: 30, tick: 400 }; + for (const injury of ["decapitation", "head_burst", "eye_left", "dismember_right", "jaw_dislocation", "shoulder_left", "ribs_right"]) { + const restoreInjury = vi.fn(); + const stub = { + simulation: { tick_rate: 30 }, frameSeconds: 0, final: null, graphs: null, commentary: { replay: vi.fn() }, restoreInjury, + arcadeInjuries: [null, injury], arcadeInjuryEvents: [null, impact], replayInjuries: [null, null], pendingContacts: [], effects: { returnMouthpiece: vi.fn(), stopGush: vi.fn() }, + lastKnockdown: { knockdown: { ...impact, event_id: 31, kind: "knockdown" }, hit: impact, finisher: null }, liveFallTicks: [null, null], + }; + startReplay.call(stub, { snapshots: [snapshot(380), snapshot(400)], impact, durationSeconds: 3 }); + expect(stub.replayInjuries[1], injury).toEqual({ injury, event: impact }); + expect(restoreInjury).toHaveBeenCalledWith(1); + } }); }); @@ -405,6 +475,14 @@ describe("decision ceremony", () => { for (let frame = 120; frame < 200; frame += 1) methods.ceremonyFighters.call(stub, ceremony, standing(), 1 / 60, frame / 60); expect(announced).toEqual(["level", "level"]); expect(raised.at(-1)).toEqual(["red", "blue"]); + // A referee lying dead on the canvas raises nobody's arm; the verdict is still announced. + const dead = { ...stub, referee: { isDown: true, raise: (...wrists: unknown[]) => raised.push(wrists) } }; + const before = raised.length; + const afterHim: Staged = { winnerSeat: 0, positions: CEREMONY_MARKS.map(({ x, y }) => ({ x, y })), refereeArrived: true, arrivedAt: null, announced: false }; + announced.length = 0; + for (let frame = 0; frame < 200; frame += 1) methods.ceremonyFighters.call(dead, afterHim, standing(), 1 / 60, frame / 60); + expect(announced).toEqual(["winner", "loser"]); + expect(raised.length).toBe(before); }); }); @@ -506,6 +584,7 @@ describe("players' pictures", () => { roundClock: new RoundClock(), avatars, drawCaption: () => {}, + effects: { drawLens: () => {} }, }; const overlay = (FightRenderer.prototype as unknown as { drawHudOverlay(this: unknown, frame: unknown): void }).drawHudOverlay; overlay.call(self, snapshot()); diff --git a/web/hands/src/render/renderer.ts b/web/hands/src/render/renderer.ts index 3e7de53d..ace04ce5 100644 --- a/web/hands/src/render/renderer.ts +++ b/web/hands/src/render/renderer.ts @@ -9,23 +9,24 @@ import { coarsePointer } from "../input/touch"; import { FIGHTER_RADIUS, REST_CORNER_OFFSET, RING_CORNER_REACH, RING_HALF_HEIGHT, RING_HALF_WIDTH, punchTiming, styleTiming } from "../manifest"; import { EVASION_STAMINA, EVASION_TICKS, EvasionPrediction, MovementPrediction, attackTicksRemaining, constrainPrediction, isEvasion, predictedDefense, predictedPunchTiming, ringPoint, type HeldInput } from "../prediction"; import type { BloodLevel, Settings } from "../settings"; -import type { CombatEvent, EngineSnapshot, FighterSnapshot, FinalMessage, Hand, MatchResult, PublicPlayer, PunchClass, SemanticAction, SimulationInfo } from "../types"; +import type { CombatEvent, EngineSnapshot, FighterSnapshot, FinalMessage, Hand, MatchResult, PublicPlayer, PunchClass, RefereeSnapshot, SemanticAction, SimulationInfo, Target } from "../types"; import { buildArena, type BuiltArena } from "./arena"; import { CameraDirector, CUTMAN_WORK_DEGREES, CUTMAN_WORK_DISTANCE, FIGHTER_CAM_FOV_SCALE, FighterCam, SECONDS_OUT, ceremonyShot, cornerFrame, cornerPoint, cornerShot, cornerShotProgress } from "./camera"; import { Avatars } from "./avatars"; import { captionSlot, drawCaption } from "./caption"; import { CommentaryDirector, type CrowdCue } from "./commentary"; -import { Effects3D, type BakedPart, type SprayDirection } from "./effects"; +import { DESKTOP_GORE, Effects3D, PHONE_GORE, REFEREE_GUSH, type BakedPart, type SprayDirection } from "./effects"; import { BoxingGraph, SkinnedBoxer, loadBoxerGlb, releaseFighterGpu, type ArcadeDislocation, type CutmanProp } from "./graph"; import { drawHud, finalRevealDelay, hudScale, lagWarning, resultCard, resultCardLayout, RoundStatsTracker, STOPPAGE_METHODS, RoundClock, wasBlocked, type RoundPunchStats } from "./hud"; import { BURST_CUT_HEIGHT, EYE_LIDS, NECK_CUT_DEPTH, NECK_CUT_HEIGHT, NECK_CUT_SLOPE, type InjuryShading } from "./injury"; -import { BIG_SHOT, closeCut, cutRim, teethFor, HARD_SHOT } from "./gore"; +import { closeCut, cutRim, teethFor, HARD_SHOT } from "./gore"; import { mouthpieceFlies } from "./mouthpiece"; import { OFFICIAL_LOOKS, lookFor, lookShape, type FighterLook } from "./looks"; import { BLUE_CORNER_OUTFIT, CUTMAN_OUTFIT, RED_CORNER_OUTFIT, REFEREE_OUTFIT } from "./outfit"; import { ResolutionScaler } from "./quality"; import { RockedVision, rockedLevel } from "./rocked"; -import { planKnockoutReplay, replayTick, type ReplayPlan } from "./replay"; +import { planKnockoutReplay, REFEREE_REPLAY, REPLAY_TAIL_SECONDS, replayTick, type ReplayPlan } from "./replay"; +import { GloveGlow, ImpactFlash, glowTexture } from "./power"; import { GloveTrail } from "./trails"; export type ArcadeInjury = @@ -293,7 +294,26 @@ const CROWD_EXCITEMENT: Readonly> = { hit: 0.18, counter_ const CONTACT_KINDS = new Set(["hit", "counter_hit", "block", "perfect_block", "guard_break", "knockdown", "parry", "body_collapse", "eye_shut"]); /** Events that change how a fighter moves or what the broadcast says, but carry no impact of their own. */ const UNIMPACTFUL_KINDS = new Set(["parry", "body_collapse", "eye_shut"]); +/** The contacts of the player's own punch shown as soon as they arrive (see push). */ +const OWN_EARLY_CONTACTS = new Set(["hit", "counter_hit", "block", "perfect_block"]); const BOX_CALLOUT_SECONDS = 1.2; +/** The referee's id in the engine's events: a punch that lands on him, his bleeding, his fall. */ +export const REFEREE_ID = "referee"; +/** + * How long his fall plays live before it is replayed, and how long the broadcast shouts about it. The live fall and + * the replay (REFEREE_REPLAY) fit inside the engine's five-second referee_down phase, with room for the playback delay. + */ +export const REFEREE_REPLAY_DELAY_SECONDS = 0.8; +const REFEREE_DOWN_CALLOUT_SECONDS = 2.4; +/** How quickly the drawn referee closes on where the engine stands him: about 50 ms behind his own footwork. */ +const REFEREE_FOLLOW_RATE = 20; +/** The fastest the drawn referee moves, in m/s: a brisk step (his break, REFEREE_BREAK_SPEED, fits under it), never a jump. */ +const REFEREE_DRAWN_SPEED = 2.5; +const REFEREE_KINDS: ReadonlySet = new Set(["referee_hit", "referee_down"]); + +/** The camera's kick from each landed power punch, in metres, and the most it builds to. */ +const POWER_SHAKE = 0.05; +const POWER_SHAKE_LIMIT = 0.08; const EVENT_CALLOUTS: Readonly> = { parry: { text: "PARRIED", seconds: 1 }, eye_shut: { text: "EYE SWOLLEN SHUT", seconds: 1.6 }, @@ -398,16 +418,23 @@ export function presentationTickFor(snapshot: EngineSnapshot): number { return snapshot.result === null ? snapshot.tick - 1 : snapshot.tick; } -/** A straight this hard to the head takes it off: most land for 30 to 80. */ -const DECAPITATING_STRAIGHT = 80; +/** + * Most punches land for 30 to 80. A straight this hard to the head takes it off, and an uppercut this hard; + * a hook or a jab this hard forces an eye out; a body hook this hard takes the hand covering the ribs off. + */ +const DECAPITATING_STRAIGHT = 50; +const DECAPITATING_UPPERCUT = 40; +const GOUGING_PUNCH = 40; +const DISMEMBERING_HOOK = 50; const PUNCH_CLASSES: readonly string[] = ["jab", "straight", "hook", "uppercut"]; /** - * The finisher the punch that ends the bout earns, by where it landed, what it was and how hard it was: - * - to the head, a flash knockout or a big counter bursts it, a hard uppercut or straight takes it off, a - * hard hook forces out the eye on the side it lands, and anything lighter dislocates the jaw; - * - to the body, a hook comes round through the elbow covering the ribs, so a big one takes the forearm - * off and a hard one puts the shoulder out; otherwise the ribs it lands on cave in. + * The finisher the punch that ends the bout earns, by where it landed, what it was and how hard it was. Every + * one of them is gory: + * - to the head, a flash knockout or a hard counter bursts it, an uppercut or a straight takes it off, a hook + * or a jab forces out the eye on the side it lands, and anything lighter breaks the jaw open; + * - to the body, a hook comes round through the elbow covering the ribs, so a hard one takes the forearm off + * and a light one tears the shoulder open; otherwise the ribs it lands on cave in and burst. */ export function arcadeInjuryFor( event: CombatEvent, @@ -422,13 +449,12 @@ export function arcadeInjuryFor( const struck = key?.[1] === "right" ? "left" : "right"; const amount = event.amount; if (event.detail.endsWith(":head")) { - if (result?.finish_method === "flash_ko" || (event.kind === "counter_hit" && amount >= BIG_SHOT)) return "head_burst"; - if ((punch === "uppercut" && amount >= HARD_SHOT) || (punch === "straight" && amount >= DECAPITATING_STRAIGHT)) return "decapitation"; - if (punch === "hook" && amount >= HARD_SHOT) return `eye_${struck}`; + if (result?.finish_method === "flash_ko" || (event.kind === "counter_hit" && amount >= HARD_SHOT)) return "head_burst"; + if ((punch === "uppercut" && amount >= DECAPITATING_UPPERCUT) || (punch === "straight" && amount >= DECAPITATING_STRAIGHT)) return "decapitation"; + if ((punch === "hook" || punch === "jab") && amount >= GOUGING_PUNCH) return `eye_${struck}`; return "jaw_dislocation"; } - if (punch === "hook" && amount >= BIG_SHOT) return `dismember_${struck}`; - if (punch === "hook" && amount >= HARD_SHOT) return `shoulder_${struck}`; + if (punch === "hook") return amount >= DISMEMBERING_HOOK ? `dismember_${struck}` : `shoulder_${struck}`; return `ribs_${struck}`; } import { buildRing, disposeRing, nearRopeOpacityFor, type BuiltRing } from "./ring"; @@ -812,7 +838,7 @@ export function bakeSeveredHead(boxer: SkinnedBoxer, pivotPosition: THREE.Vector function blankFighter(playerId: string): FighterSnapshot { return { player_id: playerId, x: 0, y: 0, facing: 1, facing_x: 1000, facing_y: 0, velocity_x: 0, velocity_y: 0, - stance: "orthodox", style: "balanced", defense: "guard_high", stamina: 1000, maximum_stamina: 1000, conditioning: 1000, guard: 700, poise: 600, + stance: "orthodox", style: "balanced", defense: "guard_high", stamina: 1000, maximum_stamina: 1000, conditioning: 1000, guard: 700, guard_broken: false, poise: 600, trauma: { head: 0, body: 0, left_eye: 0, right_eye: 0, left_cut: 0, right_cut: 0, swelling: 0, bleeding: 0 }, knockdowns: 0, warnings: 0, deductions: 0, stunned_ticks: 0, is_downed: false, action: null, action_hand: null, action_target: null, action_power: null, action_id: null, action_key: null, @@ -865,6 +891,36 @@ export function replayCameraSide(midX: number, midZ: number, nx: number, nz: num return room(preferred) >= distance * 0.8 || room(preferred) >= room(-preferred) ? preferred : (-preferred as 1 | -1); } +/** + * How hard a landed blow flashes the screen red: the viewer's own fighter hit, by how hard, and floored, all + * the way; any big clean punch and any knockdown, more faintly, as a gory broadcast would, with blood on. + */ +export function hitFlash(event: Pick, own: boolean, blood: BloodLevel): number { + if (own) return event.kind === "knockdown" ? 1 : Math.min(1, 0.35 + event.amount / 400); + const gore = blood === "full" ? 1 : blood === "reduced" ? 0.4 : 0; + return gore * (event.kind === "knockdown" ? 0.85 : event.amount >= 50 ? Math.min(0.75, (event.amount - 30) / 140) : 0); +} + +/** + * How long and how hard blood spurts from the nose and mouth of a man a clean punch lands on: from a punch of + * 50 to the head or 70 to the body, longer and harder the harder it lands and the worse he is cut. + */ +export function punchGush(event: Pick): { seconds: number; rate: number } | null { + if (event.kind !== "hit" && event.kind !== "counter_hit") return null; + if (event.amount < (event.detail.endsWith(":body") ? 70 : 50)) return null; + const blood = Math.min(100, Math.max(0, event.blood)); + return { seconds: 0.6 + blood / 50, rate: 150 + event.amount * 1.5 + blood * 2 }; +} + +/** + * How dark the red hurt vignette is for the worst head and body damage in the ring: from the first damage + * that counts at full blood, and from heavier damage, half as dark at most, otherwise. + */ +export function hurtVignette(trauma: number, blood: BloodLevel): number { + if (blood === "full") return trauma > 100 ? Math.min(0.65, trauma / 1800) : 0; + return trauma > 350 ? Math.min(0.3, trauma / 4600) : 0; +} + /** Whether the server would start a punch for this fighter now. */ export function canStartPunch(fighter: FighterSnapshot): boolean { return !fighter.is_downed @@ -884,25 +940,39 @@ export function knockdownFinisher(hit: CombatEvent | null, snapshot: EngineSnaps } const POOL_SEVERITY = 0.2; -const POOL_RATE = 2; -const POOL_REACH = 0.42; +/** Spills a second into the pool under a downed fighter, and how far it spreads at most, in metres. */ +export const POOL_RATE = 5; +const POOL_REACH = 1.1; /** - * A finisher's open wound bleeds out whatever the engine says of his cuts: as badly as the worst cut does - * (the pool's ceiling), three times as fast, and spreading out to 0.8 m from it, which takes about 18 s. + * Every finisher leaves an open wound that bleeds out whatever the engine says of his cuts: as badly as the + * worst cut does (the pool's ceiling), more than twice as fast, and spreading out to 2 m from it, which takes about 20 s. */ -const OPEN_WOUNDS: ReadonlySet = new Set(["decapitation", "head_burst", "eye_left", "eye_right", "dismember_left", "dismember_right", "ribs_left", "ribs_right"]); const OPEN_WOUND_SEVERITY = 1.6; -const OPEN_WOUND_POOL_RATE = 3; -const OPEN_WOUND_POOL_REACH = 0.8; +const OPEN_WOUND_POOL_RATE = 2.4; +const OPEN_WOUND_POOL_REACH = 2; /** Under the chin, from the middle of the skull, in the head's frame. */ const UNDER_THE_CHIN = new THREE.Vector3(0, -0.1, 0.08); +/** The mouth, from the middle of the skull, and the way blood pours out of it, in the head's frame. */ +const MOUTH = new THREE.Vector3(0, -0.07, 0.1); +const OUT_OF_THE_MOUTH = new THREE.Vector3(0, -0.35, 1); +/** A man going down pours blood from his nose and mouth for this long, this many drops a second at first. */ +const KNOCKDOWN_GUSH_SECONDS = 3; +const KNOCKDOWN_GUSH_RATE = 320; +/** Teeth a broken jaw spills. */ +const JAW_TEETH = 8; +/** How far toward the puncher from the middle of the skull, and from the chest bone, a punch lands on the face and the chest. */ +const HEAD_CONTACT_REACH = 0.08; +const CHEST_CONTACT_REACH = 0.12; +/** Where a fighter pours blood from a wound he carries: his mouth (a knockdown or a broken jaw), a shoulder or the ribs on one side. */ +type WoundSite = "mouth" | "shoulder_left" | "shoulder_right" | "ribs_left" | "ribs_right"; +const woundSite = (injury: ArcadeInjury | null): WoundSite => (injury === "shoulder_left" || injury === "shoulder_right" || injury === "ribs_left" || injury === "ribs_right" ? injury : "mouth"); /** * How far the pool under a downed fighter has spread after `count` spills, in metres: fast at first, then slower, * wider the worse he bleeds, up to `reach`. */ export function poolRadius(count: number, severity: number, reach = POOL_REACH): number { - return Math.min(reach, 0.05 + 0.045 * Math.sqrt(Math.max(0, count)) * Math.min(1.6, Math.max(0, severity))); + return Math.min(reach, 0.06 + 0.08 * Math.sqrt(Math.max(0, count)) * Math.min(1.6, Math.max(0, severity))); } /** @@ -916,9 +986,9 @@ export function fighterDown(fighter: FighterSnapshot, graph: { readonly isDown: /** How deep (bind-space centimetres) and how wide a torso finisher caves the ribs in: twice the deepest dent a punch leaves. */ const RIBS_DENT = 6; const RIBS_DENT_RADIUS = 11; -/** The burst of blood from caved-in ribs is thrown at rib height, while the chest is still this high off the canvas. */ -const RIBS_BURST_CHEST_HEIGHT = 0.9; -const RIBS_BURST_EVENT_OFFSET = 7; +/** Caved-in ribs burst open this far out to the side of the chest bone and this far below it, in metres. */ +const RIBS_REACH = 0.13; +const RIBS_DROP = 0.06; /** * Ribs a torso finisher caved in on the fighter's `side`: a deep dent, black with bruising and running @@ -930,9 +1000,20 @@ export function caveInRibs(shading: InjuryShading, side: "left" | "right"): void shading.set(site, { bruise: 1.2, swell: 0, blood: 1.4 }); } -/** Whether the knockout replay puts this injury back so it can happen again on screen. */ -export function replayReattaches(injury: ArcadeInjury): boolean { - return injury !== "jaw_dislocation" && injury !== "shoulder_left" && injury !== "shoulder_right"; +/** + * A jaw a finisher broke loose: the mouth split and pouring blood down the chin, the neck and the chest. Set + * every frame over what the engine's trauma paints. + */ +export function breakJaw(head: InjuryShading, body: InjuryShading): void { + head.set("mouth", { cut: 1, blood: 1.4 }); + head.set("chin", { bruise: 1.2 }); + body.set("neckSmear", { blood: 1.4 }); +} + +/** A shoulder a finisher tore open, running with blood down the chest. Set every frame over what the engine's trauma paints. */ +export function tearShoulder(body: InjuryShading, side: "left" | "right"): void { + body.set(side === "left" ? "leftShoulderSmear" : "rightShoulderSmear", { blood: 1.4 }); + body.set(side === "left" ? "leftPec" : "rightPec", { bruise: 1.1 }); } const eyeVertices = new WeakMap(); @@ -987,15 +1068,15 @@ export function refereeSpacing(downed: boolean, clinched: boolean, breaking = fa return { standoff: 2.05, clearance: 1.45 }; } -function refereeSnapshot(position: THREE.Vector3, yaw: number, velocity: THREE.Vector3, mapping: WorldMapping): { self: FighterSnapshot; focus: FighterSnapshot } { +function refereeSnapshot(position: THREE.Vector3, yaw: number, velocity: THREE.Vector3, mapping: WorldMapping, engine: RefereeSnapshot | null = null): { self: FighterSnapshot; focus: FighterSnapshot } { const simX = position.x / mapping.x(1); const simY = position.z / mapping.z(1); const base: FighterSnapshot = { player_id: "referee", x: simX, y: simY, facing: 1, facing_x: Math.round(Math.sin(yaw) * 1000), facing_y: Math.round(-Math.cos(yaw) * 1000), velocity_x: velocity.x / mapping.x(1) / 30, velocity_y: velocity.z / mapping.z(1) / 30, - stance: "orthodox", style: "balanced", defense: "none", stamina: 1000, maximum_stamina: 1000, conditioning: 1000, guard: 700, poise: 600, - trauma: { head: 0, body: 0, left_eye: 0, right_eye: 0, left_cut: 0, right_cut: 0, swelling: 0, bleeding: 0 }, - knockdowns: 0, warnings: 0, deductions: 0, stunned_ticks: 0, is_downed: false, + stance: "orthodox", style: "balanced", defense: "none", stamina: 1000, maximum_stamina: 1000, conditioning: 1000, guard: 700, guard_broken: false, poise: 600, + trauma: engine?.trauma ?? { head: 0, body: 0, left_eye: 0, right_eye: 0, left_cut: 0, right_cut: 0, swelling: 0, bleeding: 0 }, + knockdowns: 0, warnings: 0, deductions: 0, stunned_ticks: engine?.stunned_ticks ?? 0, is_downed: false, action: null, action_hand: null, action_target: null, action_power: null, action_id: null, action_key: null, action_start_tick: 0, action_startup_ticks: 0, action_active_ticks: 0, action_recovery_ticks: 0, action_contact_tick: null, queued_actions: 0, clinch_startup_ticks: 0, clinch_ticks: 0, is_foul_recovery_target: false, taunt_ticks: 0, corner_choice: null, @@ -1016,6 +1097,13 @@ export class FightRenderer { private referee: BoxingGraph | null = null; private cornermen: [BoxingGraph, BoxingGraph] | null = null; private trails: GloveTrail[] = []; + /** A power punch's heat on each glove (seat by seat, left then right) and its flash where it lands on each fighter. */ + private glows: GloveGlow[] = []; + private impactFlashes: ImpactFlash[] = []; + private glowMap: THREE.CanvasTexture | null = null; + private readonly powerHitPoint = new THREE.Vector3(); + /** The camera's extra kick from a landed power punch, on top of the effects' shake. */ + private powerShake = 0; private readonly trailGlove = new THREE.Vector3(); private readonly cornermanPosition = new THREE.Vector3(); private readonly cornermanVelocity = new THREE.Vector3(); @@ -1028,6 +1116,17 @@ export class FightRenderer { private readonly cutmanLast = [new THREE.Vector3(), new THREE.Vector3()]; private readonly refereePosition = new THREE.Vector3(0.4, 0, -2.1); private readonly refereeVelocity = new THREE.Vector3(); + private readonly refereeHead = new THREE.Vector3(); + /** The referee's moments waiting for the render clock to reach them: a punch landing on him, his bleeding, his fall. */ + private readonly pendingRefereeEvents: CombatEvent[] = []; + /** When the replay of the referee's fall starts, once it has played live. */ + private refereeReplayAt: { readonly at: number; readonly impact: CombatEvent } | null = null; + /** Spills into the pool under the dead referee due and made so far. */ + private refereePoolAccumulator = 0; + private refereePoolCount = 0; + /** He was put down without his fall being seen, to be settled as soon as the physics has him. */ + private refereeFallUnseen = false; + private refereePlaced = false; private readonly effects: Effects3D; private readonly director = new CameraDirector(); private readonly fighterCam = new FighterCam(); @@ -1037,6 +1136,8 @@ export class FightRenderer { private readonly mapping: WorldMapping; private readonly buffer: SnapshotBuffer; private readonly localInput: (() => HeldInput | null) | null; + /** Whether the player holds a power modifier, for the HUD to say his next punch is a power punch. */ + private readonly powerHeld: (() => boolean) | null; /** Sequence of the input frame that carried a press, once it has gone out; null before then. */ private readonly inputSequenceOf: ((actionId: string) => number | null) | null; private readonly movement = new MovementPrediction(); @@ -1133,7 +1234,7 @@ export class FightRenderer { private readonly tmpCamera = new THREE.Vector3(); private readonly roundStats = new RoundStatsTracker(); private readonly history: EngineSnapshot[] = []; - private lastKnockdown: { readonly knockdown: CombatEvent; readonly hit: CombatEvent | null; readonly finisher: ArcadeInjury | null } | null = null; + private lastKnockdown: { readonly knockdown: CombatEvent; readonly hit: CombatEvent | null; readonly blocked: boolean; readonly finisher: ArcadeInjury | null } | null = null; /** A flash knockout ends the bout without a knockdown: the punch that did it and the fighter it put down. */ private flashKnockout: { readonly hitEventId: number; readonly loserId: string } | null = null; private readonly bodyPoint = new THREE.Vector3(); @@ -1157,8 +1258,17 @@ export class FightRenderer { recipientIndex: number; puncherIndex: number; injury: ArcadeInjury | null; + /** Thrown as a power punch. */ + power: boolean; }> = []; - onContact: ((event: CombatEvent) => void) | null = null; + /** A contact as it is shown, and whether a power punch made it. */ + onContact: ((event: CombatEvent, power: boolean) => void) | null = null; + /** + * The player's own punch starting on screen, on the press's time: its whoosh belongs to this moment, not to the + * server's word of it a round trip later. + */ + onOwnPunch: ((punchClass: PunchClass, power: boolean, actionId: string) => void) | null = null; + private soundedPress: string | null = null; onArcadeInjury: ((injury: ArcadeInjury, event: CombatEvent) => void) | null = null; /** The ring announcer's lines for a voice to read. */ onAnnouncement: ((lines: readonly string[]) => void) | null = null; @@ -1185,15 +1295,19 @@ export class FightRenderer { private readonly tmpStumpAcross = new THREE.Vector3(); private readonly tmpPart = new THREE.Vector3(); private readonly tmpPartQuaternion = new THREE.Quaternion(); + /** Where a wound a fighter carries is and the way it faces, from tornWound. */ + private readonly woundPoint = new THREE.Vector3(); + private readonly woundAxis = new THREE.Vector3(); constructor( private readonly canvas: HTMLCanvasElement, private readonly simulation: SimulationInfo = DEFAULT_SIM, private readonly settings: () => Settings, - options: { manualClock?: boolean; localInput?: () => HeldInput | null; inputSequenceOf?: (actionId: string) => number | null } = {}, + options: { manualClock?: boolean; localInput?: () => HeldInput | null; inputSequenceOf?: (actionId: string) => number | null; powerHeld?: () => boolean } = {}, ) { this.manualClock = options.manualClock === true; this.localInput = options.localInput ?? null; + this.powerHeld = options.powerHeld ?? null; this.inputSequenceOf = options.inputSequenceOf ?? null; this.buffer = new SnapshotBuffer(8, simulation.tick_rate); this.mapping = worldMapping(simulation); @@ -1215,8 +1329,9 @@ export class FightRenderer { this.scene.add(this.ring.group); this.arena = buildArena(); this.scene.add(this.arena.group); - this.effects = new Effects3D(this.scene, coarsePointer() ? 1024 : 2048); + this.effects = new Effects3D(this.scene, coarsePointer() ? 1024 : 2048, coarsePointer() ? PHONE_GORE : DESKTOP_GORE); this.effects.useUploader(this.renderer); + this.effects.setCamera(this.camera); this.blobTexture = blobShadowTexture(); const blobGeometry = new THREE.PlaneGeometry(1, 1); @@ -1261,8 +1376,8 @@ export class FightRenderer { this.lookIds.fill(null); this.syncInjuryPresentation(0); this.syncInjuryPresentation(1); - const official = new SkinnedBoxer(gltf, { skin: 0xc79b76, gear: 0x3b57b8, look: OFFICIAL_LOOKS.referee, outfit: REFEREE_OUTFIT }); - this.referee = new BoxingGraph(official, this.mapping, { referee: true }); + const official = new SkinnedBoxer(gltf, { skin: 0xc79b76, gear: 0x3b57b8, look: OFFICIAL_LOOKS.referee, outfit: REFEREE_OUTFIT, wounds: true }); + this.referee = new BoxingGraph(official, this.mapping, { referee: true, knockout: true }); const blueCorner = new SkinnedBoxer(gltf, { skin: 0x8a5a3b, gear: 0x1b2230, look: OFFICIAL_LOOKS.blueCorner, outfit: BLUE_CORNER_OUTFIT }); const redCorner = new SkinnedBoxer(gltf, { skin: 0xd9a77c, gear: 0x1b2230, look: OFFICIAL_LOOKS.redCorner, outfit: RED_CORNER_OUTFIT }); this.cornermen = [new BoxingGraph(blueCorner, this.mapping, { referee: true }), new BoxingGraph(redCorner, this.mapping, { referee: true })]; @@ -1272,11 +1387,15 @@ export class FightRenderer { blueCutman.root.visible = false; redCutman.root.visible = false; this.trails = [0x1d4ed8, 0xb91c1c].flatMap((gear) => [0, 1].map(() => new GloveTrail(new THREE.Color(gear).lerp(new THREE.Color(0xffffff), 0.55)))); + const glowMap = glowTexture(); + this.glowMap = glowMap; + this.glows = [0, 1, 2, 3].map(() => new GloveGlow(glowMap)); + this.impactFlashes = [0, 1].map(() => new ImpactFlash(glowMap)); // Compile the skinned materials, and the effects that start hidden (glove trails, blood on the - // canvas, severed parts), off the critical path (parallel shader compile where available) so - // neither the first frame with fighters nor the first bloody hit stalls the page. + // canvas, severed parts, a power punch's glow and flash), off the critical path (parallel shader + // compile where available) so neither the first frame with fighters nor the first bloody hit stalls the page. const staging = new THREE.Group(); - staging.add(first.root, second.root, official.root, blueCorner.root, redCorner.root, blueCutman.root, redCutman.root, ...this.trails.map((trail) => trail.mesh), ...this.effects.compileStandIns()); + staging.add(first.root, second.root, official.root, blueCorner.root, redCorner.root, blueCutman.root, redCutman.root, ...this.trails.map((trail) => trail.mesh), ...this.effects.compileStandIns(), this.glows[0]!.standIn(), ...this.impactFlashes[0]!.standIns()); // A finisher opens a head, which a shader of its own draws, and another its shadow: the first // fighter's head is opened for the warm-up and closed again before it is drawn. const opened = first.headInjury.open; @@ -1289,6 +1408,8 @@ export class FightRenderer { if (this.destroyed) return; this.scene.add(first.root, second.root, official.root, blueCorner.root, redCorner.root, blueCutman.root, redCutman.root); for (const trail of this.trails) this.scene.add(trail.mesh); + for (const glow of this.glows) this.scene.add(glow.mesh); + for (const flash of this.impactFlashes) this.scene.add(flash.group); this.compileShadowsOf(staging); first.headInjury.setOpen(opened); }) @@ -1516,7 +1637,7 @@ export class FightRenderer { const bone = this.graphs?.[seat]?.boxer.rig.bones[mark === 0 ? "gloveL" : "gloveR"]; return raised && bone !== undefined ? bone.getWorldPosition(this.ceremonyWrists[mark]) : null; }; - this.referee?.raise(wrist(1), wrist(0)); + if (this.referee?.isDown !== true) this.referee?.raise(wrist(1), wrist(0)); } return this.drawnFighters; } @@ -1561,7 +1682,8 @@ export class FightRenderer { } private presentFinish(final: FinalMessage): void { - this.referee?.waveOff(); + const refereeDead = this.buffer.latest()?.referee.alive === false; + if (!refereeDead) this.referee?.waveOff(); const fighters = this.buffer.latest()?.fighters; const loserIndex = fighters?.findIndex((fighter) => fighter.player_id !== final.winner_id && fighter.player_id !== null) ?? -1; if (loserIndex >= 0 && this.headCacheValid[loserIndex] && !this.settings().reducedMotion) { @@ -1574,6 +1696,7 @@ export class FightRenderer { const index = fighters?.findIndex((fighter) => fighter.player_id === final.winner_id) ?? -1; if (index < 0) return; this.graphs?.[index]?.celebrate(WINNER_CELEBRATION_SECONDS); + if (refereeDead) return; this.stoppageWinner = index; this.stoppageRaiseAt = this.frameSeconds + STOPPAGE_RAISE_DELAY_SECONDS; } @@ -1717,13 +1840,23 @@ export class FightRenderer { this.replay = { plan, buffer, startedAt: this.frameSeconds, impactFired: false, side: null }; // The replay cuts to other moments: the fighters are drawn there at once, not eased across. this.drawnOffsetsLive = false; - this.commentary.replay(this.frameSeconds); + this.commentary.replay(this.frameSeconds, plan.impact); this.replayFollow = 0; this.replayFollowAt = 0; + if (plan.impact.kind === "referee_down") { + // He is back on his feet for the lead-up and goes down again at its impact; the fighters only box on. + this.referee?.resetTransient(false); + // The physics runs his recorded fall again, so the replay leaves him where the live fall did, in his pool. + this.referee?.primeReplayFall(); + this.effects.stopGush(REFEREE_GUSH); + return; + } for (const index of [0, 1] as const) { + // Whatever was pouring from him live starts again with what the replay shows, not through its lead-up. + this.effects.stopGush(index); const injury = this.arcadeInjuries[index]; const event = this.arcadeInjuryEvents[index]; - if (injury !== null && event !== null && replayReattaches(injury)) { + if (injury !== null && event !== null) { this.replayInjuries[index] = { injury, event }; this.restoreInjury(index); } @@ -1759,7 +1892,15 @@ export class FightRenderer { } private endReplay(): void { + const refereeFall = this.replay?.plan.impact.kind === "referee_down"; this.replay = null; + if (refereeFall) { + // The bout goes on from where it stopped, and he stays where the fall left him. + this.drawnOffsetsLive = false; + const live = this.buffer.latest(); + for (const [index, graph] of (this.graphs ?? []).entries()) graph.resetTransient(live?.fighters[index]?.is_downed === true); + return; + } this.drawnOffsetsLive = false; this.reapplyReplayInjuries(); const live = this.buffer.latest(); @@ -1772,29 +1913,144 @@ export class FightRenderer { if (this.final !== null) this.presentFinish(this.final); } + /** The referee's moments as the render clock reaches them: a punch landing on him, his bleeding and his fall. */ + private fireRefereeEvents(sampledTick: number): void { + for (let index = 0; index < this.pendingRefereeEvents.length;) { + const event = this.pendingRefereeEvents[index]!; + if (event.tick > sampledTick) { + index += 1; + continue; + } + this.pendingRefereeEvents.splice(index, 1); + const live = this.buffer.latest(); + if (event.kind === "referee_down") { + if (live !== null) this.fireRefereeFall(event, live); + this.eventCallout = { text: "THE REFEREE IS DEAD!", until: this.frameSeconds + REFEREE_DOWN_CALLOUT_SECONDS }; + this.refereeReplayAt = { at: this.frameSeconds + REFEREE_REPLAY_DELAY_SECONDS, impact: event }; + } else if (event.kind === "referee_hit") { + if (live !== null) this.punchReferee(event, live, false); + } else if (this.referee !== null) { + this.referee.boxer.rig.bones.head.getWorldPosition(this.refereeHead); + this.effects.addEvent(event, this.refereeHead, this.settings().reducedMotion); + } + } + } + + /** A punch landing on the referee: he snaps away from it, blood flies off him, and the puncher feels it land. */ + private punchReferee(event: CombatEvent, snapshot: EngineSnapshot, falls: boolean): void { + const referee = this.referee; + if (referee === null) return; + const [punchClass, target] = event.detail.split(":") as [PunchClass, Target]; + const puncherIndex = snapshot.fighters.findIndex((fighter) => fighter.player_id === event.actor_id); + const puncher = snapshot.fighters[puncherIndex]; + const hand = (puncher?.action_key?.split(":")[1] ?? null) as Hand | null; + referee.react("hit", target === "body" ? "body" : "head", event.direction, punchClass, hand, falls ? Math.max(event.amount, 140) : event.amount); + referee.boxer.rig.bones.head.getWorldPosition(this.refereeHead); + const spray = puncher === undefined ? undefined : sprayDirection(puncher, { ...puncher, x: snapshot.referee.x, y: snapshot.referee.y }, this.mapping); + const reducedMotion = this.settings().reducedMotion; + this.effects.addEvent({ ...event, kind: falls ? "knockdown" : "hit" }, this.refereeHead, reducedMotion, spray); + // A solid punch makes his face spurt as it does a fighter's; the one that kills him pours instead (fireRefereeFall). + const spurt = falls || reducedMotion ? null : punchGush({ ...event, kind: "hit" }); + const mouth = spurt === null ? null : this.refereeMouth(); + if (spurt !== null && mouth !== null) this.effects.gush(REFEREE_GUSH, mouth.position, mouth.axis, spurt.seconds, spurt.rate, event.event_id); + const power = this.refereePunchPower(event); + if (puncherIndex >= 0) this.graphs?.[puncherIndex]?.landedHit(event.action_id, false, power); + this.onContact?.(event, power); + } + + /** Out cold for good: the knockout physics takes his body where the punch put it. Replayed, the punch lands on him again first. */ + private fireRefereeFall(event: CombatEvent, snapshot: EngineSnapshot, replayed = false): void { + const referee = this.referee; + if (referee === null) return; + const blow = replayed ? this.refereeBlow(event) : null; + if (blow !== null) { + this.punchReferee(blow, snapshot, true); + } else { + referee.boxer.rig.bones.head.getWorldPosition(this.refereeHead); + this.effects.addEvent({ ...event, kind: "knockdown", amount: 160, blood: 80 }, this.refereeHead, this.settings().reducedMotion); + } + // He pours blood from his nose and mouth as he goes down, and it follows him to the canvas. + const mouth = this.settings().reducedMotion ? null : this.refereeMouth(); + if (mouth !== null) this.effects.gush(REFEREE_GUSH, mouth.position, mouth.axis, KNOCKDOWN_GUSH_SECONDS, KNOCKDOWN_GUSH_RATE, event.event_id); + referee.knockOut(); + this.onContact?.(event, false); + } + + /** Whether a punch that landed on the referee was a power punch, as a fighter's is told: from the snapshot it arrived in. */ + private refereePunchPower(event: CombatEvent): boolean { + for (let index = this.history.length - 1; index >= 0; index -= 1) { + const recorded = this.history[index]!; + if (recorded.tick < event.tick) break; + if (recorded.tick !== event.tick) continue; + const puncher = recorded.fighters.find((fighter) => fighter.player_id === event.actor_id); + return puncher !== undefined && puncher.action_id === event.action_id && puncher.action_power === "power"; + } + return false; + } + + /** The punch that put the referee down, landed on the tick he went down; none when he bled out. */ + private refereeBlow(down: CombatEvent): CombatEvent | null { + if (down.action_id === null) return null; + for (let index = this.history.length - 1; index >= 0; index -= 1) { + const recorded = this.history[index]!; + const found = recorded.events.find((event) => event.kind === "referee_hit" && event.action_id === down.action_id && event.tick === down.tick); + if (found !== undefined) return found; + if (recorded.tick < down.tick) break; + } + return null; + } + + /** The replay of the referee's fall holds on him from close in and follows him down to the canvas. */ + private refereeReplayFrame(snapshot: EngineSnapshot, elapsed: number): { position: THREE.Vector3; lookAt: THREE.Vector3; tight: boolean } { + const referee = this.referee!; + const fallen = this.replay?.impactFired === true ? referee.fallBody?.centre(this.bodyPoint) ?? null : null; + referee.boxer.rig.bones.head.getWorldPosition(this.refereeHead); + const focusX = fallen?.x ?? this.mapping.x(snapshot.referee.x); + const focusZ = fallen?.z ?? this.mapping.z(snapshot.referee.y); + // In front of his face and a little to one side, to see the punch land on it, edging round as he goes down. + const orbit = this.refereeYaw + 0.55 + 0.25 * Math.sin(elapsed * 0.6); + const distance = 3.2; + // His head and shoulders while he stands, his head wherever the fall takes it. + const lookY = THREE.MathUtils.clamp(this.refereeHead.y - 0.2, 0.3, 1.6); + this.replayCameraPosition.set( + THREE.MathUtils.clamp(focusX + Math.sin(orbit) * distance, -TIGHT_SHOT_LIMIT, TIGHT_SHOT_LIMIT), + fallen === null ? lookY + 0.1 : 1.1, + THREE.MathUtils.clamp(focusZ + Math.cos(orbit) * distance, -TIGHT_SHOT_LIMIT, TIGHT_SHOT_LIMIT), + ); + this.replayLookAt.set(focusX, lookY, focusZ); + return { position: this.replayCameraPosition, lookAt: this.replayLookAt, tight: true }; + } + private fireReplayImpact(snapshot: EngineSnapshot): void { + const impact = this.replay?.plan.impact; + if (impact?.kind === "referee_down") { + this.fireRefereeFall(impact, snapshot, true); + return; + } const record = this.lastKnockdown; if (record === null) return; const event = record.hit ?? { ...record.knockdown, kind: "hit", amount: 420, blood: 60 }; const { recipientIndex, puncherIndex } = contactParticipants(event, snapshot); const recipient = snapshot.fighters[recipientIndex]; if (recipient === undefined) return; - drawnPlace(this.graphs?.[recipientIndex], recipient, this.mapping, this.contactPoint); const spray = sprayDirection(snapshot.fighters[puncherIndex], recipient, this.mapping); + this.contactOn(recipientIndex, recipient, event.detail.endsWith(":body"), spray, event.direction); this.effects.addEvent(event, this.contactPoint, this.settings().reducedMotion, spray); const puncher = puncherIndex >= 0 ? snapshot.fighters[puncherIndex] : undefined; const keyParts = puncher?.action_key?.split(":") ?? []; const punchClass = (keyParts[0] ?? null) as PunchClass | null; const hand = (keyParts[1] ?? null) as Hand | null; + const power = keyParts[3] === "power"; this.graphs?.[recipientIndex]?.react("hit", event.detail.endsWith(":body") ? "body" : "head", event.direction, punchClass, hand, event.amount); if (record.knockdown.detail === "body" && record.knockdown.tick > event.tick) { this.graphs?.[recipientIndex]?.windedFor((record.knockdown.tick - event.tick) / this.simulation.tick_rate + 0.15, bodySideStruck(puncher?.action_key ?? null)); } if (recipient.player_id === this.flashKnockout?.loserId) this.graphs?.[recipientIndex]?.knockOut(); - if (puncherIndex >= 0) this.graphs?.[puncherIndex]?.landedHit(false); + if (puncherIndex >= 0) this.graphs?.[puncherIndex]?.landedHit(event.action_id, record.blocked, power); // The punch that floored him knocks the gum shield out again, in slow motion. if (event.detail.endsWith(":head") && !this.settings().reducedMotion) this.knockOutMouthpiece(recipientIndex, spray ?? event.direction, event.event_id + REPLAY_EVENT_ID_OFFSET, true); - this.onContact?.(event); + if (power && !record.blocked && !this.settings().reducedMotion) this.presentPowerHit(recipientIndex, event); + this.onContact?.(event, power); this.reapplyReplayInjuries(spray); // What came with the punch and was held for this moment (see startReplay) is shown with it. for (const pending of this.pendingContacts) { @@ -1810,8 +2066,10 @@ export class FightRenderer { const bz = this.mapping.z(b.y); // A portrait screen is too narrow for both fighters up close, so it favours the one being hit; // after the impact every screen follows that fighter down to the canvas. + const refereeFall = this.replay?.plan.impact.kind === "referee_down"; const victim = snapshot.fighters.findIndex((fighter) => fighter.player_id === this.replay?.plan.impact.target_id); const falling = this.replay?.impactFired === true && victim >= 0 && this.headCacheValid[victim] === true; + if (refereeFall && this.referee !== null) return this.refereeReplayFrame(snapshot, elapsed); const follow = 1 - Math.exp(-3 * Math.max(0, elapsed - this.replayFollowAt)); this.replayFollowAt = elapsed; this.replayFollow += ((falling ? 1 : 0) - this.replayFollow) * follow; @@ -1851,6 +2109,15 @@ export class FightRenderer { } const headHeight = falling ? THREE.MathUtils.clamp(this.headCache[victim]!.y, 0.45, 1.28) : 1.28; this.replayLookAt.set(midX, 1.28 + (headHeight - 1.28) * this.replayFollow, midZ); + // A power punch kicks the shot as it does the live camera (presentPowerHit). + const kick = this.settings().reducedMotion ? 0 : this.powerShake; + if (kick > 0.0005) { + const t = elapsed * 61; + this.replayCameraPosition.x = THREE.MathUtils.clamp(this.replayCameraPosition.x + Math.sin(t * 1.31) * kick, -TIGHT_SHOT_LIMIT, TIGHT_SHOT_LIMIT); + this.replayCameraPosition.y += Math.cos(t * 1.97) * kick * 0.6; + this.replayLookAt.x += Math.sin(t * 1.53) * kick * 0.5; + this.replayLookAt.y += Math.cos(t * 2.11) * kick * 0.35; + } return { position: this.replayCameraPosition, lookAt: this.replayLookAt, tight: true }; } @@ -1889,7 +2156,8 @@ export class FightRenderer { const graph = graphs[index]!; if (injury === "head_burst") graph.boxer.setHeadBurst(true); else graph.boxer.setDecapitated(injury === "decapitation"); - graph.boxer.headInjury.setEyeOut(injury === "eye_left" ? "left" : injury === "eye_right" ? "right" : null); + // One eye hangs on its nerve and the other pops clean out, so both sockets are empty. + graph.boxer.headInjury.setEyeOut(injury === "eye_left" || injury === "eye_right" ? "both" : null); graph.boxer.setHandDismembered("left", injury === "dismember_left"); graph.boxer.setHandDismembered("right", injury === "dismember_right"); const dislocation: ArcadeDislocation | null = injury === "jaw_dislocation" @@ -1902,12 +2170,11 @@ export class FightRenderer { } /** - * Severs the head or a hand from the fighter's current pose, flying the way the punch travelled, or - * sets a dislocation, and records it. + * Severs the head or a hand from the fighter's current pose, flying the way the punch travelled, bursts the + * head or forces an eye out, or tears him open where the punch landed, and records it. */ private applyArcadeInjury(index: number, injury: ArcadeInjury, event: CombatEvent, spray?: SprayDirection): boolean { - let applied = this.graphs !== null - && (injury === "jaw_dislocation" || injury === "shoulder_left" || injury === "shoulder_right"); + let applied = false; if (injury === "decapitation") { const pose = this.headWorldPose(index); if (pose !== null) { @@ -1959,17 +2226,12 @@ export class FightRenderer { this.effects.anchorHandStump(index, side, pose.position, pose.quaternion); applied = true; } - } else if (injury === "ribs_left" || injury === "ribs_right") { - // The ribs cave in under the punch (held every frame in draw, see caveInRibs) and blood bursts from the - // side, from rib height while he is still up; on the canvas the wound and the pool tell it. - const graph = this.graphs?.[index]; - const fighter = this.buffer.latest()?.fighters[index]; - if (graph !== undefined && fighter !== undefined) { - if (graph.boxer.rig.bones.upperChest.getWorldPosition(this.tmpPart).y > RIBS_BURST_CHEST_HEIGHT) { - drawnPlace(graph, fighter, this.mapping, this.contactPoint); - const burst: CombatEvent = { ...event, event_id: event.event_id + RIBS_BURST_EVENT_OFFSET, kind: "counter_hit", detail: "hook:body", amount: Math.max(event.amount, BIG_SHOT), blood: 100 }; - this.effects.addEvent(burst, this.contactPoint, false, spray); - } + } else if (injury === "jaw_dislocation" || injury === "shoulder_left" || injury === "shoulder_right" || injury === "ribs_left" || injury === "ribs_right") { + // Torn open where the punch landed: the jaw broken loose, a shoulder put out, or the ribs caved in (each + // held every frame in draw, see breakJaw, tearShoulder and caveInRibs), pouring blood as he lies there. + const wound = this.tornWound(index, woundSite(injury)); + if (wound !== null) { + this.effects.tearOpen(index, wound.position, wound.axis, spray ?? event.direction, event.event_id, injury === "jaw_dislocation" ? JAW_TEETH : 0); applied = true; } } @@ -2086,18 +2348,26 @@ export class FightRenderer { // The server turns a punch or an evasion down outside the fight phase and while the fighter cannot act. const fighter = latest.fighters[index]!; if (latest.phase !== "fight" || !canStartPunch(fighter)) return; - const leadTicks = ((this.inputLatencyMs ?? 60) / 1000) * this.simulation.tick_rate + this.buffer.interpolationDelayTicks; + // A snapshot answering the press is a round trip away; the render clock trails the press by that and its own delay. + const answerTicks = ((this.inputLatencyMs ?? 60) / 1000) * this.simulation.tick_rate; + const leadTicks = answerTicks + this.buffer.interpolationDelayTicks; + const now = this.manualClock ? this.lastManualTime : performance.now(); + const graph = this.graphs?.[index]; if (isEvasion(action.kind)) { - // Behind a punch the server holds it, so it is shown at once only when the fighter is free. - const busy = this.graphs?.[index]?.ownPunchActive === true || attackTicksRemaining(fighter, latest.tick) > 0 || fighter.queued_actions > 0; - if (!busy && action.id !== undefined && fighter.stamina >= EVASION_STAMINA) { - this.evasion.press(action.kind, action.id, this.manualClock ? this.lastManualTime : performance.now(), leadTicks, this.simulation.tick_rate, EVASION_TICKS + styleTiming(fighter.style).evasionTicks); - } + // Behind the player's own punch the server holds it until the punch has landed or missed, then cuts the recovery + // short for it; behind a punch it plays that was never predicted, or anything else it holds, it is left to the server. + const own = graph?.ownPunchActive === true; + if (action.id === undefined || fighter.stamina < EVASION_STAMINA || fighter.queued_actions > 0 || (!own && attackTicksRemaining(fighter, latest.tick) > 0)) return; + const wait = own ? graph.ownTicksToRecovery : 0; + if (own) graph.cutOwnRecovery(); + this.evasion.press(action.kind, action.id, now, leadTicks, this.simulation.tick_rate, EVASION_TICKS + styleTiming(fighter.style).evasionTicks, now + (wait * 1000) / this.simulation.tick_rate); return; } // A fighter who cannot pay for it in full still throws it, as a slow arm punch (see predictedPunchTiming). if (action.kind !== "punch") return; - this.graphs?.[index]?.predict(action, performance.now() / 1000, this.simulation.tick_rate, leadTicks, predictedPunchTiming(fighter, action, latest.tick + 1)); + // It takes the place of a slip, weave or pull the server still holds behind a punch, which then recovers in full. + if (this.evasion.drop(now)) graph?.keepOwnRecovery(); + graph?.predict(action, performance.now() / 1000, this.simulation.tick_rate, leadTicks, predictedPunchTiming(fighter, action, latest.tick + 1), answerTicks); } /** @@ -2107,7 +2377,7 @@ export class FightRenderer { private acknowledgeActions(snapshot: EngineSnapshot, events: readonly CombatEvent[]): void { for (const [index, fighter] of snapshot.fighters.entries()) { const viewer = fighter.player_id === this.viewerId; - if (viewer) this.evasion.acknowledge(fighter, snapshot.phase === "fight", this.inputSequenceOf); + if (viewer && this.evasion.acknowledge(fighter, snapshot.phase === "fight", this.inputSequenceOf)) this.graphs?.[index]?.keepOwnRecovery(); const contacts = events.filter((event) => contactParticipants(event, snapshot).puncherIndex === index); this.graphs?.[index]?.acknowledge(fighter, snapshot.phase === "fight", contacts, viewer ? this.inputSequenceOf : null); } @@ -2127,7 +2397,8 @@ export class FightRenderer { ?? (event.detail === "body" ? this.recordedHit(event) : null); // A punch the guard took can still floor a fighter with no poise left. The replay shows it as it was, // but it earns no finisher. - this.lastKnockdown = { knockdown: event, hit, finisher: hit !== null && wasBlocked(hit, snapshot.events) ? null : knockdownFinisher(hit, snapshot) }; + const blocked = hit !== null && wasBlocked(hit, snapshot.events); + this.lastKnockdown = { knockdown: event, hit, blocked, finisher: blocked ? null : knockdownFinisher(hit, snapshot) }; const downed = snapshot.fighters.findIndex((fighter) => fighter.player_id === event.target_id); this.graphs?.[downed]?.fallToKnee(event.detail === BODY_KNOCKDOWN); } @@ -2137,16 +2408,22 @@ export class FightRenderer { this.flashKnockout = { hitEventId: hit.event_id, loserId: hit.target_id }; // The replay shows the knockout punch and the fall as it would a knockdown. // Its injury, if any, is done live by the punch itself, so nothing is left for the replay to apply. - this.lastKnockdown = { knockdown: { ...hit, kind: "knockdown" }, hit, finisher: null }; + this.lastKnockdown = { knockdown: { ...hit, kind: "knockdown" }, hit, blocked: false, finisher: null }; } } if (event.kind === "referee_break") this.referee?.breakClinch(); + if (REFEREE_KINDS.has(event.kind) || (event.kind === "bleed" && event.actor_id === REFEREE_ID)) this.pendingRefereeEvents.push(event); // The fighter who beat the count is ready and the referee sends them back to it. if (event.kind === "box") this.eventCallout = { text: "BOX!", until: this.frameSeconds + BOX_CALLOUT_SECONDS }; if (event.kind === "body_collapse" && event.target_id === this.viewerId) this.ownCollapseUntil = event.tick + event.amount; this.movement.observe(event, this.viewerId); } this.commentary.observe(snapshot, accepted, this.players, this.simulation.tick_rate, this.frameSeconds); + // The player's own punch, thrown on the press's time, has already reached the opponent on screen when the server's word + // of its contact arrives: that contact is shown at once, not when the delayed clock reaches it. Knockdowns and the end + // of the bout keep to the clock, with the replay and the finish that hang on them. + const viewerSeat = snapshot.fighters.findIndex((fighter) => fighter.player_id === this.viewerId); + const settled = snapshot.result === null && !accepted.some((event) => event.kind === "knockdown"); for (const { event, presentationEvent, presentImpact, reactAmount } of contactPresentationPlan(accepted, snapshot)) { const targetIndex = snapshot.fighters.findIndex((fighter) => fighter.player_id === event.target_id); const actorIndex = snapshot.fighters.findIndex((fighter) => fighter.player_id === event.actor_id); @@ -2163,12 +2440,15 @@ export class FightRenderer { presentationEvent, presentImpact, reactAmount, - contactTick: puncher?.action_contact_tick ?? event.tick, + contactTick: settled && puncherIndex === viewerSeat && OWN_EARLY_CONTACTS.has(event.kind) && this.graphs?.[puncherIndex]?.pressLanded(event.action_id) === true + ? Number.NEGATIVE_INFINITY + : puncher?.action_contact_tick ?? event.tick, recipientIndex, puncherIndex, injury: arcadeInjuryFor(event, snapshot.fighters[recipientIndex], snapshot.result, puncher ?? undefined), + power: puncher !== null && puncher.action_id === event.action_id && puncher.action_power === "power", }); - } else if (event.kind === "bleed") { + } else if (event.kind === "bleed" && event.actor_id !== REFEREE_ID) { this.effects.addEvent(event, this.contactPoint, this.settings().reducedMotion); } } @@ -2190,19 +2470,15 @@ export class FightRenderer { const spray = sprayDirection(this.buffer.latest()?.fighters[puncherIndex], target, this.mapping); this.presentFightEvent(event, recipientIndex, puncherIndex); if (presentImpact && target !== undefined) { - drawnPlace(this.graphs?.[recipientIndex], target, this.mapping, this.contactPoint); + this.contactOn(recipientIndex, target, presentationEvent.detail.endsWith(":body"), spray, presentationEvent.direction); this.effects.addEvent(presentationEvent, this.contactPoint, this.settings().reducedMotion, spray); } const currentSettings = this.settings(); + if (pending.power && presentImpact && isHit(event) && target !== undefined && !currentSettings.reducedMotion) this.presentPowerHit(recipientIndex, presentationEvent); if (pending.presentImpact || UNIMPACTFUL_KINDS.has(event.kind)) this.arena.excite(CROWD_EXCITEMENT[event.kind] ?? 0); - if ( - presentImpact - && recipientIndex >= 0 - && this.viewerId !== null - && this.buffer.latest()?.fighters[recipientIndex]?.player_id === this.viewerId - && ["hit", "counter_hit", "knockdown"].includes(event.kind) - ) { - this.viewerHitFlash = Math.max(this.viewerHitFlash, Math.min(1, 0.35 + event.amount / 400)); + if (presentImpact && recipientIndex >= 0 && ["hit", "counter_hit", "knockdown"].includes(event.kind)) { + const own = this.viewerId !== null && this.buffer.latest()?.fighters[recipientIndex]?.player_id === this.viewerId; + this.viewerHitFlash = Math.max(this.viewerHitFlash, hitFlash(event, own, currentSettings.blood)); } if ( injury !== null @@ -2217,6 +2493,10 @@ export class FightRenderer { if (presentImpact && recipientIndex >= 0 && !currentSettings.reducedMotion && mouthpieceFlies(event.kind, event.amount, presentationEvent.detail.endsWith(":head"))) { this.knockOutMouthpiece(recipientIndex, spray ?? presentationEvent.direction, event.event_id, false); } + // A clean punch makes his face spurt blood, and a man going down pours it from his nose and mouth as he falls. + const spurt = presentImpact && !currentSettings.reducedMotion ? punchGush(event) : null; + if (spurt !== null && recipientIndex >= 0) this.gushFromMouth(recipientIndex, event.event_id, spurt.seconds, spurt.rate); + if (pending.presentImpact && recipientIndex >= 0 && event.kind === "knockdown" && !currentSettings.reducedMotion) this.gushFromMouth(recipientIndex, event.event_id, KNOCKDOWN_GUSH_SECONDS, KNOCKDOWN_GUSH_RATE); const teeth = presentImpact && recipientIndex >= 0 ? teethFor(event.kind, event.amount, presentationEvent.detail.endsWith(":head")) : 0; if (teeth > 0 && !currentSettings.reducedMotion && currentSettings.blood !== "off") { const pose = this.headWorldPose(recipientIndex); @@ -2247,10 +2527,21 @@ export class FightRenderer { && puncherIndex >= 0 && ["hit", "counter_hit", "block", "perfect_block", "guard_break"].includes(event.kind) ) { - graphs?.[puncherIndex]?.landedHit(event.kind === "block" || event.kind === "perfect_block"); + graphs?.[puncherIndex]?.landedHit(event.action_id, event.kind === "block" || event.kind === "perfect_block", pending.power); } // The hit that leaked through a block is heard and felt as the block it came with, not as a landed punch. - if (pending.presentImpact || !isHit(event)) this.onContact?.(event); + if (pending.presentImpact || !isHit(event)) this.onContact?.(event, pending.power === true); + } + if (this.replay === null) this.fireRefereeEvents(sampledTick); + const refereeReplay = this.refereeReplayAt; + if (refereeReplay !== null && this.replay === null && this.frameSeconds >= refereeReplay.at) { + this.refereeReplayAt = null; + const plan = planKnockoutReplay(this.history, refereeReplay.impact, this.simulation.tick_rate, REFEREE_REPLAY.speed, REFEREE_REPLAY.before, REFEREE_REPLAY.after); + // It plays while the bout waits for it, and only then: never over the fight once it has resumed (a hidden tab, a + // reconnect). Its closing hold may be cut short by the resume, so a stalled frame or two does not cost the replay. + const live = this.buffer.latest(); + const waiting = plan !== null && live !== null && live.phase === "referee_down" && live.phase_ticks_remaining / this.simulation.tick_rate >= plan.durationSeconds - REPLAY_TAIL_SECONDS; + if (plan !== null && waiting && !this.settings().reducedMotion) this.startReplay(plan); } } @@ -2283,6 +2574,65 @@ export class FightRenderer { this.effects.clearMouthpieces(); } + /** + * Where a punch lands on the fighter as he is drawn, into contactPoint: the side of his face or chest that + * faced the puncher, which stands off the spot under him as he leans, slips or lies on the canvas. Without + * his skeleton, the spot under him. + */ + private contactOn(index: number, fighter: FighterSnapshot, body: boolean, spray: SprayDirection | undefined, direction: number): THREE.Vector3 { + const head = body ? null : this.headWorldPose(index); + const chest = body ? this.graphs?.[index]?.boxer.rig.bones.upperChest : undefined; + const part = head?.position ?? chest?.getWorldPosition(this.contactPoint) ?? null; + if (part === null) return drawnPlace(this.graphs?.[index], fighter, this.mapping, this.contactPoint); + const toward = spray ?? { x: direction < 0 ? -1 : 1, z: 0 }; + const reach = body ? CHEST_CONTACT_REACH : HEAD_CONTACT_REACH; + return this.contactPoint.set(part.x - toward.x * reach, part.y, part.z - toward.z * reach); + } + + /** Blood pours from the fighter's nose and mouth, from his head as it is posed, and follows him as he goes down. */ + private gushFromMouth(index: number, eventId: number, seconds: number, rate: number): void { + const wound = this.tornWound(index, "mouth"); + if (wound !== null) this.effects.gush(index, wound.position, wound.axis, seconds, rate, eventId); + } + + /** Keeps a pouring wound on the fighter as he moves: the one his finisher opened, or his mouth. */ + private anchorGush(index: number): void { + if (!this.effects.gushing(index)) return; + const wound = this.tornWound(index, woundSite(this.arcadeInjuries[index] ?? null)); + if (wound !== null) this.effects.anchorGush(index, wound.position, wound.axis); + } + + /** Where a wound a fighter carries is, on him as he is posed, and the way it faces. */ + private tornWound(index: number, site: WoundSite): { position: THREE.Vector3; axis: THREE.Vector3 } | null { + if (site === "mouth") { + const pose = this.headWorldPose(index); + if (pose === null) return null; + return { position: this.woundPoint.copy(MOUTH).applyQuaternion(pose.quaternion).add(pose.position), axis: this.woundAxis.copy(OUT_OF_THE_MOUTH).applyQuaternion(pose.quaternion) }; + } + const boxer = this.graphs?.[index]?.boxer; + if (boxer === undefined) return null; + boxer.root.updateMatrixWorld(true); + const bones = boxer.rig.bones; + const left = site === "shoulder_left" || site === "ribs_left"; + // Out to his own side, from shoulder to shoulder, and up his back, from the hips to the chest. + const out = bones.shoulderL.getWorldPosition(this.woundAxis).sub(bones.shoulderR.getWorldPosition(this.tmpStumpOffset)).normalize().multiplyScalar(left ? 1 : -1); + const chest = bones.upperChest.getWorldPosition(this.tmpStump); + const up = this.tmpStumpOffset.copy(chest).sub(bones.hips.getWorldPosition(this.tmpStumpAcross)).normalize(); + if (site === "ribs_left" || site === "ribs_right") return { position: this.woundPoint.copy(chest).addScaledVector(out, RIBS_REACH).addScaledVector(up, -RIBS_DROP), axis: out }; + (left ? bones.shoulderL : bones.shoulderR).getWorldPosition(this.woundPoint); + return { position: this.woundPoint, axis: out.addScaledVector(up, 0.5).normalize() }; + } + + /** The referee's mouth as he is posed, and the way blood pours out of it, as a fighter's (headWorldPose, tornWound). */ + private refereeMouth(): { position: THREE.Vector3; axis: THREE.Vector3 } | null { + const head = this.referee?.boxer.rig.bones.head; + if (head === undefined) return null; + head.getWorldPosition(this.tmpHead); + head.getWorldQuaternion(this.tmpHeadQuaternion); + this.tmpHead.add(this.tmpStumpOffset.copy(HEAD_PIVOT_OFFSET).applyQuaternion(this.tmpHeadQuaternion)); + return { position: this.woundPoint.copy(MOUTH).applyQuaternion(this.tmpHeadQuaternion).add(this.tmpHead), axis: this.woundAxis.copy(OUT_OF_THE_MOUTH).applyQuaternion(this.tmpHeadQuaternion) }; + } + /** The gum shield flies out of the mouth along the punch, from the head as it is posed. */ private knockOutMouthpiece(index: number, direction: number | SprayDirection, eventId: number, again: boolean): void { const pose = this.headWorldPose(index); @@ -2431,7 +2781,7 @@ export class FightRenderer { const replay = this.replay; if (replay !== null) { const elapsed = seconds - replay.startedAt; - if (elapsed >= replay.plan.durationSeconds) { + if (elapsed >= replay.plan.durationSeconds || (replay.plan.impact.kind === "referee_down" && latest?.phase !== "referee_down")) { this.endReplay(); } else { sampledTick = replayTick(replay.plan, elapsed, this.simulation.tick_rate); @@ -2483,8 +2833,19 @@ export class FightRenderer { // A fighter going down falls against his standing opponent, not through him. graphs[0].setObstacle(graphs[1].boxer.root.position.x, graphs[1].boxer.root.position.z); graphs[1].setObstacle(graphs[0].boxer.root.position.x, graphs[0].boxer.root.position.z); + // A punch that found the referee lands on his head as last drawn: he is posed after the fighters. + const refereeHead = this.referee?.boxer.rig.bones.head.getWorldPosition(this.refereeHead) ?? null; + graphs[0].setRefereeHead(refereeHead); + graphs[1].setRefereeHead(refereeHead); graphs[0].update(a, b, actorDt, seconds, current.reducedMotion, current.blood, sampledTick, headB); graphs[1].update(b, a, actorDt, seconds, current.reducedMotion, current.blood, sampledTick, headA); + const own = graphs[snapshot.fighters.findIndex((fighter) => fighter.player_id === this.viewerId)]; + const press = own?.ownPressId ?? null; + if (own !== undefined && press !== null && press !== this.soundedPress) { + this.soundedPress = press; + const { punchClass, power } = own.punchKind; + this.onOwnPunch?.(punchClass, power, press); + } for (const [index, graph] of graphs.entries()) { const headBone = graph.boxer.bone("head"); if (headBone !== null) { @@ -2517,7 +2878,14 @@ export class FightRenderer { } else if (injury === "ribs_left" || injury === "ribs_right") { const body = this.graphs?.[index]?.boxer.bodyInjury; if (body !== undefined) caveInRibs(body, injury === "ribs_left" ? "left" : "right"); + } else if (injury === "jaw_dislocation") { + const boxer = this.graphs?.[index]?.boxer; + if (boxer !== undefined) breakJaw(boxer.headInjury, boxer.bodyInjury); + } else if (injury === "shoulder_left" || injury === "shoulder_right") { + const body = this.graphs?.[index]?.boxer.bodyInjury; + if (body !== undefined) tearShoulder(body, injury === "shoulder_left" ? "left" : "right"); } + this.anchorGush(index); } const ax = this.mapping.x(a.x); const az = this.mapping.z(a.y); @@ -2560,14 +2928,14 @@ export class FightRenderer { { x: this.tmpB.x, z: this.tmpB.z }, separation, knockdown, - this.effects.shakeAmount, + this.effects.shakeAmount + this.powerShake, current.reducedMotion, current.camera === "close", downedAt, ); const viewerIndex = snapshot === null ? -1 : snapshot.fighters.findIndex((fighter) => fighter.player_id === this.viewerId); const ownView = current.camera === "fighter" && viewerIndex >= 0 && ownViewPhase(snapshot) - ? this.fighterCam.update(dt, seconds, viewerIndex === 0 ? this.tmpA : this.tmpB, viewerIndex === 0 ? this.tmpB : this.tmpA, this.effects.shakeAmount, current.reducedMotion, this.camera.aspect) + ? this.fighterCam.update(dt, seconds, viewerIndex === 0 ? this.tmpA : this.tmpB, viewerIndex === 0 ? this.tmpB : this.tmpA, this.effects.shakeAmount + this.powerShake, current.reducedMotion, this.camera.aspect) : null; if (ownView === null) this.fighterCam.reset(); const replaying = this.replay; @@ -2614,20 +2982,20 @@ export class FightRenderer { const index = snapshot.fighters.findIndex((fighter) => fighter.player_id === this.viewerId); const held = this.localInput() ?? { moveX: 0, moveY: 0, defense: "none" }; // Shown as far ahead of the snapshot on screen as an input pressed now takes to show up in it: the - // round trip plus the interpolation delay. The player's own punch starts here before the server - // has it, and holds the feet from then on. A body shot that is putting the player's own fighter down - // freezes him until he drops. + // round trip plus the interpolation delay. The player's own punch and evasions play on that time + // from the press, and hold or slow the feet as the server will for the input sent meanwhile. A body + // shot that is putting the player's own fighter down freezes him until he drops. const leadTicks = ((this.inputLatencyMs ?? 60) / 1000) * this.simulation.tick_rate + this.buffer.interpolationDelayTicks; const collapsing = this.ownCollapseUntil > snapshot.tick; const fighting = index >= 0 && snapshot.phase === "fight" && !collapsing ? snapshot.fighters[index]! : null; - const holdFeet = this.graphs?.[index]?.ownPunchActive === true || this.evasion.holdsFeet(timeMs, this.simulation.tick_rate); - const local = this.movement.update(fighting, held, holdFeet, timeMs, leadTicks, snapshot.tick, dt, this.simulation.tick_rate); + const footwork = this.evasion.holdsFeet(timeMs) ? 0 : this.graphs?.[index]?.ownFootwork ?? 1; + const local = this.movement.update(fighting, held, footwork, timeMs, leadTicks, snapshot.tick, dt, this.simulation.tick_rate); // The guard is the most latency-sensitive thing the player controls: it is shown as held, and a // slip, weave or pull on the press, wherever the server is not overriding it. const evading = this.evasion.pose(timeMs); if (index < 0) return snapshot; const viewer = snapshot.fighters[index]!; - const defense = fighting !== null ? predictedDefense(fighting, held, evading) : viewer.defense; + const defense = fighting !== null ? predictedDefense(fighting, held, evading, this.evasion.hidesServerEvasion(timeMs)) : viewer.defense; if (Math.abs(local.dx) < 0.01 && Math.abs(local.dy) < 0.01 && defense === viewer.defense) return snapshot; const offset = constrainPrediction(viewer, local, snapshot.fighters[index === 0 ? 1 : 0] ?? null); const predicted = { ...viewer, x: viewer.x + offset.dx, y: viewer.y + offset.dy, defense }; @@ -2765,7 +3133,7 @@ export class FightRenderer { for (const [index, fighter] of fighters.entries()) { const down = fighterDown(fighter, this.graphs?.[index], this.flashKnockout?.loserId); const wound = this.arcadeInjuries[index] ?? null; - const open = wound !== null && OPEN_WOUNDS.has(wound); + const open = wound !== null; const engine = (fighter.trauma.bleeding + fighter.trauma.left_cut + fighter.trauma.right_cut) / 380; const severity = open ? Math.max(engine, OPEN_WOUND_SEVERITY) : engine; if (severity > 0.05 && !down) { @@ -2802,12 +3170,17 @@ export class FightRenderer { return this.tmpHead.set(anchor.x, this.headHeightOf(index), anchor.z); } - /** Where a downed fighter's blood pools from: a severed hand's wrist, otherwise his head or what is left of his neck. */ + /** Where a downed fighter's blood pools from: a severed hand's wrist, a torn shoulder or ribs, otherwise his head or what is left of his neck. */ private poolSource(index: number, wound: ArcadeInjury | null): { readonly x: number; readonly z: number } { if (wound === "dismember_left" || wound === "dismember_right") { const wrist = this.handWorldPose(index, wound === "dismember_left" ? "left" : "right"); if (wrist !== null) return wrist.position; } + const site = woundSite(wound); + if (site !== "mouth") { + const torn = this.tornWound(index, site); + if (torn !== null) return torn.position; + } return this.headCacheValid[index] ? this.headCache[index]! : index === 0 ? this.tmpA : this.tmpB; } @@ -2816,13 +3189,13 @@ export class FightRenderer { for (const [index, blob] of this.blobShadows.entries()) { // A fighter's blob sits under his body on the canvas, or under the rendered fighter, who walks in from // his mark for the glove touch. - const graph = index < 2 ? this.graphs?.[index] : undefined; + const graph = index < 2 ? this.graphs?.[index] : this.referee ?? undefined; const fallen = graph?.fallBody?.centre(this.bodyPoint) ?? null; const anchor = fallen ?? (graph?.boxer.root.visible === true ? graph.currentRoot : anchors[index]!); blob.position.x = anchor.x; blob.position.z = anchor.z; const fighter = index < 2 ? this.buffer.latest()?.fighters[index] : undefined; - const downed = fighter !== undefined && fighterDown(fighter, graph, this.flashKnockout?.loserId); + const downed = index < 2 ? fighter !== undefined && fighterDown(fighter, graph, this.flashKnockout?.loserId) : graph?.isDown === true; blob.scale.set(downed ? 2.1 : 1.25, downed ? 0.9 : 0.85, 1); } } @@ -2830,10 +3203,33 @@ export class FightRenderer { private updateReferee(dt: number, time: number, snapshot: EngineSnapshot | null, sampledTick: number): void { const referee = this.referee; if (referee === null) return; - // The replay isolates the two fighters: the referee, who would stand in its close shot, is left out of it. - referee.boxer.root.visible = this.replay === null; + // A knockout replay isolates the two fighters: the referee, who would stand in its close shot, is left out + // of it. The replay of his own fall is all about him. + const shownInReplay = this.replay === null || this.replay.plan.impact.kind === "referee_down"; + referee.boxer.root.visible = shownInReplay; const shadow = this.blobShadows[2]; - if (shadow !== undefined) shadow.visible = this.replay === null; + if (shadow !== undefined) shadow.visible = shownInReplay; + const official = snapshot?.referee ?? null; + const hisReplay = this.replay !== null && this.replay.plan.impact.kind === "referee_down" ? this.replay : null; + // The first time he is drawn he is put where the engine has him, rather than walked there from nowhere. + if (!this.refereePlaced && official !== null) { + this.refereePlaced = true; + this.refereePosition.set(this.mapping.x(official.x), 0, this.mapping.z(official.y)); + } + const fallPending = this.refereeReplayAt !== null || this.pendingRefereeEvents.some((event) => event.kind === "referee_down"); + // Standing again in a new bout (or a rematch) after going down in the last one. + if (official?.alive === true && referee.isDown && this.replay === null && snapshot?.phase !== "referee_down" && !fallPending) referee.resetTransient(false); + // Dead before this client saw him fall (a spectator who joins, a reconnect): he is lying where the engine has him. + if (official !== null && !official.alive && !referee.isDown && this.replay === null && !fallPending) { + this.refereePosition.set(this.mapping.x(official.x), 0, this.mapping.z(official.y)); + referee.knockOut(); + this.refereeFallUnseen = true; + } + // While punches can land the engine stands him, so they land on him where he is drawn, and his replay has him + // where the recording does until the punch lands. Over a count, a foul or the rest he goes where the picture needs + // him; dead, he stays where he fell. + const engine = official !== null && ((snapshot?.phase === "fight" && official.alive) || (hisReplay !== null && !hisReplay.impactFired)) ? official : null; + const outCold = official?.alive === false && (hisReplay === null || hisReplay.impactFired); // He counts over the fighter who went down from the knockdown until "Box!": one who beats the count is // still counted to the mandatory eight, on his feet, and looked over. const counted = snapshot?.fighters.find((fighter) => fighter.is_downed) @@ -2867,12 +3263,15 @@ export class FightRenderer { const ceremony = this.replay === null && this.ceremony?.positions !== null ? this.ceremony : null; // Once the fight is waved off, the referee goes to the winner's side: the side nearer the middle of the // ring, or the first one clear of the beaten fighter and his body (see raiseSpot). - const winner = ceremony === null && this.replay === null && this.stoppageWinner >= 0 && this.frameSeconds >= this.stoppageRaiseAt + const winner = !outCold && ceremony === null && this.replay === null && this.stoppageWinner >= 0 && this.frameSeconds >= this.stoppageRaiseAt ? (this.stoppageWinner === 0 ? this.tmpA : this.tmpB) : null; const spot = winner === null ? null : (this.stoppageSpot ??= this.raiseSpot(winner, this.stoppageWinner === 0 ? this.tmpB : this.tmpA)); const side = spot !== null && spot.x < 0 ? -1 : 1; - if (winner !== null && spot !== null) { + if (outCold) { + // Where the fall left him; a ceremony goes on without him. + if (ceremony !== null) ceremony.refereeArrived = true; + } else if (winner !== null && spot !== null) { const step = ceremonyStep(this.refereePosition.x, this.refereePosition.z, { x: winner.x + spot.x, y: winner.z + spot.z }, CEREMONY_REFEREE_SPEED * dt); this.refereePosition.x = step.x; this.refereePosition.z = step.y; @@ -2882,6 +3281,12 @@ export class FightRenderer { this.refereePosition.x = step.x; this.refereePosition.z = step.y; ceremony.refereeArrived = step.arrived; + } else if (engine !== null) { + // A quick step to wherever the engine has him, which he then keeps to; his replay has him exactly where the + // recording does, from its first frame. + const rate = hisReplay !== null ? 1 : 1 - Math.exp(-REFEREE_FOLLOW_RATE * dt); + this.refereePosition.x += (this.mapping.x(engine.x) - this.refereePosition.x) * rate; + this.refereePosition.z += (this.mapping.z(engine.y) - this.refereePosition.z) * rate; } else { // A break is a brisk step in, never faster than REFEREE_BREAK_SPEED; otherwise he drifts into place. const rate = 1 - Math.exp(-(breaking ? 8 : 1.6) * dt); @@ -2889,7 +3294,7 @@ export class FightRenderer { this.refereePosition.x += (targetX - this.refereePosition.x) * rate * pace; this.refereePosition.z += (targetZ - this.refereePosition.z) * rate * pace; } - const keepOff = winner !== null ? STOPPAGE_RAISE_SPACING * 0.85 : ceremony === null ? clearance : ceremony.refereeArrived ? 0 : CEREMONY_WALK_CLEARANCE; + const keepOff = winner !== null ? STOPPAGE_RAISE_SPACING * 0.85 : ceremony === null ? (engine !== null || outCold ? 0 : clearance) : ceremony.refereeArrived ? 0 : CEREMONY_WALK_CLEARANCE; for (const fighter of keepOff > 0 ? [this.tmpA, this.tmpB] : []) { const dx = this.refereePosition.x - fighter.x; const dz = this.refereePosition.z - fighter.z; @@ -2900,7 +3305,7 @@ export class FightRenderer { } } // Nor on a fighter lying where the fall took him. - for (const graph of ceremony !== null ? [] : this.graphs ?? []) { + for (const graph of ceremony !== null || outCold ? [] : this.graphs ?? []) { const body = graph.fallBody; if (body === null) continue; for (const point of [0, 1, 2, 3, 4] as const) { @@ -2911,12 +3316,24 @@ export class FightRenderer { } } // Nobody stands over a head on the canvas. - for (const index of [0, 1]) { + for (const index of outCold ? [] : [0, 1]) { if (!this.effects.severedHeadPosition(index, this.closeUpTarget)) continue; const step = keepClear(this.refereePosition.x, this.refereePosition.z, this.closeUpTarget.x, this.closeUpTarget.z, HEAD_CLEARANCE); this.refereePosition.x = step.x; this.refereePosition.z = step.z; } + // Wherever the picture wants him, he walks there no faster than a brisk referee: no jump at a bell, a count or a + // foul, and no dash back to the engine's place when the fighting resumes. His replay cuts to him where he was. + if (hisReplay === null && !outCold) { + const stepX = this.refereePosition.x - previousX; + const stepZ = this.refereePosition.z - previousZ; + const stepLength = Math.hypot(stepX, stepZ); + const most = REFEREE_DRAWN_SPEED * dt; + if (stepLength > most) { + this.refereePosition.x = previousX + (stepX / stepLength) * most; + this.refereePosition.z = previousZ + (stepZ / stepLength) * most; + } + } if (dt > 0) { this.refereeVelocity.set((this.refereePosition.x - previousX) / dt, 0, (this.refereePosition.z - previousZ) / dt); } @@ -2925,7 +3342,7 @@ export class FightRenderer { && Math.hypot(this.refereePosition.x - winner.x - spot.x, this.refereePosition.z - winner.z - spot.z) <= RAISE_ARRIVED; const walking = ceremony !== null && !ceremony.refereeArrived; const yaw = winner !== null ? (beside ? 0 : Math.atan2(winner.x - this.refereePosition.x, winner.z - this.refereePosition.z)) - : ceremony === null ? Math.atan2(focusX - this.refereePosition.x, focusZ - this.refereePosition.z) + : ceremony === null ? (engine !== null ? Math.atan2(engine.facing_x, -engine.facing_y) : Math.atan2(focusX - this.refereePosition.x, focusZ - this.refereePosition.z)) : walking ? Math.atan2(CEREMONY_REFEREE.x - this.refereePosition.x, CEREMONY_REFEREE.z - this.refereePosition.z) : 0; if (winner !== null) { // Facing the camera, the referee's left hand is the one on the +x side. @@ -2935,10 +3352,44 @@ export class FightRenderer { } const yawDelta = ((yaw - this.refereeYaw + Math.PI) % (Math.PI * 2) + Math.PI * 2) % (Math.PI * 2) - Math.PI; this.refereeYaw += yawDelta * (1 - Math.exp(-(breaking ? 8 : 3) * dt)); - const state = refereeSnapshot(this.refereePosition, this.refereeYaw, this.refereeVelocity, this.mapping); + const state = refereeSnapshot(this.refereePosition, this.refereeYaw, this.refereeVelocity, this.mapping, official); referee.setRefereeCount(counted !== null, counted?.get_up_count ?? 0); referee.aimBreak(this.tmpA, this.tmpB); - referee.update(state.self, state.focus, dt, time, false, "off", sampledTick); + // He bleeds at the blood level the player chose, and falls the way reduced motion asks. + const settings = this.settings(); + referee.update(state.self, state.focus, dt, time, settings.reducedMotion, settings.blood, sampledTick); + if (this.refereeFallUnseen) { + this.refereeFallUnseen = false; + referee.fallBody?.settle(); + } + if (this.effects.gushing(REFEREE_GUSH)) { + const mouth = this.refereeMouth(); + if (mouth !== null) this.effects.anchorGush(REFEREE_GUSH, mouth.position, mouth.axis); + } + this.poolUnderReferee(official?.alive === false, outCold, dt, settings.blood); + } + + /** + * Dead on the canvas, the referee bleeds out as a finisher's open wound does, into a pool that spreads from + * under his head until it is as wide as one; a new bout, with him on his feet, starts the next one afresh. + */ + private poolUnderReferee(dead: boolean, outCold: boolean, dt: number, blood: BloodLevel): void { + if (!dead && this.replay === null) { + this.refereePoolAccumulator = 0; + this.refereePoolCount = 0; + } + if (!outCold || blood === "off" || this.referee === null) return; + this.refereePoolAccumulator += dt * POOL_RATE * OPEN_WOUND_POOL_RATE; + const head = this.referee.boxer.rig.bones.head.getWorldPosition(this.refereeHead); + while (this.refereePoolAccumulator >= 1) { + this.refereePoolAccumulator -= 1; + const count = this.refereePoolCount; + const spread = poolRadius(count, OPEN_WOUND_SEVERITY, OPEN_WOUND_POOL_REACH); + if (spread >= OPEN_WOUND_POOL_REACH) return; + this.refereePoolCount = count + 1; + const angle = count * 2.399_963; + this.effects.pool(head.x + Math.sin(angle) * spread * 0.25, head.z + Math.cos(angle) * spread * 0.25, spread, count + REFEREE_GUSH * 7); + } } private updateTrails(dt: number, reducedMotion: boolean): void { @@ -2947,14 +3398,30 @@ export class FightRenderer { for (const [index, graph] of graphs.entries()) { for (const [gloveIndex, bone] of (["gloveL", "gloveR"] as const).entries()) { const trail = this.trails[index * 2 + gloveIndex]!; + const glow = this.glows[index * 2 + gloveIndex]; if (!graph.boxer.root.visible) { trail.reset(); + glow?.reset(); continue; } graph.boxer.rig.bones[bone].getWorldPosition(this.trailGlove); - trail.update(this.trailGlove, dt, this.camera.position, !reducedMotion && this.replay === null && !graph.isDown); + // A power punch shows its heat on the glove that throws it, to both fighters, from the load on. + const heat = graph.powerHeat(gloveIndex === 0 ? "left" : "right"); + trail.update(this.trailGlove, dt, this.camera.position, !reducedMotion && this.replay === null && !graph.isDown, heat); + glow?.update(this.trailGlove, heat, dt, reducedMotion, this.camera); } } + for (const flash of this.impactFlashes) flash.update(dt, this.camera); + this.powerShake *= Math.pow(0.02, dt); + } + + /** A power punch that landed: a white-hot flash where it lands and a kick of the camera. */ + private presentPowerHit(recipientIndex: number, event: CombatEvent): void { + const head = !event.detail.endsWith(":body") && this.headCacheValid[recipientIndex] === true ? this.headCache[recipientIndex] : undefined; + if (head !== undefined) this.powerHitPoint.copy(head); + else this.powerHitPoint.set(this.contactPoint.x, event.detail.endsWith(":body") ? 1.05 : 1.55, this.contactPoint.z); + this.impactFlashes[recipientIndex]?.fire(this.powerHitPoint); + this.powerShake = Math.min(POWER_SHAKE_LIMIT, this.powerShake + POWER_SHAKE); } /** Cornermen stand on the apron outside their fighter's corner and lean in during the rest. */ @@ -3029,22 +3496,24 @@ export class FightRenderer { this.hudViewport.height = viewport.height; ctx.clearRect(0, 0, viewport.width, viewport.height); if (snapshot === null) return; - if (this.viewerHitFlash > 0.01 && !this.settings().reducedMotion) { + const settings = this.settings(); + if (this.viewerHitFlash > 0.01 && !settings.reducedMotion) { const flash = ctx.createRadialGradient(viewport.width / 2, viewport.height / 2, viewport.width * 0.12, viewport.width / 2, viewport.height / 2, viewport.width * 0.7); flash.addColorStop(0, `rgba(255,235,225,${(this.viewerHitFlash * 0.18).toFixed(3)})`); flash.addColorStop(1, `rgba(140,0,10,${(this.viewerHitFlash * 0.55).toFixed(3)})`); ctx.fillStyle = flash; ctx.fillRect(0, 0, viewport.width, viewport.height); } - const hurt = Math.max(...snapshot.fighters.map((fighter) => fighter.trauma.head + fighter.trauma.body)); - if (hurt > 350) { + const hurt = hurtVignette(Math.max(...snapshot.fighters.map((fighter) => fighter.trauma.head + fighter.trauma.body)), settings.blood); + if (hurt > 0) { const vignette = ctx.createRadialGradient(viewport.width / 2, viewport.height / 2, viewport.width * 0.2, viewport.width / 2, viewport.height / 2, viewport.width * 0.72); vignette.addColorStop(0, "rgba(90,0,8,0)"); - vignette.addColorStop(1, `rgba(75,0,8,${Math.min(0.3, hurt / 4600)})`); + vignette.addColorStop(1, `rgba(75,0,8,${hurt.toFixed(3)})`); ctx.fillStyle = vignette; ctx.fillRect(0, 0, viewport.width, viewport.height); } - drawHud(ctx, viewport.width, viewport.height, snapshot, this.players, this.viewerId, this.frameSeconds >= this.finalRevealAt ? this.final : null, this.reconnectMs, this.simulation.tick_rate, this.roundStats, this.replay !== null ? "KNOCKOUT REPLAY" : null, this.lagWarned ? this.inputLatencyMs : null, this.frameSeconds < this.roundCalloutUntil ? `ROUND ${this.roundCalloutRound}` : this.eventCallout !== null && this.frameSeconds < this.eventCallout.until ? this.eventCallout.text : null, this.roundClock.ticks(snapshot), (player) => this.avatars.get(player), this.lastKnockdown?.knockdown.target_id ?? null, this.touchControls && snapshot.fighters.some((fighter) => fighter.player_id === this.viewerId)); + if (!settings.reducedMotion) this.effects.drawLens(ctx, viewport.width, viewport.height); + drawHud(ctx, viewport.width, viewport.height, snapshot, this.players, this.viewerId, this.frameSeconds >= this.finalRevealAt ? this.final : null, this.reconnectMs, this.simulation.tick_rate, this.roundStats, this.replay !== null ? (this.replay.plan.impact.kind === "referee_down" ? "REFEREE DOWN" : "KNOCKOUT REPLAY") : null, this.lagWarned ? this.inputLatencyMs : null, this.frameSeconds < this.roundCalloutUntil ? `ROUND ${this.roundCalloutRound}` : this.eventCallout !== null && this.frameSeconds < this.eventCallout.until ? this.eventCallout.text : null, this.roundClock.ticks(snapshot), (player) => this.avatars.get(player), this.lastKnockdown?.knockdown.target_id ?? null, this.touchControls && snapshot.fighters.some((fighter) => fighter.player_id === this.viewerId), this.powerHeld?.() === true); this.drawCaption(ctx, viewport.width, viewport.height, snapshot); } @@ -3127,6 +3596,18 @@ export class FightRenderer { trail.dispose(); } this.trails = []; + for (const glow of this.glows) { + this.scene.remove(glow.mesh); + glow.dispose(); + } + this.glows = []; + for (const flash of this.impactFlashes) { + this.scene.remove(flash.group); + flash.dispose(); + } + this.impactFlashes = []; + this.glowMap?.dispose(); + this.glowMap = null; if (this.cornermen !== null) { for (const graph of this.cornermen) { this.scene.remove(graph.boxer.root); diff --git a/web/hands/src/render/replay.ts b/web/hands/src/render/replay.ts index c1e62ded..6c083ba0 100644 --- a/web/hands/src/render/replay.ts +++ b/web/hands/src/render/replay.ts @@ -4,6 +4,11 @@ export const REPLAY_BEFORE_TICKS = 42; export const REPLAY_AFTER_TICKS = 33; export const REPLAY_SPEED = 0.4; export const REPLAY_TAIL_SECONDS = 0.5; +/** + * The referee's fall is replayed while the bout waits for it, so it is shorter and a little quicker: 3.7 s with + * its tail, which with the live fall before it (REFEREE_REPLAY_DELAY_SECONDS) fits the engine's 5 s pause. + */ +export const REFEREE_REPLAY = { before: 24, after: 24, speed: 0.5 } as const; export interface ReplayPlan { readonly snapshots: readonly EngineSnapshot[]; @@ -23,9 +28,11 @@ export function planKnockoutReplay( impact: CombatEvent, tickRate = 30, speed = REPLAY_SPEED, + before = REPLAY_BEFORE_TICKS, + after = REPLAY_AFTER_TICKS, ): ReplayPlan | null { - const wantedFrom = impact.tick - REPLAY_BEFORE_TICKS; - const wantedTo = impact.tick + REPLAY_AFTER_TICKS; + const wantedFrom = impact.tick - before; + const wantedTo = impact.tick + after; const recorded = history.filter((snapshot) => snapshot.tick >= wantedFrom - 1 && snapshot.tick <= wantedTo + 1); const ended = recorded.at(-1); // A bout that ends on the punch itself (a flash knockout, a third knockdown) stops the recording at the diff --git a/web/hands/src/render/rocked.test.ts b/web/hands/src/render/rocked.test.ts index e0860868..ef99fcf6 100644 --- a/web/hands/src/render/rocked.test.ts +++ b/web/hands/src/render/rocked.test.ts @@ -10,7 +10,7 @@ describe("hurt vision", () => { expect(rockedLevel({ ...fighter("one"), stunned_ticks: 90 }, "fight")).toBe(1); expect(rockedLevel({ ...fighter("one"), stunned_ticks: ROCKED_BASE_TICKS }, "fight")).toBeCloseTo(ROCKED_BASE_TICKS / ROCKED_MAX_TICKS); expect(rockedLevel({ ...fighter("one"), poise: 75 }, "fight")).toBeCloseTo(0.3); - expect(rockedLevel({ ...fighter("one"), poise: 75, stunned_ticks: 30 }, "fight")).toBeCloseTo(30 / ROCKED_MAX_TICKS); + expect(rockedLevel({ ...fighter("one"), poise: 75, stunned_ticks: ROCKED_MAX_TICKS - 2 }, "fight")).toBeCloseTo((ROCKED_MAX_TICKS - 2) / ROCKED_MAX_TICKS); }); it("leaves a flinch from an ordinary clean shot alone", () => { diff --git a/web/hands/src/render/trails.test.ts b/web/hands/src/render/trails.test.ts index 65a4861b..1980a7ca 100644 --- a/web/hands/src/render/trails.test.ts +++ b/web/hands/src/render/trails.test.ts @@ -29,6 +29,33 @@ describe("glove trail", () => { trail.dispose(); }); + it("leaves a wider ribbon in the colour of its heat behind a glove throwing a power punch, from a slower glove", () => { + const camera = new THREE.Vector3(0, 2, 5); + const ribbon = (heat: number, step: number): { active: boolean; width: number; red: number; blue: number } => { + const trail = new GloveTrail(new THREE.Color(0x4466ff)); + const glove = new THREE.Vector3(0, 1.3, 0); + for (let frame = 0; frame < 12; frame += 1) { + glove.x += step; + trail.update(glove, 1 / 60, camera, true, heat); + } + const positions = trail.mesh.geometry.getAttribute("position") as THREE.BufferAttribute; + const colors = trail.mesh.geometry.getAttribute("color") as THREE.BufferAttribute; + const last = positions.count - 2; + const width = Math.hypot(positions.getX(last) - positions.getX(last + 1), positions.getY(last) - positions.getY(last + 1), positions.getZ(last) - positions.getZ(last + 1)); + const result = { active: trail.active, width, red: colors.getX(last), blue: colors.getZ(last) }; + trail.dispose(); + return result; + }; + // Two metres a second: too slow for a punch's ribbon, not for a power punch's. + expect(ribbon(0, 2 / 60).active).toBe(false); + expect(ribbon(1, 2 / 60).active).toBe(true); + const cold = ribbon(0, 0.1); + const hot = ribbon(1, 0.1); + expect(hot.width).toBeGreaterThan(cold.width * 2); + expect(cold.blue).toBeGreaterThan(cold.red); + expect(hot.red).toBeGreaterThan(hot.blue * 3); + }); + it("reuses its sample vectors instead of allocating one every frame", () => { const trail = new GloveTrail(new THREE.Color(0xffffff)); const camera = new THREE.Vector3(0, 2, 5); diff --git a/web/hands/src/render/trails.ts b/web/hands/src/render/trails.ts index fa32fbcb..733ab4f4 100644 --- a/web/hands/src/render/trails.ts +++ b/web/hands/src/render/trails.ts @@ -1,13 +1,19 @@ import * as THREE from "three"; +import { POWER_HEAT_COLOR } from "./power"; const SAMPLES = 10; const WIDTH = 0.055; const MIN_SPEED = 3.2; +/** At full heat a power punch's trail is this much wider and shows from this share of the speed a punch's needs. */ +const HOT_WIDTH = 1.4; +const HOT_SPEED = 0.45; /** * Additive ribbon behind a fast-moving glove. Positions are sampled every * frame; the ribbon only shows while the glove moves faster than a punch - * threshold and fades toward its tail. + * threshold and fades toward its tail. A glove throwing a power punch, + * `heat` above 0, leaves a wider, brighter ribbon in the colour of its heat, + * from a slower speed. */ export class GloveTrail { readonly mesh: THREE.Mesh; @@ -20,7 +26,9 @@ export class GloveTrail { private readonly tangent = new THREE.Vector3(); private readonly side = new THREE.Vector3(); private readonly toCamera = new THREE.Vector3(); + private readonly shade = new THREE.Color(); private strength = 0; + private heat = 0; constructor(private readonly color: THREE.Color) { this.geometry = new THREE.BufferGeometry(); @@ -40,12 +48,15 @@ export class GloveTrail { } /** Feeds the glove's world position for this frame. */ - update(glove: THREE.Vector3, dt: number, cameraPosition: THREE.Vector3, enabled: boolean): void { + update(glove: THREE.Vector3, dt: number, cameraPosition: THREE.Vector3, enabled: boolean, heat = 0): void { if (dt <= 0) return; const speed = this.hasLast ? glove.distanceTo(this.last) / dt : 0; this.last.copy(glove); this.hasLast = true; - const target = enabled && speed > MIN_SPEED ? Math.min(1, (speed - MIN_SPEED) / 4) : 0; + // The heat holds while the ribbon it lit fades out behind the glove. + this.heat = heat > this.heat ? heat : this.heat + (heat - this.heat) * Math.min(1, dt * 6); + const minimum = MIN_SPEED * (1 - (1 - HOT_SPEED) * this.heat); + const target = enabled && speed > minimum ? Math.min(1, (speed - minimum) / 4 + this.heat * 0.4) : 0; this.strength += (target - this.strength) * Math.min(1, dt * 18); const sample = this.history.length >= SAMPLES ? this.history.shift()! : new THREE.Vector3(); sample.copy(glove); @@ -55,6 +66,8 @@ export class GloveTrail { return; } const count = this.history.length; + const shade = this.shade.copy(this.color).lerp(POWER_HEAT_COLOR, this.heat); + const widest = WIDTH * (1 + HOT_WIDTH * this.heat); for (let i = 0; i < SAMPLES; i += 1) { const point = this.history[Math.max(0, count - SAMPLES + i)]!; const next = this.history[Math.min(count - 1, Math.max(1, count - SAMPLES + i + 1))]!; @@ -64,7 +77,7 @@ export class GloveTrail { this.toCamera.subVectors(cameraPosition, point); this.side.crossVectors(this.tangent, this.toCamera).normalize(); const age = i / (SAMPLES - 1); - const width = WIDTH * (0.35 + 0.65 * age); + const width = widest * (0.35 + 0.65 * age); const alpha = this.strength * age * age; const offset = i * 6; this.positions[offset] = point.x - this.side.x * width; @@ -75,9 +88,9 @@ export class GloveTrail { this.positions[offset + 5] = point.z + this.side.z * width; for (let corner = 0; corner < 2; corner += 1) { const c = (i * 2 + corner) * 4; - this.colors[c] = this.color.r; - this.colors[c + 1] = this.color.g; - this.colors[c + 2] = this.color.b; + this.colors[c] = shade.r; + this.colors[c + 1] = shade.g; + this.colors[c + 2] = shade.b; this.colors[c + 3] = alpha; } } @@ -94,6 +107,7 @@ export class GloveTrail { this.history.length = 0; this.hasLast = false; this.strength = 0; + this.heat = 0; this.mesh.visible = false; } diff --git a/web/hands/src/state.ts b/web/hands/src/state.ts index b1e735ca..71085133 100644 --- a/web/hands/src/state.ts +++ b/web/hands/src/state.ts @@ -1,6 +1,6 @@ import type { ConnectionRole, EngineSnapshot, FinalMessage, PublicPlayer, SelectMessage, ServerMessage, SimulationInfo, TokenPlayer } from "./types"; -export type AppStage = "bootstrapping" | "authorizing" | "connecting" | "waiting" | "select" | "countdown" | "fight" | "knockdown" | "foul_recovery" | "rest" | "paused" | "complete" | "fatal"; +export type AppStage = "bootstrapping" | "authorizing" | "connecting" | "waiting" | "select" | "countdown" | "fight" | "knockdown" | "foul_recovery" | "referee_down" | "rest" | "paused" | "complete" | "fatal"; export interface GameState { readonly stage: AppStage; readonly player: TokenPlayer | null; diff --git a/web/hands/src/test/fixtures.ts b/web/hands/src/test/fixtures.ts index c5ae096a..a28c8f10 100644 --- a/web/hands/src/test/fixtures.ts +++ b/web/hands/src/test/fixtures.ts @@ -1,6 +1,7 @@ -import { PROTOCOL_VERSION, type EngineSnapshot, type FighterSnapshot } from "../types"; -export const fighter = (id: string, x = 0): FighterSnapshot => ({ player_id: id, x, y: 0, facing: id === "one" ? 1 : -1, facing_x: id === "one" ? 1000 : -1000, facing_y: 0, velocity_x: 0, velocity_y: 0, stance: "orthodox", style: "balanced", defense: "none", stamina: 900, maximum_stamina: 1000, conditioning: 850, guard: 650, poise: 550, trauma: { head: 0, body: 0, left_eye: 0, right_eye: 0, left_cut: 0, right_cut: 0, swelling: 0, bleeding: 0 }, knockdowns: 0, warnings: 0, deductions: 0, stunned_ticks: 0, is_downed: false, action: null, action_hand: null, action_target: null, action_power: null, action_id: null, action_key: null, action_start_tick: 0, action_startup_ticks: 0, action_active_ticks: 0, action_recovery_ticks: 0, action_contact_tick: null, queued_actions: 0, clinch_startup_ticks: 0, clinch_ticks: 0, is_foul_recovery_target: false, taunt_ticks: 0, corner_choice: null, get_up_prompt: null, get_up_meter: 0, get_up_required: 0, get_up_count: 0, get_up_window_start_tick: 0, get_up_window_end_tick: 0, last_input_sequence: -1 }); -export const snapshot = (tick = 10): EngineSnapshot => ({ tick, phase: "fight", round_number: 1, phase_ticks_remaining: 5000, fighters: [fighter("one", -100), fighter("two", 100)], events: [], result: null, checksum: "a".repeat(64) }); +import { PROTOCOL_VERSION, type EngineSnapshot, type FighterSnapshot, type RefereeSnapshot } from "../types"; +export const fighter = (id: string, x = 0): FighterSnapshot => ({ player_id: id, x, y: 0, facing: id === "one" ? 1 : -1, facing_x: id === "one" ? 1000 : -1000, facing_y: 0, velocity_x: 0, velocity_y: 0, stance: "orthodox", style: "balanced", defense: "none", stamina: 900, maximum_stamina: 1000, conditioning: 850, guard: 650, guard_broken: false, poise: 550, trauma: { head: 0, body: 0, left_eye: 0, right_eye: 0, left_cut: 0, right_cut: 0, swelling: 0, bleeding: 0 }, knockdowns: 0, warnings: 0, deductions: 0, stunned_ticks: 0, is_downed: false, action: null, action_hand: null, action_target: null, action_power: null, action_id: null, action_key: null, action_start_tick: 0, action_startup_ticks: 0, action_active_ticks: 0, action_recovery_ticks: 0, action_contact_tick: null, queued_actions: 0, clinch_startup_ticks: 0, clinch_ticks: 0, is_foul_recovery_target: false, taunt_ticks: 0, corner_choice: null, get_up_prompt: null, get_up_meter: 0, get_up_required: 0, get_up_count: 0, get_up_window_start_tick: 0, get_up_window_end_tick: 0, last_input_sequence: -1 }); +export const referee = (x = 0, y = 140): RefereeSnapshot => ({ x, y, facing_x: 0, facing_y: -1000, velocity_x: 0, velocity_y: 0, stunned_ticks: 0, alive: true, trauma: { head: 0, body: 0, left_eye: 0, right_eye: 0, left_cut: 0, right_cut: 0, swelling: 0, bleeding: 0 } }); +export const snapshot = (tick = 10): EngineSnapshot => ({ tick, phase: "fight", round_number: 1, phase_ticks_remaining: 5000, fighters: [fighter("one", -100), fighter("two", 100)], referee: referee(), events: [], result: null, checksum: "a".repeat(64) }); export const envelope = (tick = 10): Record => ({ version: PROTOCOL_VERSION, type: "snapshot", payload: snapshot(tick) }); export const publicPlayers = [{ id: "one", name: "One", avatar: null, rating: 1500, connected: true }, { id: "two", name: "Two", avatar: null, rating: 1500, connected: true }] as const; diff --git a/web/hands/src/test/movement-traces.json b/web/hands/src/test/movement-traces.json index 20f19745..6cf69851 100644 --- a/web/hands/src/test/movement-traces.json +++ b/web/hands/src/test/movement-traces.json @@ -1 +1 @@ -{"a jab thrown holding back":[{"events":[{"action_id":"one@1","actor_id":"one","amount":0,"blood":0,"detail":"left:jab:head","direction":0,"event_id":1,"kind":"punch_start","target_id":null,"tick":1}],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":3,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":1,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":959,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-150,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":1},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":3,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":2,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":960,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-150,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":2},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":3,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":3,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":961,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-150,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":3},{"events":[{"action_id":"one@1","actor_id":"one","amount":18,"blood":0,"detail":"","direction":0,"event_id":2,"kind":"whiff","target_id":"two","tick":4}],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":4,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":3,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":4,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":944,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-150,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":4},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":4,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":3,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":5,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":945,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-150,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":5},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":4,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":3,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":6,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":946,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-150,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":6},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":4,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":3,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":7,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":947,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-150,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":7},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":4,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":3,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":8,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":948,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-150,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":8},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":4,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":3,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":9,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":949,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-150,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":9},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":4,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":3,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":10,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":950,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-150,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":10},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":4,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":3,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":11,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":951,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-150,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":11},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":4,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":3,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":12,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":952,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-150,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":12},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":4,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":3,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":13,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":955,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-4,"velocity_y":0,"warnings":0,"x":-153,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":13},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":4,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":3,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":14,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":958,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-5,"velocity_y":0,"warnings":0,"x":-158,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":14},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":4,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":3,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":15,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":961,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-6,"velocity_y":0,"warnings":0,"x":-164,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":15},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":4,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":3,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":16,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":964,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-171,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":16},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":4,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":3,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":17,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":967,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-178,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":17},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":4,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":3,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":18,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":970,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-185,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":18},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":4,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":3,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":19,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":973,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-192,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":19},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":4,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":3,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":20,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":976,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-199,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":20},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":4,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":3,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":21,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":979,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-206,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":21},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":4,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":3,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":22,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":982,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-213,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":22},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":4,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":3,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":23,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":985,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-220,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":23},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":4,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":3,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":24,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":988,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-226,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":24},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":4,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":3,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":25,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":991,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-233,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":25},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":4,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":3,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":26,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":994,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-240,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":26},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":4,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":3,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":27,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":997,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-247,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":27},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":4,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":3,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":28,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-254,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":28},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":29,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-261,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":29},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":30,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-268,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":30},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":31,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-275,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":31},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":32,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-282,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":32},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":33,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-289,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":33},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":34,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-296,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":34},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":35,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-303,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":35},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":36,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-310,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":36},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":37,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-317,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":37},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":38,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-324,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":38},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":39,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-331,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":39},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":40,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-338,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":40},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":41,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-345,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":41},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":42,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-352,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":42},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":43,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-359,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":43},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":44,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-366,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":44},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":45,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-373,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":45}],"flinched mid-hook while holding back":[{"events":[{"action_id":"two@1","actor_id":"two","amount":0,"blood":0,"detail":"left:jab:head","direction":0,"event_id":1,"kind":"punch_start","target_id":null,"tick":1},{"action_id":"one@1","actor_id":"one","amount":0,"blood":0,"detail":"left:hook:head","direction":0,"event_id":2,"kind":"punch_start","target_id":null,"tick":1}],"fighter":{"action":"hook","action_active_ticks":3,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":12,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":1,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":923,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":1},{"events":[],"fighter":{"action":"hook","action_active_ticks":3,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":12,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":2,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":924,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":2},{"events":[],"fighter":{"action":"hook","action_active_ticks":3,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":12,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":3,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":925,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":3},{"events":[{"action_id":"two@1","actor_id":"two","amount":43,"blood":10,"detail":"jab:head","direction":-1,"event_id":3,"kind":"counter_hit","target_id":"one","tick":4}],"fighter":{"action":"hook","action_active_ticks":3,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":12,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":4,"maximum_stamina":998,"player_id":"one","poise":556,"queued_actions":0,"stamina":926,"stance":"orthodox","stunned_ticks":7,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":4},{"events":[],"fighter":{"action":"hook","action_active_ticks":3,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":12,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":5,"maximum_stamina":998,"player_id":"one","poise":556,"queued_actions":0,"stamina":927,"stance":"orthodox","stunned_ticks":6,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-3,"velocity_y":0,"warnings":0,"x":-52,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":5},{"events":[],"fighter":{"action":"hook","action_active_ticks":3,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":12,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":6,"maximum_stamina":998,"player_id":"one","poise":556,"queued_actions":0,"stamina":928,"stance":"orthodox","stunned_ticks":5,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-4,"velocity_y":0,"warnings":0,"x":-56,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":6},{"events":[],"fighter":{"action":"hook","action_active_ticks":3,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":12,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":7,"maximum_stamina":998,"player_id":"one","poise":556,"queued_actions":0,"stamina":929,"stance":"orthodox","stunned_ticks":4,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-4,"velocity_y":0,"warnings":0,"x":-60,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":7},{"events":[],"fighter":{"action":"hook","action_active_ticks":3,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":12,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":8,"maximum_stamina":998,"player_id":"one","poise":556,"queued_actions":0,"stamina":930,"stance":"orthodox","stunned_ticks":3,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-5,"velocity_y":0,"warnings":0,"x":-65,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":8},{"events":[],"fighter":{"action":"hook","action_active_ticks":3,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":12,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":9,"maximum_stamina":998,"player_id":"one","poise":556,"queued_actions":0,"stamina":931,"stance":"orthodox","stunned_ticks":2,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-5,"velocity_y":0,"warnings":0,"x":-70,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":9},{"events":[],"fighter":{"action":"hook","action_active_ticks":3,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":12,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":10,"maximum_stamina":998,"player_id":"one","poise":556,"queued_actions":0,"stamina":932,"stance":"orthodox","stunned_ticks":1,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-5,"velocity_y":0,"warnings":0,"x":-75,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":10},{"events":[],"fighter":{"action":"hook","action_active_ticks":3,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":12,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":11,"maximum_stamina":998,"player_id":"one","poise":556,"queued_actions":0,"stamina":935,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-6,"velocity_y":0,"warnings":0,"x":-81,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":11},{"events":[],"fighter":{"action":"hook","action_active_ticks":3,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":12,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":12,"maximum_stamina":998,"player_id":"one","poise":557,"queued_actions":0,"stamina":938,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-6,"velocity_y":0,"warnings":0,"x":-87,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":12},{"events":[],"fighter":{"action":"hook","action_active_ticks":3,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":12,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":13,"maximum_stamina":998,"player_id":"one","poise":557,"queued_actions":0,"stamina":941,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-94,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":13},{"events":[],"fighter":{"action":"hook","action_active_ticks":3,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":12,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":14,"maximum_stamina":998,"player_id":"one","poise":558,"queued_actions":0,"stamina":944,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-101,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":14},{"events":[],"fighter":{"action":"hook","action_active_ticks":3,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":12,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":15,"maximum_stamina":998,"player_id":"one","poise":558,"queued_actions":0,"stamina":947,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-108,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":15},{"events":[],"fighter":{"action":"hook","action_active_ticks":3,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":12,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":16,"maximum_stamina":998,"player_id":"one","poise":559,"queued_actions":0,"stamina":950,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-115,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":16},{"events":[],"fighter":{"action":"hook","action_active_ticks":3,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":12,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":17,"maximum_stamina":998,"player_id":"one","poise":559,"queued_actions":0,"stamina":953,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-122,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":17},{"events":[],"fighter":{"action":"hook","action_active_ticks":3,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":12,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":18,"maximum_stamina":998,"player_id":"one","poise":560,"queued_actions":0,"stamina":956,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-129,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":18},{"events":[],"fighter":{"action":"hook","action_active_ticks":3,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":12,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":19,"maximum_stamina":998,"player_id":"one","poise":560,"queued_actions":0,"stamina":959,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-135,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":19},{"events":[],"fighter":{"action":"hook","action_active_ticks":3,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":12,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":20,"maximum_stamina":998,"player_id":"one","poise":561,"queued_actions":0,"stamina":962,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-142,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":20},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":21,"maximum_stamina":998,"player_id":"one","poise":561,"queued_actions":0,"stamina":965,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-149,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":21},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":22,"maximum_stamina":998,"player_id":"one","poise":562,"queued_actions":0,"stamina":968,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-156,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":22},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":23,"maximum_stamina":998,"player_id":"one","poise":562,"queued_actions":0,"stamina":971,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-163,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":23},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":24,"maximum_stamina":998,"player_id":"one","poise":563,"queued_actions":0,"stamina":974,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-170,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":24},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":25,"maximum_stamina":998,"player_id":"one","poise":563,"queued_actions":0,"stamina":977,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-177,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":25},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":26,"maximum_stamina":998,"player_id":"one","poise":564,"queued_actions":0,"stamina":980,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-184,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":26},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":27,"maximum_stamina":998,"player_id":"one","poise":564,"queued_actions":0,"stamina":983,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-191,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":27},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":28,"maximum_stamina":998,"player_id":"one","poise":565,"queued_actions":0,"stamina":986,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-198,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":28},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":29,"maximum_stamina":998,"player_id":"one","poise":565,"queued_actions":0,"stamina":989,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-205,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":29},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":30,"maximum_stamina":998,"player_id":"one","poise":566,"queued_actions":0,"stamina":992,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-212,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":30},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":31,"maximum_stamina":998,"player_id":"one","poise":566,"queued_actions":0,"stamina":995,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-219,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":31},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":32,"maximum_stamina":998,"player_id":"one","poise":567,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-226,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":32},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":33,"maximum_stamina":998,"player_id":"one","poise":567,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-233,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":33},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":34,"maximum_stamina":998,"player_id":"one","poise":568,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-240,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":34},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":35,"maximum_stamina":998,"player_id":"one","poise":568,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-247,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":35},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":36,"maximum_stamina":998,"player_id":"one","poise":569,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-254,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":36},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":37,"maximum_stamina":998,"player_id":"one","poise":569,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-261,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":37},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":38,"maximum_stamina":998,"player_id":"one","poise":570,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-268,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":38},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":39,"maximum_stamina":998,"player_id":"one","poise":570,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-275,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":39},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":40,"maximum_stamina":998,"player_id":"one","poise":571,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-282,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":40},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":41,"maximum_stamina":998,"player_id":"one","poise":571,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-289,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":41},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":42,"maximum_stamina":998,"player_id":"one","poise":572,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-296,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":42},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":43,"maximum_stamina":998,"player_id":"one","poise":572,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-303,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":43},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":44,"maximum_stamina":998,"player_id":"one","poise":573,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-310,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":44},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":36,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":45,"maximum_stamina":998,"player_id":"one","poise":573,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":43,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-317,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":45}],"parried while holding back":[{"events":[{"action_id":"one@1","actor_id":"one","amount":0,"blood":0,"detail":"right:straight:head","direction":0,"event_id":1,"kind":"punch_start","target_id":null,"tick":1}],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":null,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":13,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":1,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":901,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-65,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":1},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":null,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":13,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":2,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":902,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-65,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":2},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":null,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":13,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":3,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":903,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-65,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":3},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":null,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":13,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":4,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":904,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-65,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":4},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":null,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":13,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":5,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":905,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-65,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":5},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":null,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":13,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":6,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":906,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-65,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":6},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":null,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":13,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":7,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":907,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-65,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":7},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":null,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":13,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":8,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":908,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-65,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":8},{"events":[{"action_id":"one@1","actor_id":"two","amount":0,"blood":0,"detail":"","direction":0,"event_id":2,"kind":"perfect_block","target_id":"one","tick":9},{"action_id":"one@1","actor_id":"two","amount":20,"blood":0,"detail":"","direction":0,"event_id":3,"kind":"parry","target_id":"one","tick":9},{"action_id":"one@1","actor_id":"one","amount":10,"blood":2,"detail":"straight:head","direction":1,"event_id":4,"kind":"hit","target_id":"two","tick":9}],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":13,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":9,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":909,"stance":"orthodox","stunned_ticks":20,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-65,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":9},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":13,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":10,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":910,"stance":"orthodox","stunned_ticks":19,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-65,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":10},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":13,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":11,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":911,"stance":"orthodox","stunned_ticks":18,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-65,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":11},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":13,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":12,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":912,"stance":"orthodox","stunned_ticks":17,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-65,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":12},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":13,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":13,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":913,"stance":"orthodox","stunned_ticks":16,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-65,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":13},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":13,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":14,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":914,"stance":"orthodox","stunned_ticks":15,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-65,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":14},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":13,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":15,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":915,"stance":"orthodox","stunned_ticks":14,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-65,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":15},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":13,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":16,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":916,"stance":"orthodox","stunned_ticks":13,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-65,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":16},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":13,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":17,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":917,"stance":"orthodox","stunned_ticks":12,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-65,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":17},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":13,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":18,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":918,"stance":"orthodox","stunned_ticks":11,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-65,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":18},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":13,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":19,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":919,"stance":"orthodox","stunned_ticks":10,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-65,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":19},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":13,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":20,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":920,"stance":"orthodox","stunned_ticks":9,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-65,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":20},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":13,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":21,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":921,"stance":"orthodox","stunned_ticks":8,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-65,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":21},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":13,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":22,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":922,"stance":"orthodox","stunned_ticks":7,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-65,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":22},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":13,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":23,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":923,"stance":"orthodox","stunned_ticks":6,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-65,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":23},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":13,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":24,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":924,"stance":"orthodox","stunned_ticks":5,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-65,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":24},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":25,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":925,"stance":"orthodox","stunned_ticks":4,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-65,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":25},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":26,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":926,"stance":"orthodox","stunned_ticks":3,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-65,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":26},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":27,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":927,"stance":"orthodox","stunned_ticks":2,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-65,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":27},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":28,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":928,"stance":"orthodox","stunned_ticks":1,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":-65,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":28},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":29,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":931,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-4,"velocity_y":0,"warnings":0,"x":-68,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":29},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":30,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":934,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-5,"velocity_y":0,"warnings":0,"x":-73,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":30},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":31,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":937,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-6,"velocity_y":0,"warnings":0,"x":-79,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":31},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":32,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":940,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-86,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":32},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":33,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":943,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-93,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":33},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":34,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":946,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-100,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":34},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":35,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":949,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-107,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":35},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":36,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":952,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-114,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":36},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":37,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":955,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-121,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":37},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":38,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":958,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-128,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":38},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":39,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":961,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-135,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":39},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":40,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":964,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-141,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":40},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":41,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":967,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-148,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":41},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":42,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":970,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-155,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":42},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":43,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":973,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-162,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":43},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":44,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":976,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-169,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":44},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":992,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":34,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":45,"maximum_stamina":997,"player_id":"one","poise":600,"queued_actions":0,"stamina":979,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":-176,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":45}]} +{"a jab pressed during a hook's recovery while holding back":[{"events":[{"action_id":"one@1","actor_id":"one","amount":0,"blood":0,"detail":"left:hook:head","direction":0,"event_id":1,"kind":"punch_start","target_id":null,"tick":1}],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":1,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":955,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":1},{"events":[],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":2,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":957,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":2},{"events":[],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":3,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":959,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":3},{"events":[],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":4,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":961,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":4},{"events":[],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":5,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":963,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":5},{"events":[{"action_id":"one@1","actor_id":"one","amount":18,"blood":0,"detail":"","direction":0,"event_id":2,"kind":"whiff","target_id":"two","tick":6}],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":6,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":6,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":947,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":6},{"events":[],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":6,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":7,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":949,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":7},{"events":[],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":6,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":8,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":1,"stamina":950,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-5,"velocity_y":0,"warnings":0,"x":46,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":8},{"events":[],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":6,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":9,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":1,"stamina":951,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-6,"velocity_y":0,"warnings":0,"x":40,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":9},{"events":[],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":6,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":10,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":1,"stamina":952,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-6,"velocity_y":0,"warnings":0,"x":34,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":10},{"events":[],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":6,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":11,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":1,"stamina":953,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-6,"velocity_y":0,"warnings":0,"x":28,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":11},{"events":[],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":6,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":12,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":1,"stamina":954,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-6,"velocity_y":0,"warnings":0,"x":22,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":12},{"events":[],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":6,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":13,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":1,"stamina":955,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-6,"velocity_y":0,"warnings":0,"x":17,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":13},{"events":[],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":6,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":14,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":1,"stamina":956,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-6,"velocity_y":0,"warnings":0,"x":11,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":14},{"events":[{"action_id":"one@15","actor_id":"one","amount":0,"blood":0,"detail":"left:jab:head","direction":0,"event_id":3,"kind":"punch_start","target_id":null,"tick":15}],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@15","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":15,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":15,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":932,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-1,"velocity_y":0,"warnings":0,"x":9,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":15},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@15","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":15,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":995,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":16,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":933,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":9,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":16},{"events":[{"action_id":"one@15","actor_id":"one","amount":9,"blood":0,"detail":"","direction":0,"event_id":4,"kind":"whiff","target_id":"two","tick":17}],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":17,"action_hand":"left","action_id":"one@15","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":15,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":17,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":925,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":9,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":17},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":17,"action_hand":"left","action_id":"one@15","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":15,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":18,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":926,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":9,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":18},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":17,"action_hand":"left","action_id":"one@15","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":15,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":19,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":927,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-5,"velocity_y":0,"warnings":0,"x":4,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":19},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":17,"action_hand":"left","action_id":"one@15","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":15,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":20,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":928,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-6,"velocity_y":0,"warnings":0,"x":-2,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":20},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":17,"action_hand":"left","action_id":"one@15","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":15,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":21,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":929,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-6,"velocity_y":0,"warnings":0,"x":-8,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":21},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":17,"action_hand":"left","action_id":"one@15","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":15,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":22,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":930,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-6,"velocity_y":0,"warnings":0,"x":-14,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":22},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":17,"action_hand":"left","action_id":"one@15","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":15,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":23,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":933,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-9,"velocity_y":0,"warnings":0,"x":-22,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":23},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":17,"action_hand":"left","action_id":"one@15","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":15,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":24,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":936,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-32,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":24},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":17,"action_hand":"left","action_id":"one@15","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":15,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":25,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":939,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-42,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":25},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":17,"action_hand":"left","action_id":"one@15","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":15,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":26,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":942,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-52,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":26},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":17,"action_hand":"left","action_id":"one@15","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":15,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":27,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":945,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-62,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":27},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":17,"action_hand":"left","action_id":"one@15","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":15,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":28,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":948,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-72,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":28},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":17,"action_hand":"left","action_id":"one@15","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":15,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":29,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":951,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-82,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":29},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":17,"action_hand":"left","action_id":"one@15","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":15,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":30,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":954,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-92,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":30},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":17,"action_hand":"left","action_id":"one@15","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":15,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":31,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":957,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-102,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":31},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":17,"action_hand":"left","action_id":"one@15","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":15,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":32,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":960,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-112,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":32},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":17,"action_hand":"left","action_id":"one@15","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":15,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":33,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":963,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-122,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":33},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":17,"action_hand":"left","action_id":"one@15","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":15,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":34,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":966,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-132,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":34},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":17,"action_hand":"left","action_id":"one@15","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":15,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":35,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":969,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-142,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":35},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":17,"action_hand":"left","action_id":"one@15","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":15,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":36,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":972,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-152,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":36},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":17,"action_hand":"left","action_id":"one@15","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":15,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":37,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":975,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-162,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":37},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":17,"action_hand":"left","action_id":"one@15","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":15,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":38,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":978,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-172,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":38},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":39,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":981,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-182,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":39},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":40,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":984,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-192,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":40},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":41,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":987,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-202,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":41},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":42,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":990,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-212,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":42},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":43,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":993,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-222,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":43},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":44,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":996,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-232,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":44},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":45,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-242,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":45}],"a jab pressed late in a flinch while holding back":[{"events":[{"action_id":"two@1","actor_id":"two","amount":0,"blood":0,"detail":"left:jab:head","direction":0,"event_id":1,"kind":"punch_start","target_id":null,"tick":1},{"action_id":"one@1","actor_id":"one","amount":0,"blood":0,"detail":"left:hook:head","direction":0,"event_id":2,"kind":"punch_start","target_id":null,"tick":1}],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":1,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":955,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":150,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":1},{"events":[],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":2,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":957,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":150,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":2},{"events":[{"action_id":"two@1","actor_id":"two","amount":43,"blood":14,"detail":"jab:head","direction":-1,"event_id":3,"kind":"counter_hit","target_id":"one","tick":3}],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":3,"maximum_stamina":1000,"player_id":"one","poise":562,"queued_actions":0,"stamina":958,"stance":"orthodox","stunned_ticks":5,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-5,"velocity_y":0,"warnings":0,"x":145,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":3},{"events":[],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":4,"maximum_stamina":1000,"player_id":"one","poise":562,"queued_actions":0,"stamina":959,"stance":"orthodox","stunned_ticks":4,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":139,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":4},{"events":[],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":5,"maximum_stamina":1000,"player_id":"one","poise":562,"queued_actions":1,"stamina":960,"stance":"orthodox","stunned_ticks":3,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":132,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":5},{"events":[],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":6,"maximum_stamina":1000,"player_id":"one","poise":562,"queued_actions":1,"stamina":961,"stance":"orthodox","stunned_ticks":2,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":125,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":6},{"events":[],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":7,"maximum_stamina":1000,"player_id":"one","poise":562,"queued_actions":1,"stamina":962,"stance":"orthodox","stunned_ticks":1,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":118,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":7},{"events":[],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":8,"maximum_stamina":1000,"player_id":"one","poise":563,"queued_actions":1,"stamina":965,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-9,"velocity_y":0,"warnings":0,"x":109,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":8},{"events":[{"action_id":"one@9","actor_id":"one","amount":0,"blood":0,"detail":"left:jab:head","direction":0,"event_id":4,"kind":"punch_start","target_id":null,"tick":9}],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@9","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":9,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":9,"maximum_stamina":1000,"player_id":"one","poise":563,"queued_actions":0,"stamina":941,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-2,"velocity_y":0,"warnings":0,"x":106,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":9},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@9","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":9,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":10,"maximum_stamina":1000,"player_id":"one","poise":563,"queued_actions":0,"stamina":942,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-1,"velocity_y":0,"warnings":0,"x":106,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":10},{"events":[{"action_id":"one@9","actor_id":"one","amount":34,"blood":11,"detail":"jab:head","direction":1,"event_id":5,"kind":"hit","target_id":"two","tick":11}],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":11,"action_hand":"left","action_id":"one@9","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":9,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":11,"maximum_stamina":1000,"player_id":"one","poise":563,"queued_actions":0,"stamina":943,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":0,"velocity_y":0,"warnings":0,"x":106,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":11},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":11,"action_hand":"left","action_id":"one@9","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":9,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":12,"maximum_stamina":1000,"player_id":"one","poise":563,"queued_actions":0,"stamina":944,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":0,"velocity_y":0,"warnings":0,"x":106,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":12},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":11,"action_hand":"left","action_id":"one@9","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":9,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":13,"maximum_stamina":1000,"player_id":"one","poise":563,"queued_actions":0,"stamina":945,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-5,"velocity_y":0,"warnings":0,"x":101,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":13},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":11,"action_hand":"left","action_id":"one@9","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":9,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":14,"maximum_stamina":1000,"player_id":"one","poise":563,"queued_actions":0,"stamina":946,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-6,"velocity_y":0,"warnings":0,"x":95,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":14},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":11,"action_hand":"left","action_id":"one@9","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":9,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":15,"maximum_stamina":1000,"player_id":"one","poise":563,"queued_actions":0,"stamina":947,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-6,"velocity_y":0,"warnings":0,"x":89,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":15},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":11,"action_hand":"left","action_id":"one@9","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":9,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":16,"maximum_stamina":1000,"player_id":"one","poise":563,"queued_actions":0,"stamina":948,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-6,"velocity_y":0,"warnings":0,"x":83,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":16},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":11,"action_hand":"left","action_id":"one@9","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":9,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":17,"maximum_stamina":1000,"player_id":"one","poise":563,"queued_actions":0,"stamina":951,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-9,"velocity_y":0,"warnings":0,"x":75,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":17},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":11,"action_hand":"left","action_id":"one@9","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":9,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":18,"maximum_stamina":1000,"player_id":"one","poise":564,"queued_actions":0,"stamina":954,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":65,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":18},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":11,"action_hand":"left","action_id":"one@9","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":9,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":19,"maximum_stamina":1000,"player_id":"one","poise":564,"queued_actions":0,"stamina":957,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":55,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":19},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":11,"action_hand":"left","action_id":"one@9","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":9,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":20,"maximum_stamina":1000,"player_id":"one","poise":565,"queued_actions":0,"stamina":960,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":45,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":20},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":11,"action_hand":"left","action_id":"one@9","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":9,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":21,"maximum_stamina":1000,"player_id":"one","poise":565,"queued_actions":0,"stamina":963,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":35,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":21},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":11,"action_hand":"left","action_id":"one@9","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":9,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":22,"maximum_stamina":1000,"player_id":"one","poise":566,"queued_actions":0,"stamina":966,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":25,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":22},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":11,"action_hand":"left","action_id":"one@9","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":9,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":23,"maximum_stamina":1000,"player_id":"one","poise":566,"queued_actions":0,"stamina":969,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":15,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":23},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":11,"action_hand":"left","action_id":"one@9","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":9,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":24,"maximum_stamina":1000,"player_id":"one","poise":567,"queued_actions":0,"stamina":972,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":5,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":24},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":11,"action_hand":"left","action_id":"one@9","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":9,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":25,"maximum_stamina":1000,"player_id":"one","poise":567,"queued_actions":0,"stamina":975,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-5,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":25},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":11,"action_hand":"left","action_id":"one@9","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":9,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":26,"maximum_stamina":1000,"player_id":"one","poise":568,"queued_actions":0,"stamina":978,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-15,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":26},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":11,"action_hand":"left","action_id":"one@9","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":9,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":27,"maximum_stamina":1000,"player_id":"one","poise":568,"queued_actions":0,"stamina":981,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-25,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":27},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":11,"action_hand":"left","action_id":"one@9","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":9,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":28,"maximum_stamina":1000,"player_id":"one","poise":569,"queued_actions":0,"stamina":984,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-35,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":28},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":11,"action_hand":"left","action_id":"one@9","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":9,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":29,"maximum_stamina":1000,"player_id":"one","poise":569,"queued_actions":0,"stamina":987,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-45,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":29},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":11,"action_hand":"left","action_id":"one@9","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":9,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":30,"maximum_stamina":1000,"player_id":"one","poise":570,"queued_actions":0,"stamina":990,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-55,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":30},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":11,"action_hand":"left","action_id":"one@9","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":9,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":31,"maximum_stamina":1000,"player_id":"one","poise":570,"queued_actions":0,"stamina":993,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-65,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":31},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":11,"action_hand":"left","action_id":"one@9","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":9,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":32,"maximum_stamina":1000,"player_id":"one","poise":571,"queued_actions":0,"stamina":996,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-75,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":32},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":33,"maximum_stamina":1000,"player_id":"one","poise":571,"queued_actions":0,"stamina":999,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-85,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":33},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":34,"maximum_stamina":1000,"player_id":"one","poise":572,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-95,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":34},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":35,"maximum_stamina":1000,"player_id":"one","poise":572,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-105,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":35},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":36,"maximum_stamina":1000,"player_id":"one","poise":573,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-115,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":36},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":37,"maximum_stamina":1000,"player_id":"one","poise":573,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-125,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":37},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":38,"maximum_stamina":1000,"player_id":"one","poise":574,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-135,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":38},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":39,"maximum_stamina":1000,"player_id":"one","poise":574,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-145,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":39},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":40,"maximum_stamina":1000,"player_id":"one","poise":575,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-155,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":40},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":41,"maximum_stamina":1000,"player_id":"one","poise":575,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-165,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":41},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":42,"maximum_stamina":1000,"player_id":"one","poise":576,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-175,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":42},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":43,"maximum_stamina":1000,"player_id":"one","poise":576,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-185,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":43},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":44,"maximum_stamina":1000,"player_id":"one","poise":577,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-195,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":44},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":45,"maximum_stamina":1000,"player_id":"one","poise":577,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-205,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":45}],"a jab thrown holding back":[{"events":[{"action_id":"one@1","actor_id":"one","amount":0,"blood":0,"detail":"left:jab:head","direction":0,"event_id":1,"kind":"punch_start","target_id":null,"tick":1}],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":1,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":1,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":977,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":1},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":1,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":2,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":979,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":2},{"events":[{"action_id":"one@1","actor_id":"one","amount":9,"blood":0,"detail":"","direction":0,"event_id":2,"kind":"whiff","target_id":"two","tick":3}],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":3,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":1,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":3,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":972,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":3},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":3,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":1,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":4,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":974,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":4},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":3,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":1,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":5,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":975,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-5,"velocity_y":0,"warnings":0,"x":46,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":5},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":3,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":1,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":6,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":976,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-6,"velocity_y":0,"warnings":0,"x":40,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":6},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":3,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":1,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":7,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":977,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-6,"velocity_y":0,"warnings":0,"x":34,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":7},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":3,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":1,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":8,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":978,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-6,"velocity_y":0,"warnings":0,"x":28,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":8},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":3,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":1,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":9,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":981,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-9,"velocity_y":0,"warnings":0,"x":19,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":9},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":3,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":1,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":10,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":984,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":10,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":10},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":3,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":1,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":11,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":987,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":0,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":11},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":3,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":1,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":12,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":990,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-10,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":12},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":3,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":1,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":13,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":993,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-20,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":13},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":3,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":1,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":14,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":996,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-30,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":14},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":3,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":1,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":15,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":999,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-40,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":15},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":3,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":1,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":16,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":16},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":3,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":1,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":17,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-60,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":17},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":3,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":1,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":18,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-70,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":18},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":3,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":1,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":19,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-80,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":19},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":3,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":1,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":20,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-90,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":20},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":3,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":1,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":21,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-100,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":21},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":3,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":1,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":22,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-110,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":22},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":3,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":1,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":23,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-120,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":23},{"events":[],"fighter":{"action":"jab","action_active_ticks":2,"action_contact_tick":3,"action_hand":"left","action_id":"one@1","action_key":"jab:left:head:normal","action_power":"normal","action_recovery_ticks":4,"action_start_tick":1,"action_startup_ticks":2,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":24,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-130,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":24},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":25,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-140,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":25},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":26,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-150,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":26},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":27,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-160,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":27},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":28,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-170,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":28},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":29,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-180,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":29},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":30,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-190,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":30},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":31,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-200,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":31},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":32,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-210,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":32},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":33,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-220,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":33},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":34,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-230,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":34},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":35,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-240,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":35},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":36,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-250,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":36},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":37,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-260,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":37},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":38,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-270,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":38},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":39,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-280,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":39},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":40,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-290,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":40},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":41,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-300,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":41},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":42,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-310,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":42},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":43,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-320,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":43},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":44,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-330,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":44},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":45,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-340,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":45}],"a slip thrown holding back":[{"events":[{"action_id":null,"actor_id":"one","amount":0,"blood":0,"detail":"slip_left","direction":0,"event_id":1,"kind":"defense","target_id":null,"tick":1}],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"slip_left","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":1,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":990,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":1},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"slip_left","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":2,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":995,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":2},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"slip_left","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":3,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":3},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"slip_left","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":4,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":4},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"slip_left","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":5,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":5},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"slip_left","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":6,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":6},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"slip_left","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":7,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":7},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":8,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-8,"velocity_y":0,"warnings":0,"x":43,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":8},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":9,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-9,"velocity_y":0,"warnings":0,"x":34,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":9},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":10,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":24,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":10},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":11,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":14,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":11},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":12,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":4,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":12},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":13,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-6,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":13},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":14,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-16,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":14},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":15,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-26,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":15},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":16,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-36,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":16},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":17,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-46,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":17},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":18,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-56,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":18},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":19,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-66,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":19},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":20,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-76,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":20},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":21,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-86,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":21},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":22,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-96,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":22},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":23,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-106,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":23},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":24,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-116,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":24},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":25,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-126,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":25},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":26,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-136,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":26},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":27,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-146,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":27},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":28,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-156,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":28},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":29,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-166,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":29},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":30,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-176,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":30},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":31,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-186,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":31},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":32,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-196,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":32},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":33,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-206,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":33},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":34,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-216,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":34},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":35,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-226,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":35},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":36,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-236,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":36},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":37,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-246,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":37},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":38,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-256,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":38},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":39,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-266,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":39},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":40,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-276,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":40},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":41,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-286,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":41},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":42,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-296,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":42},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":43,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-306,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":43},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":44,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-316,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":44},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":45,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-326,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":45}],"flinched mid-hook while holding back":[{"events":[{"action_id":"two@1","actor_id":"two","amount":0,"blood":0,"detail":"left:jab:head","direction":0,"event_id":1,"kind":"punch_start","target_id":null,"tick":1},{"action_id":"one@1","actor_id":"one","amount":0,"blood":0,"detail":"left:hook:head","direction":0,"event_id":2,"kind":"punch_start","target_id":null,"tick":1}],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":1,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":955,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":150,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":1},{"events":[],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":2,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":957,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":150,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":2},{"events":[{"action_id":"two@1","actor_id":"two","amount":43,"blood":14,"detail":"jab:head","direction":-1,"event_id":3,"kind":"counter_hit","target_id":"one","tick":3}],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":3,"maximum_stamina":1000,"player_id":"one","poise":562,"queued_actions":0,"stamina":958,"stance":"orthodox","stunned_ticks":5,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-5,"velocity_y":0,"warnings":0,"x":145,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":3},{"events":[],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":4,"maximum_stamina":1000,"player_id":"one","poise":562,"queued_actions":0,"stamina":959,"stance":"orthodox","stunned_ticks":4,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":139,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":4},{"events":[],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":5,"maximum_stamina":1000,"player_id":"one","poise":562,"queued_actions":0,"stamina":960,"stance":"orthodox","stunned_ticks":3,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":132,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":5},{"events":[],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":6,"maximum_stamina":1000,"player_id":"one","poise":562,"queued_actions":0,"stamina":961,"stance":"orthodox","stunned_ticks":2,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":125,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":6},{"events":[],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":7,"maximum_stamina":1000,"player_id":"one","poise":562,"queued_actions":0,"stamina":962,"stance":"orthodox","stunned_ticks":1,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-7,"velocity_y":0,"warnings":0,"x":118,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":7},{"events":[],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":8,"maximum_stamina":1000,"player_id":"one","poise":563,"queued_actions":0,"stamina":965,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-9,"velocity_y":0,"warnings":0,"x":109,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":8},{"events":[],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":9,"maximum_stamina":1000,"player_id":"one","poise":563,"queued_actions":0,"stamina":968,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":99,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":9},{"events":[],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":10,"maximum_stamina":1000,"player_id":"one","poise":564,"queued_actions":0,"stamina":971,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":89,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":10},{"events":[],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":11,"maximum_stamina":1000,"player_id":"one","poise":564,"queued_actions":0,"stamina":974,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":79,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":11},{"events":[],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":12,"maximum_stamina":1000,"player_id":"one","poise":565,"queued_actions":0,"stamina":977,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":69,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":12},{"events":[],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":13,"maximum_stamina":1000,"player_id":"one","poise":565,"queued_actions":0,"stamina":980,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":59,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":13},{"events":[],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":14,"maximum_stamina":1000,"player_id":"one","poise":566,"queued_actions":0,"stamina":983,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":49,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":14},{"events":[],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":15,"maximum_stamina":1000,"player_id":"one","poise":566,"queued_actions":0,"stamina":986,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":39,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":15},{"events":[],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":16,"maximum_stamina":1000,"player_id":"one","poise":567,"queued_actions":0,"stamina":989,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":29,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":16},{"events":[],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":17,"maximum_stamina":1000,"player_id":"one","poise":567,"queued_actions":0,"stamina":992,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":19,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":17},{"events":[],"fighter":{"action":"hook","action_active_ticks":2,"action_contact_tick":null,"action_hand":"left","action_id":"one@1","action_key":"hook:left:head:normal","action_power":"normal","action_recovery_ticks":7,"action_start_tick":1,"action_startup_ticks":5,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":18,"maximum_stamina":1000,"player_id":"one","poise":568,"queued_actions":0,"stamina":995,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":9,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":18},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":19,"maximum_stamina":1000,"player_id":"one","poise":568,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-1,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":19},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":20,"maximum_stamina":1000,"player_id":"one","poise":569,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-11,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":20},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":21,"maximum_stamina":1000,"player_id":"one","poise":569,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-21,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":21},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":22,"maximum_stamina":1000,"player_id":"one","poise":570,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-31,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":22},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":23,"maximum_stamina":1000,"player_id":"one","poise":570,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-41,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":23},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":24,"maximum_stamina":1000,"player_id":"one","poise":571,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-51,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":24},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":25,"maximum_stamina":1000,"player_id":"one","poise":571,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-61,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":25},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":26,"maximum_stamina":1000,"player_id":"one","poise":572,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-71,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":26},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":27,"maximum_stamina":1000,"player_id":"one","poise":572,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-81,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":27},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":28,"maximum_stamina":1000,"player_id":"one","poise":573,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-91,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":28},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":29,"maximum_stamina":1000,"player_id":"one","poise":573,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-101,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":29},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":30,"maximum_stamina":1000,"player_id":"one","poise":574,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-111,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":30},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":31,"maximum_stamina":1000,"player_id":"one","poise":574,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-121,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":31},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":32,"maximum_stamina":1000,"player_id":"one","poise":575,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-131,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":32},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":33,"maximum_stamina":1000,"player_id":"one","poise":575,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-141,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":33},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":34,"maximum_stamina":1000,"player_id":"one","poise":576,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-151,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":34},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":35,"maximum_stamina":1000,"player_id":"one","poise":576,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-161,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":35},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":36,"maximum_stamina":1000,"player_id":"one","poise":577,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-171,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":36},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":37,"maximum_stamina":1000,"player_id":"one","poise":577,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-181,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":37},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":38,"maximum_stamina":1000,"player_id":"one","poise":578,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-191,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":38},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":39,"maximum_stamina":1000,"player_id":"one","poise":578,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-201,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":39},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":40,"maximum_stamina":1000,"player_id":"one","poise":579,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-211,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":40},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":41,"maximum_stamina":1000,"player_id":"one","poise":579,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-221,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":41},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":42,"maximum_stamina":1000,"player_id":"one","poise":580,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-231,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":42},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":43,"maximum_stamina":1000,"player_id":"one","poise":580,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-241,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":43},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":44,"maximum_stamina":1000,"player_id":"one","poise":581,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-251,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":44},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":45,"maximum_stamina":1000,"player_id":"one","poise":581,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":25,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":30,"swelling":7},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-261,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":45}],"parried while holding back":[{"events":[{"action_id":"one@1","actor_id":"one","amount":0,"blood":0,"detail":"right:straight:head","direction":0,"event_id":1,"kind":"punch_start","target_id":null,"tick":1}],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":null,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":9,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":1,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":948,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":135,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":1},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":null,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":9,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":2,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":950,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":135,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":2},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":null,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":9,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":3,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":952,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":135,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":3},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":null,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":9,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":4,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":954,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":135,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":4},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":null,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":9,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":5,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":956,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":135,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":5},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":null,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":9,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":6,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":958,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":135,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":6},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":null,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":9,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":7,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":960,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":135,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":7},{"events":[{"action_id":"one@1","actor_id":"two","amount":0,"blood":0,"detail":"","direction":0,"event_id":2,"kind":"perfect_block","target_id":"one","tick":8},{"action_id":"one@1","actor_id":"two","amount":16,"blood":0,"detail":"","direction":0,"event_id":3,"kind":"parry","target_id":"one","tick":8},{"action_id":"one@1","actor_id":"one","amount":13,"blood":4,"detail":"straight:head","direction":1,"event_id":4,"kind":"hit","target_id":"two","tick":8}],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":8,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":9,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":8,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":962,"stance":"orthodox","stunned_ticks":16,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":135,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":8},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":8,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":9,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":9,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":964,"stance":"orthodox","stunned_ticks":15,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":135,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":9},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":8,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":9,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":10,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":966,"stance":"orthodox","stunned_ticks":14,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":135,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":10},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":8,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":9,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":11,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":968,"stance":"orthodox","stunned_ticks":13,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":135,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":11},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":8,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":9,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":12,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":970,"stance":"orthodox","stunned_ticks":12,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":135,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":12},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":8,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":9,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":13,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":972,"stance":"orthodox","stunned_ticks":11,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":135,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":13},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":8,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":9,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":14,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":974,"stance":"orthodox","stunned_ticks":10,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":135,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":14},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":8,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":9,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":15,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":976,"stance":"orthodox","stunned_ticks":9,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":135,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":15},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":8,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":9,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":16,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":978,"stance":"orthodox","stunned_ticks":8,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":135,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":16},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":8,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":9,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":17,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":980,"stance":"orthodox","stunned_ticks":7,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":135,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":17},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":8,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":9,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":18,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":982,"stance":"orthodox","stunned_ticks":6,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":135,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":18},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":8,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":9,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":19,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":984,"stance":"orthodox","stunned_ticks":5,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":135,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":19},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":8,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":9,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":20,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":986,"stance":"orthodox","stunned_ticks":4,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":135,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":20},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":8,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":9,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":21,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":988,"stance":"orthodox","stunned_ticks":3,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":135,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":21},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":8,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":9,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":22,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":990,"stance":"orthodox","stunned_ticks":2,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":135,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":22},{"events":[],"fighter":{"action":"straight","action_active_ticks":3,"action_contact_tick":8,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:power","action_power":"power","action_recovery_ticks":9,"action_start_tick":1,"action_startup_ticks":7,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":23,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":992,"stance":"orthodox","stunned_ticks":1,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":135,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":23},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":24,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":995,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-8,"velocity_y":0,"warnings":0,"x":128,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":24},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":25,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-9,"velocity_y":0,"warnings":0,"x":119,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":25},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":26,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":109,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":26},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":27,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":99,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":27},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":28,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":89,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":28},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":29,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":79,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":29},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":30,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":69,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":30},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":31,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":59,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":31},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":32,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":49,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":32},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":33,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":39,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":33},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":34,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":29,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":34},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":35,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":19,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":35},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":36,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":9,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":36},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":37,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-1,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":37},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":38,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-11,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":38},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":39,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-21,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":39},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":40,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-31,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":40},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":41,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-41,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":41},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":42,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-51,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":42},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":43,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-61,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":43},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":44,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-71,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":44},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":998,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":45,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":1000,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-81,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":45}],"slipped out of a power uppercut's recovery while holding back":[{"events":[{"action_id":"one@1","actor_id":"one","amount":0,"blood":0,"detail":"right:uppercut:head","direction":0,"event_id":1,"kind":"punch_start","target_id":null,"tick":1}],"fighter":{"action":"uppercut","action_active_ticks":3,"action_contact_tick":null,"action_hand":"right","action_id":"one@1","action_key":"uppercut:right:head:power","action_power":"power","action_recovery_ticks":11,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":1,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":928,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":1},{"events":[],"fighter":{"action":"uppercut","action_active_ticks":3,"action_contact_tick":null,"action_hand":"right","action_id":"one@1","action_key":"uppercut:right:head:power","action_power":"power","action_recovery_ticks":11,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":2,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":930,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":2},{"events":[],"fighter":{"action":"uppercut","action_active_ticks":3,"action_contact_tick":null,"action_hand":"right","action_id":"one@1","action_key":"uppercut:right:head:power","action_power":"power","action_recovery_ticks":11,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":3,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":932,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":3},{"events":[],"fighter":{"action":"uppercut","action_active_ticks":3,"action_contact_tick":null,"action_hand":"right","action_id":"one@1","action_key":"uppercut:right:head:power","action_power":"power","action_recovery_ticks":11,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":4,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":934,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":4},{"events":[],"fighter":{"action":"uppercut","action_active_ticks":3,"action_contact_tick":null,"action_hand":"right","action_id":"one@1","action_key":"uppercut:right:head:power","action_power":"power","action_recovery_ticks":11,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":5,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":936,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":5},{"events":[],"fighter":{"action":"uppercut","action_active_ticks":3,"action_contact_tick":null,"action_hand":"right","action_id":"one@1","action_key":"uppercut:right:head:power","action_power":"power","action_recovery_ticks":11,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":6,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":938,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":6},{"events":[],"fighter":{"action":"uppercut","action_active_ticks":3,"action_contact_tick":null,"action_hand":"right","action_id":"one@1","action_key":"uppercut:right:head:power","action_power":"power","action_recovery_ticks":11,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":7,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":940,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":7},{"events":[],"fighter":{"action":"uppercut","action_active_ticks":3,"action_contact_tick":null,"action_hand":"right","action_id":"one@1","action_key":"uppercut:right:head:power","action_power":"power","action_recovery_ticks":11,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":8,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":942,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":8},{"events":[{"action_id":"one@1","actor_id":"one","amount":33,"blood":0,"detail":"","direction":0,"event_id":2,"kind":"whiff","target_id":"two","tick":9}],"fighter":{"action":"uppercut","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"uppercut:right:head:power","action_power":"power","action_recovery_ticks":11,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":9,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":911,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":9},{"events":[],"fighter":{"action":"uppercut","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"uppercut:right:head:power","action_power":"power","action_recovery_ticks":11,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":10,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":913,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":10},{"events":[],"fighter":{"action":"uppercut","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"uppercut:right:head:power","action_power":"power","action_recovery_ticks":11,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":994,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":11,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":915,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":11},{"events":[{"action_id":null,"actor_id":"one","amount":0,"blood":0,"detail":"slip_left","direction":0,"event_id":3,"kind":"defense","target_id":null,"tick":12}],"fighter":{"action":"uppercut","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"uppercut:right:head:power","action_power":"power","action_recovery_ticks":11,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"slip_left","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":12,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":905,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":12},{"events":[],"fighter":{"action":"uppercut","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"uppercut:right:head:power","action_power":"power","action_recovery_ticks":11,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"slip_left","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":13,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":910,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":13},{"events":[],"fighter":{"action":"uppercut","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"uppercut:right:head:power","action_power":"power","action_recovery_ticks":11,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"slip_left","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":14,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":915,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":14},{"events":[],"fighter":{"action":"uppercut","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"uppercut:right:head:power","action_power":"power","action_recovery_ticks":11,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"slip_left","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":15,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":920,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":15},{"events":[],"fighter":{"action":"uppercut","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"uppercut:right:head:power","action_power":"power","action_recovery_ticks":11,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"slip_left","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":16,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":925,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":16},{"events":[],"fighter":{"action":"uppercut","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"uppercut:right:head:power","action_power":"power","action_recovery_ticks":11,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"slip_left","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":17,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":930,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":17},{"events":[],"fighter":{"action":"uppercut","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"uppercut:right:head:power","action_power":"power","action_recovery_ticks":11,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"slip_left","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":18,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":935,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":18},{"events":[],"fighter":{"action":"uppercut","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"uppercut:right:head:power","action_power":"power","action_recovery_ticks":11,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":19,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":938,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-8,"velocity_y":0,"warnings":0,"x":43,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":19},{"events":[],"fighter":{"action":"uppercut","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"uppercut:right:head:power","action_power":"power","action_recovery_ticks":11,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":20,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":941,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-9,"velocity_y":0,"warnings":0,"x":34,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":20},{"events":[],"fighter":{"action":"uppercut","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"uppercut:right:head:power","action_power":"power","action_recovery_ticks":11,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":21,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":944,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":24,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":21},{"events":[],"fighter":{"action":"uppercut","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"uppercut:right:head:power","action_power":"power","action_recovery_ticks":11,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":22,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":947,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":14,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":22},{"events":[],"fighter":{"action":"uppercut","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"uppercut:right:head:power","action_power":"power","action_recovery_ticks":11,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":23,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":950,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":4,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":23},{"events":[],"fighter":{"action":"uppercut","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"uppercut:right:head:power","action_power":"power","action_recovery_ticks":11,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":24,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":953,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-6,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":24},{"events":[],"fighter":{"action":"uppercut","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"uppercut:right:head:power","action_power":"power","action_recovery_ticks":11,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":25,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":956,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-16,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":25},{"events":[],"fighter":{"action":"uppercut","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"uppercut:right:head:power","action_power":"power","action_recovery_ticks":11,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":26,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":959,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-26,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":26},{"events":[],"fighter":{"action":"uppercut","action_active_ticks":3,"action_contact_tick":9,"action_hand":"right","action_id":"one@1","action_key":"uppercut:right:head:power","action_power":"power","action_recovery_ticks":11,"action_start_tick":1,"action_startup_ticks":8,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":27,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":962,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-36,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":27},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":28,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":965,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-46,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":28},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":29,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":968,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-56,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":29},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":30,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":971,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-66,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":30},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":31,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":974,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-76,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":31},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":32,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":977,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-86,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":32},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":33,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":980,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-96,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":33},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":34,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":983,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-106,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":34},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":35,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":986,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-116,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":35},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":36,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":989,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-126,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":36},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":37,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":992,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-136,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":37},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":38,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":995,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-146,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":38},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":39,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-156,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":39},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":40,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-166,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":40},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":41,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-176,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":41},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":42,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-186,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":42},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":43,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-196,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":43},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":44,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-206,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":44},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":993,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":45,"maximum_stamina":998,"player_id":"one","poise":600,"queued_actions":0,"stamina":998,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-216,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":45}],"slipped out of a straight's recovery while holding back":[{"events":[{"action_id":"one@1","actor_id":"one","amount":0,"blood":0,"detail":"right:straight:head","direction":0,"event_id":1,"kind":"punch_start","target_id":null,"tick":1}],"fighter":{"action":"straight","action_active_ticks":2,"action_contact_tick":null,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:normal","action_power":"normal","action_recovery_ticks":6,"action_start_tick":1,"action_startup_ticks":4,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":1,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":963,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":1},{"events":[],"fighter":{"action":"straight","action_active_ticks":2,"action_contact_tick":null,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:normal","action_power":"normal","action_recovery_ticks":6,"action_start_tick":1,"action_startup_ticks":4,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":2,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":965,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":2},{"events":[],"fighter":{"action":"straight","action_active_ticks":2,"action_contact_tick":null,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:normal","action_power":"normal","action_recovery_ticks":6,"action_start_tick":1,"action_startup_ticks":4,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":3,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":967,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":3},{"events":[],"fighter":{"action":"straight","action_active_ticks":2,"action_contact_tick":null,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:normal","action_power":"normal","action_recovery_ticks":6,"action_start_tick":1,"action_startup_ticks":4,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":999,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":4,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":969,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":4},{"events":[{"action_id":"one@1","actor_id":"one","amount":14,"blood":0,"detail":"","direction":0,"event_id":2,"kind":"whiff","target_id":"two","tick":5}],"fighter":{"action":"straight","action_active_ticks":2,"action_contact_tick":5,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:normal","action_power":"normal","action_recovery_ticks":6,"action_start_tick":1,"action_startup_ticks":4,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":5,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":957,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":5},{"events":[],"fighter":{"action":"straight","action_active_ticks":2,"action_contact_tick":5,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:normal","action_power":"normal","action_recovery_ticks":6,"action_start_tick":1,"action_startup_ticks":4,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":6,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":959,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":50,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":6},{"events":[],"fighter":{"action":"straight","action_active_ticks":2,"action_contact_tick":5,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:normal","action_power":"normal","action_recovery_ticks":6,"action_start_tick":1,"action_startup_ticks":4,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":7,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":960,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-5,"velocity_y":0,"warnings":0,"x":46,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":7},{"events":[],"fighter":{"action":"straight","action_active_ticks":2,"action_contact_tick":5,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:normal","action_power":"normal","action_recovery_ticks":6,"action_start_tick":1,"action_startup_ticks":4,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":997,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":8,"maximum_stamina":1000,"player_id":"one","poise":600,"queued_actions":0,"stamina":961,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-6,"velocity_y":0,"warnings":0,"x":40,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":8},{"events":[{"action_id":null,"actor_id":"one","amount":0,"blood":0,"detail":"slip_left","direction":0,"event_id":3,"kind":"defense","target_id":null,"tick":9}],"fighter":{"action":"straight","action_active_ticks":2,"action_contact_tick":5,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:normal","action_power":"normal","action_recovery_ticks":6,"action_start_tick":1,"action_startup_ticks":4,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"slip_left","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":9,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":949,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-1,"velocity_y":0,"warnings":0,"x":39,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":9},{"events":[],"fighter":{"action":"straight","action_active_ticks":2,"action_contact_tick":5,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:normal","action_power":"normal","action_recovery_ticks":6,"action_start_tick":1,"action_startup_ticks":4,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"slip_left","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":10,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":952,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":39,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":10},{"events":[],"fighter":{"action":"straight","action_active_ticks":2,"action_contact_tick":5,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:normal","action_power":"normal","action_recovery_ticks":6,"action_start_tick":1,"action_startup_ticks":4,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"slip_left","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":11,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":955,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":39,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":11},{"events":[],"fighter":{"action":"straight","action_active_ticks":2,"action_contact_tick":5,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:normal","action_power":"normal","action_recovery_ticks":6,"action_start_tick":1,"action_startup_ticks":4,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"slip_left","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":12,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":958,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":39,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":12},{"events":[],"fighter":{"action":"straight","action_active_ticks":2,"action_contact_tick":5,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:normal","action_power":"normal","action_recovery_ticks":6,"action_start_tick":1,"action_startup_ticks":4,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"slip_left","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":13,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":961,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":39,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":13},{"events":[],"fighter":{"action":"straight","action_active_ticks":2,"action_contact_tick":5,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:normal","action_power":"normal","action_recovery_ticks":6,"action_start_tick":1,"action_startup_ticks":4,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"slip_left","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":14,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":964,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":39,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":14},{"events":[],"fighter":{"action":"straight","action_active_ticks":2,"action_contact_tick":5,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:normal","action_power":"normal","action_recovery_ticks":6,"action_start_tick":1,"action_startup_ticks":4,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"slip_left","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":15,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":969,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":0,"velocity_y":0,"warnings":0,"x":39,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":15},{"events":[],"fighter":{"action":"straight","action_active_ticks":2,"action_contact_tick":5,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:normal","action_power":"normal","action_recovery_ticks":6,"action_start_tick":1,"action_startup_ticks":4,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":16,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":972,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-8,"velocity_y":0,"warnings":0,"x":31,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":16},{"events":[],"fighter":{"action":"straight","action_active_ticks":2,"action_contact_tick":5,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:normal","action_power":"normal","action_recovery_ticks":6,"action_start_tick":1,"action_startup_ticks":4,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":17,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":975,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-9,"velocity_y":0,"warnings":0,"x":22,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":17},{"events":[],"fighter":{"action":"straight","action_active_ticks":2,"action_contact_tick":5,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:normal","action_power":"normal","action_recovery_ticks":6,"action_start_tick":1,"action_startup_ticks":4,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":18,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":978,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":12,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":18},{"events":[],"fighter":{"action":"straight","action_active_ticks":2,"action_contact_tick":5,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:normal","action_power":"normal","action_recovery_ticks":6,"action_start_tick":1,"action_startup_ticks":4,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":19,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":981,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":2,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":19},{"events":[],"fighter":{"action":"straight","action_active_ticks":2,"action_contact_tick":5,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:normal","action_power":"normal","action_recovery_ticks":6,"action_start_tick":1,"action_startup_ticks":4,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":20,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":984,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-8,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":20},{"events":[],"fighter":{"action":"straight","action_active_ticks":2,"action_contact_tick":5,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:normal","action_power":"normal","action_recovery_ticks":6,"action_start_tick":1,"action_startup_ticks":4,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":21,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":987,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-18,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":21},{"events":[],"fighter":{"action":"straight","action_active_ticks":2,"action_contact_tick":5,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:normal","action_power":"normal","action_recovery_ticks":6,"action_start_tick":1,"action_startup_ticks":4,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":22,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":990,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-28,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":22},{"events":[],"fighter":{"action":"straight","action_active_ticks":2,"action_contact_tick":5,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:normal","action_power":"normal","action_recovery_ticks":6,"action_start_tick":1,"action_startup_ticks":4,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":23,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":993,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-38,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":23},{"events":[],"fighter":{"action":"straight","action_active_ticks":2,"action_contact_tick":5,"action_hand":"right","action_id":"one@1","action_key":"straight:right:head:normal","action_power":"normal","action_recovery_ticks":6,"action_start_tick":1,"action_startup_ticks":4,"action_target":"head","clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":24,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":996,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-48,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":24},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":25,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":999,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-58,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":25},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":26,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":999,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-68,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":26},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":27,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":999,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-78,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":27},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":28,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":999,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-88,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":28},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":29,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":999,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-98,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":29},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":30,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":999,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-108,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":30},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":31,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":999,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-118,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":31},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":32,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":999,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-128,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":32},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":33,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":999,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-138,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":33},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":34,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":999,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-148,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":34},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":35,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":999,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-158,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":35},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":36,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":999,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-168,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":36},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":37,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":999,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-178,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":37},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":38,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":999,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-188,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":38},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":39,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":999,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-198,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":39},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":40,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":999,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-208,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":40},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":41,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":999,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-218,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":41},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":42,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":999,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-228,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":42},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":43,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":999,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-238,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":43},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":44,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":999,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-248,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":44},{"events":[],"fighter":{"action":null,"action_active_ticks":0,"action_contact_tick":null,"action_hand":null,"action_id":null,"action_key":null,"action_power":null,"action_recovery_ticks":0,"action_start_tick":0,"action_startup_ticks":0,"action_target":null,"clinch_startup_ticks":0,"clinch_ticks":0,"conditioning":996,"corner_choice":null,"deductions":0,"defense":"none","facing":1,"facing_x":1000,"facing_y":0,"get_up_count":0,"get_up_meter":0,"get_up_prompt":null,"get_up_required":30,"get_up_window_end_tick":0,"get_up_window_start_tick":0,"guard":700,"guard_broken":false,"is_downed":false,"is_foul_recovery_target":false,"knockdowns":0,"last_input_sequence":45,"maximum_stamina":999,"player_id":"one","poise":600,"queued_actions":0,"stamina":999,"stance":"orthodox","stunned_ticks":0,"style":"balanced","taunt_ticks":0,"trauma":{"bleeding":0,"body":0,"head":0,"left_cut":0,"left_eye":0,"right_cut":0,"right_eye":0,"swelling":0},"velocity_x":-10,"velocity_y":0,"warnings":0,"x":-258,"y":0},"held":{"defense":"none","moveX":-1000,"moveY":0},"tick":45}]} diff --git a/web/hands/src/test/punch-timing-table.json b/web/hands/src/test/punch-timing-table.json index a408b033..05056c08 100644 --- a/web/hands/src/test/punch-timing-table.json +++ b/web/hands/src/test/punch-timing-table.json @@ -1 +1 @@ -["jhnl,0,0,7,14","jhnl,0,900,7,14","jhnl,101,0,7,14","jhnl,101,900,7,14","jhnl,260,0,5,11","jhnl,260,900,7,14","jhnl,445,0,4,10","jhnl,445,900,7,14","jhnl,553,0,4,9","jhnl,553,900,7,14","jhnl,640,0,4,8","jhnl,640,900,6,12","jhnl,695,0,3,8","jhnl,695,900,5,12","jhnl,697,0,3,8","jhnl,697,900,5,12","jhnl,699,0,3,8","jhnl,699,900,5,11","jhnl,733,0,3,8","jhnl,733,900,5,11","jhnl,820,0,3,7","jhnl,820,900,5,10","jhnl,839,0,3,7","jhnl,839,900,5,10","jhnl,841,0,3,7","jhnl,841,900,5,10","jhnl,843,0,3,7","jhnl,843,900,4,10","jhnl,901,0,3,7","jhnl,901,900,4,10","jhnl,947,0,3,7","jhnl,947,900,4,9","jhnl,949,0,3,7","jhnl,949,900,4,9","jhnl,951,0,3,7","jhnl,951,900,4,9","jhnl,955,0,3,7","jhnl,955,900,4,9","jhnl,983,0,3,7","jhnl,983,900,4,9","jhnl,1000,0,3,7","jhnl,1000,900,4,9","jhnr,0,0,8,14","jhnr,0,900,8,14","jhnr,101,0,8,14","jhnr,101,900,8,14","jhnr,260,0,6,11","jhnr,260,900,8,14","jhnr,445,0,5,10","jhnr,445,900,8,14","jhnr,553,0,5,9","jhnr,553,900,8,14","jhnr,640,0,5,8","jhnr,640,900,7,12","jhnr,695,0,4,8","jhnr,695,900,6,12","jhnr,697,0,4,8","jhnr,697,900,6,12","jhnr,699,0,4,8","jhnr,699,900,6,11","jhnr,733,0,4,8","jhnr,733,900,6,11","jhnr,820,0,4,7","jhnr,820,900,6,10","jhnr,839,0,4,7","jhnr,839,900,6,10","jhnr,841,0,4,7","jhnr,841,900,6,10","jhnr,843,0,4,7","jhnr,843,900,5,10","jhnr,901,0,4,7","jhnr,901,900,5,10","jhnr,947,0,4,7","jhnr,947,900,5,9","jhnr,949,0,4,7","jhnr,949,900,5,9","jhnr,951,0,4,7","jhnr,951,900,5,9","jhnr,955,0,4,7","jhnr,955,900,5,9","jhnr,983,0,4,7","jhnr,983,900,5,9","jhnr,1000,0,4,7","jhnr,1000,900,5,9","jhpl,0,0,11,20","jhpl,0,900,11,20","jhpl,101,0,11,20","jhpl,101,900,11,20","jhpl,260,0,9,16","jhpl,260,900,11,20","jhpl,445,0,7,14","jhpl,445,900,11,20","jhpl,553,0,7,13","jhpl,553,900,11,20","jhpl,640,0,6,12","jhpl,640,900,9,18","jhpl,695,0,6,12","jhpl,695,900,9,17","jhpl,697,0,6,12","jhpl,697,900,9,17","jhpl,699,0,6,12","jhpl,699,900,9,17","jhpl,733,0,6,11","jhpl,733,900,9,16","jhpl,820,0,5,11","jhpl,820,900,8,15","jhpl,839,0,5,10","jhpl,839,900,8,15","jhpl,841,0,5,10","jhpl,841,900,8,15","jhpl,843,0,5,10","jhpl,843,900,8,15","jhpl,901,0,5,10","jhpl,901,900,7,14","jhpl,947,0,5,10","jhpl,947,900,7,13","jhpl,949,0,5,10","jhpl,949,900,7,13","jhpl,951,0,5,10","jhpl,951,900,7,13","jhpl,955,0,5,10","jhpl,955,900,7,13","jhpl,983,0,5,10","jhpl,983,900,7,13","jhpl,1000,0,5,10","jhpl,1000,900,7,13","jhpr,0,0,12,20","jhpr,0,900,12,20","jhpr,101,0,12,20","jhpr,101,900,12,20","jhpr,260,0,10,16","jhpr,260,900,12,20","jhpr,445,0,8,14","jhpr,445,900,12,20","jhpr,553,0,8,13","jhpr,553,900,12,20","jhpr,640,0,7,12","jhpr,640,900,10,18","jhpr,695,0,7,12","jhpr,695,900,10,17","jhpr,697,0,7,12","jhpr,697,900,10,17","jhpr,699,0,7,12","jhpr,699,900,10,17","jhpr,733,0,7,11","jhpr,733,900,10,16","jhpr,820,0,6,11","jhpr,820,900,9,15","jhpr,839,0,6,10","jhpr,839,900,9,15","jhpr,841,0,6,10","jhpr,841,900,9,15","jhpr,843,0,6,10","jhpr,843,900,9,15","jhpr,901,0,6,10","jhpr,901,900,8,14","jhpr,947,0,6,10","jhpr,947,900,8,13","jhpr,949,0,6,10","jhpr,949,900,8,13","jhpr,951,0,6,10","jhpr,951,900,8,13","jhpr,955,0,6,10","jhpr,955,900,8,13","jhpr,983,0,6,10","jhpr,983,900,8,13","jhpr,1000,0,6,10","jhpr,1000,900,8,13","jbnl,0,0,9,14","jbnl,0,900,9,14","jbnl,101,0,9,14","jbnl,101,900,9,14","jbnl,260,0,7,11","jbnl,260,900,9,14","jbnl,445,0,6,10","jbnl,445,900,9,14","jbnl,553,0,5,9","jbnl,553,900,9,14","jbnl,640,0,5,8","jbnl,640,900,8,12","jbnl,695,0,5,8","jbnl,695,900,7,12","jbnl,697,0,5,8","jbnl,697,900,7,12","jbnl,699,0,4,8","jbnl,699,900,7,11","jbnl,733,0,4,8","jbnl,733,900,7,11","jbnl,820,0,4,7","jbnl,820,900,6,10","jbnl,839,0,4,7","jbnl,839,900,6,10","jbnl,841,0,4,7","jbnl,841,900,6,10","jbnl,843,0,4,7","jbnl,843,900,6,10","jbnl,901,0,4,7","jbnl,901,900,6,10","jbnl,947,0,4,7","jbnl,947,900,5,9","jbnl,949,0,4,7","jbnl,949,900,5,9","jbnl,951,0,4,7","jbnl,951,900,5,9","jbnl,955,0,4,7","jbnl,955,900,5,9","jbnl,983,0,4,7","jbnl,983,900,5,9","jbnl,1000,0,4,7","jbnl,1000,900,5,9","jbnr,0,0,10,14","jbnr,0,900,10,14","jbnr,101,0,10,14","jbnr,101,900,10,14","jbnr,260,0,8,11","jbnr,260,900,10,14","jbnr,445,0,7,10","jbnr,445,900,10,14","jbnr,553,0,6,9","jbnr,553,900,10,14","jbnr,640,0,6,8","jbnr,640,900,9,12","jbnr,695,0,6,8","jbnr,695,900,8,12","jbnr,697,0,6,8","jbnr,697,900,8,12","jbnr,699,0,5,8","jbnr,699,900,8,11","jbnr,733,0,5,8","jbnr,733,900,8,11","jbnr,820,0,5,7","jbnr,820,900,7,10","jbnr,839,0,5,7","jbnr,839,900,7,10","jbnr,841,0,5,7","jbnr,841,900,7,10","jbnr,843,0,5,7","jbnr,843,900,7,10","jbnr,901,0,5,7","jbnr,901,900,7,10","jbnr,947,0,5,7","jbnr,947,900,6,9","jbnr,949,0,5,7","jbnr,949,900,6,9","jbnr,951,0,5,7","jbnr,951,900,6,9","jbnr,955,0,5,7","jbnr,955,900,6,9","jbnr,983,0,5,7","jbnr,983,900,6,9","jbnr,1000,0,5,7","jbnr,1000,900,6,9","jbpl,0,0,13,20","jbpl,0,900,13,20","jbpl,101,0,13,20","jbpl,101,900,13,20","jbpl,260,0,10,16","jbpl,260,900,13,20","jbpl,445,0,9,14","jbpl,445,900,13,20","jbpl,553,0,8,13","jbpl,553,900,13,20","jbpl,640,0,7,12","jbpl,640,900,11,18","jbpl,695,0,7,12","jbpl,695,900,11,17","jbpl,697,0,7,12","jbpl,697,900,11,17","jbpl,699,0,7,12","jbpl,699,900,11,17","jbpl,733,0,7,11","jbpl,733,900,10,16","jbpl,820,0,6,11","jbpl,820,900,9,15","jbpl,839,0,6,10","jbpl,839,900,9,15","jbpl,841,0,6,10","jbpl,841,900,9,15","jbpl,843,0,6,10","jbpl,843,900,9,15","jbpl,901,0,6,10","jbpl,901,900,9,14","jbpl,947,0,6,10","jbpl,947,900,8,13","jbpl,949,0,6,10","jbpl,949,900,8,13","jbpl,951,0,6,10","jbpl,951,900,8,13","jbpl,955,0,6,10","jbpl,955,900,8,13","jbpl,983,0,6,10","jbpl,983,900,8,13","jbpl,1000,0,6,10","jbpl,1000,900,8,13","jbpr,0,0,14,20","jbpr,0,900,14,20","jbpr,101,0,14,20","jbpr,101,900,14,20","jbpr,260,0,11,16","jbpr,260,900,14,20","jbpr,445,0,10,14","jbpr,445,900,14,20","jbpr,553,0,9,13","jbpr,553,900,14,20","jbpr,640,0,8,12","jbpr,640,900,12,18","jbpr,695,0,8,12","jbpr,695,900,12,17","jbpr,697,0,8,12","jbpr,697,900,12,17","jbpr,699,0,8,12","jbpr,699,900,12,17","jbpr,733,0,8,11","jbpr,733,900,11,16","jbpr,820,0,7,11","jbpr,820,900,10,15","jbpr,839,0,7,10","jbpr,839,900,10,15","jbpr,841,0,7,10","jbpr,841,900,10,15","jbpr,843,0,7,10","jbpr,843,900,10,15","jbpr,901,0,7,10","jbpr,901,900,10,14","jbpr,947,0,7,10","jbpr,947,900,9,13","jbpr,949,0,7,10","jbpr,949,900,9,13","jbpr,951,0,7,10","jbpr,951,900,9,13","jbpr,955,0,7,10","jbpr,955,900,9,13","jbpr,983,0,7,10","jbpr,983,900,9,13","jbpr,1000,0,7,10","jbpr,1000,900,9,13","shnl,0,0,12,20","shnl,0,900,12,20","shnl,101,0,12,20","shnl,101,900,12,20","shnl,260,0,10,16","shnl,260,900,12,20","shnl,445,0,8,14","shnl,445,900,12,20","shnl,553,0,8,13","shnl,553,900,12,20","shnl,640,0,7,12","shnl,640,900,10,18","shnl,695,0,7,12","shnl,695,900,10,17","shnl,697,0,7,12","shnl,697,900,10,17","shnl,699,0,7,12","shnl,699,900,10,17","shnl,733,0,7,11","shnl,733,900,10,16","shnl,820,0,6,11","shnl,820,900,9,15","shnl,839,0,6,10","shnl,839,900,9,15","shnl,841,0,6,10","shnl,841,900,9,15","shnl,843,0,6,10","shnl,843,900,9,15","shnl,901,0,6,10","shnl,901,900,8,14","shnl,947,0,6,10","shnl,947,900,8,13","shnl,949,0,6,10","shnl,949,900,8,13","shnl,951,0,6,10","shnl,951,900,8,13","shnl,955,0,6,10","shnl,955,900,8,13","shnl,983,0,6,10","shnl,983,900,8,13","shnl,1000,0,6,10","shnl,1000,900,8,13","shnr,0,0,12,20","shnr,0,900,12,20","shnr,101,0,12,20","shnr,101,900,12,20","shnr,260,0,10,16","shnr,260,900,12,20","shnr,445,0,8,14","shnr,445,900,12,20","shnr,553,0,8,13","shnr,553,900,12,20","shnr,640,0,7,12","shnr,640,900,10,18","shnr,695,0,7,12","shnr,695,900,10,17","shnr,697,0,7,12","shnr,697,900,10,17","shnr,699,0,7,12","shnr,699,900,10,17","shnr,733,0,7,11","shnr,733,900,10,16","shnr,820,0,6,11","shnr,820,900,9,15","shnr,839,0,6,10","shnr,839,900,9,15","shnr,841,0,6,10","shnr,841,900,9,15","shnr,843,0,6,10","shnr,843,900,9,15","shnr,901,0,6,10","shnr,901,900,8,14","shnr,947,0,6,10","shnr,947,900,8,13","shnr,949,0,6,10","shnr,949,900,8,13","shnr,951,0,6,10","shnr,951,900,8,13","shnr,955,0,6,10","shnr,955,900,8,13","shnr,983,0,6,10","shnr,983,900,8,13","shnr,1000,0,6,10","shnr,1000,900,8,13","shpl,0,0,16,27","shpl,0,900,16,27","shpl,101,0,16,26","shpl,101,900,16,27","shpl,260,0,13,22","shpl,260,900,16,27","shpl,445,0,11,18","shpl,445,900,16,27","shpl,553,0,10,17","shpl,553,900,16,26","shpl,640,0,10,16","shpl,640,900,14,23","shpl,695,0,9,15","shpl,695,900,13,22","shpl,697,0,9,15","shpl,697,900,13,22","shpl,699,0,9,15","shpl,699,900,13,22","shpl,733,0,9,15","shpl,733,900,13,21","shpl,820,0,8,14","shpl,820,900,12,20","shpl,839,0,8,14","shpl,839,900,12,19","shpl,841,0,8,14","shpl,841,900,12,19","shpl,843,0,8,14","shpl,843,900,12,19","shpl,901,0,8,13","shpl,901,900,11,18","shpl,947,0,8,13","shpl,947,900,11,18","shpl,949,0,8,13","shpl,949,900,11,18","shpl,951,0,8,13","shpl,951,900,11,18","shpl,955,0,8,13","shpl,955,900,10,17","shpl,983,0,8,13","shpl,983,900,10,17","shpl,1000,0,8,13","shpl,1000,900,10,17","shpr,0,0,16,27","shpr,0,900,16,27","shpr,101,0,16,26","shpr,101,900,16,27","shpr,260,0,13,22","shpr,260,900,16,27","shpr,445,0,11,18","shpr,445,900,16,27","shpr,553,0,10,17","shpr,553,900,16,26","shpr,640,0,10,16","shpr,640,900,14,23","shpr,695,0,9,15","shpr,695,900,13,22","shpr,697,0,9,15","shpr,697,900,13,22","shpr,699,0,9,15","shpr,699,900,13,22","shpr,733,0,9,15","shpr,733,900,13,21","shpr,820,0,8,14","shpr,820,900,12,20","shpr,839,0,8,14","shpr,839,900,12,19","shpr,841,0,8,14","shpr,841,900,12,19","shpr,843,0,8,14","shpr,843,900,12,19","shpr,901,0,8,13","shpr,901,900,11,18","shpr,947,0,8,13","shpr,947,900,11,18","shpr,949,0,8,13","shpr,949,900,11,18","shpr,951,0,8,13","shpr,951,900,11,18","shpr,955,0,8,13","shpr,955,900,10,17","shpr,983,0,8,13","shpr,983,900,10,17","shpr,1000,0,8,13","shpr,1000,900,10,17","sbnl,0,0,14,20","sbnl,0,900,14,20","sbnl,101,0,14,20","sbnl,101,900,14,20","sbnl,260,0,11,16","sbnl,260,900,14,20","sbnl,445,0,10,14","sbnl,445,900,14,20","sbnl,553,0,9,13","sbnl,553,900,14,20","sbnl,640,0,8,12","sbnl,640,900,12,18","sbnl,695,0,8,12","sbnl,695,900,12,17","sbnl,697,0,8,12","sbnl,697,900,12,17","sbnl,699,0,8,12","sbnl,699,900,12,17","sbnl,733,0,8,11","sbnl,733,900,11,16","sbnl,820,0,7,11","sbnl,820,900,10,15","sbnl,839,0,7,10","sbnl,839,900,10,15","sbnl,841,0,7,10","sbnl,841,900,10,15","sbnl,843,0,7,10","sbnl,843,900,10,15","sbnl,901,0,7,10","sbnl,901,900,10,14","sbnl,947,0,7,10","sbnl,947,900,9,13","sbnl,949,0,7,10","sbnl,949,900,9,13","sbnl,951,0,7,10","sbnl,951,900,9,13","sbnl,955,0,7,10","sbnl,955,900,9,13","sbnl,983,0,7,10","sbnl,983,900,9,13","sbnl,1000,0,7,10","sbnl,1000,900,9,13","sbnr,0,0,14,20","sbnr,0,900,14,20","sbnr,101,0,14,20","sbnr,101,900,14,20","sbnr,260,0,11,16","sbnr,260,900,14,20","sbnr,445,0,10,14","sbnr,445,900,14,20","sbnr,553,0,9,13","sbnr,553,900,14,20","sbnr,640,0,8,12","sbnr,640,900,12,18","sbnr,695,0,8,12","sbnr,695,900,12,17","sbnr,697,0,8,12","sbnr,697,900,12,17","sbnr,699,0,8,12","sbnr,699,900,12,17","sbnr,733,0,8,11","sbnr,733,900,11,16","sbnr,820,0,7,11","sbnr,820,900,10,15","sbnr,839,0,7,10","sbnr,839,900,10,15","sbnr,841,0,7,10","sbnr,841,900,10,15","sbnr,843,0,7,10","sbnr,843,900,10,15","sbnr,901,0,7,10","sbnr,901,900,10,14","sbnr,947,0,7,10","sbnr,947,900,9,13","sbnr,949,0,7,10","sbnr,949,900,9,13","sbnr,951,0,7,10","sbnr,951,900,9,13","sbnr,955,0,7,10","sbnr,955,900,9,13","sbnr,983,0,7,10","sbnr,983,900,9,13","sbnr,1000,0,7,10","sbnr,1000,900,9,13","sbpl,0,0,18,27","sbpl,0,900,18,27","sbpl,101,0,18,26","sbpl,101,900,18,27","sbpl,260,0,15,22","sbpl,260,900,18,27","sbpl,445,0,13,18","sbpl,445,900,18,27","sbpl,553,0,12,17","sbpl,553,900,18,26","sbpl,640,0,11,16","sbpl,640,900,16,23","sbpl,695,0,10,15","sbpl,695,900,15,22","sbpl,697,0,10,15","sbpl,697,900,15,22","sbpl,699,0,10,15","sbpl,699,900,15,22","sbpl,733,0,10,15","sbpl,733,900,15,21","sbpl,820,0,10,14","sbpl,820,900,13,20","sbpl,839,0,9,14","sbpl,839,900,13,19","sbpl,841,0,9,14","sbpl,841,900,13,19","sbpl,843,0,9,14","sbpl,843,900,13,19","sbpl,901,0,9,13","sbpl,901,900,12,18","sbpl,947,0,9,13","sbpl,947,900,12,18","sbpl,949,0,9,13","sbpl,949,900,12,18","sbpl,951,0,9,13","sbpl,951,900,12,18","sbpl,955,0,9,13","sbpl,955,900,12,17","sbpl,983,0,9,13","sbpl,983,900,12,17","sbpl,1000,0,9,13","sbpl,1000,900,12,17","sbpr,0,0,18,27","sbpr,0,900,18,27","sbpr,101,0,18,26","sbpr,101,900,18,27","sbpr,260,0,15,22","sbpr,260,900,18,27","sbpr,445,0,13,18","sbpr,445,900,18,27","sbpr,553,0,12,17","sbpr,553,900,18,26","sbpr,640,0,11,16","sbpr,640,900,16,23","sbpr,695,0,10,15","sbpr,695,900,15,22","sbpr,697,0,10,15","sbpr,697,900,15,22","sbpr,699,0,10,15","sbpr,699,900,15,22","sbpr,733,0,10,15","sbpr,733,900,15,21","sbpr,820,0,10,14","sbpr,820,900,13,20","sbpr,839,0,9,14","sbpr,839,900,13,19","sbpr,841,0,9,14","sbpr,841,900,13,19","sbpr,843,0,9,14","sbpr,843,900,13,19","sbpr,901,0,9,13","sbpr,901,900,12,18","sbpr,947,0,9,13","sbpr,947,900,12,18","sbpr,949,0,9,13","sbpr,949,900,12,18","sbpr,951,0,9,13","sbpr,951,900,12,18","sbpr,955,0,9,13","sbpr,955,900,12,17","sbpr,983,0,9,13","sbpr,983,900,12,17","sbpr,1000,0,9,13","sbpr,1000,900,12,17","hhnl,0,0,14,25","hhnl,0,900,14,25","hhnl,101,0,14,24","hhnl,101,900,14,25","hhnl,260,0,11,20","hhnl,260,900,14,25","hhnl,445,0,10,17","hhnl,445,900,14,25","hhnl,553,0,9,16","hhnl,553,900,14,24","hhnl,640,0,8,15","hhnl,640,900,12,21","hhnl,695,0,8,14","hhnl,695,900,12,20","hhnl,697,0,8,14","hhnl,697,900,12,20","hhnl,699,0,8,14","hhnl,699,900,12,20","hhnl,733,0,8,14","hhnl,733,900,11,20","hhnl,820,0,7,13","hhnl,820,900,10,18","hhnl,839,0,7,13","hhnl,839,900,10,18","hhnl,841,0,7,13","hhnl,841,900,10,18","hhnl,843,0,7,13","hhnl,843,900,10,18","hhnl,901,0,7,12","hhnl,901,900,10,17","hhnl,947,0,7,12","hhnl,947,900,9,16","hhnl,949,0,7,12","hhnl,949,900,9,16","hhnl,951,0,7,12","hhnl,951,900,9,16","hhnl,955,0,7,12","hhnl,955,900,9,16","hhnl,983,0,7,12","hhnl,983,900,9,16","hhnl,1000,0,7,12","hhnl,1000,900,9,16","hhnr,0,0,14,25","hhnr,0,900,14,25","hhnr,101,0,14,24","hhnr,101,900,14,25","hhnr,260,0,11,20","hhnr,260,900,14,25","hhnr,445,0,10,17","hhnr,445,900,14,25","hhnr,553,0,9,16","hhnr,553,900,14,24","hhnr,640,0,8,15","hhnr,640,900,12,21","hhnr,695,0,8,14","hhnr,695,900,12,20","hhnr,697,0,8,14","hhnr,697,900,12,20","hhnr,699,0,8,14","hhnr,699,900,12,20","hhnr,733,0,8,14","hhnr,733,900,11,20","hhnr,820,0,7,13","hhnr,820,900,10,18","hhnr,839,0,7,13","hhnr,839,900,10,18","hhnr,841,0,7,13","hhnr,841,900,10,18","hhnr,843,0,7,13","hhnr,843,900,10,18","hhnr,901,0,7,12","hhnr,901,900,10,17","hhnr,947,0,7,12","hhnr,947,900,9,16","hhnr,949,0,7,12","hhnr,949,900,9,16","hhnr,951,0,7,12","hhnr,951,900,9,16","hhnr,955,0,7,12","hhnr,955,900,9,16","hhnr,983,0,7,12","hhnr,983,900,9,16","hhnr,1000,0,7,12","hhnr,1000,900,9,16","hhpl,0,0,18,31","hhpl,0,900,18,31","hhpl,101,0,18,30","hhpl,101,900,18,31","hhpl,260,0,15,25","hhpl,260,900,18,31","hhpl,445,0,13,21","hhpl,445,900,18,31","hhpl,553,0,12,20","hhpl,553,900,18,30","hhpl,640,0,11,18","hhpl,640,900,16,27","hhpl,695,0,10,18","hhpl,695,900,15,25","hhpl,697,0,10,18","hhpl,697,900,15,25","hhpl,699,0,10,18","hhpl,699,900,15,25","hhpl,733,0,10,17","hhpl,733,900,15,25","hhpl,820,0,10,16","hhpl,820,900,13,23","hhpl,839,0,9,16","hhpl,839,900,13,22","hhpl,841,0,9,16","hhpl,841,900,13,22","hhpl,843,0,9,16","hhpl,843,900,13,22","hhpl,901,0,9,15","hhpl,901,900,13,21","hhpl,947,0,9,15","hhpl,947,900,12,20","hhpl,949,0,9,15","hhpl,949,900,12,20","hhpl,951,0,9,15","hhpl,951,900,12,20","hhpl,955,0,9,15","hhpl,955,900,12,20","hhpl,983,0,9,15","hhpl,983,900,12,20","hhpl,1000,0,9,15","hhpl,1000,900,12,20","hhpr,0,0,18,31","hhpr,0,900,18,31","hhpr,101,0,18,30","hhpr,101,900,18,31","hhpr,260,0,15,25","hhpr,260,900,18,31","hhpr,445,0,13,21","hhpr,445,900,18,31","hhpr,553,0,12,20","hhpr,553,900,18,30","hhpr,640,0,11,18","hhpr,640,900,16,27","hhpr,695,0,10,18","hhpr,695,900,15,25","hhpr,697,0,10,18","hhpr,697,900,15,25","hhpr,699,0,10,18","hhpr,699,900,15,25","hhpr,733,0,10,17","hhpr,733,900,15,25","hhpr,820,0,10,16","hhpr,820,900,13,23","hhpr,839,0,9,16","hhpr,839,900,13,22","hhpr,841,0,9,16","hhpr,841,900,13,22","hhpr,843,0,9,16","hhpr,843,900,13,22","hhpr,901,0,9,15","hhpr,901,900,13,21","hhpr,947,0,9,15","hhpr,947,900,12,20","hhpr,949,0,9,15","hhpr,949,900,12,20","hhpr,951,0,9,15","hhpr,951,900,12,20","hhpr,955,0,9,15","hhpr,955,900,12,20","hhpr,983,0,9,15","hhpr,983,900,12,20","hhpr,1000,0,9,15","hhpr,1000,900,12,20","hbnl,0,0,16,25","hbnl,0,900,16,25","hbnl,101,0,16,24","hbnl,101,900,16,25","hbnl,260,0,13,20","hbnl,260,900,16,25","hbnl,445,0,11,17","hbnl,445,900,16,25","hbnl,553,0,10,16","hbnl,553,900,16,24","hbnl,640,0,10,15","hbnl,640,900,14,21","hbnl,695,0,9,14","hbnl,695,900,13,20","hbnl,697,0,9,14","hbnl,697,900,13,20","hbnl,699,0,9,14","hbnl,699,900,13,20","hbnl,733,0,9,14","hbnl,733,900,13,20","hbnl,820,0,8,13","hbnl,820,900,12,18","hbnl,839,0,8,13","hbnl,839,900,12,18","hbnl,841,0,8,13","hbnl,841,900,12,18","hbnl,843,0,8,13","hbnl,843,900,12,18","hbnl,901,0,8,12","hbnl,901,900,11,17","hbnl,947,0,8,12","hbnl,947,900,11,16","hbnl,949,0,8,12","hbnl,949,900,11,16","hbnl,951,0,8,12","hbnl,951,900,11,16","hbnl,955,0,8,12","hbnl,955,900,10,16","hbnl,983,0,8,12","hbnl,983,900,10,16","hbnl,1000,0,8,12","hbnl,1000,900,10,16","hbnr,0,0,16,25","hbnr,0,900,16,25","hbnr,101,0,16,24","hbnr,101,900,16,25","hbnr,260,0,13,20","hbnr,260,900,16,25","hbnr,445,0,11,17","hbnr,445,900,16,25","hbnr,553,0,10,16","hbnr,553,900,16,24","hbnr,640,0,10,15","hbnr,640,900,14,21","hbnr,695,0,9,14","hbnr,695,900,13,20","hbnr,697,0,9,14","hbnr,697,900,13,20","hbnr,699,0,9,14","hbnr,699,900,13,20","hbnr,733,0,9,14","hbnr,733,900,13,20","hbnr,820,0,8,13","hbnr,820,900,12,18","hbnr,839,0,8,13","hbnr,839,900,12,18","hbnr,841,0,8,13","hbnr,841,900,12,18","hbnr,843,0,8,13","hbnr,843,900,12,18","hbnr,901,0,8,12","hbnr,901,900,11,17","hbnr,947,0,8,12","hbnr,947,900,11,16","hbnr,949,0,8,12","hbnr,949,900,11,16","hbnr,951,0,8,12","hbnr,951,900,11,16","hbnr,955,0,8,12","hbnr,955,900,10,16","hbnr,983,0,8,12","hbnr,983,900,10,16","hbnr,1000,0,8,12","hbnr,1000,900,10,16","hbpl,0,0,20,31","hbpl,0,900,20,31","hbpl,101,0,20,30","hbpl,101,900,20,31","hbpl,260,0,16,25","hbpl,260,900,20,31","hbpl,445,0,14,21","hbpl,445,900,20,31","hbpl,553,0,13,20","hbpl,553,900,20,30","hbpl,640,0,12,18","hbpl,640,900,18,27","hbpl,695,0,12,18","hbpl,695,900,17,25","hbpl,697,0,12,18","hbpl,697,900,17,25","hbpl,699,0,12,18","hbpl,699,900,17,25","hbpl,733,0,11,17","hbpl,733,900,16,25","hbpl,820,0,11,16","hbpl,820,900,15,23","hbpl,839,0,10,16","hbpl,839,900,15,22","hbpl,841,0,10,16","hbpl,841,900,15,22","hbpl,843,0,10,16","hbpl,843,900,15,22","hbpl,901,0,10,15","hbpl,901,900,14,21","hbpl,947,0,10,15","hbpl,947,900,13,20","hbpl,949,0,10,15","hbpl,949,900,13,20","hbpl,951,0,10,15","hbpl,951,900,13,20","hbpl,955,0,10,15","hbpl,955,900,13,20","hbpl,983,0,10,15","hbpl,983,900,13,20","hbpl,1000,0,10,15","hbpl,1000,900,13,20","hbpr,0,0,20,31","hbpr,0,900,20,31","hbpr,101,0,20,30","hbpr,101,900,20,31","hbpr,260,0,16,25","hbpr,260,900,20,31","hbpr,445,0,14,21","hbpr,445,900,20,31","hbpr,553,0,13,20","hbpr,553,900,20,30","hbpr,640,0,12,18","hbpr,640,900,18,27","hbpr,695,0,12,18","hbpr,695,900,17,25","hbpr,697,0,12,18","hbpr,697,900,17,25","hbpr,699,0,12,18","hbpr,699,900,17,25","hbpr,733,0,11,17","hbpr,733,900,16,25","hbpr,820,0,11,16","hbpr,820,900,15,23","hbpr,839,0,10,16","hbpr,839,900,15,22","hbpr,841,0,10,16","hbpr,841,900,15,22","hbpr,843,0,10,16","hbpr,843,900,15,22","hbpr,901,0,10,15","hbpr,901,900,14,21","hbpr,947,0,10,15","hbpr,947,900,13,20","hbpr,949,0,10,15","hbpr,949,900,13,20","hbpr,951,0,10,15","hbpr,951,900,13,20","hbpr,955,0,10,15","hbpr,955,900,13,20","hbpr,983,0,10,15","hbpr,983,900,13,20","hbpr,1000,0,10,15","hbpr,1000,900,13,20","uhnl,0,0,16,27","uhnl,0,900,16,27","uhnl,101,0,16,26","uhnl,101,900,16,27","uhnl,260,0,13,22","uhnl,260,900,16,27","uhnl,445,0,11,18","uhnl,445,900,16,27","uhnl,553,0,10,17","uhnl,553,900,16,26","uhnl,640,0,10,16","uhnl,640,900,14,23","uhnl,695,0,9,15","uhnl,695,900,13,22","uhnl,697,0,9,15","uhnl,697,900,13,22","uhnl,699,0,9,15","uhnl,699,900,13,22","uhnl,733,0,9,15","uhnl,733,900,13,21","uhnl,820,0,8,14","uhnl,820,900,12,20","uhnl,839,0,8,14","uhnl,839,900,12,19","uhnl,841,0,8,14","uhnl,841,900,12,19","uhnl,843,0,8,14","uhnl,843,900,12,19","uhnl,901,0,8,13","uhnl,901,900,11,18","uhnl,947,0,8,13","uhnl,947,900,11,18","uhnl,949,0,8,13","uhnl,949,900,11,18","uhnl,951,0,8,13","uhnl,951,900,11,18","uhnl,955,0,8,13","uhnl,955,900,10,17","uhnl,983,0,8,13","uhnl,983,900,10,17","uhnl,1000,0,8,13","uhnl,1000,900,10,17","uhnr,0,0,16,27","uhnr,0,900,16,27","uhnr,101,0,16,26","uhnr,101,900,16,27","uhnr,260,0,13,22","uhnr,260,900,16,27","uhnr,445,0,11,18","uhnr,445,900,16,27","uhnr,553,0,10,17","uhnr,553,900,16,26","uhnr,640,0,10,16","uhnr,640,900,14,23","uhnr,695,0,9,15","uhnr,695,900,13,22","uhnr,697,0,9,15","uhnr,697,900,13,22","uhnr,699,0,9,15","uhnr,699,900,13,22","uhnr,733,0,9,15","uhnr,733,900,13,21","uhnr,820,0,8,14","uhnr,820,900,12,20","uhnr,839,0,8,14","uhnr,839,900,12,19","uhnr,841,0,8,14","uhnr,841,900,12,19","uhnr,843,0,8,14","uhnr,843,900,12,19","uhnr,901,0,8,13","uhnr,901,900,11,18","uhnr,947,0,8,13","uhnr,947,900,11,18","uhnr,949,0,8,13","uhnr,949,900,11,18","uhnr,951,0,8,13","uhnr,951,900,11,18","uhnr,955,0,8,13","uhnr,955,900,10,17","uhnr,983,0,8,13","uhnr,983,900,10,17","uhnr,1000,0,8,13","uhnr,1000,900,10,17","uhpl,0,0,20,33","uhpl,0,900,20,33","uhpl,101,0,20,32","uhpl,101,900,20,33","uhpl,260,0,16,27","uhpl,260,900,20,33","uhpl,445,0,14,23","uhpl,445,900,20,33","uhpl,553,0,13,21","uhpl,553,900,20,32","uhpl,640,0,12,20","uhpl,640,900,18,29","uhpl,695,0,12,19","uhpl,695,900,17,27","uhpl,697,0,12,19","uhpl,697,900,17,27","uhpl,699,0,12,19","uhpl,699,900,17,27","uhpl,733,0,11,18","uhpl,733,900,16,26","uhpl,820,0,11,17","uhpl,820,900,15,24","uhpl,839,0,10,17","uhpl,839,900,15,24","uhpl,841,0,10,17","uhpl,841,900,15,24","uhpl,843,0,10,17","uhpl,843,900,15,24","uhpl,901,0,10,17","uhpl,901,900,14,23","uhpl,947,0,10,16","uhpl,947,900,13,22","uhpl,949,0,10,16","uhpl,949,900,13,22","uhpl,951,0,10,16","uhpl,951,900,13,22","uhpl,955,0,10,16","uhpl,955,900,13,22","uhpl,983,0,10,16","uhpl,983,900,13,21","uhpl,1000,0,10,16","uhpl,1000,900,13,21","uhpr,0,0,20,33","uhpr,0,900,20,33","uhpr,101,0,20,32","uhpr,101,900,20,33","uhpr,260,0,16,27","uhpr,260,900,20,33","uhpr,445,0,14,23","uhpr,445,900,20,33","uhpr,553,0,13,21","uhpr,553,900,20,32","uhpr,640,0,12,20","uhpr,640,900,18,29","uhpr,695,0,12,19","uhpr,695,900,17,27","uhpr,697,0,12,19","uhpr,697,900,17,27","uhpr,699,0,12,19","uhpr,699,900,17,27","uhpr,733,0,11,18","uhpr,733,900,16,26","uhpr,820,0,11,17","uhpr,820,900,15,24","uhpr,839,0,10,17","uhpr,839,900,15,24","uhpr,841,0,10,17","uhpr,841,900,15,24","uhpr,843,0,10,17","uhpr,843,900,15,24","uhpr,901,0,10,17","uhpr,901,900,14,23","uhpr,947,0,10,16","uhpr,947,900,13,22","uhpr,949,0,10,16","uhpr,949,900,13,22","uhpr,951,0,10,16","uhpr,951,900,13,22","uhpr,955,0,10,16","uhpr,955,900,13,22","uhpr,983,0,10,16","uhpr,983,900,13,21","uhpr,1000,0,10,16","uhpr,1000,900,13,21","ubnl,0,0,18,27","ubnl,0,900,18,27","ubnl,101,0,18,26","ubnl,101,900,18,27","ubnl,260,0,15,22","ubnl,260,900,18,27","ubnl,445,0,13,18","ubnl,445,900,18,27","ubnl,553,0,12,17","ubnl,553,900,18,26","ubnl,640,0,11,16","ubnl,640,900,16,23","ubnl,695,0,10,15","ubnl,695,900,15,22","ubnl,697,0,10,15","ubnl,697,900,15,22","ubnl,699,0,10,15","ubnl,699,900,15,22","ubnl,733,0,10,15","ubnl,733,900,15,21","ubnl,820,0,10,14","ubnl,820,900,13,20","ubnl,839,0,9,14","ubnl,839,900,13,19","ubnl,841,0,9,14","ubnl,841,900,13,19","ubnl,843,0,9,14","ubnl,843,900,13,19","ubnl,901,0,9,13","ubnl,901,900,12,18","ubnl,947,0,9,13","ubnl,947,900,12,18","ubnl,949,0,9,13","ubnl,949,900,12,18","ubnl,951,0,9,13","ubnl,951,900,12,18","ubnl,955,0,9,13","ubnl,955,900,12,17","ubnl,983,0,9,13","ubnl,983,900,12,17","ubnl,1000,0,9,13","ubnl,1000,900,12,17","ubnr,0,0,18,27","ubnr,0,900,18,27","ubnr,101,0,18,26","ubnr,101,900,18,27","ubnr,260,0,15,22","ubnr,260,900,18,27","ubnr,445,0,13,18","ubnr,445,900,18,27","ubnr,553,0,12,17","ubnr,553,900,18,26","ubnr,640,0,11,16","ubnr,640,900,16,23","ubnr,695,0,10,15","ubnr,695,900,15,22","ubnr,697,0,10,15","ubnr,697,900,15,22","ubnr,699,0,10,15","ubnr,699,900,15,22","ubnr,733,0,10,15","ubnr,733,900,15,21","ubnr,820,0,10,14","ubnr,820,900,13,20","ubnr,839,0,9,14","ubnr,839,900,13,19","ubnr,841,0,9,14","ubnr,841,900,13,19","ubnr,843,0,9,14","ubnr,843,900,13,19","ubnr,901,0,9,13","ubnr,901,900,12,18","ubnr,947,0,9,13","ubnr,947,900,12,18","ubnr,949,0,9,13","ubnr,949,900,12,18","ubnr,951,0,9,13","ubnr,951,900,12,18","ubnr,955,0,9,13","ubnr,955,900,12,17","ubnr,983,0,9,13","ubnr,983,900,12,17","ubnr,1000,0,9,13","ubnr,1000,900,12,17","ubpl,0,0,22,33","ubpl,0,900,22,33","ubpl,101,0,22,32","ubpl,101,900,22,33","ubpl,260,0,18,27","ubpl,260,900,22,33","ubpl,445,0,15,23","ubpl,445,900,22,33","ubpl,553,0,14,21","ubpl,553,900,22,32","ubpl,640,0,13,20","ubpl,640,900,20,29","ubpl,695,0,13,19","ubpl,695,900,18,27","ubpl,697,0,13,19","ubpl,697,900,18,27","ubpl,699,0,13,19","ubpl,699,900,18,27","ubpl,733,0,12,18","ubpl,733,900,18,26","ubpl,820,0,12,17","ubpl,820,900,16,24","ubpl,839,0,12,17","ubpl,839,900,16,24","ubpl,841,0,12,17","ubpl,841,900,16,24","ubpl,843,0,12,17","ubpl,843,900,16,24","ubpl,901,0,11,17","ubpl,901,900,15,23","ubpl,947,0,11,16","ubpl,947,900,15,22","ubpl,949,0,11,16","ubpl,949,900,15,22","ubpl,951,0,11,16","ubpl,951,900,15,22","ubpl,955,0,11,16","ubpl,955,900,15,22","ubpl,983,0,11,16","ubpl,983,900,14,21","ubpl,1000,0,11,16","ubpl,1000,900,14,21","ubpr,0,0,22,33","ubpr,0,900,22,33","ubpr,101,0,22,32","ubpr,101,900,22,33","ubpr,260,0,18,27","ubpr,260,900,22,33","ubpr,445,0,15,23","ubpr,445,900,22,33","ubpr,553,0,14,21","ubpr,553,900,22,32","ubpr,640,0,13,20","ubpr,640,900,20,29","ubpr,695,0,13,19","ubpr,695,900,18,27","ubpr,697,0,13,19","ubpr,697,900,18,27","ubpr,699,0,13,19","ubpr,699,900,18,27","ubpr,733,0,12,18","ubpr,733,900,18,26","ubpr,820,0,12,17","ubpr,820,900,16,24","ubpr,839,0,12,17","ubpr,839,900,16,24","ubpr,841,0,12,17","ubpr,841,900,16,24","ubpr,843,0,12,17","ubpr,843,900,16,24","ubpr,901,0,11,17","ubpr,901,900,15,23","ubpr,947,0,11,16","ubpr,947,900,15,22","ubpr,949,0,11,16","ubpr,949,900,15,22","ubpr,951,0,11,16","ubpr,951,900,15,22","ubpr,955,0,11,16","ubpr,955,900,15,22","ubpr,983,0,11,16","ubpr,983,900,14,21","ubpr,1000,0,11,16","ubpr,1000,900,14,21"] +["jhnl,0,0,3,5","jhnl,0,900,3,6","jhnl,101,0,3,5","jhnl,101,900,3,6","jhnl,260,0,2,5","jhnl,260,900,3,6","jhnl,445,0,2,4","jhnl,445,900,3,6","jhnl,553,0,2,4","jhnl,553,900,3,5","jhnl,640,0,2,4","jhnl,640,900,3,5","jhnl,695,0,2,4","jhnl,695,900,3,5","jhnl,697,0,2,4","jhnl,697,900,3,5","jhnl,699,0,2,4","jhnl,699,900,3,5","jhnl,733,0,2,4","jhnl,733,900,3,5","jhnl,820,0,2,4","jhnl,820,900,2,5","jhnl,839,0,2,4","jhnl,839,900,2,5","jhnl,841,0,2,4","jhnl,841,900,2,5","jhnl,843,0,2,4","jhnl,843,900,2,5","jhnl,901,0,2,4","jhnl,901,900,2,5","jhnl,947,0,2,4","jhnl,947,900,2,4","jhnl,949,0,2,4","jhnl,949,900,2,4","jhnl,951,0,2,4","jhnl,951,900,2,4","jhnl,955,0,2,4","jhnl,955,900,2,4","jhnl,983,0,2,4","jhnl,983,900,2,4","jhnl,1000,0,2,4","jhnl,1000,900,2,4","jhnr,0,0,4,5","jhnr,0,900,4,6","jhnr,101,0,4,5","jhnr,101,900,4,6","jhnr,260,0,3,5","jhnr,260,900,4,6","jhnr,445,0,3,4","jhnr,445,900,4,6","jhnr,553,0,3,4","jhnr,553,900,4,5","jhnr,640,0,3,4","jhnr,640,900,4,5","jhnr,695,0,3,4","jhnr,695,900,4,5","jhnr,697,0,3,4","jhnr,697,900,4,5","jhnr,699,0,3,4","jhnr,699,900,4,5","jhnr,733,0,3,4","jhnr,733,900,4,5","jhnr,820,0,3,4","jhnr,820,900,3,5","jhnr,839,0,3,4","jhnr,839,900,3,5","jhnr,841,0,3,4","jhnr,841,900,3,5","jhnr,843,0,3,4","jhnr,843,900,3,5","jhnr,901,0,3,4","jhnr,901,900,3,5","jhnr,947,0,3,4","jhnr,947,900,3,4","jhnr,949,0,3,4","jhnr,949,900,3,4","jhnr,951,0,3,4","jhnr,951,900,3,4","jhnr,955,0,3,4","jhnr,955,900,3,4","jhnr,983,0,3,4","jhnr,983,900,3,4","jhnr,1000,0,3,4","jhnr,1000,900,3,4","jhpl,0,0,7,10","jhpl,0,900,8,10","jhpl,101,0,7,10","jhpl,101,900,8,10","jhpl,260,0,6,9","jhpl,260,900,8,10","jhpl,445,0,6,8","jhpl,445,900,8,10","jhpl,553,0,5,8","jhpl,553,900,7,10","jhpl,640,0,5,7","jhpl,640,900,7,10","jhpl,695,0,5,7","jhpl,695,900,7,9","jhpl,697,0,5,7","jhpl,697,900,7,9","jhpl,699,0,5,7","jhpl,699,900,7,9","jhpl,733,0,5,7","jhpl,733,900,7,9","jhpl,820,0,5,7","jhpl,820,900,6,9","jhpl,839,0,5,7","jhpl,839,900,6,9","jhpl,841,0,5,7","jhpl,841,900,6,9","jhpl,843,0,5,7","jhpl,843,900,6,9","jhpl,901,0,5,7","jhpl,901,900,6,8","jhpl,947,0,5,7","jhpl,947,900,6,8","jhpl,949,0,5,7","jhpl,949,900,6,8","jhpl,951,0,5,7","jhpl,951,900,6,8","jhpl,955,0,5,7","jhpl,955,900,6,8","jhpl,983,0,5,7","jhpl,983,900,6,8","jhpl,1000,0,5,7","jhpl,1000,900,6,8","jhpr,0,0,8,10","jhpr,0,900,9,10","jhpr,101,0,8,10","jhpr,101,900,9,10","jhpr,260,0,7,9","jhpr,260,900,9,10","jhpr,445,0,7,8","jhpr,445,900,9,10","jhpr,553,0,6,8","jhpr,553,900,8,10","jhpr,640,0,6,7","jhpr,640,900,8,10","jhpr,695,0,6,7","jhpr,695,900,8,9","jhpr,697,0,6,7","jhpr,697,900,8,9","jhpr,699,0,6,7","jhpr,699,900,8,9","jhpr,733,0,6,7","jhpr,733,900,8,9","jhpr,820,0,6,7","jhpr,820,900,7,9","jhpr,839,0,6,7","jhpr,839,900,7,9","jhpr,841,0,6,7","jhpr,841,900,7,9","jhpr,843,0,6,7","jhpr,843,900,7,9","jhpr,901,0,6,7","jhpr,901,900,7,8","jhpr,947,0,6,7","jhpr,947,900,7,8","jhpr,949,0,6,7","jhpr,949,900,7,8","jhpr,951,0,6,7","jhpr,951,900,7,8","jhpr,955,0,6,7","jhpr,955,900,7,8","jhpr,983,0,6,7","jhpr,983,900,7,8","jhpr,1000,0,6,7","jhpr,1000,900,7,8","jbnl,0,0,4,5","jbnl,0,900,5,6","jbnl,101,0,4,5","jbnl,101,900,5,6","jbnl,260,0,4,5","jbnl,260,900,5,6","jbnl,445,0,3,4","jbnl,445,900,5,6","jbnl,553,0,3,4","jbnl,553,900,4,5","jbnl,640,0,3,4","jbnl,640,900,4,5","jbnl,695,0,3,4","jbnl,695,900,4,5","jbnl,697,0,3,4","jbnl,697,900,4,5","jbnl,699,0,3,4","jbnl,699,900,4,5","jbnl,733,0,3,4","jbnl,733,900,4,5","jbnl,820,0,3,4","jbnl,820,900,4,5","jbnl,839,0,3,4","jbnl,839,900,4,5","jbnl,841,0,3,4","jbnl,841,900,4,5","jbnl,843,0,3,4","jbnl,843,900,4,5","jbnl,901,0,3,4","jbnl,901,900,4,5","jbnl,947,0,3,4","jbnl,947,900,3,4","jbnl,949,0,3,4","jbnl,949,900,3,4","jbnl,951,0,3,4","jbnl,951,900,3,4","jbnl,955,0,3,4","jbnl,955,900,3,4","jbnl,983,0,3,4","jbnl,983,900,3,4","jbnl,1000,0,3,4","jbnl,1000,900,3,4","jbnr,0,0,5,5","jbnr,0,900,6,6","jbnr,101,0,5,5","jbnr,101,900,6,6","jbnr,260,0,5,5","jbnr,260,900,6,6","jbnr,445,0,4,4","jbnr,445,900,6,6","jbnr,553,0,4,4","jbnr,553,900,5,5","jbnr,640,0,4,4","jbnr,640,900,5,5","jbnr,695,0,4,4","jbnr,695,900,5,5","jbnr,697,0,4,4","jbnr,697,900,5,5","jbnr,699,0,4,4","jbnr,699,900,5,5","jbnr,733,0,4,4","jbnr,733,900,5,5","jbnr,820,0,4,4","jbnr,820,900,5,5","jbnr,839,0,4,4","jbnr,839,900,5,5","jbnr,841,0,4,4","jbnr,841,900,5,5","jbnr,843,0,4,4","jbnr,843,900,5,5","jbnr,901,0,4,4","jbnr,901,900,5,5","jbnr,947,0,4,4","jbnr,947,900,4,4","jbnr,949,0,4,4","jbnr,949,900,4,4","jbnr,951,0,4,4","jbnr,951,900,4,4","jbnr,955,0,4,4","jbnr,955,900,4,4","jbnr,983,0,4,4","jbnr,983,900,4,4","jbnr,1000,0,4,4","jbnr,1000,900,4,4","jbpl,0,0,9,10","jbpl,0,900,9,10","jbpl,101,0,9,10","jbpl,101,900,9,10","jbpl,260,0,8,9","jbpl,260,900,9,10","jbpl,445,0,7,8","jbpl,445,900,9,10","jbpl,553,0,7,8","jbpl,553,900,9,10","jbpl,640,0,6,7","jbpl,640,900,9,10","jbpl,695,0,6,7","jbpl,695,900,8,9","jbpl,697,0,6,7","jbpl,697,900,8,9","jbpl,699,0,6,7","jbpl,699,900,8,9","jbpl,733,0,6,7","jbpl,733,900,8,9","jbpl,820,0,6,7","jbpl,820,900,8,9","jbpl,839,0,6,7","jbpl,839,900,8,9","jbpl,841,0,6,7","jbpl,841,900,8,9","jbpl,843,0,6,7","jbpl,843,900,8,9","jbpl,901,0,6,7","jbpl,901,900,7,8","jbpl,947,0,6,7","jbpl,947,900,7,8","jbpl,949,0,6,7","jbpl,949,900,7,8","jbpl,951,0,6,7","jbpl,951,900,7,8","jbpl,955,0,6,7","jbpl,955,900,7,8","jbpl,983,0,6,7","jbpl,983,900,7,8","jbpl,1000,0,6,7","jbpl,1000,900,7,8","jbpr,0,0,10,10","jbpr,0,900,10,10","jbpr,101,0,10,10","jbpr,101,900,10,10","jbpr,260,0,9,9","jbpr,260,900,10,10","jbpr,445,0,8,8","jbpr,445,900,10,10","jbpr,553,0,8,8","jbpr,553,900,10,10","jbpr,640,0,7,7","jbpr,640,900,10,10","jbpr,695,0,7,7","jbpr,695,900,9,9","jbpr,697,0,7,7","jbpr,697,900,9,9","jbpr,699,0,7,7","jbpr,699,900,9,9","jbpr,733,0,7,7","jbpr,733,900,9,9","jbpr,820,0,7,7","jbpr,820,900,9,9","jbpr,839,0,7,7","jbpr,839,900,9,9","jbpr,841,0,7,7","jbpr,841,900,9,9","jbpr,843,0,7,7","jbpr,843,900,9,9","jbpr,901,0,7,7","jbpr,901,900,8,8","jbpr,947,0,7,7","jbpr,947,900,8,8","jbpr,949,0,7,7","jbpr,949,900,8,8","jbpr,951,0,7,7","jbpr,951,900,8,8","jbpr,955,0,7,7","jbpr,955,900,8,8","jbpr,983,0,7,7","jbpr,983,900,8,8","jbpr,1000,0,7,7","jbpr,1000,900,8,8","shnl,0,0,5,8","shnl,0,900,6,9","shnl,101,0,5,8","shnl,101,900,6,9","shnl,260,0,5,7","shnl,260,900,6,9","shnl,445,0,4,7","shnl,445,900,6,9","shnl,553,0,4,6","shnl,553,900,5,8","shnl,640,0,4,6","shnl,640,900,5,8","shnl,695,0,4,6","shnl,695,900,5,8","shnl,697,0,4,6","shnl,697,900,5,8","shnl,699,0,4,6","shnl,699,900,5,8","shnl,733,0,4,6","shnl,733,900,5,8","shnl,820,0,4,6","shnl,820,900,5,7","shnl,839,0,4,6","shnl,839,900,5,7","shnl,841,0,4,6","shnl,841,900,5,7","shnl,843,0,4,6","shnl,843,900,5,7","shnl,901,0,4,6","shnl,901,900,5,7","shnl,947,0,4,6","shnl,947,900,4,7","shnl,949,0,4,6","shnl,949,900,4,7","shnl,951,0,4,6","shnl,951,900,4,7","shnl,955,0,4,6","shnl,955,900,4,7","shnl,983,0,4,6","shnl,983,900,4,7","shnl,1000,0,4,6","shnl,1000,900,4,7","shnr,0,0,5,8","shnr,0,900,6,9","shnr,101,0,5,8","shnr,101,900,6,9","shnr,260,0,5,7","shnr,260,900,6,9","shnr,445,0,4,7","shnr,445,900,6,9","shnr,553,0,4,6","shnr,553,900,5,8","shnr,640,0,4,6","shnr,640,900,5,8","shnr,695,0,4,6","shnr,695,900,5,8","shnr,697,0,4,6","shnr,697,900,5,8","shnr,699,0,4,6","shnr,699,900,5,8","shnr,733,0,4,6","shnr,733,900,5,8","shnr,820,0,4,6","shnr,820,900,5,7","shnr,839,0,4,6","shnr,839,900,5,7","shnr,841,0,4,6","shnr,841,900,5,7","shnr,843,0,4,6","shnr,843,900,5,7","shnr,901,0,4,6","shnr,901,900,5,7","shnr,947,0,4,6","shnr,947,900,4,7","shnr,949,0,4,6","shnr,949,900,4,7","shnr,951,0,4,6","shnr,951,900,4,7","shnr,955,0,4,6","shnr,955,900,4,7","shnr,983,0,4,6","shnr,983,900,4,7","shnr,1000,0,4,6","shnr,1000,900,4,7","shpl,0,0,10,13","shpl,0,900,10,13","shpl,101,0,10,12","shpl,101,900,10,13","shpl,260,0,9,11","shpl,260,900,10,13","shpl,445,0,8,10","shpl,445,900,10,13","shpl,553,0,8,10","shpl,553,900,10,13","shpl,640,0,7,10","shpl,640,900,10,12","shpl,695,0,7,10","shpl,695,900,9,12","shpl,697,0,7,10","shpl,697,900,9,12","shpl,699,0,7,10","shpl,699,900,9,12","shpl,733,0,7,9","shpl,733,900,9,12","shpl,820,0,7,9","shpl,820,900,9,11","shpl,839,0,7,9","shpl,839,900,9,11","shpl,841,0,7,9","shpl,841,900,9,11","shpl,843,0,7,9","shpl,843,900,9,11","shpl,901,0,7,9","shpl,901,900,8,11","shpl,947,0,7,9","shpl,947,900,8,11","shpl,949,0,7,9","shpl,949,900,8,11","shpl,951,0,7,9","shpl,951,900,8,11","shpl,955,0,7,9","shpl,955,900,8,11","shpl,983,0,7,9","shpl,983,900,8,10","shpl,1000,0,7,9","shpl,1000,900,8,10","shpr,0,0,10,13","shpr,0,900,10,13","shpr,101,0,10,12","shpr,101,900,10,13","shpr,260,0,9,11","shpr,260,900,10,13","shpr,445,0,8,10","shpr,445,900,10,13","shpr,553,0,8,10","shpr,553,900,10,13","shpr,640,0,7,10","shpr,640,900,10,12","shpr,695,0,7,10","shpr,695,900,9,12","shpr,697,0,7,10","shpr,697,900,9,12","shpr,699,0,7,10","shpr,699,900,9,12","shpr,733,0,7,9","shpr,733,900,9,12","shpr,820,0,7,9","shpr,820,900,9,11","shpr,839,0,7,9","shpr,839,900,9,11","shpr,841,0,7,9","shpr,841,900,9,11","shpr,843,0,7,9","shpr,843,900,9,11","shpr,901,0,7,9","shpr,901,900,8,11","shpr,947,0,7,9","shpr,947,900,8,11","shpr,949,0,7,9","shpr,949,900,8,11","shpr,951,0,7,9","shpr,951,900,8,11","shpr,955,0,7,9","shpr,955,900,8,11","shpr,983,0,7,9","shpr,983,900,8,10","shpr,1000,0,7,9","shpr,1000,900,8,10","sbnl,0,0,7,8","sbnl,0,900,7,9","sbnl,101,0,7,8","sbnl,101,900,7,9","sbnl,260,0,6,7","sbnl,260,900,7,9","sbnl,445,0,6,7","sbnl,445,900,7,9","sbnl,553,0,5,6","sbnl,553,900,7,8","sbnl,640,0,5,6","sbnl,640,900,7,8","sbnl,695,0,5,6","sbnl,695,900,6,8","sbnl,697,0,5,6","sbnl,697,900,6,8","sbnl,699,0,5,6","sbnl,699,900,6,8","sbnl,733,0,5,6","sbnl,733,900,6,8","sbnl,820,0,5,6","sbnl,820,900,6,7","sbnl,839,0,5,6","sbnl,839,900,6,7","sbnl,841,0,5,6","sbnl,841,900,6,7","sbnl,843,0,5,6","sbnl,843,900,6,7","sbnl,901,0,5,6","sbnl,901,900,6,7","sbnl,947,0,5,6","sbnl,947,900,6,7","sbnl,949,0,5,6","sbnl,949,900,6,7","sbnl,951,0,5,6","sbnl,951,900,6,7","sbnl,955,0,5,6","sbnl,955,900,6,7","sbnl,983,0,5,6","sbnl,983,900,6,7","sbnl,1000,0,5,6","sbnl,1000,900,6,7","sbnr,0,0,7,8","sbnr,0,900,7,9","sbnr,101,0,7,8","sbnr,101,900,7,9","sbnr,260,0,6,7","sbnr,260,900,7,9","sbnr,445,0,6,7","sbnr,445,900,7,9","sbnr,553,0,5,6","sbnr,553,900,7,8","sbnr,640,0,5,6","sbnr,640,900,7,8","sbnr,695,0,5,6","sbnr,695,900,6,8","sbnr,697,0,5,6","sbnr,697,900,6,8","sbnr,699,0,5,6","sbnr,699,900,6,8","sbnr,733,0,5,6","sbnr,733,900,6,8","sbnr,820,0,5,6","sbnr,820,900,6,7","sbnr,839,0,5,6","sbnr,839,900,6,7","sbnr,841,0,5,6","sbnr,841,900,6,7","sbnr,843,0,5,6","sbnr,843,900,6,7","sbnr,901,0,5,6","sbnr,901,900,6,7","sbnr,947,0,5,6","sbnr,947,900,6,7","sbnr,949,0,5,6","sbnr,949,900,6,7","sbnr,951,0,5,6","sbnr,951,900,6,7","sbnr,955,0,5,6","sbnr,955,900,6,7","sbnr,983,0,5,6","sbnr,983,900,6,7","sbnr,1000,0,5,6","sbnr,1000,900,6,7","sbpl,0,0,11,13","sbpl,0,900,12,13","sbpl,101,0,11,12","sbpl,101,900,12,13","sbpl,260,0,10,11","sbpl,260,900,12,13","sbpl,445,0,9,10","sbpl,445,900,12,13","sbpl,553,0,9,10","sbpl,553,900,11,13","sbpl,640,0,9,10","sbpl,640,900,11,12","sbpl,695,0,8,10","sbpl,695,900,11,12","sbpl,697,0,8,10","sbpl,697,900,11,12","sbpl,699,0,8,10","sbpl,699,900,11,12","sbpl,733,0,8,9","sbpl,733,900,10,12","sbpl,820,0,8,9","sbpl,820,900,10,11","sbpl,839,0,8,9","sbpl,839,900,10,11","sbpl,841,0,8,9","sbpl,841,900,10,11","sbpl,843,0,8,9","sbpl,843,900,10,11","sbpl,901,0,8,9","sbpl,901,900,10,11","sbpl,947,0,8,9","sbpl,947,900,9,11","sbpl,949,0,8,9","sbpl,949,900,9,11","sbpl,951,0,8,9","sbpl,951,900,9,11","sbpl,955,0,8,9","sbpl,955,900,9,11","sbpl,983,0,8,9","sbpl,983,900,9,10","sbpl,1000,0,8,9","sbpl,1000,900,9,10","sbpr,0,0,11,13","sbpr,0,900,12,13","sbpr,101,0,11,12","sbpr,101,900,12,13","sbpr,260,0,10,11","sbpr,260,900,12,13","sbpr,445,0,9,10","sbpr,445,900,12,13","sbpr,553,0,9,10","sbpr,553,900,11,13","sbpr,640,0,9,10","sbpr,640,900,11,12","sbpr,695,0,8,10","sbpr,695,900,11,12","sbpr,697,0,8,10","sbpr,697,900,11,12","sbpr,699,0,8,10","sbpr,699,900,11,12","sbpr,733,0,8,9","sbpr,733,900,10,12","sbpr,820,0,8,9","sbpr,820,900,10,11","sbpr,839,0,8,9","sbpr,839,900,10,11","sbpr,841,0,8,9","sbpr,841,900,10,11","sbpr,843,0,8,9","sbpr,843,900,10,11","sbpr,901,0,8,9","sbpr,901,900,10,11","sbpr,947,0,8,9","sbpr,947,900,9,11","sbpr,949,0,8,9","sbpr,949,900,9,11","sbpr,951,0,8,9","sbpr,951,900,9,11","sbpr,955,0,8,9","sbpr,955,900,9,11","sbpr,983,0,8,9","sbpr,983,900,9,10","sbpr,1000,0,8,9","sbpr,1000,900,9,10","hhnl,0,0,7,10","hhnl,0,900,7,10","hhnl,101,0,7,10","hhnl,101,900,7,10","hhnl,260,0,6,9","hhnl,260,900,7,10","hhnl,445,0,6,8","hhnl,445,900,7,10","hhnl,553,0,5,8","hhnl,553,900,7,10","hhnl,640,0,5,7","hhnl,640,900,7,10","hhnl,695,0,5,7","hhnl,695,900,6,9","hhnl,697,0,5,7","hhnl,697,900,6,9","hhnl,699,0,5,7","hhnl,699,900,6,9","hhnl,733,0,5,7","hhnl,733,900,6,9","hhnl,820,0,5,7","hhnl,820,900,6,9","hhnl,839,0,5,7","hhnl,839,900,6,9","hhnl,841,0,5,7","hhnl,841,900,6,9","hhnl,843,0,5,7","hhnl,843,900,6,9","hhnl,901,0,5,7","hhnl,901,900,6,8","hhnl,947,0,5,7","hhnl,947,900,6,8","hhnl,949,0,5,7","hhnl,949,900,6,8","hhnl,951,0,5,7","hhnl,951,900,6,8","hhnl,955,0,5,7","hhnl,955,900,6,8","hhnl,983,0,5,7","hhnl,983,900,6,8","hhnl,1000,0,5,7","hhnl,1000,900,6,8","hhnr,0,0,7,10","hhnr,0,900,7,10","hhnr,101,0,7,10","hhnr,101,900,7,10","hhnr,260,0,6,9","hhnr,260,900,7,10","hhnr,445,0,6,8","hhnr,445,900,7,10","hhnr,553,0,5,8","hhnr,553,900,7,10","hhnr,640,0,5,7","hhnr,640,900,7,10","hhnr,695,0,5,7","hhnr,695,900,6,9","hhnr,697,0,5,7","hhnr,697,900,6,9","hhnr,699,0,5,7","hhnr,699,900,6,9","hhnr,733,0,5,7","hhnr,733,900,6,9","hhnr,820,0,5,7","hhnr,820,900,6,9","hhnr,839,0,5,7","hhnr,839,900,6,9","hhnr,841,0,5,7","hhnr,841,900,6,9","hhnr,843,0,5,7","hhnr,843,900,6,9","hhnr,901,0,5,7","hhnr,901,900,6,8","hhnr,947,0,5,7","hhnr,947,900,6,8","hhnr,949,0,5,7","hhnr,949,900,6,8","hhnr,951,0,5,7","hhnr,951,900,6,8","hhnr,955,0,5,7","hhnr,955,900,6,8","hhnr,983,0,5,7","hhnr,983,900,6,8","hhnr,1000,0,5,7","hhnr,1000,900,6,8","hhpl,0,0,11,14","hhpl,0,900,12,15","hhpl,101,0,11,14","hhpl,101,900,12,15","hhpl,260,0,10,13","hhpl,260,900,12,15","hhpl,445,0,9,12","hhpl,445,900,12,15","hhpl,553,0,9,11","hhpl,553,900,11,14","hhpl,640,0,9,11","hhpl,640,900,11,14","hhpl,695,0,8,11","hhpl,695,900,11,13","hhpl,697,0,8,11","hhpl,697,900,11,13","hhpl,699,0,8,11","hhpl,699,900,11,13","hhpl,733,0,8,10","hhpl,733,900,10,13","hhpl,820,0,8,10","hhpl,820,900,10,13","hhpl,839,0,8,10","hhpl,839,900,10,12","hhpl,841,0,8,10","hhpl,841,900,10,12","hhpl,843,0,8,10","hhpl,843,900,10,12","hhpl,901,0,8,10","hhpl,901,900,10,12","hhpl,947,0,8,10","hhpl,947,900,9,12","hhpl,949,0,8,10","hhpl,949,900,9,12","hhpl,951,0,8,10","hhpl,951,900,9,12","hhpl,955,0,8,10","hhpl,955,900,9,12","hhpl,983,0,8,10","hhpl,983,900,9,12","hhpl,1000,0,8,10","hhpl,1000,900,9,12","hhpr,0,0,11,14","hhpr,0,900,12,15","hhpr,101,0,11,14","hhpr,101,900,12,15","hhpr,260,0,10,13","hhpr,260,900,12,15","hhpr,445,0,9,12","hhpr,445,900,12,15","hhpr,553,0,9,11","hhpr,553,900,11,14","hhpr,640,0,9,11","hhpr,640,900,11,14","hhpr,695,0,8,11","hhpr,695,900,11,13","hhpr,697,0,8,11","hhpr,697,900,11,13","hhpr,699,0,8,11","hhpr,699,900,11,13","hhpr,733,0,8,10","hhpr,733,900,10,13","hhpr,820,0,8,10","hhpr,820,900,10,13","hhpr,839,0,8,10","hhpr,839,900,10,12","hhpr,841,0,8,10","hhpr,841,900,10,12","hhpr,843,0,8,10","hhpr,843,900,10,12","hhpr,901,0,8,10","hhpr,901,900,10,12","hhpr,947,0,8,10","hhpr,947,900,9,12","hhpr,949,0,8,10","hhpr,949,900,9,12","hhpr,951,0,8,10","hhpr,951,900,9,12","hhpr,955,0,8,10","hhpr,955,900,9,12","hhpr,983,0,8,10","hhpr,983,900,9,12","hhpr,1000,0,8,10","hhpr,1000,900,9,12","hbnl,0,0,8,10","hbnl,0,900,9,10","hbnl,101,0,8,10","hbnl,101,900,9,10","hbnl,260,0,7,9","hbnl,260,900,9,10","hbnl,445,0,7,8","hbnl,445,900,9,10","hbnl,553,0,6,8","hbnl,553,900,8,10","hbnl,640,0,6,7","hbnl,640,900,8,10","hbnl,695,0,6,7","hbnl,695,900,8,9","hbnl,697,0,6,7","hbnl,697,900,8,9","hbnl,699,0,6,7","hbnl,699,900,8,9","hbnl,733,0,6,7","hbnl,733,900,8,9","hbnl,820,0,6,7","hbnl,820,900,7,9","hbnl,839,0,6,7","hbnl,839,900,7,9","hbnl,841,0,6,7","hbnl,841,900,7,9","hbnl,843,0,6,7","hbnl,843,900,7,9","hbnl,901,0,6,7","hbnl,901,900,7,8","hbnl,947,0,6,7","hbnl,947,900,7,8","hbnl,949,0,6,7","hbnl,949,900,7,8","hbnl,951,0,6,7","hbnl,951,900,7,8","hbnl,955,0,6,7","hbnl,955,900,7,8","hbnl,983,0,6,7","hbnl,983,900,7,8","hbnl,1000,0,6,7","hbnl,1000,900,7,8","hbnr,0,0,8,10","hbnr,0,900,9,10","hbnr,101,0,8,10","hbnr,101,900,9,10","hbnr,260,0,7,9","hbnr,260,900,9,10","hbnr,445,0,7,8","hbnr,445,900,9,10","hbnr,553,0,6,8","hbnr,553,900,8,10","hbnr,640,0,6,7","hbnr,640,900,8,10","hbnr,695,0,6,7","hbnr,695,900,8,9","hbnr,697,0,6,7","hbnr,697,900,8,9","hbnr,699,0,6,7","hbnr,699,900,8,9","hbnr,733,0,6,7","hbnr,733,900,8,9","hbnr,820,0,6,7","hbnr,820,900,7,9","hbnr,839,0,6,7","hbnr,839,900,7,9","hbnr,841,0,6,7","hbnr,841,900,7,9","hbnr,843,0,6,7","hbnr,843,900,7,9","hbnr,901,0,6,7","hbnr,901,900,7,8","hbnr,947,0,6,7","hbnr,947,900,7,8","hbnr,949,0,6,7","hbnr,949,900,7,8","hbnr,951,0,6,7","hbnr,951,900,7,8","hbnr,955,0,6,7","hbnr,955,900,7,8","hbnr,983,0,6,7","hbnr,983,900,7,8","hbnr,1000,0,6,7","hbnr,1000,900,7,8","hbpl,0,0,13,14","hbpl,0,900,13,15","hbpl,101,0,12,14","hbpl,101,900,13,15","hbpl,260,0,11,13","hbpl,260,900,13,15","hbpl,445,0,10,12","hbpl,445,900,13,15","hbpl,553,0,10,11","hbpl,553,900,13,14","hbpl,640,0,10,11","hbpl,640,900,12,14","hbpl,695,0,10,11","hbpl,695,900,12,13","hbpl,697,0,10,11","hbpl,697,900,12,13","hbpl,699,0,10,11","hbpl,699,900,12,13","hbpl,733,0,9,10","hbpl,733,900,12,13","hbpl,820,0,9,10","hbpl,820,900,11,13","hbpl,839,0,9,10","hbpl,839,900,11,12","hbpl,841,0,9,10","hbpl,841,900,11,12","hbpl,843,0,9,10","hbpl,843,900,11,12","hbpl,901,0,9,10","hbpl,901,900,11,12","hbpl,947,0,9,10","hbpl,947,900,11,12","hbpl,949,0,9,10","hbpl,949,900,11,12","hbpl,951,0,9,10","hbpl,951,900,11,12","hbpl,955,0,9,10","hbpl,955,900,11,12","hbpl,983,0,9,10","hbpl,983,900,10,12","hbpl,1000,0,9,10","hbpl,1000,900,10,12","hbpr,0,0,13,14","hbpr,0,900,13,15","hbpr,101,0,12,14","hbpr,101,900,13,15","hbpr,260,0,11,13","hbpr,260,900,13,15","hbpr,445,0,10,12","hbpr,445,900,13,15","hbpr,553,0,10,11","hbpr,553,900,13,14","hbpr,640,0,10,11","hbpr,640,900,12,14","hbpr,695,0,10,11","hbpr,695,900,12,13","hbpr,697,0,10,11","hbpr,697,900,12,13","hbpr,699,0,10,11","hbpr,699,900,12,13","hbpr,733,0,9,10","hbpr,733,900,12,13","hbpr,820,0,9,10","hbpr,820,900,11,13","hbpr,839,0,9,10","hbpr,839,900,11,12","hbpr,841,0,9,10","hbpr,841,900,11,12","hbpr,843,0,9,10","hbpr,843,900,11,12","hbpr,901,0,9,10","hbpr,901,900,11,12","hbpr,947,0,9,10","hbpr,947,900,11,12","hbpr,949,0,9,10","hbpr,949,900,11,12","hbpr,951,0,9,10","hbpr,951,900,11,12","hbpr,955,0,9,10","hbpr,955,900,11,12","hbpr,983,0,9,10","hbpr,983,900,10,12","hbpr,1000,0,9,10","hbpr,1000,900,10,12","uhnl,0,0,7,11","uhnl,0,900,7,12","uhnl,101,0,7,11","uhnl,101,900,7,12","uhnl,260,0,6,10","uhnl,260,900,7,12","uhnl,445,0,6,9","uhnl,445,900,7,12","uhnl,553,0,5,9","uhnl,553,900,7,11","uhnl,640,0,5,9","uhnl,640,900,7,11","uhnl,695,0,5,8","uhnl,695,900,6,11","uhnl,697,0,5,8","uhnl,697,900,6,11","uhnl,699,0,5,8","uhnl,699,900,6,11","uhnl,733,0,5,8","uhnl,733,900,6,10","uhnl,820,0,5,8","uhnl,820,900,6,10","uhnl,839,0,5,8","uhnl,839,900,6,10","uhnl,841,0,5,8","uhnl,841,900,6,10","uhnl,843,0,5,8","uhnl,843,900,6,10","uhnl,901,0,5,8","uhnl,901,900,6,10","uhnl,947,0,5,8","uhnl,947,900,6,9","uhnl,949,0,5,8","uhnl,949,900,6,9","uhnl,951,0,5,8","uhnl,951,900,6,9","uhnl,955,0,5,8","uhnl,955,900,6,9","uhnl,983,0,5,8","uhnl,983,900,6,9","uhnl,1000,0,5,8","uhnl,1000,900,6,9","uhnr,0,0,7,11","uhnr,0,900,7,12","uhnr,101,0,7,11","uhnr,101,900,7,12","uhnr,260,0,6,10","uhnr,260,900,7,12","uhnr,445,0,6,9","uhnr,445,900,7,12","uhnr,553,0,5,9","uhnr,553,900,7,11","uhnr,640,0,5,9","uhnr,640,900,7,11","uhnr,695,0,5,8","uhnr,695,900,6,11","uhnr,697,0,5,8","uhnr,697,900,6,11","uhnr,699,0,5,8","uhnr,699,900,6,11","uhnr,733,0,5,8","uhnr,733,900,6,10","uhnr,820,0,5,8","uhnr,820,900,6,10","uhnr,839,0,5,8","uhnr,839,900,6,10","uhnr,841,0,5,8","uhnr,841,900,6,10","uhnr,843,0,5,8","uhnr,843,900,6,10","uhnr,901,0,5,8","uhnr,901,900,6,10","uhnr,947,0,5,8","uhnr,947,900,6,9","uhnr,949,0,5,8","uhnr,949,900,6,9","uhnr,951,0,5,8","uhnr,951,900,6,9","uhnr,955,0,5,8","uhnr,955,900,6,9","uhnr,983,0,5,8","uhnr,983,900,6,9","uhnr,1000,0,5,8","uhnr,1000,900,6,9","uhpl,0,0,11,16","uhpl,0,900,12,16","uhpl,101,0,11,15","uhpl,101,900,12,16","uhpl,260,0,10,14","uhpl,260,900,12,16","uhpl,445,0,9,13","uhpl,445,900,12,16","uhpl,553,0,9,12","uhpl,553,900,11,16","uhpl,640,0,9,12","uhpl,640,900,11,15","uhpl,695,0,8,12","uhpl,695,900,11,15","uhpl,697,0,8,12","uhpl,697,900,11,15","uhpl,699,0,8,12","uhpl,699,900,11,15","uhpl,733,0,8,12","uhpl,733,900,10,15","uhpl,820,0,8,11","uhpl,820,900,10,14","uhpl,839,0,8,11","uhpl,839,900,10,14","uhpl,841,0,8,11","uhpl,841,900,10,14","uhpl,843,0,8,11","uhpl,843,900,10,14","uhpl,901,0,8,11","uhpl,901,900,10,13","uhpl,947,0,8,11","uhpl,947,900,9,13","uhpl,949,0,8,11","uhpl,949,900,9,13","uhpl,951,0,8,11","uhpl,951,900,9,13","uhpl,955,0,8,11","uhpl,955,900,9,13","uhpl,983,0,8,11","uhpl,983,900,9,13","uhpl,1000,0,8,11","uhpl,1000,900,9,13","uhpr,0,0,11,16","uhpr,0,900,12,16","uhpr,101,0,11,15","uhpr,101,900,12,16","uhpr,260,0,10,14","uhpr,260,900,12,16","uhpr,445,0,9,13","uhpr,445,900,12,16","uhpr,553,0,9,12","uhpr,553,900,11,16","uhpr,640,0,9,12","uhpr,640,900,11,15","uhpr,695,0,8,12","uhpr,695,900,11,15","uhpr,697,0,8,12","uhpr,697,900,11,15","uhpr,699,0,8,12","uhpr,699,900,11,15","uhpr,733,0,8,12","uhpr,733,900,10,15","uhpr,820,0,8,11","uhpr,820,900,10,14","uhpr,839,0,8,11","uhpr,839,900,10,14","uhpr,841,0,8,11","uhpr,841,900,10,14","uhpr,843,0,8,11","uhpr,843,900,10,14","uhpr,901,0,8,11","uhpr,901,900,10,13","uhpr,947,0,8,11","uhpr,947,900,9,13","uhpr,949,0,8,11","uhpr,949,900,9,13","uhpr,951,0,8,11","uhpr,951,900,9,13","uhpr,955,0,8,11","uhpr,955,900,9,13","uhpr,983,0,8,11","uhpr,983,900,9,13","uhpr,1000,0,8,11","uhpr,1000,900,9,13","ubnl,0,0,8,11","ubnl,0,900,9,12","ubnl,101,0,8,11","ubnl,101,900,9,12","ubnl,260,0,7,10","ubnl,260,900,9,12","ubnl,445,0,7,9","ubnl,445,900,9,12","ubnl,553,0,6,9","ubnl,553,900,8,11","ubnl,640,0,6,9","ubnl,640,900,8,11","ubnl,695,0,6,8","ubnl,695,900,8,11","ubnl,697,0,6,8","ubnl,697,900,8,11","ubnl,699,0,6,8","ubnl,699,900,8,11","ubnl,733,0,6,8","ubnl,733,900,8,10","ubnl,820,0,6,8","ubnl,820,900,7,10","ubnl,839,0,6,8","ubnl,839,900,7,10","ubnl,841,0,6,8","ubnl,841,900,7,10","ubnl,843,0,6,8","ubnl,843,900,7,10","ubnl,901,0,6,8","ubnl,901,900,7,10","ubnl,947,0,6,8","ubnl,947,900,7,9","ubnl,949,0,6,8","ubnl,949,900,7,9","ubnl,951,0,6,8","ubnl,951,900,7,9","ubnl,955,0,6,8","ubnl,955,900,7,9","ubnl,983,0,6,8","ubnl,983,900,7,9","ubnl,1000,0,6,8","ubnl,1000,900,7,9","ubnr,0,0,8,11","ubnr,0,900,9,12","ubnr,101,0,8,11","ubnr,101,900,9,12","ubnr,260,0,7,10","ubnr,260,900,9,12","ubnr,445,0,7,9","ubnr,445,900,9,12","ubnr,553,0,6,9","ubnr,553,900,8,11","ubnr,640,0,6,9","ubnr,640,900,8,11","ubnr,695,0,6,8","ubnr,695,900,8,11","ubnr,697,0,6,8","ubnr,697,900,8,11","ubnr,699,0,6,8","ubnr,699,900,8,11","ubnr,733,0,6,8","ubnr,733,900,8,10","ubnr,820,0,6,8","ubnr,820,900,7,10","ubnr,839,0,6,8","ubnr,839,900,7,10","ubnr,841,0,6,8","ubnr,841,900,7,10","ubnr,843,0,6,8","ubnr,843,900,7,10","ubnr,901,0,6,8","ubnr,901,900,7,10","ubnr,947,0,6,8","ubnr,947,900,7,9","ubnr,949,0,6,8","ubnr,949,900,7,9","ubnr,951,0,6,8","ubnr,951,900,7,9","ubnr,955,0,6,8","ubnr,955,900,7,9","ubnr,983,0,6,8","ubnr,983,900,7,9","ubnr,1000,0,6,8","ubnr,1000,900,7,9","ubpl,0,0,13,16","ubpl,0,900,13,16","ubpl,101,0,12,15","ubpl,101,900,13,16","ubpl,260,0,11,14","ubpl,260,900,13,16","ubpl,445,0,10,13","ubpl,445,900,13,16","ubpl,553,0,10,12","ubpl,553,900,13,16","ubpl,640,0,10,12","ubpl,640,900,12,15","ubpl,695,0,10,12","ubpl,695,900,12,15","ubpl,697,0,10,12","ubpl,697,900,12,15","ubpl,699,0,10,12","ubpl,699,900,12,15","ubpl,733,0,9,12","ubpl,733,900,12,15","ubpl,820,0,9,11","ubpl,820,900,11,14","ubpl,839,0,9,11","ubpl,839,900,11,14","ubpl,841,0,9,11","ubpl,841,900,11,14","ubpl,843,0,9,11","ubpl,843,900,11,14","ubpl,901,0,9,11","ubpl,901,900,11,13","ubpl,947,0,9,11","ubpl,947,900,11,13","ubpl,949,0,9,11","ubpl,949,900,11,13","ubpl,951,0,9,11","ubpl,951,900,11,13","ubpl,955,0,9,11","ubpl,955,900,11,13","ubpl,983,0,9,11","ubpl,983,900,10,13","ubpl,1000,0,9,11","ubpl,1000,900,10,13","ubpr,0,0,13,16","ubpr,0,900,13,16","ubpr,101,0,12,15","ubpr,101,900,13,16","ubpr,260,0,11,14","ubpr,260,900,13,16","ubpr,445,0,10,13","ubpr,445,900,13,16","ubpr,553,0,10,12","ubpr,553,900,13,16","ubpr,640,0,10,12","ubpr,640,900,12,15","ubpr,695,0,10,12","ubpr,695,900,12,15","ubpr,697,0,10,12","ubpr,697,900,12,15","ubpr,699,0,10,12","ubpr,699,900,12,15","ubpr,733,0,9,12","ubpr,733,900,12,15","ubpr,820,0,9,11","ubpr,820,900,11,14","ubpr,839,0,9,11","ubpr,839,900,11,14","ubpr,841,0,9,11","ubpr,841,900,11,14","ubpr,843,0,9,11","ubpr,843,900,11,14","ubpr,901,0,9,11","ubpr,901,900,11,13","ubpr,947,0,9,11","ubpr,947,900,11,13","ubpr,949,0,9,11","ubpr,949,900,11,13","ubpr,951,0,9,11","ubpr,951,900,11,13","ubpr,955,0,9,11","ubpr,955,900,11,13","ubpr,983,0,9,11","ubpr,983,900,10,13","ubpr,1000,0,9,11","ubpr,1000,900,10,13"] diff --git a/web/hands/src/test/style-timing-table.json b/web/hands/src/test/style-timing-table.json index 275aa05b..d9204668 100644 --- a/web/hands/src/test/style-timing-table.json +++ b/web/hands/src/test/style-timing-table.json @@ -1 +1 @@ -["boxer,jhnl,0,0,7,13,42", "boxer,jhnl,0,900,7,13,42", "boxer,jhnl,260,0,5,10,42", "boxer,jhnl,260,900,7,13,42", "boxer,jhnl,553,0,4,8,42", "boxer,jhnl,553,900,7,13,42", "boxer,jhnl,820,0,3,6,42", "boxer,jhnl,820,900,5,9,42", "boxer,jhnl,1000,0,3,6,42", "boxer,jhnl,1000,900,4,8,42", "boxer,jhnr,0,0,8,13,42", "boxer,jhnr,0,900,8,13,42", "boxer,jhnr,260,0,6,10,42", "boxer,jhnr,260,900,8,13,42", "boxer,jhnr,553,0,5,8,42", "boxer,jhnr,553,900,8,13,42", "boxer,jhnr,820,0,4,6,42", "boxer,jhnr,820,900,6,9,42", "boxer,jhnr,1000,0,4,6,42", "boxer,jhnr,1000,900,5,8,42", "boxer,jhpl,0,0,11,19,65", "boxer,jhpl,0,900,11,19,65", "boxer,jhpl,260,0,9,15,65", "boxer,jhpl,260,900,11,19,65", "boxer,jhpl,553,0,7,12,65", "boxer,jhpl,553,900,11,19,65", "boxer,jhpl,820,0,5,10,65", "boxer,jhpl,820,900,8,14,65", "boxer,jhpl,1000,0,5,9,65", "boxer,jhpl,1000,900,7,12,65", "boxer,jhpr,0,0,12,19,65", "boxer,jhpr,0,900,12,19,65", "boxer,jhpr,260,0,10,15,65", "boxer,jhpr,260,900,12,19,65", "boxer,jhpr,553,0,8,12,65", "boxer,jhpr,553,900,12,19,65", "boxer,jhpr,820,0,6,10,65", "boxer,jhpr,820,900,9,14,65", "boxer,jhpr,1000,0,6,9,65", "boxer,jhpr,1000,900,8,12,65", "boxer,jbnl,0,0,9,13,46", "boxer,jbnl,0,900,9,13,46", "boxer,jbnl,260,0,7,10,46", "boxer,jbnl,260,900,9,13,46", "boxer,jbnl,553,0,5,8,46", "boxer,jbnl,553,900,9,13,46", "boxer,jbnl,820,0,4,6,46", "boxer,jbnl,820,900,6,9,46", "boxer,jbnl,1000,0,4,6,46", "boxer,jbnl,1000,900,5,8,46", "boxer,jbnr,0,0,10,13,46", "boxer,jbnr,0,900,10,13,46", "boxer,jbnr,260,0,8,10,46", "boxer,jbnr,260,900,10,13,46", "boxer,jbnr,553,0,6,8,46", "boxer,jbnr,553,900,10,13,46", "boxer,jbnr,820,0,5,6,46", "boxer,jbnr,820,900,7,9,46", "boxer,jbnr,1000,0,5,6,46", "boxer,jbnr,1000,900,6,8,46", "boxer,jbpl,0,0,13,19,71", "boxer,jbpl,0,900,13,19,71", "boxer,jbpl,260,0,10,15,71", "boxer,jbpl,260,900,13,19,71", "boxer,jbpl,553,0,8,12,71", "boxer,jbpl,553,900,13,19,71", "boxer,jbpl,820,0,6,10,71", "boxer,jbpl,820,900,9,14,71", "boxer,jbpl,1000,0,6,9,71", "boxer,jbpl,1000,900,8,12,71", "boxer,jbpr,0,0,14,19,71", "boxer,jbpr,0,900,14,19,71", "boxer,jbpr,260,0,11,15,71", "boxer,jbpr,260,900,14,19,71", "boxer,jbpr,553,0,9,12,71", "boxer,jbpr,553,900,14,19,71", "boxer,jbpr,820,0,7,10,71", "boxer,jbpr,820,900,10,14,71", "boxer,jbpr,1000,0,7,9,71", "boxer,jbpr,1000,900,9,12,71", "boxer,shnl,0,0,12,20,65", "boxer,shnl,0,900,12,20,65", "boxer,shnl,260,0,10,16,65", "boxer,shnl,260,900,12,20,65", "boxer,shnl,553,0,8,13,65", "boxer,shnl,553,900,12,20,65", "boxer,shnl,820,0,6,11,65", "boxer,shnl,820,900,9,15,65", "boxer,shnl,1000,0,6,10,65", "boxer,shnl,1000,900,8,13,65", "boxer,shnr,0,0,12,20,65", "boxer,shnr,0,900,12,20,65", "boxer,shnr,260,0,10,16,65", "boxer,shnr,260,900,12,20,65", "boxer,shnr,553,0,8,13,65", "boxer,shnr,553,900,12,20,65", "boxer,shnr,820,0,6,11,65", "boxer,shnr,820,900,9,15,65", "boxer,shnr,1000,0,6,10,65", "boxer,shnr,1000,900,8,13,65", "boxer,shpl,0,0,16,27,100", "boxer,shpl,0,900,16,27,100", "boxer,shpl,260,0,13,22,100", "boxer,shpl,260,900,16,27,100", "boxer,shpl,553,0,10,17,100", "boxer,shpl,553,900,16,26,100", "boxer,shpl,820,0,8,14,100", "boxer,shpl,820,900,12,20,100", "boxer,shpl,1000,0,8,13,100", "boxer,shpl,1000,900,10,17,100", "boxer,shpr,0,0,16,27,100", "boxer,shpr,0,900,16,27,100", "boxer,shpr,260,0,13,22,100", "boxer,shpr,260,900,16,27,100", "boxer,shpr,553,0,10,17,100", "boxer,shpr,553,900,16,26,100", "boxer,shpr,820,0,8,14,100", "boxer,shpr,820,900,12,20,100", "boxer,shpr,1000,0,8,13,100", "boxer,shpr,1000,900,10,17,100", "boxer,sbnl,0,0,14,20,69", "boxer,sbnl,0,900,14,20,69", "boxer,sbnl,260,0,11,16,69", "boxer,sbnl,260,900,14,20,69", "boxer,sbnl,553,0,9,13,69", "boxer,sbnl,553,900,14,20,69", "boxer,sbnl,820,0,7,11,69", "boxer,sbnl,820,900,10,15,69", "boxer,sbnl,1000,0,7,10,69", "boxer,sbnl,1000,900,9,13,69", "boxer,sbnr,0,0,14,20,69", "boxer,sbnr,0,900,14,20,69", "boxer,sbnr,260,0,11,16,69", "boxer,sbnr,260,900,14,20,69", "boxer,sbnr,553,0,9,13,69", "boxer,sbnr,553,900,14,20,69", "boxer,sbnr,820,0,7,11,69", "boxer,sbnr,820,900,10,15,69", "boxer,sbnr,1000,0,7,10,69", "boxer,sbnr,1000,900,9,13,69", "boxer,sbpl,0,0,18,27,106", "boxer,sbpl,0,900,18,27,106", "boxer,sbpl,260,0,15,22,106", "boxer,sbpl,260,900,18,27,106", "boxer,sbpl,553,0,12,17,106", "boxer,sbpl,553,900,18,26,106", "boxer,sbpl,820,0,10,14,106", "boxer,sbpl,820,900,13,20,106", "boxer,sbpl,1000,0,9,13,106", "boxer,sbpl,1000,900,12,17,106", "boxer,sbpr,0,0,18,27,106", "boxer,sbpr,0,900,18,27,106", "boxer,sbpr,260,0,15,22,106", "boxer,sbpr,260,900,18,27,106", "boxer,sbpr,553,0,12,17,106", "boxer,sbpr,553,900,18,26,106", "boxer,sbpr,820,0,10,14,106", "boxer,sbpr,820,900,13,20,106", "boxer,sbpr,1000,0,9,13,106", "boxer,sbpr,1000,900,12,17,106", "boxer,hhnl,0,0,14,25,78", "boxer,hhnl,0,900,14,25,78", "boxer,hhnl,260,0,11,20,78", "boxer,hhnl,260,900,14,25,78", "boxer,hhnl,553,0,9,16,78", "boxer,hhnl,553,900,14,24,78", "boxer,hhnl,820,0,7,13,78", "boxer,hhnl,820,900,10,18,78", "boxer,hhnl,1000,0,7,12,78", "boxer,hhnl,1000,900,9,16,78", "boxer,hhnr,0,0,14,25,78", "boxer,hhnr,0,900,14,25,78", "boxer,hhnr,260,0,11,20,78", "boxer,hhnr,260,900,14,25,78", "boxer,hhnr,553,0,9,16,78", "boxer,hhnr,553,900,14,24,78", "boxer,hhnr,820,0,7,13,78", "boxer,hhnr,820,900,10,18,78", "boxer,hhnr,1000,0,7,12,78", "boxer,hhnr,1000,900,9,16,78", "boxer,hhpl,0,0,18,31,120", "boxer,hhpl,0,900,18,31,120", "boxer,hhpl,260,0,15,25,120", "boxer,hhpl,260,900,18,31,120", "boxer,hhpl,553,0,12,20,120", "boxer,hhpl,553,900,18,30,120", "boxer,hhpl,820,0,10,16,120", "boxer,hhpl,820,900,13,23,120", "boxer,hhpl,1000,0,9,15,120", "boxer,hhpl,1000,900,12,20,120", "boxer,hhpr,0,0,18,31,120", "boxer,hhpr,0,900,18,31,120", "boxer,hhpr,260,0,15,25,120", "boxer,hhpr,260,900,18,31,120", "boxer,hhpr,553,0,12,20,120", "boxer,hhpr,553,900,18,30,120", "boxer,hhpr,820,0,10,16,120", "boxer,hhpr,820,900,13,23,120", "boxer,hhpr,1000,0,9,15,120", "boxer,hhpr,1000,900,12,20,120", "boxer,hbnl,0,0,16,25,82", "boxer,hbnl,0,900,16,25,82", "boxer,hbnl,260,0,13,20,82", "boxer,hbnl,260,900,16,25,82", "boxer,hbnl,553,0,10,16,82", "boxer,hbnl,553,900,16,24,82", "boxer,hbnl,820,0,8,13,82", "boxer,hbnl,820,900,12,18,82", "boxer,hbnl,1000,0,8,12,82", "boxer,hbnl,1000,900,10,16,82", "boxer,hbnr,0,0,16,25,82", "boxer,hbnr,0,900,16,25,82", "boxer,hbnr,260,0,13,20,82", "boxer,hbnr,260,900,16,25,82", "boxer,hbnr,553,0,10,16,82", "boxer,hbnr,553,900,16,24,82", "boxer,hbnr,820,0,8,13,82", "boxer,hbnr,820,900,12,18,82", "boxer,hbnr,1000,0,8,12,82", "boxer,hbnr,1000,900,10,16,82", "boxer,hbpl,0,0,20,31,127", "boxer,hbpl,0,900,20,31,127", "boxer,hbpl,260,0,16,25,127", "boxer,hbpl,260,900,20,31,127", "boxer,hbpl,553,0,13,20,127", "boxer,hbpl,553,900,20,30,127", "boxer,hbpl,820,0,11,16,127", "boxer,hbpl,820,900,15,23,127", "boxer,hbpl,1000,0,10,15,127", "boxer,hbpl,1000,900,13,20,127", "boxer,hbpr,0,0,20,31,127", "boxer,hbpr,0,900,20,31,127", "boxer,hbpr,260,0,16,25,127", "boxer,hbpr,260,900,20,31,127", "boxer,hbpr,553,0,13,20,127", "boxer,hbpr,553,900,20,30,127", "boxer,hbpr,820,0,11,16,127", "boxer,hbpr,820,900,15,23,127", "boxer,hbpr,1000,0,10,15,127", "boxer,hbpr,1000,900,13,20,127", "boxer,uhnl,0,0,16,27,88", "boxer,uhnl,0,900,16,27,88", "boxer,uhnl,260,0,13,22,88", "boxer,uhnl,260,900,16,27,88", "boxer,uhnl,553,0,10,17,88", "boxer,uhnl,553,900,16,26,88", "boxer,uhnl,820,0,8,14,88", "boxer,uhnl,820,900,12,20,88", "boxer,uhnl,1000,0,8,13,88", "boxer,uhnl,1000,900,10,17,88", "boxer,uhnr,0,0,16,27,88", "boxer,uhnr,0,900,16,27,88", "boxer,uhnr,260,0,13,22,88", "boxer,uhnr,260,900,16,27,88", "boxer,uhnr,553,0,10,17,88", "boxer,uhnr,553,900,16,26,88", "boxer,uhnr,820,0,8,14,88", "boxer,uhnr,820,900,12,20,88", "boxer,uhnr,1000,0,8,13,88", "boxer,uhnr,1000,900,10,17,88", "boxer,uhpl,0,0,20,33,136", "boxer,uhpl,0,900,20,33,136", "boxer,uhpl,260,0,16,27,136", "boxer,uhpl,260,900,20,33,136", "boxer,uhpl,553,0,13,21,136", "boxer,uhpl,553,900,20,32,136", "boxer,uhpl,820,0,11,17,136", "boxer,uhpl,820,900,15,24,136", "boxer,uhpl,1000,0,10,16,136", "boxer,uhpl,1000,900,13,21,136", "boxer,uhpr,0,0,20,33,136", "boxer,uhpr,0,900,20,33,136", "boxer,uhpr,260,0,16,27,136", "boxer,uhpr,260,900,20,33,136", "boxer,uhpr,553,0,13,21,136", "boxer,uhpr,553,900,20,32,136", "boxer,uhpr,820,0,11,17,136", "boxer,uhpr,820,900,15,24,136", "boxer,uhpr,1000,0,10,16,136", "boxer,uhpr,1000,900,13,21,136", "boxer,ubnl,0,0,18,27,92", "boxer,ubnl,0,900,18,27,92", "boxer,ubnl,260,0,15,22,92", "boxer,ubnl,260,900,18,27,92", "boxer,ubnl,553,0,12,17,92", "boxer,ubnl,553,900,18,26,92", "boxer,ubnl,820,0,10,14,92", "boxer,ubnl,820,900,13,20,92", "boxer,ubnl,1000,0,9,13,92", "boxer,ubnl,1000,900,12,17,92", "boxer,ubnr,0,0,18,27,92", "boxer,ubnr,0,900,18,27,92", "boxer,ubnr,260,0,15,22,92", "boxer,ubnr,260,900,18,27,92", "boxer,ubnr,553,0,12,17,92", "boxer,ubnr,553,900,18,26,92", "boxer,ubnr,820,0,10,14,92", "boxer,ubnr,820,900,13,20,92", "boxer,ubnr,1000,0,9,13,92", "boxer,ubnr,1000,900,12,17,92", "boxer,ubpl,0,0,22,33,142", "boxer,ubpl,0,900,22,33,142", "boxer,ubpl,260,0,18,27,142", "boxer,ubpl,260,900,22,33,142", "boxer,ubpl,553,0,14,21,142", "boxer,ubpl,553,900,22,32,142", "boxer,ubpl,820,0,12,17,142", "boxer,ubpl,820,900,16,24,142", "boxer,ubpl,1000,0,11,16,142", "boxer,ubpl,1000,900,14,21,142", "boxer,ubpr,0,0,22,33,142", "boxer,ubpr,0,900,22,33,142", "boxer,ubpr,260,0,18,27,142", "boxer,ubpr,260,900,22,33,142", "boxer,ubpr,553,0,14,21,142", "boxer,ubpr,553,900,22,32,142", "boxer,ubpr,820,0,12,17,142", "boxer,ubpr,820,900,16,24,142", "boxer,ubpr,1000,0,11,16,142", "boxer,ubpr,1000,900,14,21,142", "slugger,jhnl,0,0,7,14,48", "slugger,jhnl,0,900,7,14,48", "slugger,jhnl,260,0,5,11,48", "slugger,jhnl,260,900,7,14,48", "slugger,jhnl,553,0,4,9,48", "slugger,jhnl,553,900,7,14,48", "slugger,jhnl,820,0,3,7,48", "slugger,jhnl,820,900,5,10,48", "slugger,jhnl,1000,0,3,7,48", "slugger,jhnl,1000,900,4,9,48", "slugger,jhnr,0,0,8,14,48", "slugger,jhnr,0,900,8,14,48", "slugger,jhnr,260,0,6,11,48", "slugger,jhnr,260,900,8,14,48", "slugger,jhnr,553,0,5,9,48", "slugger,jhnr,553,900,8,14,48", "slugger,jhnr,820,0,4,7,48", "slugger,jhnr,820,900,6,10,48", "slugger,jhnr,1000,0,4,7,48", "slugger,jhnr,1000,900,5,9,48", "slugger,jhpl,0,0,11,20,74", "slugger,jhpl,0,900,11,20,74", "slugger,jhpl,260,0,9,16,74", "slugger,jhpl,260,900,11,20,74", "slugger,jhpl,553,0,7,13,74", "slugger,jhpl,553,900,11,20,74", "slugger,jhpl,820,0,5,11,74", "slugger,jhpl,820,900,8,15,74", "slugger,jhpl,1000,0,5,10,74", "slugger,jhpl,1000,900,7,13,74", "slugger,jhpr,0,0,12,20,74", "slugger,jhpr,0,900,12,20,74", "slugger,jhpr,260,0,10,16,74", "slugger,jhpr,260,900,12,20,74", "slugger,jhpr,553,0,8,13,74", "slugger,jhpr,553,900,12,20,74", "slugger,jhpr,820,0,6,11,74", "slugger,jhpr,820,900,9,15,74", "slugger,jhpr,1000,0,6,10,74", "slugger,jhpr,1000,900,8,13,74", "slugger,jbnl,0,0,9,14,52", "slugger,jbnl,0,900,9,14,52", "slugger,jbnl,260,0,7,11,52", "slugger,jbnl,260,900,9,14,52", "slugger,jbnl,553,0,5,9,52", "slugger,jbnl,553,900,9,14,52", "slugger,jbnl,820,0,4,7,52", "slugger,jbnl,820,900,6,10,52", "slugger,jbnl,1000,0,4,7,52", "slugger,jbnl,1000,900,5,9,52", "slugger,jbnr,0,0,10,14,52", "slugger,jbnr,0,900,10,14,52", "slugger,jbnr,260,0,8,11,52", "slugger,jbnr,260,900,10,14,52", "slugger,jbnr,553,0,6,9,52", "slugger,jbnr,553,900,10,14,52", "slugger,jbnr,820,0,5,7,52", "slugger,jbnr,820,900,7,10,52", "slugger,jbnr,1000,0,5,7,52", "slugger,jbnr,1000,900,6,9,52", "slugger,jbpl,0,0,13,20,81", "slugger,jbpl,0,900,13,20,81", "slugger,jbpl,260,0,10,16,81", "slugger,jbpl,260,900,13,20,81", "slugger,jbpl,553,0,8,13,81", "slugger,jbpl,553,900,13,20,81", "slugger,jbpl,820,0,6,11,81", "slugger,jbpl,820,900,9,15,81", "slugger,jbpl,1000,0,6,10,81", "slugger,jbpl,1000,900,8,13,81", "slugger,jbpr,0,0,14,20,81", "slugger,jbpr,0,900,14,20,81", "slugger,jbpr,260,0,11,16,81", "slugger,jbpr,260,900,14,20,81", "slugger,jbpr,553,0,9,13,81", "slugger,jbpr,553,900,14,20,81", "slugger,jbpr,820,0,7,11,81", "slugger,jbpr,820,900,10,15,81", "slugger,jbpr,1000,0,7,10,81", "slugger,jbpr,1000,900,9,13,81", "slugger,shnl,0,0,12,20,74", "slugger,shnl,0,900,12,20,74", "slugger,shnl,260,0,10,16,74", "slugger,shnl,260,900,12,20,74", "slugger,shnl,553,0,8,13,74", "slugger,shnl,553,900,12,20,74", "slugger,shnl,820,0,6,11,74", "slugger,shnl,820,900,9,15,74", "slugger,shnl,1000,0,6,10,74", "slugger,shnl,1000,900,8,13,74", "slugger,shnr,0,0,12,20,74", "slugger,shnr,0,900,12,20,74", "slugger,shnr,260,0,10,16,74", "slugger,shnr,260,900,12,20,74", "slugger,shnr,553,0,8,13,74", "slugger,shnr,553,900,12,20,74", "slugger,shnr,820,0,6,11,74", "slugger,shnr,820,900,9,15,74", "slugger,shnr,1000,0,6,10,74", "slugger,shnr,1000,900,8,13,74", "slugger,shpl,0,0,16,27,115", "slugger,shpl,0,900,16,27,115", "slugger,shpl,260,0,13,22,115", "slugger,shpl,260,900,16,27,115", "slugger,shpl,553,0,10,17,115", "slugger,shpl,553,900,16,26,115", "slugger,shpl,820,0,8,14,115", "slugger,shpl,820,900,12,20,115", "slugger,shpl,1000,0,8,13,115", "slugger,shpl,1000,900,10,17,115", "slugger,shpr,0,0,16,27,115", "slugger,shpr,0,900,16,27,115", "slugger,shpr,260,0,13,22,115", "slugger,shpr,260,900,16,27,115", "slugger,shpr,553,0,10,17,115", "slugger,shpr,553,900,16,26,115", "slugger,shpr,820,0,8,14,115", "slugger,shpr,820,900,12,20,115", "slugger,shpr,1000,0,8,13,115", "slugger,shpr,1000,900,10,17,115", "slugger,sbnl,0,0,14,20,79", "slugger,sbnl,0,900,14,20,79", "slugger,sbnl,260,0,11,16,79", "slugger,sbnl,260,900,14,20,79", "slugger,sbnl,553,0,9,13,79", "slugger,sbnl,553,900,14,20,79", "slugger,sbnl,820,0,7,11,79", "slugger,sbnl,820,900,10,15,79", "slugger,sbnl,1000,0,7,10,79", "slugger,sbnl,1000,900,9,13,79", "slugger,sbnr,0,0,14,20,79", "slugger,sbnr,0,900,14,20,79", "slugger,sbnr,260,0,11,16,79", "slugger,sbnr,260,900,14,20,79", "slugger,sbnr,553,0,9,13,79", "slugger,sbnr,553,900,14,20,79", "slugger,sbnr,820,0,7,11,79", "slugger,sbnr,820,900,10,15,79", "slugger,sbnr,1000,0,7,10,79", "slugger,sbnr,1000,900,9,13,79", "slugger,sbpl,0,0,18,27,121", "slugger,sbpl,0,900,18,27,121", "slugger,sbpl,260,0,15,22,121", "slugger,sbpl,260,900,18,27,121", "slugger,sbpl,553,0,12,17,121", "slugger,sbpl,553,900,18,26,121", "slugger,sbpl,820,0,10,14,121", "slugger,sbpl,820,900,13,20,121", "slugger,sbpl,1000,0,9,13,121", "slugger,sbpl,1000,900,12,17,121", "slugger,sbpr,0,0,18,27,121", "slugger,sbpr,0,900,18,27,121", "slugger,sbpr,260,0,15,22,121", "slugger,sbpr,260,900,18,27,121", "slugger,sbpr,553,0,12,17,121", "slugger,sbpr,553,900,18,26,121", "slugger,sbpr,820,0,10,14,121", "slugger,sbpr,820,900,13,20,121", "slugger,sbpr,1000,0,9,13,121", "slugger,sbpr,1000,900,12,17,121", "slugger,hhnl,0,0,14,26,89", "slugger,hhnl,0,900,14,26,89", "slugger,hhnl,260,0,11,21,89", "slugger,hhnl,260,900,14,26,89", "slugger,hhnl,553,0,9,17,89", "slugger,hhnl,553,900,14,25,89", "slugger,hhnl,820,0,7,14,89", "slugger,hhnl,820,900,10,19,89", "slugger,hhnl,1000,0,7,13,89", "slugger,hhnl,1000,900,9,17,89", "slugger,hhnr,0,0,14,26,89", "slugger,hhnr,0,900,14,26,89", "slugger,hhnr,260,0,11,21,89", "slugger,hhnr,260,900,14,26,89", "slugger,hhnr,553,0,9,17,89", "slugger,hhnr,553,900,14,25,89", "slugger,hhnr,820,0,7,14,89", "slugger,hhnr,820,900,10,19,89", "slugger,hhnr,1000,0,7,13,89", "slugger,hhnr,1000,900,9,17,89", "slugger,hhpl,0,0,18,32,138", "slugger,hhpl,0,900,18,32,138", "slugger,hhpl,260,0,15,26,138", "slugger,hhpl,260,900,18,32,138", "slugger,hhpl,553,0,12,21,138", "slugger,hhpl,553,900,18,31,138", "slugger,hhpl,820,0,10,17,138", "slugger,hhpl,820,900,13,24,138", "slugger,hhpl,1000,0,9,16,138", "slugger,hhpl,1000,900,12,21,138", "slugger,hhpr,0,0,18,32,138", "slugger,hhpr,0,900,18,32,138", "slugger,hhpr,260,0,15,26,138", "slugger,hhpr,260,900,18,32,138", "slugger,hhpr,553,0,12,21,138", "slugger,hhpr,553,900,18,31,138", "slugger,hhpr,820,0,10,17,138", "slugger,hhpr,820,900,13,24,138", "slugger,hhpr,1000,0,9,16,138", "slugger,hhpr,1000,900,12,21,138", "slugger,hbnl,0,0,16,26,94", "slugger,hbnl,0,900,16,26,94", "slugger,hbnl,260,0,13,21,94", "slugger,hbnl,260,900,16,26,94", "slugger,hbnl,553,0,10,17,94", "slugger,hbnl,553,900,16,25,94", "slugger,hbnl,820,0,8,14,94", "slugger,hbnl,820,900,12,19,94", "slugger,hbnl,1000,0,8,13,94", "slugger,hbnl,1000,900,10,17,94", "slugger,hbnr,0,0,16,26,94", "slugger,hbnr,0,900,16,26,94", "slugger,hbnr,260,0,13,21,94", "slugger,hbnr,260,900,16,26,94", "slugger,hbnr,553,0,10,17,94", "slugger,hbnr,553,900,16,25,94", "slugger,hbnr,820,0,8,14,94", "slugger,hbnr,820,900,12,19,94", "slugger,hbnr,1000,0,8,13,94", "slugger,hbnr,1000,900,10,17,94", "slugger,hbpl,0,0,20,32,146", "slugger,hbpl,0,900,20,32,146", "slugger,hbpl,260,0,16,26,146", "slugger,hbpl,260,900,20,32,146", "slugger,hbpl,553,0,13,21,146", "slugger,hbpl,553,900,20,31,146", "slugger,hbpl,820,0,11,17,146", "slugger,hbpl,820,900,15,24,146", "slugger,hbpl,1000,0,10,16,146", "slugger,hbpl,1000,900,13,21,146", "slugger,hbpr,0,0,20,32,146", "slugger,hbpr,0,900,20,32,146", "slugger,hbpr,260,0,16,26,146", "slugger,hbpr,260,900,20,32,146", "slugger,hbpr,553,0,13,21,146", "slugger,hbpr,553,900,20,31,146", "slugger,hbpr,820,0,11,17,146", "slugger,hbpr,820,900,15,24,146", "slugger,hbpr,1000,0,10,16,146", "slugger,hbpr,1000,900,13,21,146", "slugger,uhnl,0,0,16,28,101", "slugger,uhnl,0,900,16,28,101", "slugger,uhnl,260,0,13,23,101", "slugger,uhnl,260,900,16,28,101", "slugger,uhnl,553,0,10,18,101", "slugger,uhnl,553,900,16,27,101", "slugger,uhnl,820,0,8,15,101", "slugger,uhnl,820,900,12,21,101", "slugger,uhnl,1000,0,8,14,101", "slugger,uhnl,1000,900,10,18,101", "slugger,uhnr,0,0,16,28,101", "slugger,uhnr,0,900,16,28,101", "slugger,uhnr,260,0,13,23,101", "slugger,uhnr,260,900,16,28,101", "slugger,uhnr,553,0,10,18,101", "slugger,uhnr,553,900,16,27,101", "slugger,uhnr,820,0,8,15,101", "slugger,uhnr,820,900,12,21,101", "slugger,uhnr,1000,0,8,14,101", "slugger,uhnr,1000,900,10,18,101", "slugger,uhpl,0,0,20,34,156", "slugger,uhpl,0,900,20,34,156", "slugger,uhpl,260,0,16,28,156", "slugger,uhpl,260,900,20,34,156", "slugger,uhpl,553,0,13,22,156", "slugger,uhpl,553,900,20,33,156", "slugger,uhpl,820,0,11,18,156", "slugger,uhpl,820,900,15,25,156", "slugger,uhpl,1000,0,10,17,156", "slugger,uhpl,1000,900,13,22,156", "slugger,uhpr,0,0,20,34,156", "slugger,uhpr,0,900,20,34,156", "slugger,uhpr,260,0,16,28,156", "slugger,uhpr,260,900,20,34,156", "slugger,uhpr,553,0,13,22,156", "slugger,uhpr,553,900,20,33,156", "slugger,uhpr,820,0,11,18,156", "slugger,uhpr,820,900,15,25,156", "slugger,uhpr,1000,0,10,17,156", "slugger,uhpr,1000,900,13,22,156", "slugger,ubnl,0,0,18,28,105", "slugger,ubnl,0,900,18,28,105", "slugger,ubnl,260,0,15,23,105", "slugger,ubnl,260,900,18,28,105", "slugger,ubnl,553,0,12,18,105", "slugger,ubnl,553,900,18,27,105", "slugger,ubnl,820,0,10,15,105", "slugger,ubnl,820,900,13,21,105", "slugger,ubnl,1000,0,9,14,105", "slugger,ubnl,1000,900,12,18,105", "slugger,ubnr,0,0,18,28,105", "slugger,ubnr,0,900,18,28,105", "slugger,ubnr,260,0,15,23,105", "slugger,ubnr,260,900,18,28,105", "slugger,ubnr,553,0,12,18,105", "slugger,ubnr,553,900,18,27,105", "slugger,ubnr,820,0,10,15,105", "slugger,ubnr,820,900,13,21,105", "slugger,ubnr,1000,0,9,14,105", "slugger,ubnr,1000,900,12,18,105", "slugger,ubpl,0,0,22,34,163", "slugger,ubpl,0,900,22,34,163", "slugger,ubpl,260,0,18,28,163", "slugger,ubpl,260,900,22,34,163", "slugger,ubpl,553,0,14,22,163", "slugger,ubpl,553,900,22,33,163", "slugger,ubpl,820,0,12,18,163", "slugger,ubpl,820,900,16,25,163", "slugger,ubpl,1000,0,11,17,163", "slugger,ubpl,1000,900,14,22,163", "slugger,ubpr,0,0,22,34,163", "slugger,ubpr,0,900,22,34,163", "slugger,ubpr,260,0,18,28,163", "slugger,ubpr,260,900,22,34,163", "slugger,ubpr,553,0,14,22,163", "slugger,ubpr,553,900,22,33,163", "slugger,ubpr,820,0,12,18,163", "slugger,ubpr,820,900,16,25,163", "slugger,ubpr,1000,0,11,17,163", "slugger,ubpr,1000,900,14,22,163", "swarmer,jhnl,0,0,7,14,42", "swarmer,jhnl,0,900,7,14,42", "swarmer,jhnl,260,0,5,11,42", "swarmer,jhnl,260,900,7,14,42", "swarmer,jhnl,553,0,4,9,42", "swarmer,jhnl,553,900,6,13,42", "swarmer,jhnl,820,0,3,7,42", "swarmer,jhnl,820,900,5,10,42", "swarmer,jhnl,1000,0,3,7,42", "swarmer,jhnl,1000,900,4,9,42", "swarmer,jhnr,0,0,8,14,42", "swarmer,jhnr,0,900,8,14,42", "swarmer,jhnr,260,0,6,11,42", "swarmer,jhnr,260,900,8,14,42", "swarmer,jhnr,553,0,5,9,42", "swarmer,jhnr,553,900,7,13,42", "swarmer,jhnr,820,0,4,7,42", "swarmer,jhnr,820,900,6,10,42", "swarmer,jhnr,1000,0,4,7,42", "swarmer,jhnr,1000,900,5,9,42", "swarmer,jhpl,0,0,11,20,65", "swarmer,jhpl,0,900,11,20,65", "swarmer,jhpl,260,0,9,16,65", "swarmer,jhpl,260,900,11,20,65", "swarmer,jhpl,553,0,7,13,65", "swarmer,jhpl,553,900,11,20,65", "swarmer,jhpl,820,0,5,11,65", "swarmer,jhpl,820,900,8,15,65", "swarmer,jhpl,1000,0,5,10,65", "swarmer,jhpl,1000,900,7,13,65", "swarmer,jhpr,0,0,12,20,65", "swarmer,jhpr,0,900,12,20,65", "swarmer,jhpr,260,0,10,16,65", "swarmer,jhpr,260,900,12,20,65", "swarmer,jhpr,553,0,8,13,65", "swarmer,jhpr,553,900,12,20,65", "swarmer,jhpr,820,0,6,11,65", "swarmer,jhpr,820,900,9,15,65", "swarmer,jhpr,1000,0,6,10,65", "swarmer,jhpr,1000,900,8,13,65", "swarmer,jbnl,0,0,9,14,46", "swarmer,jbnl,0,900,9,14,46", "swarmer,jbnl,260,0,7,11,46", "swarmer,jbnl,260,900,9,14,46", "swarmer,jbnl,553,0,5,9,46", "swarmer,jbnl,553,900,8,13,46", "swarmer,jbnl,820,0,4,7,46", "swarmer,jbnl,820,900,6,10,46", "swarmer,jbnl,1000,0,4,7,46", "swarmer,jbnl,1000,900,5,9,46", "swarmer,jbnr,0,0,10,14,46", "swarmer,jbnr,0,900,10,14,46", "swarmer,jbnr,260,0,8,11,46", "swarmer,jbnr,260,900,10,14,46", "swarmer,jbnr,553,0,6,9,46", "swarmer,jbnr,553,900,9,13,46", "swarmer,jbnr,820,0,5,7,46", "swarmer,jbnr,820,900,7,10,46", "swarmer,jbnr,1000,0,5,7,46", "swarmer,jbnr,1000,900,6,9,46", "swarmer,jbpl,0,0,13,20,71", "swarmer,jbpl,0,900,13,20,71", "swarmer,jbpl,260,0,10,16,71", "swarmer,jbpl,260,900,13,20,71", "swarmer,jbpl,553,0,8,13,71", "swarmer,jbpl,553,900,13,20,71", "swarmer,jbpl,820,0,6,11,71", "swarmer,jbpl,820,900,9,15,71", "swarmer,jbpl,1000,0,6,10,71", "swarmer,jbpl,1000,900,8,13,71", "swarmer,jbpr,0,0,14,20,71", "swarmer,jbpr,0,900,14,20,71", "swarmer,jbpr,260,0,11,16,71", "swarmer,jbpr,260,900,14,20,71", "swarmer,jbpr,553,0,9,13,71", "swarmer,jbpr,553,900,14,20,71", "swarmer,jbpr,820,0,7,11,71", "swarmer,jbpr,820,900,10,15,71", "swarmer,jbpr,1000,0,7,10,71", "swarmer,jbpr,1000,900,9,13,71", "swarmer,shnl,0,0,12,20,65", "swarmer,shnl,0,900,12,20,65", "swarmer,shnl,260,0,10,16,65", "swarmer,shnl,260,900,12,20,65", "swarmer,shnl,553,0,8,13,65", "swarmer,shnl,553,900,12,20,65", "swarmer,shnl,820,0,6,11,65", "swarmer,shnl,820,900,9,15,65", "swarmer,shnl,1000,0,6,10,65", "swarmer,shnl,1000,900,8,13,65", "swarmer,shnr,0,0,12,20,65", "swarmer,shnr,0,900,12,20,65", "swarmer,shnr,260,0,10,16,65", "swarmer,shnr,260,900,12,20,65", "swarmer,shnr,553,0,8,13,65", "swarmer,shnr,553,900,12,20,65", "swarmer,shnr,820,0,6,11,65", "swarmer,shnr,820,900,9,15,65", "swarmer,shnr,1000,0,6,10,65", "swarmer,shnr,1000,900,8,13,65", "swarmer,shpl,0,0,16,27,100", "swarmer,shpl,0,900,16,27,100", "swarmer,shpl,260,0,13,22,100", "swarmer,shpl,260,900,16,27,100", "swarmer,shpl,553,0,10,17,100", "swarmer,shpl,553,900,16,26,100", "swarmer,shpl,820,0,8,14,100", "swarmer,shpl,820,900,12,20,100", "swarmer,shpl,1000,0,8,13,100", "swarmer,shpl,1000,900,10,17,100", "swarmer,shpr,0,0,16,27,100", "swarmer,shpr,0,900,16,27,100", "swarmer,shpr,260,0,13,22,100", "swarmer,shpr,260,900,16,27,100", "swarmer,shpr,553,0,10,17,100", "swarmer,shpr,553,900,16,26,100", "swarmer,shpr,820,0,8,14,100", "swarmer,shpr,820,900,12,20,100", "swarmer,shpr,1000,0,8,13,100", "swarmer,shpr,1000,900,10,17,100", "swarmer,sbnl,0,0,14,20,69", "swarmer,sbnl,0,900,14,20,69", "swarmer,sbnl,260,0,11,16,69", "swarmer,sbnl,260,900,14,20,69", "swarmer,sbnl,553,0,9,13,69", "swarmer,sbnl,553,900,14,20,69", "swarmer,sbnl,820,0,7,11,69", "swarmer,sbnl,820,900,10,15,69", "swarmer,sbnl,1000,0,7,10,69", "swarmer,sbnl,1000,900,9,13,69", "swarmer,sbnr,0,0,14,20,69", "swarmer,sbnr,0,900,14,20,69", "swarmer,sbnr,260,0,11,16,69", "swarmer,sbnr,260,900,14,20,69", "swarmer,sbnr,553,0,9,13,69", "swarmer,sbnr,553,900,14,20,69", "swarmer,sbnr,820,0,7,11,69", "swarmer,sbnr,820,900,10,15,69", "swarmer,sbnr,1000,0,7,10,69", "swarmer,sbnr,1000,900,9,13,69", "swarmer,sbpl,0,0,18,27,106", "swarmer,sbpl,0,900,18,27,106", "swarmer,sbpl,260,0,15,22,106", "swarmer,sbpl,260,900,18,27,106", "swarmer,sbpl,553,0,12,17,106", "swarmer,sbpl,553,900,18,26,106", "swarmer,sbpl,820,0,10,14,106", "swarmer,sbpl,820,900,13,20,106", "swarmer,sbpl,1000,0,9,13,106", "swarmer,sbpl,1000,900,12,17,106", "swarmer,sbpr,0,0,18,27,106", "swarmer,sbpr,0,900,18,27,106", "swarmer,sbpr,260,0,15,22,106", "swarmer,sbpr,260,900,18,27,106", "swarmer,sbpr,553,0,12,17,106", "swarmer,sbpr,553,900,18,26,106", "swarmer,sbpr,820,0,10,14,106", "swarmer,sbpr,820,900,13,20,106", "swarmer,sbpr,1000,0,9,13,106", "swarmer,sbpr,1000,900,12,17,106", "swarmer,hhnl,0,0,13,25,78", "swarmer,hhnl,0,900,13,25,78", "swarmer,hhnl,260,0,10,20,78", "swarmer,hhnl,260,900,13,25,78", "swarmer,hhnl,553,0,8,16,78", "swarmer,hhnl,553,900,13,24,78", "swarmer,hhnl,820,0,6,13,78", "swarmer,hhnl,820,900,9,18,78", "swarmer,hhnl,1000,0,6,12,78", "swarmer,hhnl,1000,900,8,16,78", "swarmer,hhnr,0,0,13,25,78", "swarmer,hhnr,0,900,13,25,78", "swarmer,hhnr,260,0,10,20,78", "swarmer,hhnr,260,900,13,25,78", "swarmer,hhnr,553,0,8,16,78", "swarmer,hhnr,553,900,13,24,78", "swarmer,hhnr,820,0,6,13,78", "swarmer,hhnr,820,900,9,18,78", "swarmer,hhnr,1000,0,6,12,78", "swarmer,hhnr,1000,900,8,16,78", "swarmer,hhpl,0,0,17,31,120", "swarmer,hhpl,0,900,17,31,120", "swarmer,hhpl,260,0,14,25,120", "swarmer,hhpl,260,900,17,31,120", "swarmer,hhpl,553,0,11,20,120", "swarmer,hhpl,553,900,17,30,120", "swarmer,hhpl,820,0,9,16,120", "swarmer,hhpl,820,900,12,23,120", "swarmer,hhpl,1000,0,8,15,120", "swarmer,hhpl,1000,900,11,20,120", "swarmer,hhpr,0,0,17,31,120", "swarmer,hhpr,0,900,17,31,120", "swarmer,hhpr,260,0,14,25,120", "swarmer,hhpr,260,900,17,31,120", "swarmer,hhpr,553,0,11,20,120", "swarmer,hhpr,553,900,17,30,120", "swarmer,hhpr,820,0,9,16,120", "swarmer,hhpr,820,900,12,23,120", "swarmer,hhpr,1000,0,8,15,120", "swarmer,hhpr,1000,900,11,20,120", "swarmer,hbnl,0,0,15,25,82", "swarmer,hbnl,0,900,15,25,82", "swarmer,hbnl,260,0,12,20,82", "swarmer,hbnl,260,900,15,25,82", "swarmer,hbnl,553,0,9,16,82", "swarmer,hbnl,553,900,15,24,82", "swarmer,hbnl,820,0,7,13,82", "swarmer,hbnl,820,900,11,18,82", "swarmer,hbnl,1000,0,7,12,82", "swarmer,hbnl,1000,900,9,16,82", "swarmer,hbnr,0,0,15,25,82", "swarmer,hbnr,0,900,15,25,82", "swarmer,hbnr,260,0,12,20,82", "swarmer,hbnr,260,900,15,25,82", "swarmer,hbnr,553,0,9,16,82", "swarmer,hbnr,553,900,15,24,82", "swarmer,hbnr,820,0,7,13,82", "swarmer,hbnr,820,900,11,18,82", "swarmer,hbnr,1000,0,7,12,82", "swarmer,hbnr,1000,900,9,16,82", "swarmer,hbpl,0,0,19,31,127", "swarmer,hbpl,0,900,19,31,127", "swarmer,hbpl,260,0,15,25,127", "swarmer,hbpl,260,900,19,31,127", "swarmer,hbpl,553,0,12,20,127", "swarmer,hbpl,553,900,19,30,127", "swarmer,hbpl,820,0,10,16,127", "swarmer,hbpl,820,900,14,23,127", "swarmer,hbpl,1000,0,9,15,127", "swarmer,hbpl,1000,900,12,20,127", "swarmer,hbpr,0,0,19,31,127", "swarmer,hbpr,0,900,19,31,127", "swarmer,hbpr,260,0,15,25,127", "swarmer,hbpr,260,900,19,31,127", "swarmer,hbpr,553,0,12,20,127", "swarmer,hbpr,553,900,19,30,127", "swarmer,hbpr,820,0,10,16,127", "swarmer,hbpr,820,900,14,23,127", "swarmer,hbpr,1000,0,9,15,127", "swarmer,hbpr,1000,900,12,20,127", "swarmer,uhnl,0,0,15,27,88", "swarmer,uhnl,0,900,15,27,88", "swarmer,uhnl,260,0,12,22,88", "swarmer,uhnl,260,900,15,27,88", "swarmer,uhnl,553,0,9,17,88", "swarmer,uhnl,553,900,15,26,88", "swarmer,uhnl,820,0,7,14,88", "swarmer,uhnl,820,900,11,20,88", "swarmer,uhnl,1000,0,7,13,88", "swarmer,uhnl,1000,900,9,17,88", "swarmer,uhnr,0,0,15,27,88", "swarmer,uhnr,0,900,15,27,88", "swarmer,uhnr,260,0,12,22,88", "swarmer,uhnr,260,900,15,27,88", "swarmer,uhnr,553,0,9,17,88", "swarmer,uhnr,553,900,15,26,88", "swarmer,uhnr,820,0,7,14,88", "swarmer,uhnr,820,900,11,20,88", "swarmer,uhnr,1000,0,7,13,88", "swarmer,uhnr,1000,900,9,17,88", "swarmer,uhpl,0,0,19,33,136", "swarmer,uhpl,0,900,19,33,136", "swarmer,uhpl,260,0,15,27,136", "swarmer,uhpl,260,900,19,33,136", "swarmer,uhpl,553,0,12,21,136", "swarmer,uhpl,553,900,19,32,136", "swarmer,uhpl,820,0,10,17,136", "swarmer,uhpl,820,900,14,24,136", "swarmer,uhpl,1000,0,9,16,136", "swarmer,uhpl,1000,900,12,21,136", "swarmer,uhpr,0,0,19,33,136", "swarmer,uhpr,0,900,19,33,136", "swarmer,uhpr,260,0,15,27,136", "swarmer,uhpr,260,900,19,33,136", "swarmer,uhpr,553,0,12,21,136", "swarmer,uhpr,553,900,19,32,136", "swarmer,uhpr,820,0,10,17,136", "swarmer,uhpr,820,900,14,24,136", "swarmer,uhpr,1000,0,9,16,136", "swarmer,uhpr,1000,900,12,21,136", "swarmer,ubnl,0,0,17,27,92", "swarmer,ubnl,0,900,17,27,92", "swarmer,ubnl,260,0,14,22,92", "swarmer,ubnl,260,900,17,27,92", "swarmer,ubnl,553,0,11,17,92", "swarmer,ubnl,553,900,17,26,92", "swarmer,ubnl,820,0,9,14,92", "swarmer,ubnl,820,900,12,20,92", "swarmer,ubnl,1000,0,8,13,92", "swarmer,ubnl,1000,900,11,17,92", "swarmer,ubnr,0,0,17,27,92", "swarmer,ubnr,0,900,17,27,92", "swarmer,ubnr,260,0,14,22,92", "swarmer,ubnr,260,900,17,27,92", "swarmer,ubnr,553,0,11,17,92", "swarmer,ubnr,553,900,17,26,92", "swarmer,ubnr,820,0,9,14,92", "swarmer,ubnr,820,900,12,20,92", "swarmer,ubnr,1000,0,8,13,92", "swarmer,ubnr,1000,900,11,17,92", "swarmer,ubpl,0,0,21,33,142", "swarmer,ubpl,0,900,21,33,142", "swarmer,ubpl,260,0,17,27,142", "swarmer,ubpl,260,900,21,33,142", "swarmer,ubpl,553,0,13,21,142", "swarmer,ubpl,553,900,21,32,142", "swarmer,ubpl,820,0,11,17,142", "swarmer,ubpl,820,900,15,24,142", "swarmer,ubpl,1000,0,10,16,142", "swarmer,ubpl,1000,900,13,21,142", "swarmer,ubpr,0,0,21,33,142", "swarmer,ubpr,0,900,21,33,142", "swarmer,ubpr,260,0,17,27,142", "swarmer,ubpr,260,900,21,33,142", "swarmer,ubpr,553,0,13,21,142", "swarmer,ubpr,553,900,21,32,142", "swarmer,ubpr,820,0,11,17,142", "swarmer,ubpr,820,900,15,24,142", "swarmer,ubpr,1000,0,10,16,142", "swarmer,ubpr,1000,900,13,21,142", "counter_puncher,jhnl,0,0,7,14,42", "counter_puncher,jhnl,0,900,7,14,42", "counter_puncher,jhnl,260,0,5,11,42", "counter_puncher,jhnl,260,900,7,14,42", "counter_puncher,jhnl,553,0,4,9,42", "counter_puncher,jhnl,553,900,7,14,42", "counter_puncher,jhnl,820,0,3,7,42", "counter_puncher,jhnl,820,900,5,10,42", "counter_puncher,jhnl,1000,0,3,7,42", "counter_puncher,jhnl,1000,900,4,9,42", "counter_puncher,jhnr,0,0,8,14,42", "counter_puncher,jhnr,0,900,8,14,42", "counter_puncher,jhnr,260,0,6,11,42", "counter_puncher,jhnr,260,900,8,14,42", "counter_puncher,jhnr,553,0,5,9,42", "counter_puncher,jhnr,553,900,8,14,42", "counter_puncher,jhnr,820,0,4,7,42", "counter_puncher,jhnr,820,900,6,10,42", "counter_puncher,jhnr,1000,0,4,7,42", "counter_puncher,jhnr,1000,900,5,9,42", "counter_puncher,jhpl,0,0,11,20,65", "counter_puncher,jhpl,0,900,11,20,65", "counter_puncher,jhpl,260,0,9,16,65", "counter_puncher,jhpl,260,900,11,20,65", "counter_puncher,jhpl,553,0,7,13,65", "counter_puncher,jhpl,553,900,11,20,65", "counter_puncher,jhpl,820,0,5,11,65", "counter_puncher,jhpl,820,900,8,15,65", "counter_puncher,jhpl,1000,0,5,10,65", "counter_puncher,jhpl,1000,900,7,13,65", "counter_puncher,jhpr,0,0,12,20,65", "counter_puncher,jhpr,0,900,12,20,65", "counter_puncher,jhpr,260,0,10,16,65", "counter_puncher,jhpr,260,900,12,20,65", "counter_puncher,jhpr,553,0,8,13,65", "counter_puncher,jhpr,553,900,12,20,65", "counter_puncher,jhpr,820,0,6,11,65", "counter_puncher,jhpr,820,900,9,15,65", "counter_puncher,jhpr,1000,0,6,10,65", "counter_puncher,jhpr,1000,900,8,13,65", "counter_puncher,jbnl,0,0,9,14,46", "counter_puncher,jbnl,0,900,9,14,46", "counter_puncher,jbnl,260,0,7,11,46", "counter_puncher,jbnl,260,900,9,14,46", "counter_puncher,jbnl,553,0,5,9,46", "counter_puncher,jbnl,553,900,9,14,46", "counter_puncher,jbnl,820,0,4,7,46", "counter_puncher,jbnl,820,900,6,10,46", "counter_puncher,jbnl,1000,0,4,7,46", "counter_puncher,jbnl,1000,900,5,9,46", "counter_puncher,jbnr,0,0,10,14,46", "counter_puncher,jbnr,0,900,10,14,46", "counter_puncher,jbnr,260,0,8,11,46", "counter_puncher,jbnr,260,900,10,14,46", "counter_puncher,jbnr,553,0,6,9,46", "counter_puncher,jbnr,553,900,10,14,46", "counter_puncher,jbnr,820,0,5,7,46", "counter_puncher,jbnr,820,900,7,10,46", "counter_puncher,jbnr,1000,0,5,7,46", "counter_puncher,jbnr,1000,900,6,9,46", "counter_puncher,jbpl,0,0,13,20,71", "counter_puncher,jbpl,0,900,13,20,71", "counter_puncher,jbpl,260,0,10,16,71", "counter_puncher,jbpl,260,900,13,20,71", "counter_puncher,jbpl,553,0,8,13,71", "counter_puncher,jbpl,553,900,13,20,71", "counter_puncher,jbpl,820,0,6,11,71", "counter_puncher,jbpl,820,900,9,15,71", "counter_puncher,jbpl,1000,0,6,10,71", "counter_puncher,jbpl,1000,900,8,13,71", "counter_puncher,jbpr,0,0,14,20,71", "counter_puncher,jbpr,0,900,14,20,71", "counter_puncher,jbpr,260,0,11,16,71", "counter_puncher,jbpr,260,900,14,20,71", "counter_puncher,jbpr,553,0,9,13,71", "counter_puncher,jbpr,553,900,14,20,71", "counter_puncher,jbpr,820,0,7,11,71", "counter_puncher,jbpr,820,900,10,15,71", "counter_puncher,jbpr,1000,0,7,10,71", "counter_puncher,jbpr,1000,900,9,13,71", "counter_puncher,shnl,0,0,12,20,65", "counter_puncher,shnl,0,900,12,20,65", "counter_puncher,shnl,260,0,10,16,65", "counter_puncher,shnl,260,900,12,20,65", "counter_puncher,shnl,553,0,8,13,65", "counter_puncher,shnl,553,900,12,20,65", "counter_puncher,shnl,820,0,6,11,65", "counter_puncher,shnl,820,900,9,15,65", "counter_puncher,shnl,1000,0,6,10,65", "counter_puncher,shnl,1000,900,8,13,65", "counter_puncher,shnr,0,0,12,20,65", "counter_puncher,shnr,0,900,12,20,65", "counter_puncher,shnr,260,0,10,16,65", "counter_puncher,shnr,260,900,12,20,65", "counter_puncher,shnr,553,0,8,13,65", "counter_puncher,shnr,553,900,12,20,65", "counter_puncher,shnr,820,0,6,11,65", "counter_puncher,shnr,820,900,9,15,65", "counter_puncher,shnr,1000,0,6,10,65", "counter_puncher,shnr,1000,900,8,13,65", "counter_puncher,shpl,0,0,16,27,100", "counter_puncher,shpl,0,900,16,27,100", "counter_puncher,shpl,260,0,13,22,100", "counter_puncher,shpl,260,900,16,27,100", "counter_puncher,shpl,553,0,10,17,100", "counter_puncher,shpl,553,900,16,26,100", "counter_puncher,shpl,820,0,8,14,100", "counter_puncher,shpl,820,900,12,20,100", "counter_puncher,shpl,1000,0,8,13,100", "counter_puncher,shpl,1000,900,10,17,100", "counter_puncher,shpr,0,0,16,27,100", "counter_puncher,shpr,0,900,16,27,100", "counter_puncher,shpr,260,0,13,22,100", "counter_puncher,shpr,260,900,16,27,100", "counter_puncher,shpr,553,0,10,17,100", "counter_puncher,shpr,553,900,16,26,100", "counter_puncher,shpr,820,0,8,14,100", "counter_puncher,shpr,820,900,12,20,100", "counter_puncher,shpr,1000,0,8,13,100", "counter_puncher,shpr,1000,900,10,17,100", "counter_puncher,sbnl,0,0,14,20,69", "counter_puncher,sbnl,0,900,14,20,69", "counter_puncher,sbnl,260,0,11,16,69", "counter_puncher,sbnl,260,900,14,20,69", "counter_puncher,sbnl,553,0,9,13,69", "counter_puncher,sbnl,553,900,14,20,69", "counter_puncher,sbnl,820,0,7,11,69", "counter_puncher,sbnl,820,900,10,15,69", "counter_puncher,sbnl,1000,0,7,10,69", "counter_puncher,sbnl,1000,900,9,13,69", "counter_puncher,sbnr,0,0,14,20,69", "counter_puncher,sbnr,0,900,14,20,69", "counter_puncher,sbnr,260,0,11,16,69", "counter_puncher,sbnr,260,900,14,20,69", "counter_puncher,sbnr,553,0,9,13,69", "counter_puncher,sbnr,553,900,14,20,69", "counter_puncher,sbnr,820,0,7,11,69", "counter_puncher,sbnr,820,900,10,15,69", "counter_puncher,sbnr,1000,0,7,10,69", "counter_puncher,sbnr,1000,900,9,13,69", "counter_puncher,sbpl,0,0,18,27,106", "counter_puncher,sbpl,0,900,18,27,106", "counter_puncher,sbpl,260,0,15,22,106", "counter_puncher,sbpl,260,900,18,27,106", "counter_puncher,sbpl,553,0,12,17,106", "counter_puncher,sbpl,553,900,18,26,106", "counter_puncher,sbpl,820,0,10,14,106", "counter_puncher,sbpl,820,900,13,20,106", "counter_puncher,sbpl,1000,0,9,13,106", "counter_puncher,sbpl,1000,900,12,17,106", "counter_puncher,sbpr,0,0,18,27,106", "counter_puncher,sbpr,0,900,18,27,106", "counter_puncher,sbpr,260,0,15,22,106", "counter_puncher,sbpr,260,900,18,27,106", "counter_puncher,sbpr,553,0,12,17,106", "counter_puncher,sbpr,553,900,18,26,106", "counter_puncher,sbpr,820,0,10,14,106", "counter_puncher,sbpr,820,900,13,20,106", "counter_puncher,sbpr,1000,0,9,13,106", "counter_puncher,sbpr,1000,900,12,17,106", "counter_puncher,hhnl,0,0,14,25,78", "counter_puncher,hhnl,0,900,14,25,78", "counter_puncher,hhnl,260,0,11,20,78", "counter_puncher,hhnl,260,900,14,25,78", "counter_puncher,hhnl,553,0,9,16,78", "counter_puncher,hhnl,553,900,14,24,78", "counter_puncher,hhnl,820,0,7,13,78", "counter_puncher,hhnl,820,900,10,18,78", "counter_puncher,hhnl,1000,0,7,12,78", "counter_puncher,hhnl,1000,900,9,16,78", "counter_puncher,hhnr,0,0,14,25,78", "counter_puncher,hhnr,0,900,14,25,78", "counter_puncher,hhnr,260,0,11,20,78", "counter_puncher,hhnr,260,900,14,25,78", "counter_puncher,hhnr,553,0,9,16,78", "counter_puncher,hhnr,553,900,14,24,78", "counter_puncher,hhnr,820,0,7,13,78", "counter_puncher,hhnr,820,900,10,18,78", "counter_puncher,hhnr,1000,0,7,12,78", "counter_puncher,hhnr,1000,900,9,16,78", "counter_puncher,hhpl,0,0,18,31,120", "counter_puncher,hhpl,0,900,18,31,120", "counter_puncher,hhpl,260,0,15,25,120", "counter_puncher,hhpl,260,900,18,31,120", "counter_puncher,hhpl,553,0,12,20,120", "counter_puncher,hhpl,553,900,18,30,120", "counter_puncher,hhpl,820,0,10,16,120", "counter_puncher,hhpl,820,900,13,23,120", "counter_puncher,hhpl,1000,0,9,15,120", "counter_puncher,hhpl,1000,900,12,20,120", "counter_puncher,hhpr,0,0,18,31,120", "counter_puncher,hhpr,0,900,18,31,120", "counter_puncher,hhpr,260,0,15,25,120", "counter_puncher,hhpr,260,900,18,31,120", "counter_puncher,hhpr,553,0,12,20,120", "counter_puncher,hhpr,553,900,18,30,120", "counter_puncher,hhpr,820,0,10,16,120", "counter_puncher,hhpr,820,900,13,23,120", "counter_puncher,hhpr,1000,0,9,15,120", "counter_puncher,hhpr,1000,900,12,20,120", "counter_puncher,hbnl,0,0,16,25,82", "counter_puncher,hbnl,0,900,16,25,82", "counter_puncher,hbnl,260,0,13,20,82", "counter_puncher,hbnl,260,900,16,25,82", "counter_puncher,hbnl,553,0,10,16,82", "counter_puncher,hbnl,553,900,16,24,82", "counter_puncher,hbnl,820,0,8,13,82", "counter_puncher,hbnl,820,900,12,18,82", "counter_puncher,hbnl,1000,0,8,12,82", "counter_puncher,hbnl,1000,900,10,16,82", "counter_puncher,hbnr,0,0,16,25,82", "counter_puncher,hbnr,0,900,16,25,82", "counter_puncher,hbnr,260,0,13,20,82", "counter_puncher,hbnr,260,900,16,25,82", "counter_puncher,hbnr,553,0,10,16,82", "counter_puncher,hbnr,553,900,16,24,82", "counter_puncher,hbnr,820,0,8,13,82", "counter_puncher,hbnr,820,900,12,18,82", "counter_puncher,hbnr,1000,0,8,12,82", "counter_puncher,hbnr,1000,900,10,16,82", "counter_puncher,hbpl,0,0,20,31,127", "counter_puncher,hbpl,0,900,20,31,127", "counter_puncher,hbpl,260,0,16,25,127", "counter_puncher,hbpl,260,900,20,31,127", "counter_puncher,hbpl,553,0,13,20,127", "counter_puncher,hbpl,553,900,20,30,127", "counter_puncher,hbpl,820,0,11,16,127", "counter_puncher,hbpl,820,900,15,23,127", "counter_puncher,hbpl,1000,0,10,15,127", "counter_puncher,hbpl,1000,900,13,20,127", "counter_puncher,hbpr,0,0,20,31,127", "counter_puncher,hbpr,0,900,20,31,127", "counter_puncher,hbpr,260,0,16,25,127", "counter_puncher,hbpr,260,900,20,31,127", "counter_puncher,hbpr,553,0,13,20,127", "counter_puncher,hbpr,553,900,20,30,127", "counter_puncher,hbpr,820,0,11,16,127", "counter_puncher,hbpr,820,900,15,23,127", "counter_puncher,hbpr,1000,0,10,15,127", "counter_puncher,hbpr,1000,900,13,20,127", "counter_puncher,uhnl,0,0,16,27,88", "counter_puncher,uhnl,0,900,16,27,88", "counter_puncher,uhnl,260,0,13,22,88", "counter_puncher,uhnl,260,900,16,27,88", "counter_puncher,uhnl,553,0,10,17,88", "counter_puncher,uhnl,553,900,16,26,88", "counter_puncher,uhnl,820,0,8,14,88", "counter_puncher,uhnl,820,900,12,20,88", "counter_puncher,uhnl,1000,0,8,13,88", "counter_puncher,uhnl,1000,900,10,17,88", "counter_puncher,uhnr,0,0,16,27,88", "counter_puncher,uhnr,0,900,16,27,88", "counter_puncher,uhnr,260,0,13,22,88", "counter_puncher,uhnr,260,900,16,27,88", "counter_puncher,uhnr,553,0,10,17,88", "counter_puncher,uhnr,553,900,16,26,88", "counter_puncher,uhnr,820,0,8,14,88", "counter_puncher,uhnr,820,900,12,20,88", "counter_puncher,uhnr,1000,0,8,13,88", "counter_puncher,uhnr,1000,900,10,17,88", "counter_puncher,uhpl,0,0,20,33,136", "counter_puncher,uhpl,0,900,20,33,136", "counter_puncher,uhpl,260,0,16,27,136", "counter_puncher,uhpl,260,900,20,33,136", "counter_puncher,uhpl,553,0,13,21,136", "counter_puncher,uhpl,553,900,20,32,136", "counter_puncher,uhpl,820,0,11,17,136", "counter_puncher,uhpl,820,900,15,24,136", "counter_puncher,uhpl,1000,0,10,16,136", "counter_puncher,uhpl,1000,900,13,21,136", "counter_puncher,uhpr,0,0,20,33,136", "counter_puncher,uhpr,0,900,20,33,136", "counter_puncher,uhpr,260,0,16,27,136", "counter_puncher,uhpr,260,900,20,33,136", "counter_puncher,uhpr,553,0,13,21,136", "counter_puncher,uhpr,553,900,20,32,136", "counter_puncher,uhpr,820,0,11,17,136", "counter_puncher,uhpr,820,900,15,24,136", "counter_puncher,uhpr,1000,0,10,16,136", "counter_puncher,uhpr,1000,900,13,21,136", "counter_puncher,ubnl,0,0,18,27,92", "counter_puncher,ubnl,0,900,18,27,92", "counter_puncher,ubnl,260,0,15,22,92", "counter_puncher,ubnl,260,900,18,27,92", "counter_puncher,ubnl,553,0,12,17,92", "counter_puncher,ubnl,553,900,18,26,92", "counter_puncher,ubnl,820,0,10,14,92", "counter_puncher,ubnl,820,900,13,20,92", "counter_puncher,ubnl,1000,0,9,13,92", "counter_puncher,ubnl,1000,900,12,17,92", "counter_puncher,ubnr,0,0,18,27,92", "counter_puncher,ubnr,0,900,18,27,92", "counter_puncher,ubnr,260,0,15,22,92", "counter_puncher,ubnr,260,900,18,27,92", "counter_puncher,ubnr,553,0,12,17,92", "counter_puncher,ubnr,553,900,18,26,92", "counter_puncher,ubnr,820,0,10,14,92", "counter_puncher,ubnr,820,900,13,20,92", "counter_puncher,ubnr,1000,0,9,13,92", "counter_puncher,ubnr,1000,900,12,17,92", "counter_puncher,ubpl,0,0,22,33,142", "counter_puncher,ubpl,0,900,22,33,142", "counter_puncher,ubpl,260,0,18,27,142", "counter_puncher,ubpl,260,900,22,33,142", "counter_puncher,ubpl,553,0,14,21,142", "counter_puncher,ubpl,553,900,22,32,142", "counter_puncher,ubpl,820,0,12,17,142", "counter_puncher,ubpl,820,900,16,24,142", "counter_puncher,ubpl,1000,0,11,16,142", "counter_puncher,ubpl,1000,900,14,21,142", "counter_puncher,ubpr,0,0,22,33,142", "counter_puncher,ubpr,0,900,22,33,142", "counter_puncher,ubpr,260,0,18,27,142", "counter_puncher,ubpr,260,900,22,33,142", "counter_puncher,ubpr,553,0,14,21,142", "counter_puncher,ubpr,553,900,22,32,142", "counter_puncher,ubpr,820,0,12,17,142", "counter_puncher,ubpr,820,900,16,24,142", "counter_puncher,ubpr,1000,0,11,16,142", "counter_puncher,ubpr,1000,900,14,21,142"] \ No newline at end of file +["boxer,jhnl,0,0,3,4,25", "boxer,jhnl,0,900,3,5,25", "boxer,jhnl,260,0,2,4,25", "boxer,jhnl,260,900,3,5,25", "boxer,jhnl,553,0,2,3,25", "boxer,jhnl,553,900,3,4,25", "boxer,jhnl,820,0,2,3,25", "boxer,jhnl,820,900,2,4,25", "boxer,jhnl,1000,0,2,3,25", "boxer,jhnl,1000,900,2,3,25", "boxer,jhnr,0,0,4,4,25", "boxer,jhnr,0,900,4,5,25", "boxer,jhnr,260,0,3,4,25", "boxer,jhnr,260,900,4,5,25", "boxer,jhnr,553,0,3,3,25", "boxer,jhnr,553,900,4,4,25", "boxer,jhnr,820,0,3,3,25", "boxer,jhnr,820,900,3,4,25", "boxer,jhnr,1000,0,3,3,25", "boxer,jhnr,1000,900,3,3,25", "boxer,jhpl,0,0,7,9,35", "boxer,jhpl,0,900,8,9,35", "boxer,jhpl,260,0,6,8,35", "boxer,jhpl,260,900,8,9,35", "boxer,jhpl,553,0,5,7,35", "boxer,jhpl,553,900,7,9,35", "boxer,jhpl,820,0,5,6,35", "boxer,jhpl,820,900,6,8,35", "boxer,jhpl,1000,0,5,6,35", "boxer,jhpl,1000,900,6,7,35", "boxer,jhpr,0,0,8,9,35", "boxer,jhpr,0,900,9,9,35", "boxer,jhpr,260,0,7,8,35", "boxer,jhpr,260,900,9,9,35", "boxer,jhpr,553,0,6,7,35", "boxer,jhpr,553,900,8,9,35", "boxer,jhpr,820,0,6,6,35", "boxer,jhpr,820,900,7,8,35", "boxer,jhpr,1000,0,6,6,35", "boxer,jhpr,1000,900,7,7,35", "boxer,jbnl,0,0,4,4,27", "boxer,jbnl,0,900,5,5,27", "boxer,jbnl,260,0,4,4,27", "boxer,jbnl,260,900,5,5,27", "boxer,jbnl,553,0,3,3,27", "boxer,jbnl,553,900,4,4,27", "boxer,jbnl,820,0,3,3,27", "boxer,jbnl,820,900,4,4,27", "boxer,jbnl,1000,0,3,3,27", "boxer,jbnl,1000,900,3,3,27", "boxer,jbnr,0,0,5,4,27", "boxer,jbnr,0,900,6,5,27", "boxer,jbnr,260,0,5,4,27", "boxer,jbnr,260,900,6,5,27", "boxer,jbnr,553,0,4,3,27", "boxer,jbnr,553,900,5,4,27", "boxer,jbnr,820,0,4,3,27", "boxer,jbnr,820,900,5,4,27", "boxer,jbnr,1000,0,4,3,27", "boxer,jbnr,1000,900,4,3,27", "boxer,jbpl,0,0,9,9,37", "boxer,jbpl,0,900,9,9,37", "boxer,jbpl,260,0,8,8,37", "boxer,jbpl,260,900,9,9,37", "boxer,jbpl,553,0,7,7,37", "boxer,jbpl,553,900,9,9,37", "boxer,jbpl,820,0,6,6,37", "boxer,jbpl,820,900,8,8,37", "boxer,jbpl,1000,0,6,6,37", "boxer,jbpl,1000,900,7,7,37", "boxer,jbpr,0,0,10,9,37", "boxer,jbpr,0,900,10,9,37", "boxer,jbpr,260,0,9,8,37", "boxer,jbpr,260,900,10,9,37", "boxer,jbpr,553,0,8,7,37", "boxer,jbpr,553,900,10,9,37", "boxer,jbpr,820,0,7,6,37", "boxer,jbpr,820,900,9,8,37", "boxer,jbpr,1000,0,7,6,37", "boxer,jbpr,1000,900,8,7,37", "boxer,shnl,0,0,5,8,39", "boxer,shnl,0,900,6,9,39", "boxer,shnl,260,0,5,7,39", "boxer,shnl,260,900,6,9,39", "boxer,shnl,553,0,4,6,39", "boxer,shnl,553,900,5,8,39", "boxer,shnl,820,0,4,6,39", "boxer,shnl,820,900,5,7,39", "boxer,shnl,1000,0,4,6,39", "boxer,shnl,1000,900,4,7,39", "boxer,shnr,0,0,5,8,39", "boxer,shnr,0,900,6,9,39", "boxer,shnr,260,0,5,7,39", "boxer,shnr,260,900,6,9,39", "boxer,shnr,553,0,4,6,39", "boxer,shnr,553,900,5,8,39", "boxer,shnr,820,0,4,6,39", "boxer,shnr,820,900,5,7,39", "boxer,shnr,1000,0,4,6,39", "boxer,shnr,1000,900,4,7,39", "boxer,shpl,0,0,10,13,54", "boxer,shpl,0,900,10,13,54", "boxer,shpl,260,0,9,11,54", "boxer,shpl,260,900,10,13,54", "boxer,shpl,553,0,8,10,54", "boxer,shpl,553,900,10,13,54", "boxer,shpl,820,0,7,9,54", "boxer,shpl,820,900,9,11,54", "boxer,shpl,1000,0,7,9,54", "boxer,shpl,1000,900,8,10,54", "boxer,shpr,0,0,10,13,54", "boxer,shpr,0,900,10,13,54", "boxer,shpr,260,0,9,11,54", "boxer,shpr,260,900,10,13,54", "boxer,shpr,553,0,8,10,54", "boxer,shpr,553,900,10,13,54", "boxer,shpr,820,0,7,9,54", "boxer,shpr,820,900,9,11,54", "boxer,shpr,1000,0,7,9,54", "boxer,shpr,1000,900,8,10,54", "boxer,sbnl,0,0,7,8,41", "boxer,sbnl,0,900,7,9,41", "boxer,sbnl,260,0,6,7,41", "boxer,sbnl,260,900,7,9,41", "boxer,sbnl,553,0,5,6,41", "boxer,sbnl,553,900,7,8,41", "boxer,sbnl,820,0,5,6,41", "boxer,sbnl,820,900,6,7,41", "boxer,sbnl,1000,0,5,6,41", "boxer,sbnl,1000,900,6,7,41", "boxer,sbnr,0,0,7,8,41", "boxer,sbnr,0,900,7,9,41", "boxer,sbnr,260,0,6,7,41", "boxer,sbnr,260,900,7,9,41", "boxer,sbnr,553,0,5,6,41", "boxer,sbnr,553,900,7,8,41", "boxer,sbnr,820,0,5,6,41", "boxer,sbnr,820,900,6,7,41", "boxer,sbnr,1000,0,5,6,41", "boxer,sbnr,1000,900,6,7,41", "boxer,sbpl,0,0,11,13,57", "boxer,sbpl,0,900,12,13,57", "boxer,sbpl,260,0,10,11,57", "boxer,sbpl,260,900,12,13,57", "boxer,sbpl,553,0,9,10,57", "boxer,sbpl,553,900,11,13,57", "boxer,sbpl,820,0,8,9,57", "boxer,sbpl,820,900,10,11,57", "boxer,sbpl,1000,0,8,9,57", "boxer,sbpl,1000,900,9,10,57", "boxer,sbpr,0,0,11,13,57", "boxer,sbpr,0,900,12,13,57", "boxer,sbpr,260,0,10,11,57", "boxer,sbpr,260,900,12,13,57", "boxer,sbpr,553,0,9,10,57", "boxer,sbpr,553,900,11,13,57", "boxer,sbpr,820,0,8,9,57", "boxer,sbpr,820,900,10,11,57", "boxer,sbpr,1000,0,8,9,57", "boxer,sbpr,1000,900,9,10,57", "boxer,hhnl,0,0,7,10,47", "boxer,hhnl,0,900,7,10,47", "boxer,hhnl,260,0,6,9,47", "boxer,hhnl,260,900,7,10,47", "boxer,hhnl,553,0,5,8,47", "boxer,hhnl,553,900,7,10,47", "boxer,hhnl,820,0,5,7,47", "boxer,hhnl,820,900,6,9,47", "boxer,hhnl,1000,0,5,7,47", "boxer,hhnl,1000,900,6,8,47", "boxer,hhnr,0,0,7,10,47", "boxer,hhnr,0,900,7,10,47", "boxer,hhnr,260,0,6,9,47", "boxer,hhnr,260,900,7,10,47", "boxer,hhnr,553,0,5,8,47", "boxer,hhnr,553,900,7,10,47", "boxer,hhnr,820,0,5,7,47", "boxer,hhnr,820,900,6,9,47", "boxer,hhnr,1000,0,5,7,47", "boxer,hhnr,1000,900,6,8,47", "boxer,hhpl,0,0,11,14,65", "boxer,hhpl,0,900,12,15,65", "boxer,hhpl,260,0,10,13,65", "boxer,hhpl,260,900,12,15,65", "boxer,hhpl,553,0,9,11,65", "boxer,hhpl,553,900,11,14,65", "boxer,hhpl,820,0,8,10,65", "boxer,hhpl,820,900,10,13,65", "boxer,hhpl,1000,0,8,10,65", "boxer,hhpl,1000,900,9,12,65", "boxer,hhpr,0,0,11,14,65", "boxer,hhpr,0,900,12,15,65", "boxer,hhpr,260,0,10,13,65", "boxer,hhpr,260,900,12,15,65", "boxer,hhpr,553,0,9,11,65", "boxer,hhpr,553,900,11,14,65", "boxer,hhpr,820,0,8,10,65", "boxer,hhpr,820,900,10,13,65", "boxer,hhpr,1000,0,8,10,65", "boxer,hhpr,1000,900,9,12,65", "boxer,hbnl,0,0,8,10,49", "boxer,hbnl,0,900,9,10,49", "boxer,hbnl,260,0,7,9,49", "boxer,hbnl,260,900,9,10,49", "boxer,hbnl,553,0,6,8,49", "boxer,hbnl,553,900,8,10,49", "boxer,hbnl,820,0,6,7,49", "boxer,hbnl,820,900,7,9,49", "boxer,hbnl,1000,0,6,7,49", "boxer,hbnl,1000,900,7,8,49", "boxer,hbnr,0,0,8,10,49", "boxer,hbnr,0,900,9,10,49", "boxer,hbnr,260,0,7,9,49", "boxer,hbnr,260,900,9,10,49", "boxer,hbnr,553,0,6,8,49", "boxer,hbnr,553,900,8,10,49", "boxer,hbnr,820,0,6,7,49", "boxer,hbnr,820,900,7,9,49", "boxer,hbnr,1000,0,6,7,49", "boxer,hbnr,1000,900,7,8,49", "boxer,hbpl,0,0,13,14,68", "boxer,hbpl,0,900,13,15,68", "boxer,hbpl,260,0,11,13,68", "boxer,hbpl,260,900,13,15,68", "boxer,hbpl,553,0,10,11,68", "boxer,hbpl,553,900,13,14,68", "boxer,hbpl,820,0,9,10,68", "boxer,hbpl,820,900,11,13,68", "boxer,hbpl,1000,0,9,10,68", "boxer,hbpl,1000,900,10,12,68", "boxer,hbpr,0,0,13,14,68", "boxer,hbpr,0,900,13,15,68", "boxer,hbpr,260,0,11,13,68", "boxer,hbpr,260,900,13,15,68", "boxer,hbpr,553,0,10,11,68", "boxer,hbpr,553,900,13,14,68", "boxer,hbpr,820,0,9,10,68", "boxer,hbpr,820,900,11,13,68", "boxer,hbpr,1000,0,9,10,68", "boxer,hbpr,1000,900,10,12,68", "boxer,uhnl,0,0,7,11,53", "boxer,uhnl,0,900,7,12,53", "boxer,uhnl,260,0,6,10,53", "boxer,uhnl,260,900,7,12,53", "boxer,uhnl,553,0,5,9,53", "boxer,uhnl,553,900,7,11,53", "boxer,uhnl,820,0,5,8,53", "boxer,uhnl,820,900,6,10,53", "boxer,uhnl,1000,0,5,8,53", "boxer,uhnl,1000,900,6,9,53", "boxer,uhnr,0,0,7,11,53", "boxer,uhnr,0,900,7,12,53", "boxer,uhnr,260,0,6,10,53", "boxer,uhnr,260,900,7,12,53", "boxer,uhnr,553,0,5,9,53", "boxer,uhnr,553,900,7,11,53", "boxer,uhnr,820,0,5,8,53", "boxer,uhnr,820,900,6,10,53", "boxer,uhnr,1000,0,5,8,53", "boxer,uhnr,1000,900,6,9,53", "boxer,uhpl,0,0,11,16,74", "boxer,uhpl,0,900,12,16,74", "boxer,uhpl,260,0,10,14,74", "boxer,uhpl,260,900,12,16,74", "boxer,uhpl,553,0,9,12,74", "boxer,uhpl,553,900,11,16,74", "boxer,uhpl,820,0,8,11,74", "boxer,uhpl,820,900,10,14,74", "boxer,uhpl,1000,0,8,11,74", "boxer,uhpl,1000,900,9,13,74", "boxer,uhpr,0,0,11,16,74", "boxer,uhpr,0,900,12,16,74", "boxer,uhpr,260,0,10,14,74", "boxer,uhpr,260,900,12,16,74", "boxer,uhpr,553,0,9,12,74", "boxer,uhpr,553,900,11,16,74", "boxer,uhpr,820,0,8,11,74", "boxer,uhpr,820,900,10,14,74", "boxer,uhpr,1000,0,8,11,74", "boxer,uhpr,1000,900,9,13,74", "boxer,ubnl,0,0,8,11,55", "boxer,ubnl,0,900,9,12,55", "boxer,ubnl,260,0,7,10,55", "boxer,ubnl,260,900,9,12,55", "boxer,ubnl,553,0,6,9,55", "boxer,ubnl,553,900,8,11,55", "boxer,ubnl,820,0,6,8,55", "boxer,ubnl,820,900,7,10,55", "boxer,ubnl,1000,0,6,8,55", "boxer,ubnl,1000,900,7,9,55", "boxer,ubnr,0,0,8,11,55", "boxer,ubnr,0,900,9,12,55", "boxer,ubnr,260,0,7,10,55", "boxer,ubnr,260,900,9,12,55", "boxer,ubnr,553,0,6,9,55", "boxer,ubnr,553,900,8,11,55", "boxer,ubnr,820,0,6,8,55", "boxer,ubnr,820,900,7,10,55", "boxer,ubnr,1000,0,6,8,55", "boxer,ubnr,1000,900,7,9,55", "boxer,ubpl,0,0,13,16,77", "boxer,ubpl,0,900,13,16,77", "boxer,ubpl,260,0,11,14,77", "boxer,ubpl,260,900,13,16,77", "boxer,ubpl,553,0,10,12,77", "boxer,ubpl,553,900,13,16,77", "boxer,ubpl,820,0,9,11,77", "boxer,ubpl,820,900,11,14,77", "boxer,ubpl,1000,0,9,11,77", "boxer,ubpl,1000,900,10,13,77", "boxer,ubpr,0,0,13,16,77", "boxer,ubpr,0,900,13,16,77", "boxer,ubpr,260,0,11,14,77", "boxer,ubpr,260,900,13,16,77", "boxer,ubpr,553,0,10,12,77", "boxer,ubpr,553,900,13,16,77", "boxer,ubpr,820,0,9,11,77", "boxer,ubpr,820,900,11,14,77", "boxer,ubpr,1000,0,9,11,77", "boxer,ubpr,1000,900,10,13,77", "slugger,jhnl,0,0,3,5,28", "slugger,jhnl,0,900,3,6,28", "slugger,jhnl,260,0,2,5,28", "slugger,jhnl,260,900,3,6,28", "slugger,jhnl,553,0,2,4,28", "slugger,jhnl,553,900,3,5,28", "slugger,jhnl,820,0,2,4,28", "slugger,jhnl,820,900,2,5,28", "slugger,jhnl,1000,0,2,4,28", "slugger,jhnl,1000,900,2,4,28", "slugger,jhnr,0,0,4,5,28", "slugger,jhnr,0,900,4,6,28", "slugger,jhnr,260,0,3,5,28", "slugger,jhnr,260,900,4,6,28", "slugger,jhnr,553,0,3,4,28", "slugger,jhnr,553,900,4,5,28", "slugger,jhnr,820,0,3,4,28", "slugger,jhnr,820,900,3,5,28", "slugger,jhnr,1000,0,3,4,28", "slugger,jhnr,1000,900,3,4,28", "slugger,jhpl,0,0,7,10,40", "slugger,jhpl,0,900,8,10,40", "slugger,jhpl,260,0,6,9,40", "slugger,jhpl,260,900,8,10,40", "slugger,jhpl,553,0,5,8,40", "slugger,jhpl,553,900,7,10,40", "slugger,jhpl,820,0,5,7,40", "slugger,jhpl,820,900,6,9,40", "slugger,jhpl,1000,0,5,7,40", "slugger,jhpl,1000,900,6,8,40", "slugger,jhpr,0,0,8,10,40", "slugger,jhpr,0,900,9,10,40", "slugger,jhpr,260,0,7,9,40", "slugger,jhpr,260,900,9,10,40", "slugger,jhpr,553,0,6,8,40", "slugger,jhpr,553,900,8,10,40", "slugger,jhpr,820,0,6,7,40", "slugger,jhpr,820,900,7,9,40", "slugger,jhpr,1000,0,6,7,40", "slugger,jhpr,1000,900,7,8,40", "slugger,jbnl,0,0,4,5,31", "slugger,jbnl,0,900,5,6,31", "slugger,jbnl,260,0,4,5,31", "slugger,jbnl,260,900,5,6,31", "slugger,jbnl,553,0,3,4,31", "slugger,jbnl,553,900,4,5,31", "slugger,jbnl,820,0,3,4,31", "slugger,jbnl,820,900,4,5,31", "slugger,jbnl,1000,0,3,4,31", "slugger,jbnl,1000,900,3,4,31", "slugger,jbnr,0,0,5,5,31", "slugger,jbnr,0,900,6,6,31", "slugger,jbnr,260,0,5,5,31", "slugger,jbnr,260,900,6,6,31", "slugger,jbnr,553,0,4,4,31", "slugger,jbnr,553,900,5,5,31", "slugger,jbnr,820,0,4,4,31", "slugger,jbnr,820,900,5,5,31", "slugger,jbnr,1000,0,4,4,31", "slugger,jbnr,1000,900,4,4,31", "slugger,jbpl,0,0,9,10,42", "slugger,jbpl,0,900,9,10,42", "slugger,jbpl,260,0,8,9,42", "slugger,jbpl,260,900,9,10,42", "slugger,jbpl,553,0,7,8,42", "slugger,jbpl,553,900,9,10,42", "slugger,jbpl,820,0,6,7,42", "slugger,jbpl,820,900,8,9,42", "slugger,jbpl,1000,0,6,7,42", "slugger,jbpl,1000,900,7,8,42", "slugger,jbpr,0,0,10,10,42", "slugger,jbpr,0,900,10,10,42", "slugger,jbpr,260,0,9,9,42", "slugger,jbpr,260,900,10,10,42", "slugger,jbpr,553,0,8,8,42", "slugger,jbpr,553,900,10,10,42", "slugger,jbpr,820,0,7,7,42", "slugger,jbpr,820,900,9,9,42", "slugger,jbpr,1000,0,7,7,42", "slugger,jbpr,1000,900,8,8,42", "slugger,shnl,0,0,5,8,44", "slugger,shnl,0,900,6,9,44", "slugger,shnl,260,0,5,7,44", "slugger,shnl,260,900,6,9,44", "slugger,shnl,553,0,4,6,44", "slugger,shnl,553,900,5,8,44", "slugger,shnl,820,0,4,6,44", "slugger,shnl,820,900,5,7,44", "slugger,shnl,1000,0,4,6,44", "slugger,shnl,1000,900,4,7,44", "slugger,shnr,0,0,5,8,44", "slugger,shnr,0,900,6,9,44", "slugger,shnr,260,0,5,7,44", "slugger,shnr,260,900,6,9,44", "slugger,shnr,553,0,4,6,44", "slugger,shnr,553,900,5,8,44", "slugger,shnr,820,0,4,6,44", "slugger,shnr,820,900,5,7,44", "slugger,shnr,1000,0,4,6,44", "slugger,shnr,1000,900,4,7,44", "slugger,shpl,0,0,10,13,62", "slugger,shpl,0,900,10,13,62", "slugger,shpl,260,0,9,11,62", "slugger,shpl,260,900,10,13,62", "slugger,shpl,553,0,8,10,62", "slugger,shpl,553,900,10,13,62", "slugger,shpl,820,0,7,9,62", "slugger,shpl,820,900,9,11,62", "slugger,shpl,1000,0,7,9,62", "slugger,shpl,1000,900,8,10,62", "slugger,shpr,0,0,10,13,62", "slugger,shpr,0,900,10,13,62", "slugger,shpr,260,0,9,11,62", "slugger,shpr,260,900,10,13,62", "slugger,shpr,553,0,8,10,62", "slugger,shpr,553,900,10,13,62", "slugger,shpr,820,0,7,9,62", "slugger,shpr,820,900,9,11,62", "slugger,shpr,1000,0,7,9,62", "slugger,shpr,1000,900,8,10,62", "slugger,sbnl,0,0,7,8,47", "slugger,sbnl,0,900,7,9,47", "slugger,sbnl,260,0,6,7,47", "slugger,sbnl,260,900,7,9,47", "slugger,sbnl,553,0,5,6,47", "slugger,sbnl,553,900,7,8,47", "slugger,sbnl,820,0,5,6,47", "slugger,sbnl,820,900,6,7,47", "slugger,sbnl,1000,0,5,6,47", "slugger,sbnl,1000,900,6,7,47", "slugger,sbnr,0,0,7,8,47", "slugger,sbnr,0,900,7,9,47", "slugger,sbnr,260,0,6,7,47", "slugger,sbnr,260,900,7,9,47", "slugger,sbnr,553,0,5,6,47", "slugger,sbnr,553,900,7,8,47", "slugger,sbnr,820,0,5,6,47", "slugger,sbnr,820,900,6,7,47", "slugger,sbnr,1000,0,5,6,47", "slugger,sbnr,1000,900,6,7,47", "slugger,sbpl,0,0,11,13,65", "slugger,sbpl,0,900,12,13,65", "slugger,sbpl,260,0,10,11,65", "slugger,sbpl,260,900,12,13,65", "slugger,sbpl,553,0,9,10,65", "slugger,sbpl,553,900,11,13,65", "slugger,sbpl,820,0,8,9,65", "slugger,sbpl,820,900,10,11,65", "slugger,sbpl,1000,0,8,9,65", "slugger,sbpl,1000,900,9,10,65", "slugger,sbpr,0,0,11,13,65", "slugger,sbpr,0,900,12,13,65", "slugger,sbpr,260,0,10,11,65", "slugger,sbpr,260,900,12,13,65", "slugger,sbpr,553,0,9,10,65", "slugger,sbpr,553,900,11,13,65", "slugger,sbpr,820,0,8,9,65", "slugger,sbpr,820,900,10,11,65", "slugger,sbpr,1000,0,8,9,65", "slugger,sbpr,1000,900,9,10,65", "slugger,hhnl,0,0,7,11,54", "slugger,hhnl,0,900,7,11,54", "slugger,hhnl,260,0,6,10,54", "slugger,hhnl,260,900,7,11,54", "slugger,hhnl,553,0,5,9,54", "slugger,hhnl,553,900,7,11,54", "slugger,hhnl,820,0,5,8,54", "slugger,hhnl,820,900,6,10,54", "slugger,hhnl,1000,0,5,8,54", "slugger,hhnl,1000,900,6,9,54", "slugger,hhnr,0,0,7,11,54", "slugger,hhnr,0,900,7,11,54", "slugger,hhnr,260,0,6,10,54", "slugger,hhnr,260,900,7,11,54", "slugger,hhnr,553,0,5,9,54", "slugger,hhnr,553,900,7,11,54", "slugger,hhnr,820,0,5,8,54", "slugger,hhnr,820,900,6,10,54", "slugger,hhnr,1000,0,5,8,54", "slugger,hhnr,1000,900,6,9,54", "slugger,hhpl,0,0,11,15,74", "slugger,hhpl,0,900,12,16,74", "slugger,hhpl,260,0,10,14,74", "slugger,hhpl,260,900,12,16,74", "slugger,hhpl,553,0,9,12,74", "slugger,hhpl,553,900,11,15,74", "slugger,hhpl,820,0,8,11,74", "slugger,hhpl,820,900,10,14,74", "slugger,hhpl,1000,0,8,11,74", "slugger,hhpl,1000,900,9,13,74", "slugger,hhpr,0,0,11,15,74", "slugger,hhpr,0,900,12,16,74", "slugger,hhpr,260,0,10,14,74", "slugger,hhpr,260,900,12,16,74", "slugger,hhpr,553,0,9,12,74", "slugger,hhpr,553,900,11,15,74", "slugger,hhpr,820,0,8,11,74", "slugger,hhpr,820,900,10,14,74", "slugger,hhpr,1000,0,8,11,74", "slugger,hhpr,1000,900,9,13,74", "slugger,hbnl,0,0,8,11,56", "slugger,hbnl,0,900,9,11,56", "slugger,hbnl,260,0,7,10,56", "slugger,hbnl,260,900,9,11,56", "slugger,hbnl,553,0,6,9,56", "slugger,hbnl,553,900,8,11,56", "slugger,hbnl,820,0,6,8,56", "slugger,hbnl,820,900,7,10,56", "slugger,hbnl,1000,0,6,8,56", "slugger,hbnl,1000,900,7,9,56", "slugger,hbnr,0,0,8,11,56", "slugger,hbnr,0,900,9,11,56", "slugger,hbnr,260,0,7,10,56", "slugger,hbnr,260,900,9,11,56", "slugger,hbnr,553,0,6,9,56", "slugger,hbnr,553,900,8,11,56", "slugger,hbnr,820,0,6,8,56", "slugger,hbnr,820,900,7,10,56", "slugger,hbnr,1000,0,6,8,56", "slugger,hbnr,1000,900,7,9,56", "slugger,hbpl,0,0,13,15,78", "slugger,hbpl,0,900,13,16,78", "slugger,hbpl,260,0,11,14,78", "slugger,hbpl,260,900,13,16,78", "slugger,hbpl,553,0,10,12,78", "slugger,hbpl,553,900,13,15,78", "slugger,hbpl,820,0,9,11,78", "slugger,hbpl,820,900,11,14,78", "slugger,hbpl,1000,0,9,11,78", "slugger,hbpl,1000,900,10,13,78", "slugger,hbpr,0,0,13,15,78", "slugger,hbpr,0,900,13,16,78", "slugger,hbpr,260,0,11,14,78", "slugger,hbpr,260,900,13,16,78", "slugger,hbpr,553,0,10,12,78", "slugger,hbpr,553,900,13,15,78", "slugger,hbpr,820,0,9,11,78", "slugger,hbpr,820,900,11,14,78", "slugger,hbpr,1000,0,9,11,78", "slugger,hbpr,1000,900,10,13,78", "slugger,uhnl,0,0,7,12,60", "slugger,uhnl,0,900,7,13,60", "slugger,uhnl,260,0,6,11,60", "slugger,uhnl,260,900,7,13,60", "slugger,uhnl,553,0,5,10,60", "slugger,uhnl,553,900,7,12,60", "slugger,uhnl,820,0,5,9,60", "slugger,uhnl,820,900,6,11,60", "slugger,uhnl,1000,0,5,9,60", "slugger,uhnl,1000,900,6,10,60", "slugger,uhnr,0,0,7,12,60", "slugger,uhnr,0,900,7,13,60", "slugger,uhnr,260,0,6,11,60", "slugger,uhnr,260,900,7,13,60", "slugger,uhnr,553,0,5,10,60", "slugger,uhnr,553,900,7,12,60", "slugger,uhnr,820,0,5,9,60", "slugger,uhnr,820,900,6,11,60", "slugger,uhnr,1000,0,5,9,60", "slugger,uhnr,1000,900,6,10,60", "slugger,uhpl,0,0,11,17,85", "slugger,uhpl,0,900,12,17,85", "slugger,uhpl,260,0,10,15,85", "slugger,uhpl,260,900,12,17,85", "slugger,uhpl,553,0,9,13,85", "slugger,uhpl,553,900,11,17,85", "slugger,uhpl,820,0,8,12,85", "slugger,uhpl,820,900,10,15,85", "slugger,uhpl,1000,0,8,12,85", "slugger,uhpl,1000,900,9,14,85", "slugger,uhpr,0,0,11,17,85", "slugger,uhpr,0,900,12,17,85", "slugger,uhpr,260,0,10,15,85", "slugger,uhpr,260,900,12,17,85", "slugger,uhpr,553,0,9,13,85", "slugger,uhpr,553,900,11,17,85", "slugger,uhpr,820,0,8,12,85", "slugger,uhpr,820,900,10,15,85", "slugger,uhpr,1000,0,8,12,85", "slugger,uhpr,1000,900,9,14,85", "slugger,ubnl,0,0,8,12,63", "slugger,ubnl,0,900,9,13,63", "slugger,ubnl,260,0,7,11,63", "slugger,ubnl,260,900,9,13,63", "slugger,ubnl,553,0,7,10,63", "slugger,ubnl,553,900,8,12,63", "slugger,ubnl,820,0,6,9,63", "slugger,ubnl,820,900,7,11,63", "slugger,ubnl,1000,0,6,9,63", "slugger,ubnl,1000,900,7,10,63", "slugger,ubnr,0,0,8,12,63", "slugger,ubnr,0,900,9,13,63", "slugger,ubnr,260,0,7,11,63", "slugger,ubnr,260,900,9,13,63", "slugger,ubnr,553,0,7,10,63", "slugger,ubnr,553,900,8,12,63", "slugger,ubnr,820,0,6,9,63", "slugger,ubnr,820,900,7,11,63", "slugger,ubnr,1000,0,6,9,63", "slugger,ubnr,1000,900,7,10,63", "slugger,ubpl,0,0,13,17,88", "slugger,ubpl,0,900,13,17,88", "slugger,ubpl,260,0,11,15,88", "slugger,ubpl,260,900,13,17,88", "slugger,ubpl,553,0,10,13,88", "slugger,ubpl,553,900,13,17,88", "slugger,ubpl,820,0,9,12,88", "slugger,ubpl,820,900,11,15,88", "slugger,ubpl,1000,0,9,12,88", "slugger,ubpl,1000,900,10,14,88", "slugger,ubpr,0,0,13,17,88", "slugger,ubpr,0,900,13,17,88", "slugger,ubpr,260,0,11,15,88", "slugger,ubpr,260,900,13,17,88", "slugger,ubpr,553,0,10,13,88", "slugger,ubpr,553,900,13,17,88", "slugger,ubpr,820,0,9,12,88", "slugger,ubpr,820,900,11,15,88", "slugger,ubpr,1000,0,9,12,88", "slugger,ubpr,1000,900,10,14,88", "swarmer,jhnl,0,0,3,5,25", "swarmer,jhnl,0,900,3,6,25", "swarmer,jhnl,260,0,2,5,25", "swarmer,jhnl,260,900,3,6,25", "swarmer,jhnl,553,0,2,4,25", "swarmer,jhnl,553,900,3,5,25", "swarmer,jhnl,820,0,2,4,25", "swarmer,jhnl,820,900,2,5,25", "swarmer,jhnl,1000,0,2,4,25", "swarmer,jhnl,1000,900,2,4,25", "swarmer,jhnr,0,0,4,5,25", "swarmer,jhnr,0,900,4,6,25", "swarmer,jhnr,260,0,3,5,25", "swarmer,jhnr,260,900,4,6,25", "swarmer,jhnr,553,0,3,4,25", "swarmer,jhnr,553,900,4,5,25", "swarmer,jhnr,820,0,3,4,25", "swarmer,jhnr,820,900,3,5,25", "swarmer,jhnr,1000,0,3,4,25", "swarmer,jhnr,1000,900,3,4,25", "swarmer,jhpl,0,0,7,10,35", "swarmer,jhpl,0,900,8,10,35", "swarmer,jhpl,260,0,6,9,35", "swarmer,jhpl,260,900,8,10,35", "swarmer,jhpl,553,0,5,8,35", "swarmer,jhpl,553,900,7,10,35", "swarmer,jhpl,820,0,5,7,35", "swarmer,jhpl,820,900,6,9,35", "swarmer,jhpl,1000,0,5,7,35", "swarmer,jhpl,1000,900,6,8,35", "swarmer,jhpr,0,0,8,10,35", "swarmer,jhpr,0,900,9,10,35", "swarmer,jhpr,260,0,7,9,35", "swarmer,jhpr,260,900,9,10,35", "swarmer,jhpr,553,0,6,8,35", "swarmer,jhpr,553,900,8,10,35", "swarmer,jhpr,820,0,6,7,35", "swarmer,jhpr,820,900,7,9,35", "swarmer,jhpr,1000,0,6,7,35", "swarmer,jhpr,1000,900,7,8,35", "swarmer,jbnl,0,0,4,5,27", "swarmer,jbnl,0,900,5,6,27", "swarmer,jbnl,260,0,4,5,27", "swarmer,jbnl,260,900,5,6,27", "swarmer,jbnl,553,0,3,4,27", "swarmer,jbnl,553,900,4,5,27", "swarmer,jbnl,820,0,3,4,27", "swarmer,jbnl,820,900,4,5,27", "swarmer,jbnl,1000,0,3,4,27", "swarmer,jbnl,1000,900,3,4,27", "swarmer,jbnr,0,0,5,5,27", "swarmer,jbnr,0,900,6,6,27", "swarmer,jbnr,260,0,5,5,27", "swarmer,jbnr,260,900,6,6,27", "swarmer,jbnr,553,0,4,4,27", "swarmer,jbnr,553,900,5,5,27", "swarmer,jbnr,820,0,4,4,27", "swarmer,jbnr,820,900,5,5,27", "swarmer,jbnr,1000,0,4,4,27", "swarmer,jbnr,1000,900,4,4,27", "swarmer,jbpl,0,0,9,10,37", "swarmer,jbpl,0,900,9,10,37", "swarmer,jbpl,260,0,8,9,37", "swarmer,jbpl,260,900,9,10,37", "swarmer,jbpl,553,0,7,8,37", "swarmer,jbpl,553,900,9,10,37", "swarmer,jbpl,820,0,6,7,37", "swarmer,jbpl,820,900,8,9,37", "swarmer,jbpl,1000,0,6,7,37", "swarmer,jbpl,1000,900,7,8,37", "swarmer,jbpr,0,0,10,10,37", "swarmer,jbpr,0,900,10,10,37", "swarmer,jbpr,260,0,9,9,37", "swarmer,jbpr,260,900,10,10,37", "swarmer,jbpr,553,0,8,8,37", "swarmer,jbpr,553,900,10,10,37", "swarmer,jbpr,820,0,7,7,37", "swarmer,jbpr,820,900,9,9,37", "swarmer,jbpr,1000,0,7,7,37", "swarmer,jbpr,1000,900,8,8,37", "swarmer,shnl,0,0,5,8,39", "swarmer,shnl,0,900,6,9,39", "swarmer,shnl,260,0,5,7,39", "swarmer,shnl,260,900,6,9,39", "swarmer,shnl,553,0,4,6,39", "swarmer,shnl,553,900,5,8,39", "swarmer,shnl,820,0,4,6,39", "swarmer,shnl,820,900,5,7,39", "swarmer,shnl,1000,0,4,6,39", "swarmer,shnl,1000,900,4,7,39", "swarmer,shnr,0,0,5,8,39", "swarmer,shnr,0,900,6,9,39", "swarmer,shnr,260,0,5,7,39", "swarmer,shnr,260,900,6,9,39", "swarmer,shnr,553,0,4,6,39", "swarmer,shnr,553,900,5,8,39", "swarmer,shnr,820,0,4,6,39", "swarmer,shnr,820,900,5,7,39", "swarmer,shnr,1000,0,4,6,39", "swarmer,shnr,1000,900,4,7,39", "swarmer,shpl,0,0,10,13,54", "swarmer,shpl,0,900,10,13,54", "swarmer,shpl,260,0,9,11,54", "swarmer,shpl,260,900,10,13,54", "swarmer,shpl,553,0,8,10,54", "swarmer,shpl,553,900,10,13,54", "swarmer,shpl,820,0,7,9,54", "swarmer,shpl,820,900,9,11,54", "swarmer,shpl,1000,0,7,9,54", "swarmer,shpl,1000,900,8,10,54", "swarmer,shpr,0,0,10,13,54", "swarmer,shpr,0,900,10,13,54", "swarmer,shpr,260,0,9,11,54", "swarmer,shpr,260,900,10,13,54", "swarmer,shpr,553,0,8,10,54", "swarmer,shpr,553,900,10,13,54", "swarmer,shpr,820,0,7,9,54", "swarmer,shpr,820,900,9,11,54", "swarmer,shpr,1000,0,7,9,54", "swarmer,shpr,1000,900,8,10,54", "swarmer,sbnl,0,0,7,8,41", "swarmer,sbnl,0,900,7,9,41", "swarmer,sbnl,260,0,6,7,41", "swarmer,sbnl,260,900,7,9,41", "swarmer,sbnl,553,0,5,6,41", "swarmer,sbnl,553,900,7,8,41", "swarmer,sbnl,820,0,5,6,41", "swarmer,sbnl,820,900,6,7,41", "swarmer,sbnl,1000,0,5,6,41", "swarmer,sbnl,1000,900,6,7,41", "swarmer,sbnr,0,0,7,8,41", "swarmer,sbnr,0,900,7,9,41", "swarmer,sbnr,260,0,6,7,41", "swarmer,sbnr,260,900,7,9,41", "swarmer,sbnr,553,0,5,6,41", "swarmer,sbnr,553,900,7,8,41", "swarmer,sbnr,820,0,5,6,41", "swarmer,sbnr,820,900,6,7,41", "swarmer,sbnr,1000,0,5,6,41", "swarmer,sbnr,1000,900,6,7,41", "swarmer,sbpl,0,0,11,13,57", "swarmer,sbpl,0,900,12,13,57", "swarmer,sbpl,260,0,10,11,57", "swarmer,sbpl,260,900,12,13,57", "swarmer,sbpl,553,0,9,10,57", "swarmer,sbpl,553,900,11,13,57", "swarmer,sbpl,820,0,8,9,57", "swarmer,sbpl,820,900,10,11,57", "swarmer,sbpl,1000,0,8,9,57", "swarmer,sbpl,1000,900,9,10,57", "swarmer,sbpr,0,0,11,13,57", "swarmer,sbpr,0,900,12,13,57", "swarmer,sbpr,260,0,10,11,57", "swarmer,sbpr,260,900,12,13,57", "swarmer,sbpr,553,0,9,10,57", "swarmer,sbpr,553,900,11,13,57", "swarmer,sbpr,820,0,8,9,57", "swarmer,sbpr,820,900,10,11,57", "swarmer,sbpr,1000,0,8,9,57", "swarmer,sbpr,1000,900,9,10,57", "swarmer,hhnl,0,0,6,10,47", "swarmer,hhnl,0,900,6,10,47", "swarmer,hhnl,260,0,5,9,47", "swarmer,hhnl,260,900,6,10,47", "swarmer,hhnl,553,0,4,8,47", "swarmer,hhnl,553,900,6,10,47", "swarmer,hhnl,820,0,4,7,47", "swarmer,hhnl,820,900,5,9,47", "swarmer,hhnl,1000,0,4,7,47", "swarmer,hhnl,1000,900,5,8,47", "swarmer,hhnr,0,0,6,10,47", "swarmer,hhnr,0,900,6,10,47", "swarmer,hhnr,260,0,5,9,47", "swarmer,hhnr,260,900,6,10,47", "swarmer,hhnr,553,0,4,8,47", "swarmer,hhnr,553,900,6,10,47", "swarmer,hhnr,820,0,4,7,47", "swarmer,hhnr,820,900,5,9,47", "swarmer,hhnr,1000,0,4,7,47", "swarmer,hhnr,1000,900,5,8,47", "swarmer,hhpl,0,0,10,14,65", "swarmer,hhpl,0,900,11,15,65", "swarmer,hhpl,260,0,9,13,65", "swarmer,hhpl,260,900,11,15,65", "swarmer,hhpl,553,0,8,11,65", "swarmer,hhpl,553,900,10,14,65", "swarmer,hhpl,820,0,7,10,65", "swarmer,hhpl,820,900,9,13,65", "swarmer,hhpl,1000,0,7,10,65", "swarmer,hhpl,1000,900,8,12,65", "swarmer,hhpr,0,0,10,14,65", "swarmer,hhpr,0,900,11,15,65", "swarmer,hhpr,260,0,9,13,65", "swarmer,hhpr,260,900,11,15,65", "swarmer,hhpr,553,0,8,11,65", "swarmer,hhpr,553,900,10,14,65", "swarmer,hhpr,820,0,7,10,65", "swarmer,hhpr,820,900,9,13,65", "swarmer,hhpr,1000,0,7,10,65", "swarmer,hhpr,1000,900,8,12,65", "swarmer,hbnl,0,0,7,10,49", "swarmer,hbnl,0,900,8,10,49", "swarmer,hbnl,260,0,6,9,49", "swarmer,hbnl,260,900,8,10,49", "swarmer,hbnl,553,0,5,8,49", "swarmer,hbnl,553,900,7,10,49", "swarmer,hbnl,820,0,5,7,49", "swarmer,hbnl,820,900,6,9,49", "swarmer,hbnl,1000,0,5,7,49", "swarmer,hbnl,1000,900,6,8,49", "swarmer,hbnr,0,0,7,10,49", "swarmer,hbnr,0,900,8,10,49", "swarmer,hbnr,260,0,6,9,49", "swarmer,hbnr,260,900,8,10,49", "swarmer,hbnr,553,0,5,8,49", "swarmer,hbnr,553,900,7,10,49", "swarmer,hbnr,820,0,5,7,49", "swarmer,hbnr,820,900,6,9,49", "swarmer,hbnr,1000,0,5,7,49", "swarmer,hbnr,1000,900,6,8,49", "swarmer,hbpl,0,0,12,14,68", "swarmer,hbpl,0,900,12,15,68", "swarmer,hbpl,260,0,10,13,68", "swarmer,hbpl,260,900,12,15,68", "swarmer,hbpl,553,0,9,11,68", "swarmer,hbpl,553,900,12,14,68", "swarmer,hbpl,820,0,8,10,68", "swarmer,hbpl,820,900,10,13,68", "swarmer,hbpl,1000,0,8,10,68", "swarmer,hbpl,1000,900,9,12,68", "swarmer,hbpr,0,0,12,14,68", "swarmer,hbpr,0,900,12,15,68", "swarmer,hbpr,260,0,10,13,68", "swarmer,hbpr,260,900,12,15,68", "swarmer,hbpr,553,0,9,11,68", "swarmer,hbpr,553,900,12,14,68", "swarmer,hbpr,820,0,8,10,68", "swarmer,hbpr,820,900,10,13,68", "swarmer,hbpr,1000,0,8,10,68", "swarmer,hbpr,1000,900,9,12,68", "swarmer,uhnl,0,0,6,11,53", "swarmer,uhnl,0,900,6,12,53", "swarmer,uhnl,260,0,5,10,53", "swarmer,uhnl,260,900,6,12,53", "swarmer,uhnl,553,0,4,9,53", "swarmer,uhnl,553,900,6,11,53", "swarmer,uhnl,820,0,4,8,53", "swarmer,uhnl,820,900,5,10,53", "swarmer,uhnl,1000,0,4,8,53", "swarmer,uhnl,1000,900,5,9,53", "swarmer,uhnr,0,0,6,11,53", "swarmer,uhnr,0,900,6,12,53", "swarmer,uhnr,260,0,5,10,53", "swarmer,uhnr,260,900,6,12,53", "swarmer,uhnr,553,0,4,9,53", "swarmer,uhnr,553,900,6,11,53", "swarmer,uhnr,820,0,4,8,53", "swarmer,uhnr,820,900,5,10,53", "swarmer,uhnr,1000,0,4,8,53", "swarmer,uhnr,1000,900,5,9,53", "swarmer,uhpl,0,0,10,16,74", "swarmer,uhpl,0,900,11,16,74", "swarmer,uhpl,260,0,9,14,74", "swarmer,uhpl,260,900,11,16,74", "swarmer,uhpl,553,0,8,12,74", "swarmer,uhpl,553,900,10,16,74", "swarmer,uhpl,820,0,7,11,74", "swarmer,uhpl,820,900,9,14,74", "swarmer,uhpl,1000,0,7,11,74", "swarmer,uhpl,1000,900,8,13,74", "swarmer,uhpr,0,0,10,16,74", "swarmer,uhpr,0,900,11,16,74", "swarmer,uhpr,260,0,9,14,74", "swarmer,uhpr,260,900,11,16,74", "swarmer,uhpr,553,0,8,12,74", "swarmer,uhpr,553,900,10,16,74", "swarmer,uhpr,820,0,7,11,74", "swarmer,uhpr,820,900,9,14,74", "swarmer,uhpr,1000,0,7,11,74", "swarmer,uhpr,1000,900,8,13,74", "swarmer,ubnl,0,0,7,11,55", "swarmer,ubnl,0,900,8,12,55", "swarmer,ubnl,260,0,6,10,55", "swarmer,ubnl,260,900,8,12,55", "swarmer,ubnl,553,0,5,9,55", "swarmer,ubnl,553,900,7,11,55", "swarmer,ubnl,820,0,5,8,55", "swarmer,ubnl,820,900,6,10,55", "swarmer,ubnl,1000,0,5,8,55", "swarmer,ubnl,1000,900,6,9,55", "swarmer,ubnr,0,0,7,11,55", "swarmer,ubnr,0,900,8,12,55", "swarmer,ubnr,260,0,6,10,55", "swarmer,ubnr,260,900,8,12,55", "swarmer,ubnr,553,0,5,9,55", "swarmer,ubnr,553,900,7,11,55", "swarmer,ubnr,820,0,5,8,55", "swarmer,ubnr,820,900,6,10,55", "swarmer,ubnr,1000,0,5,8,55", "swarmer,ubnr,1000,900,6,9,55", "swarmer,ubpl,0,0,12,16,77", "swarmer,ubpl,0,900,12,16,77", "swarmer,ubpl,260,0,10,14,77", "swarmer,ubpl,260,900,12,16,77", "swarmer,ubpl,553,0,9,12,77", "swarmer,ubpl,553,900,12,16,77", "swarmer,ubpl,820,0,8,11,77", "swarmer,ubpl,820,900,10,14,77", "swarmer,ubpl,1000,0,8,11,77", "swarmer,ubpl,1000,900,9,13,77", "swarmer,ubpr,0,0,12,16,77", "swarmer,ubpr,0,900,12,16,77", "swarmer,ubpr,260,0,10,14,77", "swarmer,ubpr,260,900,12,16,77", "swarmer,ubpr,553,0,9,12,77", "swarmer,ubpr,553,900,12,16,77", "swarmer,ubpr,820,0,8,11,77", "swarmer,ubpr,820,900,10,14,77", "swarmer,ubpr,1000,0,8,11,77", "swarmer,ubpr,1000,900,9,13,77", "counter_puncher,jhnl,0,0,3,5,25", "counter_puncher,jhnl,0,900,3,6,25", "counter_puncher,jhnl,260,0,2,5,25", "counter_puncher,jhnl,260,900,3,6,25", "counter_puncher,jhnl,553,0,2,4,25", "counter_puncher,jhnl,553,900,3,5,25", "counter_puncher,jhnl,820,0,2,4,25", "counter_puncher,jhnl,820,900,2,5,25", "counter_puncher,jhnl,1000,0,2,4,25", "counter_puncher,jhnl,1000,900,2,4,25", "counter_puncher,jhnr,0,0,4,5,25", "counter_puncher,jhnr,0,900,4,6,25", "counter_puncher,jhnr,260,0,3,5,25", "counter_puncher,jhnr,260,900,4,6,25", "counter_puncher,jhnr,553,0,3,4,25", "counter_puncher,jhnr,553,900,4,5,25", "counter_puncher,jhnr,820,0,3,4,25", "counter_puncher,jhnr,820,900,3,5,25", "counter_puncher,jhnr,1000,0,3,4,25", "counter_puncher,jhnr,1000,900,3,4,25", "counter_puncher,jhpl,0,0,7,10,35", "counter_puncher,jhpl,0,900,8,10,35", "counter_puncher,jhpl,260,0,6,9,35", "counter_puncher,jhpl,260,900,8,10,35", "counter_puncher,jhpl,553,0,5,8,35", "counter_puncher,jhpl,553,900,7,10,35", "counter_puncher,jhpl,820,0,5,7,35", "counter_puncher,jhpl,820,900,6,9,35", "counter_puncher,jhpl,1000,0,5,7,35", "counter_puncher,jhpl,1000,900,6,8,35", "counter_puncher,jhpr,0,0,8,10,35", "counter_puncher,jhpr,0,900,9,10,35", "counter_puncher,jhpr,260,0,7,9,35", "counter_puncher,jhpr,260,900,9,10,35", "counter_puncher,jhpr,553,0,6,8,35", "counter_puncher,jhpr,553,900,8,10,35", "counter_puncher,jhpr,820,0,6,7,35", "counter_puncher,jhpr,820,900,7,9,35", "counter_puncher,jhpr,1000,0,6,7,35", "counter_puncher,jhpr,1000,900,7,8,35", "counter_puncher,jbnl,0,0,4,5,27", "counter_puncher,jbnl,0,900,5,6,27", "counter_puncher,jbnl,260,0,4,5,27", "counter_puncher,jbnl,260,900,5,6,27", "counter_puncher,jbnl,553,0,3,4,27", "counter_puncher,jbnl,553,900,4,5,27", "counter_puncher,jbnl,820,0,3,4,27", "counter_puncher,jbnl,820,900,4,5,27", "counter_puncher,jbnl,1000,0,3,4,27", "counter_puncher,jbnl,1000,900,3,4,27", "counter_puncher,jbnr,0,0,5,5,27", "counter_puncher,jbnr,0,900,6,6,27", "counter_puncher,jbnr,260,0,5,5,27", "counter_puncher,jbnr,260,900,6,6,27", "counter_puncher,jbnr,553,0,4,4,27", "counter_puncher,jbnr,553,900,5,5,27", "counter_puncher,jbnr,820,0,4,4,27", "counter_puncher,jbnr,820,900,5,5,27", "counter_puncher,jbnr,1000,0,4,4,27", "counter_puncher,jbnr,1000,900,4,4,27", "counter_puncher,jbpl,0,0,9,10,37", "counter_puncher,jbpl,0,900,9,10,37", "counter_puncher,jbpl,260,0,8,9,37", "counter_puncher,jbpl,260,900,9,10,37", "counter_puncher,jbpl,553,0,7,8,37", "counter_puncher,jbpl,553,900,9,10,37", "counter_puncher,jbpl,820,0,6,7,37", "counter_puncher,jbpl,820,900,8,9,37", "counter_puncher,jbpl,1000,0,6,7,37", "counter_puncher,jbpl,1000,900,7,8,37", "counter_puncher,jbpr,0,0,10,10,37", "counter_puncher,jbpr,0,900,10,10,37", "counter_puncher,jbpr,260,0,9,9,37", "counter_puncher,jbpr,260,900,10,10,37", "counter_puncher,jbpr,553,0,8,8,37", "counter_puncher,jbpr,553,900,10,10,37", "counter_puncher,jbpr,820,0,7,7,37", "counter_puncher,jbpr,820,900,9,9,37", "counter_puncher,jbpr,1000,0,7,7,37", "counter_puncher,jbpr,1000,900,8,8,37", "counter_puncher,shnl,0,0,5,8,39", "counter_puncher,shnl,0,900,6,9,39", "counter_puncher,shnl,260,0,5,7,39", "counter_puncher,shnl,260,900,6,9,39", "counter_puncher,shnl,553,0,4,6,39", "counter_puncher,shnl,553,900,5,8,39", "counter_puncher,shnl,820,0,4,6,39", "counter_puncher,shnl,820,900,5,7,39", "counter_puncher,shnl,1000,0,4,6,39", "counter_puncher,shnl,1000,900,4,7,39", "counter_puncher,shnr,0,0,5,8,39", "counter_puncher,shnr,0,900,6,9,39", "counter_puncher,shnr,260,0,5,7,39", "counter_puncher,shnr,260,900,6,9,39", "counter_puncher,shnr,553,0,4,6,39", "counter_puncher,shnr,553,900,5,8,39", "counter_puncher,shnr,820,0,4,6,39", "counter_puncher,shnr,820,900,5,7,39", "counter_puncher,shnr,1000,0,4,6,39", "counter_puncher,shnr,1000,900,4,7,39", "counter_puncher,shpl,0,0,10,13,54", "counter_puncher,shpl,0,900,10,13,54", "counter_puncher,shpl,260,0,9,11,54", "counter_puncher,shpl,260,900,10,13,54", "counter_puncher,shpl,553,0,8,10,54", "counter_puncher,shpl,553,900,10,13,54", "counter_puncher,shpl,820,0,7,9,54", "counter_puncher,shpl,820,900,9,11,54", "counter_puncher,shpl,1000,0,7,9,54", "counter_puncher,shpl,1000,900,8,10,54", "counter_puncher,shpr,0,0,10,13,54", "counter_puncher,shpr,0,900,10,13,54", "counter_puncher,shpr,260,0,9,11,54", "counter_puncher,shpr,260,900,10,13,54", "counter_puncher,shpr,553,0,8,10,54", "counter_puncher,shpr,553,900,10,13,54", "counter_puncher,shpr,820,0,7,9,54", "counter_puncher,shpr,820,900,9,11,54", "counter_puncher,shpr,1000,0,7,9,54", "counter_puncher,shpr,1000,900,8,10,54", "counter_puncher,sbnl,0,0,7,8,41", "counter_puncher,sbnl,0,900,7,9,41", "counter_puncher,sbnl,260,0,6,7,41", "counter_puncher,sbnl,260,900,7,9,41", "counter_puncher,sbnl,553,0,5,6,41", "counter_puncher,sbnl,553,900,7,8,41", "counter_puncher,sbnl,820,0,5,6,41", "counter_puncher,sbnl,820,900,6,7,41", "counter_puncher,sbnl,1000,0,5,6,41", "counter_puncher,sbnl,1000,900,6,7,41", "counter_puncher,sbnr,0,0,7,8,41", "counter_puncher,sbnr,0,900,7,9,41", "counter_puncher,sbnr,260,0,6,7,41", "counter_puncher,sbnr,260,900,7,9,41", "counter_puncher,sbnr,553,0,5,6,41", "counter_puncher,sbnr,553,900,7,8,41", "counter_puncher,sbnr,820,0,5,6,41", "counter_puncher,sbnr,820,900,6,7,41", "counter_puncher,sbnr,1000,0,5,6,41", "counter_puncher,sbnr,1000,900,6,7,41", "counter_puncher,sbpl,0,0,11,13,57", "counter_puncher,sbpl,0,900,12,13,57", "counter_puncher,sbpl,260,0,10,11,57", "counter_puncher,sbpl,260,900,12,13,57", "counter_puncher,sbpl,553,0,9,10,57", "counter_puncher,sbpl,553,900,11,13,57", "counter_puncher,sbpl,820,0,8,9,57", "counter_puncher,sbpl,820,900,10,11,57", "counter_puncher,sbpl,1000,0,8,9,57", "counter_puncher,sbpl,1000,900,9,10,57", "counter_puncher,sbpr,0,0,11,13,57", "counter_puncher,sbpr,0,900,12,13,57", "counter_puncher,sbpr,260,0,10,11,57", "counter_puncher,sbpr,260,900,12,13,57", "counter_puncher,sbpr,553,0,9,10,57", "counter_puncher,sbpr,553,900,11,13,57", "counter_puncher,sbpr,820,0,8,9,57", "counter_puncher,sbpr,820,900,10,11,57", "counter_puncher,sbpr,1000,0,8,9,57", "counter_puncher,sbpr,1000,900,9,10,57", "counter_puncher,hhnl,0,0,7,10,47", "counter_puncher,hhnl,0,900,7,10,47", "counter_puncher,hhnl,260,0,6,9,47", "counter_puncher,hhnl,260,900,7,10,47", "counter_puncher,hhnl,553,0,5,8,47", "counter_puncher,hhnl,553,900,7,10,47", "counter_puncher,hhnl,820,0,5,7,47", "counter_puncher,hhnl,820,900,6,9,47", "counter_puncher,hhnl,1000,0,5,7,47", "counter_puncher,hhnl,1000,900,6,8,47", "counter_puncher,hhnr,0,0,7,10,47", "counter_puncher,hhnr,0,900,7,10,47", "counter_puncher,hhnr,260,0,6,9,47", "counter_puncher,hhnr,260,900,7,10,47", "counter_puncher,hhnr,553,0,5,8,47", "counter_puncher,hhnr,553,900,7,10,47", "counter_puncher,hhnr,820,0,5,7,47", "counter_puncher,hhnr,820,900,6,9,47", "counter_puncher,hhnr,1000,0,5,7,47", "counter_puncher,hhnr,1000,900,6,8,47", "counter_puncher,hhpl,0,0,11,14,65", "counter_puncher,hhpl,0,900,12,15,65", "counter_puncher,hhpl,260,0,10,13,65", "counter_puncher,hhpl,260,900,12,15,65", "counter_puncher,hhpl,553,0,9,11,65", "counter_puncher,hhpl,553,900,11,14,65", "counter_puncher,hhpl,820,0,8,10,65", "counter_puncher,hhpl,820,900,10,13,65", "counter_puncher,hhpl,1000,0,8,10,65", "counter_puncher,hhpl,1000,900,9,12,65", "counter_puncher,hhpr,0,0,11,14,65", "counter_puncher,hhpr,0,900,12,15,65", "counter_puncher,hhpr,260,0,10,13,65", "counter_puncher,hhpr,260,900,12,15,65", "counter_puncher,hhpr,553,0,9,11,65", "counter_puncher,hhpr,553,900,11,14,65", "counter_puncher,hhpr,820,0,8,10,65", "counter_puncher,hhpr,820,900,10,13,65", "counter_puncher,hhpr,1000,0,8,10,65", "counter_puncher,hhpr,1000,900,9,12,65", "counter_puncher,hbnl,0,0,8,10,49", "counter_puncher,hbnl,0,900,9,10,49", "counter_puncher,hbnl,260,0,7,9,49", "counter_puncher,hbnl,260,900,9,10,49", "counter_puncher,hbnl,553,0,6,8,49", "counter_puncher,hbnl,553,900,8,10,49", "counter_puncher,hbnl,820,0,6,7,49", "counter_puncher,hbnl,820,900,7,9,49", "counter_puncher,hbnl,1000,0,6,7,49", "counter_puncher,hbnl,1000,900,7,8,49", "counter_puncher,hbnr,0,0,8,10,49", "counter_puncher,hbnr,0,900,9,10,49", "counter_puncher,hbnr,260,0,7,9,49", "counter_puncher,hbnr,260,900,9,10,49", "counter_puncher,hbnr,553,0,6,8,49", "counter_puncher,hbnr,553,900,8,10,49", "counter_puncher,hbnr,820,0,6,7,49", "counter_puncher,hbnr,820,900,7,9,49", "counter_puncher,hbnr,1000,0,6,7,49", "counter_puncher,hbnr,1000,900,7,8,49", "counter_puncher,hbpl,0,0,13,14,68", "counter_puncher,hbpl,0,900,13,15,68", "counter_puncher,hbpl,260,0,11,13,68", "counter_puncher,hbpl,260,900,13,15,68", "counter_puncher,hbpl,553,0,10,11,68", "counter_puncher,hbpl,553,900,13,14,68", "counter_puncher,hbpl,820,0,9,10,68", "counter_puncher,hbpl,820,900,11,13,68", "counter_puncher,hbpl,1000,0,9,10,68", "counter_puncher,hbpl,1000,900,10,12,68", "counter_puncher,hbpr,0,0,13,14,68", "counter_puncher,hbpr,0,900,13,15,68", "counter_puncher,hbpr,260,0,11,13,68", "counter_puncher,hbpr,260,900,13,15,68", "counter_puncher,hbpr,553,0,10,11,68", "counter_puncher,hbpr,553,900,13,14,68", "counter_puncher,hbpr,820,0,9,10,68", "counter_puncher,hbpr,820,900,11,13,68", "counter_puncher,hbpr,1000,0,9,10,68", "counter_puncher,hbpr,1000,900,10,12,68", "counter_puncher,uhnl,0,0,7,11,53", "counter_puncher,uhnl,0,900,7,12,53", "counter_puncher,uhnl,260,0,6,10,53", "counter_puncher,uhnl,260,900,7,12,53", "counter_puncher,uhnl,553,0,5,9,53", "counter_puncher,uhnl,553,900,7,11,53", "counter_puncher,uhnl,820,0,5,8,53", "counter_puncher,uhnl,820,900,6,10,53", "counter_puncher,uhnl,1000,0,5,8,53", "counter_puncher,uhnl,1000,900,6,9,53", "counter_puncher,uhnr,0,0,7,11,53", "counter_puncher,uhnr,0,900,7,12,53", "counter_puncher,uhnr,260,0,6,10,53", "counter_puncher,uhnr,260,900,7,12,53", "counter_puncher,uhnr,553,0,5,9,53", "counter_puncher,uhnr,553,900,7,11,53", "counter_puncher,uhnr,820,0,5,8,53", "counter_puncher,uhnr,820,900,6,10,53", "counter_puncher,uhnr,1000,0,5,8,53", "counter_puncher,uhnr,1000,900,6,9,53", "counter_puncher,uhpl,0,0,11,16,74", "counter_puncher,uhpl,0,900,12,16,74", "counter_puncher,uhpl,260,0,10,14,74", "counter_puncher,uhpl,260,900,12,16,74", "counter_puncher,uhpl,553,0,9,12,74", "counter_puncher,uhpl,553,900,11,16,74", "counter_puncher,uhpl,820,0,8,11,74", "counter_puncher,uhpl,820,900,10,14,74", "counter_puncher,uhpl,1000,0,8,11,74", "counter_puncher,uhpl,1000,900,9,13,74", "counter_puncher,uhpr,0,0,11,16,74", "counter_puncher,uhpr,0,900,12,16,74", "counter_puncher,uhpr,260,0,10,14,74", "counter_puncher,uhpr,260,900,12,16,74", "counter_puncher,uhpr,553,0,9,12,74", "counter_puncher,uhpr,553,900,11,16,74", "counter_puncher,uhpr,820,0,8,11,74", "counter_puncher,uhpr,820,900,10,14,74", "counter_puncher,uhpr,1000,0,8,11,74", "counter_puncher,uhpr,1000,900,9,13,74", "counter_puncher,ubnl,0,0,8,11,55", "counter_puncher,ubnl,0,900,9,12,55", "counter_puncher,ubnl,260,0,7,10,55", "counter_puncher,ubnl,260,900,9,12,55", "counter_puncher,ubnl,553,0,6,9,55", "counter_puncher,ubnl,553,900,8,11,55", "counter_puncher,ubnl,820,0,6,8,55", "counter_puncher,ubnl,820,900,7,10,55", "counter_puncher,ubnl,1000,0,6,8,55", "counter_puncher,ubnl,1000,900,7,9,55", "counter_puncher,ubnr,0,0,8,11,55", "counter_puncher,ubnr,0,900,9,12,55", "counter_puncher,ubnr,260,0,7,10,55", "counter_puncher,ubnr,260,900,9,12,55", "counter_puncher,ubnr,553,0,6,9,55", "counter_puncher,ubnr,553,900,8,11,55", "counter_puncher,ubnr,820,0,6,8,55", "counter_puncher,ubnr,820,900,7,10,55", "counter_puncher,ubnr,1000,0,6,8,55", "counter_puncher,ubnr,1000,900,7,9,55", "counter_puncher,ubpl,0,0,13,16,77", "counter_puncher,ubpl,0,900,13,16,77", "counter_puncher,ubpl,260,0,11,14,77", "counter_puncher,ubpl,260,900,13,16,77", "counter_puncher,ubpl,553,0,10,12,77", "counter_puncher,ubpl,553,900,13,16,77", "counter_puncher,ubpl,820,0,9,11,77", "counter_puncher,ubpl,820,900,11,14,77", "counter_puncher,ubpl,1000,0,9,11,77", "counter_puncher,ubpl,1000,900,10,13,77", "counter_puncher,ubpr,0,0,13,16,77", "counter_puncher,ubpr,0,900,13,16,77", "counter_puncher,ubpr,260,0,11,14,77", "counter_puncher,ubpr,260,900,13,16,77", "counter_puncher,ubpr,553,0,10,12,77", "counter_puncher,ubpr,553,900,13,16,77", "counter_puncher,ubpr,820,0,9,11,77", "counter_puncher,ubpr,820,900,11,14,77", "counter_puncher,ubpr,1000,0,9,11,77", "counter_puncher,ubpr,1000,900,10,13,77"] \ No newline at end of file diff --git a/web/hands/src/types.ts b/web/hands/src/types.ts index e5e4225a..a0d6efa5 100644 --- a/web/hands/src/types.ts +++ b/web/hands/src/types.ts @@ -1,4 +1,4 @@ -export const PROTOCOL_VERSION = 4 as const; +export const PROTOCOL_VERSION = 5 as const; export const MAX_SERVER_FRAME_BYTES = 65_536; export type Hand = "left" | "right"; @@ -15,8 +15,8 @@ export type MovementKind = "slip_left" | "slip_right" | "weave" | "pull" | "clin export type CornerChoice = "cut" | "swelling" | "breath" | "balanced"; export type ActionKind = "punch" | MovementKind | "foul"; export type Foul = "low_blow" | "headbutt"; -export type MatchPhase = "countdown" | "fight" | "knockdown" | "foul_recovery" | "rest" | "complete"; -export type FinishMethod = "ko" | "flash_ko" | "tko" | "doctor_stoppage" | "disqualification" | "decision" | "draw" | "forfeit"; +export type MatchPhase = "countdown" | "fight" | "knockdown" | "foul_recovery" | "referee_down" | "rest" | "complete"; +export type FinishMethod = "ko" | "flash_ko" | "tko" | "disqualification" | "decision" | "draw" | "forfeit"; export type ConnectionRole = "fighter" | "spectator"; export interface PunchAction { readonly kind: "punch"; readonly hand: Hand; readonly class: PunchClass; readonly target: Target; readonly power: Power; readonly id?: string } @@ -34,7 +34,7 @@ export interface FighterSnapshot { readonly player_id: string; readonly x: number; readonly y: number; readonly facing: number; readonly facing_x: number; readonly facing_y: number; readonly velocity_x: number; readonly velocity_y: number; readonly stance: Stance; readonly style: FighterStyle; readonly defense: DefensivePose; - readonly stamina: number; readonly maximum_stamina: number; readonly conditioning: number; readonly guard: number; + readonly stamina: number; readonly maximum_stamina: number; readonly conditioning: number; readonly guard: number; readonly guard_broken: boolean; readonly poise: number; readonly trauma: TraumaSnapshot; readonly knockdowns: number; readonly warnings: number; readonly deductions: number; readonly stunned_ticks: number; readonly is_downed: boolean; readonly action: PunchClass | null; readonly action_hand: Hand | null; readonly action_target: Target | null; @@ -64,7 +64,9 @@ export interface MatchResult { readonly scorecards: readonly JudgeCard[]; readonly player_one_knockdowns: number; readonly player_two_knockdowns: number; readonly player_one_damage: number; readonly player_two_damage: number; } -export interface EngineSnapshot { readonly tick: number; readonly phase: MatchPhase; readonly round_number: number; readonly phase_ticks_remaining: number; readonly fighters: readonly [FighterSnapshot, FighterSnapshot]; readonly events: readonly CombatEvent[]; readonly result: MatchResult | null; readonly checksum: string } +/** The referee as the engine has him: where he stands, whether he is reeling from a punch, his injuries, and whether he is still standing at all. */ +export interface RefereeSnapshot { readonly x: number; readonly y: number; readonly facing_x: number; readonly facing_y: number; readonly velocity_x: number; readonly velocity_y: number; readonly stunned_ticks: number; readonly alive: boolean; readonly trauma: TraumaSnapshot } +export interface EngineSnapshot { readonly tick: number; readonly phase: MatchPhase; readonly round_number: number; readonly phase_ticks_remaining: number; readonly fighters: readonly [FighterSnapshot, FighterSnapshot]; readonly referee: RefereeSnapshot; readonly events: readonly CombatEvent[]; readonly result: MatchResult | null; readonly checksum: string } interface WelcomeBase { readonly version: typeof PROTOCOL_VERSION; readonly type: "welcome"; readonly player_id: string; readonly players: readonly PublicPlayer[]; readonly server_tick: number; readonly reconnect_ticket?: string } export interface FighterWelcomeMessage extends WelcomeBase { readonly role: "fighter"; readonly seat: 1 | 2; readonly rating: number; readonly next_sequence: number }